"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "hsqldb/src/org/hsqldb/RangeVariableResolver.java" between
hsqldb-2.6.0.zip and hsqldb-2.6.1.zip

About: HSQLDB (HyperSQL DataBase) is a SQL relational database engine written in Java. It supports nearly full ANSI-92 SQL (BNF format) and full core SQL:2008.

RangeVariableResolver.java  (hsqldb-2.6.0):RangeVariableResolver.java  (hsqldb-2.6.1)
skipping to change at line 55 skipping to change at line 55
import org.hsqldb.lib.MultiValueHashMap; import org.hsqldb.lib.MultiValueHashMap;
import org.hsqldb.lib.OrderedHashSet; import org.hsqldb.lib.OrderedHashSet;
import org.hsqldb.lib.OrderedIntHashSet; import org.hsqldb.lib.OrderedIntHashSet;
import org.hsqldb.persist.PersistentStore; import org.hsqldb.persist.PersistentStore;
/** /**
* Determines how JOIN and WHERE expressions are used in query * Determines how JOIN and WHERE expressions are used in query
* processing and which indexes are used for table access. * processing and which indexes are used for table access.
* *
* @author Fred Toussi (fredt@users dot sourceforge.net) * @author Fred Toussi (fredt@users dot sourceforge.net)
* @version 2.6.0 * @version 2.6.1
* @since 1.9.0 * @since 1.9.0
*/ */
public class RangeVariableResolver { public class RangeVariableResolver {
Session session; Session session;
QuerySpecification select; QuerySpecification select;
RangeVariable[] rangeVariables; RangeVariable[] rangeVariables;
Expression conditions; Expression conditions;
OrderedHashSet rangeVarSet = new OrderedHashSet(); OrderedHashSet rangeVarSet = new OrderedHashSet();
CompileContext compileContext; CompileContext compileContext;
skipping to change at line 894 skipping to change at line 894
for (int i = 0; i < rangeVariables.length; i++) { for (int i = 0; i < rangeVariables.length; i++) {
boolean hasIndex = false; boolean hasIndex = false;
RangeVariableConditions conditions; RangeVariableConditions conditions;
if (i < firstLeftJoinIndex if (i < firstLeftJoinIndex
&& firstRightJoinIndex == rangeVariables.length) { && firstRightJoinIndex == rangeVariables.length) {
conditions = rangeVariables[i].joinConditions[0]; conditions = rangeVariables[i].joinConditions[0];
joinExpressions[i].addAll(whereExpressions[i]); joinExpressions[i].addAll(whereExpressions[i]);
assignToRangeVariable(rangeVariables[i], conditions, i, setIndexConditions(conditions, joinExpressions[i], i, true);
joinExpressions[i]);
assignToRangeVariable(conditions, joinExpressions[i]); assignToRangeVariable(conditions, joinExpressions[i]);
} else { } else {
conditions = rangeVariables[i].joinConditions[0]; conditions = rangeVariables[i].joinConditions[0];
assignToRangeVariable(rangeVariables[i], conditions, i, setIndexConditions(conditions, joinExpressions[i], i, true);
joinExpressions[i]);
conditions = rangeVariables[i].joinConditions[0]; conditions = rangeVariables[i].joinConditions[0];
if (conditions.hasIndex()) { if (conditions.hasIndex()) {
hasIndex = true; hasIndex = true;
} }
assignToRangeVariable(conditions, joinExpressions[i]); assignToRangeVariable(conditions, joinExpressions[i]);
conditions = rangeVariables[i].whereConditions[0]; conditions = rangeVariables[i].whereConditions[0];
for (int j = i + 1; j < rangeVariables.length; j++) { for (int j = i + 1; j < rangeVariables.length; j++) {
if (rangeVariables[j].isRightJoin) { if (rangeVariables[j].isRightJoin) {
assignToRangeVariable( assignToRangeVariable(
rangeVariables[j].whereConditions[0], rangeVariables[j].whereConditions[0],
whereExpressions[i]); whereExpressions[i]);
} }
} }
if (!hasIndex) { if (!hasIndex) {
assignToRangeVariable(rangeVariables[i], conditions, i, setIndexConditions(conditions, whereExpressions[i], i,
whereExpressions[i]); true);
} }
assignToRangeVariable(conditions, whereExpressions[i]); assignToRangeVariable(conditions, whereExpressions[i]);
} }
} }
} }
void assignToRangeVariable(RangeVariableConditions conditions, void assignToRangeVariable(RangeVariableConditions conditions,
List exprList) { List exprList) {
skipping to change at line 976 skipping to change at line 974
int count = colIndexSetOther.get(idx, 0); int count = colIndexSetOther.get(idx, 0);
colIndexSetOther.put(idx, count + 1); colIndexSetOther.put(idx, count + 1);
} }
} }
} }
/** /**
* Assigns a set of conditions to a range variable. * Assigns a set of conditions to a range variable.
*/ */
void assignToRangeVariable(RangeVariable rangeVar,
RangeVariableConditions conditions,
int rangeVarIndex, List exprList) {
if (exprList.isEmpty()) {
return;
}
setIndexConditions(conditions, exprList, rangeVarIndex, true);
}
private void setIndexConditions(RangeVariableConditions conditions, private void setIndexConditions(RangeVariableConditions conditions,
List exprList, int rangeVarIndex, List exprList, int rangeVarIndex,
boolean includeOr) { boolean includeOr) {
boolean hasIndex; boolean hasIndex;
if (exprList.isEmpty()) {
return;
}
colIndexSetEqual.clear(); colIndexSetEqual.clear();
colIndexSetOther.clear(); colIndexSetOther.clear();
for (int j = 0, size = exprList.size(); j < size; j++) { for (int j = 0, size = exprList.size(); j < size; j++) {
Expression e = (Expression) exprList.get(j); Expression e = (Expression) exprList.get(j);
if (e == null) { if (e == null) {
continue; continue;
} }
skipping to change at line 1191 skipping to change at line 1182
} else { } else {
conditions.rangeVar.whereConditions[j] conditions.rangeVar.whereConditions[j]
.nonIndexCondition = .nonIndexCondition =
ExpressionLogical ExpressionLogical
.andExpressions(e, conditions.rangeVar .andExpressions(e, conditions.rangeVar
.whereConditions[j].nonIndexCondition); .whereConditions[j].nonIndexCondition);
} }
} }
} else { } else {
conditions.addCondition(e); conditions.addCondition(e);
exprList.set(i, null);
} }
} }
} }
private boolean setOrConditions(RangeVariableConditions conditions, private boolean setOrConditions(RangeVariableConditions conditions,
ExpressionLogical orExpression, ExpressionLogical orExpression,
int rangeVarIndex) { int rangeVarIndex) {
HsqlArrayList orExprList = new HsqlArrayList(); HsqlArrayList orExprList = new HsqlArrayList();
 End of changes. 7 change blocks. 
18 lines changed or deleted 10 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)