⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinysqlwhere.java

📁 TinySQL是一个轻量级的纯java数据库引擎
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                  if ( status.equals("RIGHT") )
                     whereCondition.setElementAt("UNKNOWN",3); 
                  else
                     whereCondition.setElementAt("LEFT",3); 
               }
               if ( tinySQLGlobals.WHERE_DEBUG )
                 System.out.println("Where condition " + j 
                 + " after clearing table " + inputTableName + " is\n" 
                 + conditionToString(whereCondition));
            }
         }
      }
   }
   public String toString()
   {
      int i,j;
      Vector whereConditions;
      Object whereObj;
      String objectType;
      Vector whereCondition;
      StringBuffer outputBuffer = new StringBuffer();
      for ( i = 0 ; i < whereClauseList.size(); i++ )
      {
         if ( i > 0 ) outputBuffer.append("OR\n");
         whereConditions = (Vector)whereClauseList.elementAt(i);
         for ( j = 0; j < whereConditions.size(); j++ )
         {
            if ( j > 0 ) outputBuffer.append("AND\n");
/*
 *          Where conditions can be tinySQLWhere objects or String arrays.
 */
            whereObj = whereConditions.elementAt(j);
            objectType = whereObj.getClass().getName();
            if ( objectType.endsWith("tinySQLWhere") )
            {
               outputBuffer.append(((tinySQLWhere)whereObj).toString());
            } if ( objectType.endsWith("java.util.Vector") ) {
               whereCondition = (Vector)whereObj;
               outputBuffer.append(conditionToString(whereCondition) + "\n");
            }
         }
      }
      return outputBuffer.toString();
   }
/*
 * Format a where condition for display.
 */
   private String conditionToString(Vector inputWhereCondition)
   {
      int i;
      String comparison,conditionStatus;
      tsColumn leftColumn,rightColumn;
      if ( inputWhereCondition.size() < 4 ) return "";
      StringBuffer outputBuffer = new StringBuffer("WHERE ");
      leftColumn = (tsColumn)inputWhereCondition.elementAt(0);
      comparison = (String)inputWhereCondition.elementAt(1);
      rightColumn = (tsColumn)inputWhereCondition.elementAt(2);
      conditionStatus = (String)inputWhereCondition.elementAt(3);
      outputBuffer.append(leftColumn.getString() + " " + comparison
      + " " + rightColumn.getString() + " " + conditionStatus);
      return outputBuffer.toString();
   }
/*
 * Given a column name, and a Hashtable containing tables, determine
 * which table "owns" a given column. 
 */
   private tinySQLTable getTableForColumn(Hashtable tables, String inputColumn)
   {
      tinySQLTable tbl;
      Vector tableNames;
      Hashtable columnInfo;
      String findColumn,tableAndAlias=(String)null,tableAlias;
      int i,dotAt;
      findColumn = inputColumn.toUpperCase();
      dotAt = findColumn.indexOf(".");
      tableNames = (Vector)tables.get("TABLE_SELECT_ORDER");
      if ( dotAt > -1 ) 
      {
         tableAlias = findColumn.substring(0,dotAt);
         try
         {
            tableAndAlias = UtilString.findTableAlias(tableAlias,tableNames);
         } catch (Exception ex ) {
         }
         if ( tableAndAlias != (String)null )
         {
            tbl = (tinySQLTable)tables.get(tableAndAlias);
            if ( tbl != (tinySQLTable)null ) return tbl;
         }
      } else {
         for ( i = 0; i < tableNames.size(); i++ )
         {
            tbl = (tinySQLTable)tables.get((String)tableNames.elementAt(i));
/*
 *          Get the Hashtable containing column information, and see if it
 *          contains the column we're looking for.
 */
            columnInfo = tbl.column_info;
            if ( columnInfo != (Hashtable)null )
               if (columnInfo.containsKey(findColumn)) return tbl;
         }
      }
      return (tinySQLTable)null;
   }
