Top Description Inners Fields Constructors Methods
org.h2.command

public final Class Parser

extends ParserBase
Class Inheritance
Static Imports
org.h2.command.Token.ASTERISK, .Token.AT, .Token.BIGGER, .Token.BIGGER_EQUAL, .Token.CLOSE_BRACE, .Token.CLOSE_BRACKET, .Token.CLOSE_PAREN, .Token.COLON, .Token.COLON_COLON, .Token.COLON_EQ, .Token.COMMA, .Token.CONCATENATION, .Token.DOT, .Token.END_OF_INPUT, .Token.EQUAL, .Token.LITERAL, .Token.MINUS_SIGN, .Token.NOT_EQUAL, .Token.NOT_TILDE, .Token.OPEN_BRACE, .Token.OPEN_BRACKET, .Token.OPEN_PAREN, .Token.PARAMETER, .Token.PERCENT, .Token.PLUS_SIGN, .Token.SEMICOLON, .Token.SLASH, .Token.SMALLER, .Token.SMALLER_EQUAL, .Token.SPATIAL_INTERSECTS, .Token.TILDE, org.h2.util.HasSQL.DEFAULT_SQL_FLAGS, .HasSQL.QUOTE_ONLY_WHEN_REQUIRED, .HasSQL.TRACE_SQL_FLAGS, .ParserUtil.ALL, .ParserUtil.AND, .ParserUtil.ANY, .ParserUtil.ARRAY, .ParserUtil.AS, .ParserUtil.ASYMMETRIC, .ParserUtil.AUTHORIZATION, .ParserUtil.BETWEEN, .ParserUtil.CASE, .ParserUtil.CAST, .ParserUtil.CHECK, .ParserUtil.CONSTRAINT, .ParserUtil.CROSS, .ParserUtil.CURRENT_CATALOG, .ParserUtil.CURRENT_DATE, .ParserUtil.CURRENT_PATH, .ParserUtil.CURRENT_ROLE, .ParserUtil.CURRENT_SCHEMA, .ParserUtil.CURRENT_TIME, .ParserUtil.CURRENT_TIMESTAMP, .ParserUtil.CURRENT_USER, .ParserUtil.DAY, .ParserUtil.DEFAULT, .ParserUtil.DISTINCT, .ParserUtil.ELSE, .ParserUtil.END, .ParserUtil.EXCEPT, .ParserUtil.EXISTS, .ParserUtil.FALSE, .ParserUtil.FETCH, .ParserUtil.FOR, .ParserUtil.FOREIGN, .ParserUtil.FROM, .ParserUtil.FULL, .ParserUtil.GROUP, .ParserUtil.HAVING, .ParserUtil.HOUR, .ParserUtil.IDENTIFIER, .ParserUtil.IF, .ParserUtil.IN, .ParserUtil.INNER, .ParserUtil.INTERSECT, .ParserUtil.INTERVAL, .ParserUtil.IS, .ParserUtil.JOIN, .ParserUtil.KEY, .ParserUtil.LAST_KEYWORD, .ParserUtil.LEFT, .ParserUtil.LIKE, .ParserUtil.LIMIT, .ParserUtil.LOCALTIME, .ParserUtil.LOCALTIMESTAMP, .ParserUtil.MINUS, .ParserUtil.MINUTE, .ParserUtil.MONTH, .ParserUtil.NATURAL, .ParserUtil.NOT, .ParserUtil.NULL, .ParserUtil.OFFSET, .ParserUtil.ON, .ParserUtil.OR, .ParserUtil.ORDER, .ParserUtil.PRIMARY, .ParserUtil.QUALIFY, .ParserUtil.RIGHT, .ParserUtil.ROW, .ParserUtil.ROWNUM, .ParserUtil.SECOND, .ParserUtil.SELECT, .ParserUtil.SESSION_USER, .ParserUtil.SET, .ParserUtil.SOME, .ParserUtil.SYMMETRIC, .ParserUtil.SYSTEM_USER, .ParserUtil.TABLE, .ParserUtil.TO, .ParserUtil.TRUE, .ParserUtil.UNION, .ParserUtil.UNIQUE, .ParserUtil.UNKNOWN, .ParserUtil.USER, .ParserUtil.USING, .ParserUtil.VALUE, .ParserUtil.VALUES, .ParserUtil.WHEN, .ParserUtil.WHERE, .ParserUtil.WINDOW, .ParserUtil.WITH, .ParserUtil.YEAR, .ParserUtil._ROWID_

The parser is used to convert a SQL statement string to an command object.
Authors
Thomas Mueller, Noel Grandin, Nicolas Fortin, Atelier SIG, IRSTV FR CNRS 24888

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static enum
Parser.NullConstraintType

Enumeration describing null constraints

Field Summary

