Class AbstractStatementParser
- java.lang.Object
-
- com.google.cloud.spanner.connection.AbstractStatementParser
-
- Direct Known Subclasses:
PostgreSQLStatementParser
,SpannerStatementParser
@InternalApi public abstract class AbstractStatementParser extends Object
Internal class for the Spanner Connection API.Parses
ClientSideStatement
s and normal SQL statements. The parser is able to recognize the type of statement, allowing the connection API to know which method on Spanner should be called. The parser does not validate the validity of statements, except forClientSideStatement
s. This means that an invalid DML statement could be accepted by theAbstractStatementParser
and sent to Spanner, and Spanner will then reject it with some error message.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
AbstractStatementParser.ParametersInfo
Parameter information with positional parameters translated to named parameters.static class
AbstractStatementParser.ParsedStatement
A statement that has been parsedstatic class
AbstractStatementParser.StatementType
The type of statement that has been recognized by the parser.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description boolean
checkReturningClause(String sql)
protected abstract boolean
checkReturningClauseInternal(String sql)
Checks if the given SQL string contains a Returning clause.AbstractStatementParser.ParametersInfo
convertPositionalParametersToNamedParameters(char paramChar, String sql)
static AbstractStatementParser
getInstance(Dialect dialect)
Get an instance ofAbstractStatementParser
for the specified dialect.boolean
isDdlStatement(String sql)
Checks whether the given statement is (probably) a DDL statement.boolean
isQuery(String sql)
Checks whether the given statement is (probably) a SELECT query.boolean
isUpdateStatement(String sql)
Checks whether the given statement is (probably) an update statement.AbstractStatementParser.ParsedStatement
parse(Statement statement)
Parses the given statement and categorizes it as one of the possibleAbstractStatementParser.StatementType
s.String
removeCommentsAndTrim(String sql)
protected abstract boolean
supportsExplain()
-
-
-
Method Detail
-
getInstance
public static AbstractStatementParser getInstance(Dialect dialect)
Get an instance ofAbstractStatementParser
for the specified dialect.
-
parse
@InternalApi public AbstractStatementParser.ParsedStatement parse(Statement statement)
Parses the given statement and categorizes it as one of the possibleAbstractStatementParser.StatementType
s. The validity of the statement is not checked, unless it is a client-side statement.- Parameters:
statement
- The statement to parse.- Returns:
- the parsed and categorized statement.
-
isDdlStatement
@InternalApi public boolean isDdlStatement(String sql)
Checks whether the given statement is (probably) a DDL statement. The method does not check the validity of the statement, only if it is a DDL statement based on the first word in the statement.- Parameters:
sql
- The statement to check (without any comments).- Returns:
true
if the statement is a DDL statement (i.e. starts with 'CREATE', 'ALTER' or 'DROP').
-
isQuery
@InternalApi public boolean isQuery(String sql)
Checks whether the given statement is (probably) a SELECT query. The method does not check the validity of the statement, only if it is a SELECT statement based on the first word in the statement.- Parameters:
sql
- The statement to check (without any comments).- Returns:
true
if the statement is a SELECT statement (i.e. starts with 'SELECT').
-
isUpdateStatement
@InternalApi public boolean isUpdateStatement(String sql)
Checks whether the given statement is (probably) an update statement. The method does not check the validity of the statement, only if it is an update statement based on the first word in the statement.- Parameters:
sql
- The statement to check (without any comments).- Returns:
true
if the statement is a DML update statement (i.e. starts with 'INSERT', 'UPDATE' or 'DELETE').
-
supportsExplain
protected abstract boolean supportsExplain()
-
convertPositionalParametersToNamedParameters
@InternalApi public AbstractStatementParser.ParametersInfo convertPositionalParametersToNamedParameters(char paramChar, String sql)
-
checkReturningClauseInternal
@InternalApi protected abstract boolean checkReturningClauseInternal(String sql)
Checks if the given SQL string contains a Returning clause. This method is used only in case of a DML statement.- Parameters:
sql
- The sql string without comments that has to be evaluated.- Returns:
- A boolean indicating whether the sql string has a Returning clause or not.
-
checkReturningClause
@InternalApi public boolean checkReturningClause(String sql)
-
-