/*
 * This method updates the where conditions that contain the input column and
 * returns the status of the entire where clause.
 */  
   public String evaluate(String inputColumnName,String inputColumnValue)
      throws tinySQLException
   {
      int i,j,result;
      FieldTokenizer ft;
      tsColumn leftColumn,rightColumn;
      Vector whereConditions,whereCondition;
      Object whereObj;
      String objectType,comparison,conditionStatus;
      double leftValue, rightValue;
      if ( tinySQLGlobals.WHERE_DEBUG )
         System.out.println("Evaluate where with " + inputColumnName 
         + " = " + inputColumnValue);
      for ( i = 0 ; i < whereClauseList.size(); i++ )
      {
         whereConditions = (Vector)whereClauseList.elementAt(i);
         for ( j = 0; j < whereConditions.size(); j++ )
         {
/*
 *          Where conditions can be tinySQLWhere objects or String arrays.
 */
            conditionStatus = "TRUE";
            whereObj = whereConditions.elementAt(j);
            objectType = whereObj.getClass().getName();
            if ( objectType.endsWith("tinySQLWhere") )
            {
               conditionStatus =((tinySQLWhere)whereObj).evaluate(inputColumnName,inputColumnValue);
            } else if ( objectType.endsWith("java.util.Vector") ) {
               whereCondition = (Vector)whereObj;
/*
 *             Check for updates on this column.  Update the status to 
 *             reflect which parts of the where condition have been set.
 */
               leftColumn = (tsColumn)whereCondition.elementAt(0);
               conditionStatus = (String)whereCondition.elementAt(3);
               leftColumn.update(inputColumnName,inputColumnValue.trim());
               leftColumn.updateFunctions();
               if ( leftColumn.isValueSet() )
               {
                  if ( conditionStatus.equals("UNKNOWN") )
                     whereCondition.setElementAt("LEFT",3);
                  else if ( conditionStatus.equals("RIGHT") )
                     whereCondition.setElementAt("BOTH",3);
               }
               rightColumn = (tsColumn)whereCondition.elementAt(2);
               rightColumn.update(inputColumnName,inputColumnValue.trim());
               rightColumn.updateFunctions();
               if ( rightColumn.isValueSet() ) 
               {
                  if ( conditionStatus.equals("UNKNOWN") )
                     whereCondition.setElementAt("RIGHT",3);
                  else if ( conditionStatus.equals("LEFT") )
                     whereCondition.setElementAt("BOTH",3);
               }
               if ( tinySQLGlobals.WHERE_DEBUG )
                  System.out.println(conditionToString(whereCondition));
/*
 *             A where condition cannot be evaluated until both left and 
 *             right values have been assigned.
 */
               conditionStatus = (String)whereCondition.elementAt(3);
               if ( conditionStatus.equals("UNKNOWN") |
                    conditionStatus.equals("LEFT") |    
                    conditionStatus.equals("RIGHT") ) continue;
/*
 *             Evaluate this where condition.
 */
               conditionStatus = "TRUE";
/*
 *             Any condition except IS NULL that involves a null
 *             column must evaluate to FALSE.
 */
               comparison = (String)whereCondition.elementAt(1);
               if ( leftColumn.isNull() | rightColumn.isNull() )
               {
                  if ( comparison.equals("IS") )
                  {
                     if ( rightColumn.getString().equals("NULL") )
                     {
                        whereCondition.setElementAt(conditionStatus,3);
                        continue;
                     }
                  }
                  whereCondition.setElementAt("FALSE",3);
                  continue;
               } else {
                  if ( comparison.equals("IS") )
                  {
                     if ( rightColumn.getString().equals("NOT NULL") )
                     {
                        whereCondition.setElementAt("TRUE",3);
                        continue;
                     } else if ( rightColumn.getString().equals("NULL") ) {
                        whereCondition.setElementAt("FALSE",3);
                        continue;
                     } else {
                        throw new tinySQLException("Invalid WHERE condition "
                        + rightColumn.getString());
                     }
                  }
               }
/*
 *             Evaluate all conditions other than NULL and NOT NULL
 */
               result = leftColumn.compareTo(rightColumn);
               if ( Utils.isCharColumn(leftColumn.type) |
                    Utils.isDateColumn(leftColumn.type) )
               {
/*
 *                Character string comparisons.
 */
                  if ( comparison.equals("=") & result != 0 ) {
                     conditionStatus = "FALSE";
                  } else if ( comparison.equals("<>") & result == 0 ) {
                     conditionStatus = "FALSE";
                  } else if ( comparison.equals("!=") & result == 0 ) {
                     conditionStatus = "FALSE";
                  } else if ( comparison.equals(">") & result <= 0 ) {
                     conditionStatus = "FALSE";
                  } else if ( comparison.equals(">=") |
                              comparison.equals("=>") ) {
                     if ( result < 0 ) conditionStatus = "FALSE";
                  } else if ( comparison.equals("<") & result >= 0 ) {
                     conditionStatus = "FALSE";
                  } else if ( comparison.equals("<=") |
                              comparison.equals("=<") ) {
                     if ( result > 0 ) conditionStatus = "FALSE";
                  } else if ( comparison.equalsIgnoreCase("LIKE") ) {
                     if ( !leftColumn.like(rightColumn) )
                        conditionStatus = "FALSE";
                  }
               } else if ( Utils.isNumberColumn(leftColumn.type) ) {
/*
 *                Numeric comparisons.
 */
                  if (comparison.equals("=") & result != 0 )
                     conditionStatus = "FALSE";
                  else if (comparison.equals("<>") & result == 0 )
                     conditionStatus = "FALSE";
                  else if (comparison.equals(">") & result <= 0 ) 
                     conditionStatus = "FALSE";
                  else if (comparison.equals("<") & result >= 0 ) 
                     conditionStatus = "FALSE";
                  else if (comparison.equals("<=") & result > 0 ) 
                     conditionStatus = "FALSE";
                  else if (comparison.equals("=<") & result > 0 ) 
                     conditionStatus = "FALSE";
                  else if (comparison.equals(">=") & result < 0 ) 
                     conditionStatus = "FALSE";
                  else if (comparison.equals("=>") & result < 0 )  
                     conditionStatus = "FALSE";
               }
               whereCondition.setElementAt(conditionStatus,3);
               if ( tinySQLGlobals.WHERE_DEBUG )
               System.out.println("Where condition " + j + " evaluation:\n" 
               + conditionToString(whereCondition)); 
            }
         }
      }
      return getStatus();
   }
