📄 tinysqlwhere.java
字号:
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 + -