Modifier and TypeField and Description
private CreateView
private Prepared
private Select
private int
private boolean
private boolean
private QueryScope
private boolean
private boolean
private String
Inherited from org.h2.command.ParserBase:
currentTokencurrentTokenTypedatabaseexpectedListnonKeywordsparameterssessionsqlCommandtokentokenIndextokensusedParametersvariableBinary

Constructor Summary

AccessConstructor and Description
public
Parser(SessionLocal
the session
session
)

Creates a new instance of parser.

Method Summary

Modifier and TypeMethod and Description
private void
addJoin(TableFilter
parent join
top
,
TableFilter
child join
join
,
boolean
if child join is an outer join
outer
,
Expression
the join condition
on
)

Add one join to another.

private Expression
addJoinColumn(Expression on, TableFilter filter1, TableFilter filter2, Column column1, Column column2, boolean rightJoin)

private boolean

Returns:

true if we expect to see a TABLE clause
addRoleOrRight
(GrantRevoke command)

private TableFilter
buildTableFilter(Table table, String alias, ArrayList<String> derivedColumnNames, IndexHints indexHints)

private void
checkDatabaseName(String databaseName)

private void
private Column
columnIfTableExists(Schema schema, String tableName, String columnName, boolean ifTableExists, boolean ifExists)

private Prepared
commandIfTableExists(Schema schema, String tableName, boolean ifTableExists, Prepared commandIfTableExists)

private SimpleCase.SimpleWhen
decodeToWhen(Expression caseOperand, boolean canOptimize, Expression whenOperand, Expression result)

private void
private void
private Schema
findSchema(String schemaName)

private Sequence
findSequence(String schema, String sequenceName)

private void
findTableNameCandidates(String schemaName, String tableName, Set<String> candidates)

private UserDefinedFunction
private Prepared
getAlterTableAlterColumnDropDefaultExpression(Schema schema, String tableName, boolean ifTableExists, Column column, int type)

private static Column
getColumnWithDomain(String columnName, Domain domain)

private static int
getCompareType(int tokenType)

private Prepared
private FunctionAlias
private static DbException
private static DbException
getInvalidPrecisionException(DataType dataType, long precision)

private Schema
getSchema(String schemaName)

private Schema
private Schema
private DbException
private DbException
private DbException
private Table
private DbException
private DbException
private DbException
private boolean
private boolean
isDirectQuery(int offset)

private boolean

Returns:

true if the table is DUAL special table. Otherwise returns false.
isDualTable
(String
table name.
tableName
)

Is this the Oracle DUAL table or the IBM/DB2 SYSIBM table?

private boolean

Returns:

whether current opening parenthesis can be a start of ordinary grouping set
isOrdinaryGroupingSet
()

Checks whether current opening parenthesis can be a start of ordinary grouping set.

private boolean
private boolean
private boolean
public static AlterTableAddConstraint

Returns:

the command
newPrimaryKeyConstraintCommand
(SessionLocal
the session
session
,
Schema
the schema
schema
,
String
the table
tableName
,
Column
the column
column
)

Create a new alter table command.

pack-priv Prepared

Returns:

the prepared object
parse
(String
the SQL statement to parse
sql
,
ArrayList<Token>
tokens, or null
tokens
)

Parse the statement, but don't prepare it for execution.

private Prepared
parse(boolean withExpectedList)

private ConstraintActionType
private Prepared
private void
private DefineCommand
private AlterIndexRename
private Prepared
private AlterSequence
private Prepared
private AlterTableAlterColumn
parseAlterTableAddColumn(String tableName, Schema schema, boolean ifTableExists)

private Prepared
parseAlterTableAlter(Schema schema, String tableName, boolean ifTableExists)

private AlterTableAlterColumn
parseAlterTableAlterColumnDataType(Schema schema, String tableName, String columnName, boolean ifTableExists, boolean ifExists)

private Prepared
parseAlterTableAlterColumnIdentity(Schema schema, String tableName, boolean ifTableExists, Column column)

private Prepared
parseAlterTableAlterColumnSet(Schema schema, String tableName, boolean ifTableExists, boolean ifExists, String columnName, Column column)

private AlterTableAlterColumn
parseAlterTableAlterColumnType(Schema schema, String tableName, String columnName, boolean ifTableExists, boolean ifExists, boolean preserveNotNull)

private Prepared
parseAlterTableCompatibility(Schema schema, String tableName, boolean ifTableExists, Mode mode)

private Prepared
parseAlterTableDrop(Schema schema, String tableName, boolean ifTableExists)

private Prepared
parseAlterTableDropCompatibility(Schema schema, String tableName, boolean ifTableExists)

private Prepared
parseAlterTableRename(Schema schema, String tableName, boolean ifTableExists)

private Prepared
parseAlterTableSet(Schema schema, String tableName, boolean ifTableExists)

private AlterUser
private DefineCommand
private Prepared
private TypeInfo
parseArrayType(TypeInfo componentType)

private Prepared
private boolean
private TransactionCommand
private Call
private ConstraintActionType
private TransactionCommand
private Column
private Column
parseColumnForTable(String columnName, boolean defaultNullable)

private String[]
private Column[]
private Column
private Prepared
private TransactionCommand
private boolean
private void
private Prepared
private CreateAggregate
parseCreateAggregate(boolean force)

private CreateConstant
private CreateDomain
private CreateFunctionAlias
parseCreateFunctionAlias(boolean force)

private CreateLinkedTable
parseCreateLinkedTable(boolean temp, boolean globalTemp, boolean force)

private CreateMaterializedView
parseCreateMaterializedView(boolean force, boolean orReplace)

private CreateRole
private CreateSchema
private CreateSequence
private boolean
private CreateSynonym
parseCreateSynonym(boolean orReplace)

private CreateTable
parseCreateTable(boolean temp, boolean globalTemp, boolean persistIndexes)

private void
private CreateTrigger
parseCreateTrigger(boolean force)

private CreateUser
private CreateView
parseCreateView(boolean force, boolean orReplace)

private TypeInfo
private TypeInfo
parseDateTimeType(boolean smallDateTime)

private Expression
private DeallocateProcedure
private TypeInfo
private Delete
parseDelete(int start)

public Expression

Returns:

the expression object
parseDomainConstraintExpression
(String
the code snippet
sql
)

Parse a SQL code snippet that represents an expression for a domain constraint.

private Prepared
private DropAggregate
private DropDomain
private void
private TypeInfo
private Prepared
private Prepared
private Explain
private Query
parseExplicitTable(int start)

public Expression

Returns:

the expression object
parseExpression
(String
the code snippet
sql
)

Parse a SQL code snippet that represents an expression.

private TypeInfo
private TypeInfo
private GrantRevoke
parseGrantRevoke(int operationType)

private Prepared
private IndexColumn[]
private IndexHints
private Insert
parseInsert(int start)

private void
parseInsertCompatibility(Insert command, Table table, Mode mode)

private void
parseInsertSet(Insert command, Table table, Column[] columns)

private void
parseIsolationClause()

DB2 isolation clause

private Prepared
parseMerge(int start)

private Prepared
parseMergeInto(TableFilter targetTableFilter, int start)

private MergeUsing
parseMergeUsing(TableFilter targetTableFilter, int start)

private Parser.NullConstraintType
private Parser.NullConstraintType
private Parser.NullConstraintType
private TypeInfo
parseNumericType(boolean decimal)

private Prepared
private Prepared
private Prepared
private Query
private Query
private Query
private Query
private Query
private Query
private void
private RefreshMaterializedView
parseRefresh(int start)

REFRESH MATERIALIZED VIEW

private Prepared
private Merge
parseReplace(int start)

MySQL compatibility.

private TransactionCommand
private TypeInfo
private RunScriptCommand
private TransactionCommand
private ScriptCommand
private Select
parseSelect(int start)

private void
private void
private boolean
parseSequenceOptions(SequenceOptions options, CreateSequence command, boolean allowDataType, boolean forAlterColumn)

private Prepared
private Set
private Prepared
private Prepared
private TransactionCommand
private void
parseSingleCommonTableExpression(boolean isPotentiallyRecursive)

private QueryOrderBy
private ArrayList<QueryOrderBy>
private int
private void
parseTableColumnDefinition(CommandWithColumns command, Schema schema, String tableName, boolean forCreateTable)

private DefineCommand
parseTableConstraintIf(String tableName, Schema schema, boolean ifTableExists)

public Table

Returns:

the table object
parseTableName
(String
the code snippet
sql
)

Parse a SQL code snippet that represents a table name.

private TypeInfo
private TypeInfo
private Prepared
private DataChangeStatement
parseUpdate(int start)

private MergeUsing
parseUpdateFrom(TableFilter targetTableFilter, int start)

private Prepared
private TableValueConstructor
private void
private ArrayList<Expression>
private void
private void
private Wildcard
parseWildcard(String schema, String objectName)

public Prepared

Returns:

the prepared object
prepare
(String
the SQL statement to parse
sql
)

Parse the statement and prepare it for execution.

public Command

Returns:

the command object
prepareCommand
(String
the SQL statement to parse
sql
)

Parse a statement or a list of statements, and prepare it for execution.

private CommandList
prepareCommandList(CommandContainer command, Prepared p, String sql, String remainingSql, ArrayList<Token> remainingTokens)

public Query

Returns:

the prepared object
prepareQueryExpression
(String
the SQL statement to parse
sql
)

Parse a query and prepare its expressions.