/*
 * This method evaluates the status of the entire where clause.
 */
   public String getStatus()
   {
      int i,j;
      Vector whereConditions;
      Object whereObj;
      String objectType,andStatus,orStatus,conditionStatus;
      Vector whereCondition;
      orStatus = "FALSE";
      for ( i = 0 ; i < whereClauseList.size(); i++ )
      {
/*
 *       The AND operator is applied to the whereConditions
 */
         whereConditions = (Vector)whereClauseList.elementAt(i);
         andStatus = "TRUE";
         for ( j = 0; j < whereConditions.size(); j++ )
         {
/*
 *          Where conditions can be tinySQLWhere objects or String arrays.
 */
            whereObj = whereConditions.elementAt(j);
            objectType = whereObj.getClass().getName();
            if ( objectType.endsWith("tinySQLWhere") )
            {
               andStatus = ((tinySQLWhere)whereObj).getStatus();
               if ( andStatus.equals("FALSE")) break;
            } else if ( objectType.endsWith("java.util.Vector") ) {
               whereCondition = (Vector)whereObj;
/*
 *             If any AND condition is FALSE, the entire where condition 
 *             is FALSE.
 */
               conditionStatus = (String)whereCondition.elementAt(3);
               if ( conditionStatus.equals("FALSE") )
               {
                  andStatus = "FALSE";
                  break;
/*
 *             If any AND condition is UNKNOWN, LEFT, or RIGHT, the entire
 *             where condition is UNKNOWN.
 */
               } else if ( conditionStatus.equals("UNKNOWN") |
                           conditionStatus.equals("LEFT") |
                           conditionStatus.equals("RIGHT") ) {
                  andStatus = "UNKNOWN";
               }
            }
         }
/*
 *       If any OR condition is true, the entire where condition
 *       is true
 */
         if ( andStatus.equals("TRUE") ) 
         {
            orStatus = "TRUE";
            break;
         } else if ( andStatus.equals("UNKNOWN") ) {
            orStatus = "UNKNOWN";
         }
      }
      if ( tinySQLGlobals.WHERE_DEBUG ) 
      System.out.println("Return status " + orStatus);
      return orStatus;
   }
}                   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -