return result;
}
private Statement readIf(Routine routine, StatementCompound context) {
HsqlArrayList list = new HsqlArrayList();
RangeVariable[] rangeVariables = context == null
? routine.getParameterRangeVariables()
: context.getRangeVariables();
HsqlList unresolved = null;
readThis(Tokens.IF);
Expression condition = XreadBooleanValueExpression();
unresolved = condition.resolveColumnReferences(rangeVariables,
rangeVariables.length, unresolved, false);
ExpressionColumn.checkColumnsResolved(unresolved);
unresolved = null;
condition.resolveTypes(session, null);
Statement statement = new StatementSimple(StatementTypes.CONDITION,
condition);
list.add(statement);
readThis(Tokens.THEN);
Statement[] statements = readSQLProcedureStatementList(routine,
context);
for (int i = 0; i < statements.length; i++) {
list.add(statements[i]);
}
while (token.tokenType == Tokens.ELSEIF) {
read();
condition = XreadBooleanValueExpression();
unresolved = condition.resolveColumnReferences(rangeVariables,
rangeVariables.length, unresolved, false);
ExpressionColumn.checkColumnsResolved(unresolved);
unresolved = null;
condition.resolveTypes(session, null);
statement = new StatementSimple(StatementTypes.CONDITION,
condition);
list.add(statement);
readThis(Tokens.THEN);
statements = readSQLProcedureStatementList(routine, context);
for (int i = 0; i < statements.length; i++) {
list.add(statements[i]);
}
}
if (token.tokenType == Tokens.ELSE) {
read();
condition = Expression.EXPR_TRUE;
statement = new StatementSimple(StatementTypes.CONDITION,
condition);
list.add(statement);
statements = readSQLProcedureStatementList(routine, context);
for (int i = 0; i < statements.length; i++) {
list.add(statements[i]);
}
}
readThis(Tokens.END);
readThis(Tokens.IF);
statements = new Statement[list.size()];
list.toArray(statements);
StatementCompound result = new StatementCompound(StatementTypes.IF,
null);
result.setStatements(statements);