private Expression
readAggregate(AggregateType aggregateType, String aggregateName)

private void
readAggregateOrder(Aggregate r, Expression expr, boolean parseSortType)

private Expression
private Expression
readAnyComparison(Expression left, int compareType, boolean whenOperand, int start)

private Expression
private Expression
private Expression
readCoalesceFunction(int function)

private Expression
private void
readColumnConstraints(CommandWithColumns command, Schema schema, String tableName, Column column)

private Expression
private String
private Expression
readComparison(Expression left, int compareType, boolean whenOperand)

private Expression
private Expression
private Expression
private Expression
private Expression
readConcatFunction(int function)

private Expression
private Expression
readConditionIs(Expression left, boolean whenOperand)

private Expression
readConditionRightHandSide(Expression r, boolean not, boolean whenOperand)

private TableFilter
private Expression
readCurrentDateTimeValueFunction(int function, boolean hasParen, String name)

private Expression
private Table
readDataChangeDeltaTable(String resultOptionName, int backupIndex)

private int
private Expression
private Expression
readDbObjectFunction(int function)

private ArrayList<String>
private TableFilter
private boolean
private Expression
private Expression
private Expression
private Expression
private Expression
private Expression
private Expression
private void
private String
private void
private Expression
readFunction(Schema schema, String name)

private Expression
readFunctionWithSchema(Schema schema, String name, String upperName)

private String
private String
private String
readIdentifierWithSchema(String defaultSchemaName)

private String
private String
private Expression
private TypeInfo
private TypeInfo
private void
private boolean
readIfExists(boolean ifExists)

private boolean
private ArrayList<QueryOrderBy>
private Boolean
private SequenceValue
private Expression
private boolean
private Expression
private boolean
readIgnoreNulls(boolean ignoreNulls)

private Expression
readInPredicate(Expression left, boolean not, boolean whenOperand)

private Expression
private TypeInfo
private Expression
readJoinSpecification(TableFilter filter1, TableFilter filter2, boolean rightJoin)

private boolean
private IsJsonPredicate
readJsonPredicate(Expression left, boolean not, boolean whenOperand)

private Expression
private Expression
private Expression
readLikePredicate(Expression left, CompareLike.LikeType likeType, boolean not, boolean whenOperand)

private void
private Expression
private NullsDistinct
private Expression
private void
private <T extends ExpressionWithVariableParameters> T
readParameters(T expression)

private long
readPrecision(int valueType)

private Sequence
private Prepared
private Expression
private TableFilter
private SimpleCase.SimpleWhen
private Expression
private String
private String
private Expression
private Expression
private Expression
private Column
private String
readTableColumn(TableFilter filter, String tableAlias)

private ArrayList<String>
private TableFunction
private ArrayTableFunction
readTableFunction(int functionType)

private Table
private Table
readTableOrView(boolean resolveMaterializedView)

private Table
readTableOrView(String tableName, boolean resolveMaterializedView)

private TableFilter
private TableFilter
private Expression
private Expression
private Expression
private Expression
readTermWithIdentifier(String name, boolean quoted)

private Expression
private Expression
private Expression
private TypePredicate
readTypePredicate(Expression left, boolean not, boolean whenOperand)

private ArrayTableFunction
private SetClauseList
private Expression[]
private Expression
readUserDefinedFunctionIf(Schema schema, String functionName)

private Expression
private WindowFrame
private WindowFrameBound
private WindowFrameBound
private WindowFunction
private Window
private Window
private Aggregate
readWithinGroup(AggregateType aggregateType, Expression[] args, boolean distinct, Object extraArguments, boolean forHypotheticalSet, boolean simple)

private int
scanToCloseParen(int offset)

public void
setQueryScope(QueryScope
the query scope
queryScope
)

Sets the query scope.

public void
setRightsChecked(boolean rightsChecked)

private void
setSQL(Prepared command, int start)

private Table
tableIfTableExists(Schema schema, String tableName, boolean ifTableExists)

Inherited from org.h2.command.ParserBase:
addExpectedaddExpectedaddMultipleExpectedcloseParametersScopeequalsTokenformatNonKeywordsgetLastParseIndexgetRemainingTokensgetSyntaxErrorinitializeisIdentifierisKeywordisKeywordisTokenisTokenisTokenCompatopenParametersScopeparseColumnListparseNonKeywordsquoteIdentifierreadreadreadreadBooleanSettingreadCompatreadIfreadIfreadIfreadIfreadIfreadIfreadIfreadIfCompatreadIfCompatreadIfCompatreadIfCompatreadIfCompatreadIfMorereadIntreadLongreadNonNegativeIntreadParameterreadPositiveLongresetTokenIndexsetLiteralsCheckedsetSuppliedParameterssetTokenIndextoStringupperName