Class SqlQueryBuilder
java.lang.Object
io.micronaut.data.model.query.builder.sql.AbstractSqlLikeQueryBuilder
io.micronaut.data.model.query.builder.sql.SqlQueryBuilder
- All Implemented Interfaces:
QueryBuilder
- Direct Known Subclasses:
CosmosSqlQueryBuilder
Implementation of
AbstractSqlLikeQueryBuilder.QueryBuilder that builds SQL queries.- Since:
- 1.0.0
- Author:
- graemerocher, Denis Stepanov
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class io.micronaut.data.model.query.builder.sql.AbstractSqlLikeQueryBuilder
AbstractSqlLikeQueryBuilder.ExpressionAppender, AbstractSqlLikeQueryBuilder.Placeholder, AbstractSqlLikeQueryBuilder.QueryBuilder, AbstractSqlLikeQueryBuilder.QueryPosition, AbstractSqlLikeQueryBuilder.QueryPropertyPath, AbstractSqlLikeQueryBuilder.QueryState, AbstractSqlLikeQueryBuilder.SqlPredicateVisitorNested classes/interfaces inherited from interface io.micronaut.data.model.query.builder.QueryBuilder
QueryBuilder.BaseQueryDefinition, QueryBuilder.DeleteQueryDefinition, QueryBuilder.InsertQueryDefinition, QueryBuilder.SelectQueryDefinition, QueryBuilder.UpdateQueryDefinition -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe start of an IN expression.static final Stringstatic final StringFields inherited from class io.micronaut.data.model.query.builder.sql.AbstractSqlLikeQueryBuilder
ALIAS_REPLACE_QUOTED, AND, AS_CLAUSE, CANNOT_QUERY_ON_ID_WITH_ENTITY_THAT_HAS_NO_ID, CLOSE_BRACKET, COMMA, DISTINCT, DOT, FROM_CLAUSE, LOGICAL_AND, LOGICAL_OR, NOT, OPEN_BRACKET, OR, ORDER_BY_CLAUSE, RETURNING, SELECT_CLAUSE, SPACE, WHERE_CLAUSE -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor.SqlQueryBuilder(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata) Constructor with annotation metadata.SqlQueryBuilder(Dialect dialect) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidappendForUpdate(AbstractSqlLikeQueryBuilder.QueryPosition queryPosition, QueryBuilder.SelectQueryDefinition definition, StringBuilder queryBuilder) Adds "forUpdate" pessimistic locking.protected voidappendLimitAndOrder(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryBuilder.SelectQueryDefinition definition, boolean appendLimit, boolean appendOrder, AbstractSqlLikeQueryBuilder.QueryState queryState) protected voidappendUpdateSetParameter(StringBuilder sb, String alias, PersistentProperty prop, Runnable appendParameter) Appends the SET=? call to the query string.protected StringConvert the literal value to it's SQL representation.@NonNull StringbuildBatchCreateTableStatement(@NonNull PersistentEntity... entities) Builds a batch create tables statement.@NonNull StringbuildBatchDropTableStatement(@NonNull PersistentEntity... entities) Builds a batch drop tables statement.@NonNull String[]buildCreateTableStatements(@NonNull PersistentEntity entity) Builds the creation table statement.@NonNull String[]buildCreateTableStatements(PersistentEntity[] entities) Builds the creation table statement for collection of entities.@NonNull String[]buildDropTableStatements(@NonNull PersistentEntity entity) Builds the drop table statement.@NonNull QueryResultbuildInsert(io.micronaut.core.annotation.AnnotationMetadata repositoryMetadata, QueryBuilder.InsertQueryDefinition definition) Builds an insert statement for the given entity.protected voidbuildJoin(String joinType, StringBuilder query, AbstractSqlLikeQueryBuilder.QueryState queryState, PersistentAssociationPath joinAssociation, PersistentEntity associationOwner, String currentJoinAlias, String lastJoinAlias) Build a join expression for the given alias, association, join type and builder.@NonNull StringbuildJoinTableInsert(@NonNull PersistentEntity entity, @NonNull Association association) Builds a join table insert statement for a given entity and association.protected booleanWhether property path expressions require computation by the implementation.protected SqlQueryBuilder.SqlSelectionVisitorcreateSelectionVisitor(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, AbstractSqlLikeQueryBuilder.QueryState queryState, boolean distinct) Create a selection visitor.formatParameter(int index) Format the parameter at the given index.protected StringgetAliasName(PersistentEntity entity) Get an alias name for the given entity.getColumnName(PersistentProperty persistentProperty) Get the column name for the given property.Get dialect.protected StringGet the AS keyword to use for table aliases.getTableName(PersistentEntity entity) Get the table name for the given entity.protected booleanisAliasForBatch(PersistentEntity persistentEntity, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata) Should aliases be used in batch statements.static booleanisForeignKeyWithJoinTable(@NonNull Association association) Is the given association a foreign key reference that requires a join table.final Stringprotected StringQuote a persisted name (schema, table or column name) for the dialect.Resolves the join type.protected GeneratedValue.TypeselectAutoStrategy(PersistentProperty property) Selects the default fallback strategy.protected booleanshouldEscape(@NonNull PersistentEntity entity) Whether queries should be escaped for the given entity.Methods inherited from class io.micronaut.data.model.query.builder.sql.AbstractSqlLikeQueryBuilder
appendDeleteClause, appendExpression, appendLimitAndOffset, appendOrder, appendPropertyRef, appendTransformed, asPath, asQueryPropertyPath, buildAdditionalWhereClause, buildAdditionalWhereString, buildAdditionalWhereString, buildDelete, buildLimitAndOffset, buildOrderBy, buildPropertyByName, buildQuery, buildSelect, buildSelect, buildUpdate, buildWhereClause, checkDialectSupportsJsonEntity, createPredicateVisitor, getAliasName, getColumnAlias, getDataTransformerReadValue, getDataTransformerWriteValue, getMappedName, getMappedName, getMappedName, getNamingStrategy, getNamingStrategy, getPathOnlyAliasName, getUnescapedTableName, isJsonEntity, newBindingContext, parameterInRoleModifiesLimit, parameterInRoleModifiesOrder, quote, resolveWhereForAnnotationMetadata, shouldAppendOrder, supportsLimitQuery, traverseEmbedded
-
Field Details
-
DEFAULT_POSITIONAL_PARAMETER_MARKER
The start of an IN expression.- See Also:
-
STANDARD_FOR_UPDATE_CLAUSE
- See Also:
-
SQL_SERVER_FOR_UPDATE_CLAUSE
- See Also:
-
-
Constructor Details
-
SqlQueryBuilder
@Creator public SqlQueryBuilder(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata) Constructor with annotation metadata.- Parameters:
annotationMetadata- The annotation metadata
-
SqlQueryBuilder
public SqlQueryBuilder()Default constructor. -
SqlQueryBuilder
- Parameters:
dialect- The dialect
-
-
Method Details
-
getDialect
Description copied from class:AbstractSqlLikeQueryBuilderGet dialect.- Overrides:
getDialectin classAbstractSqlLikeQueryBuilder- Returns:
- The dialect being used by the builder.
-
shouldEscape
Description copied from class:AbstractSqlLikeQueryBuilderWhether queries should be escaped for the given entity.- Overrides:
shouldEscapein classAbstractSqlLikeQueryBuilder- Parameters:
entity- The entity- Returns:
- True if they should be escaped
-
asLiteral
Description copied from class:AbstractSqlLikeQueryBuilderConvert the literal value to it's SQL representation.- Overrides:
asLiteralin classAbstractSqlLikeQueryBuilder- Parameters:
value- The literal value- Returns:
- converter value
-
buildBatchCreateTableStatement
@NonNull public @NonNull String buildBatchCreateTableStatement(@NonNull @NonNull PersistentEntity... entities) Builds a batch create tables statement. Designed for testing and not production usage. For production a SQL migration tool such as Flyway or Liquibase is recommended.- Parameters:
entities- the entities- Returns:
- The table
-
buildBatchDropTableStatement
@NonNull public @NonNull String buildBatchDropTableStatement(@NonNull @NonNull PersistentEntity... entities) Builds a batch drop tables statement. Designed for testing and not production usage. For production a SQL migration tool such as Flyway or Liquibase is recommended.- Parameters:
entities- the entities- Returns:
- The table
-
buildDropTableStatements
@NonNull public @NonNull String[] buildDropTableStatements(@NonNull @NonNull PersistentEntity entity) Builds the drop table statement. Designed for testing and not production usage. For production a SQL migration tool such as Flyway or Liquibase is recommended.- Parameters:
entity- The entity- Returns:
- The tables for the give entity
-
buildJoinTableInsert
@NonNull public @NonNull String buildJoinTableInsert(@NonNull @NonNull PersistentEntity entity, @NonNull @NonNull Association association) Builds a join table insert statement for a given entity and association.- Parameters:
entity- The entityassociation- The association- Returns:
- The join table insert statement
-
isForeignKeyWithJoinTable
Is the given association a foreign key reference that requires a join table.- Parameters:
association- The association.- Returns:
- True if it is.
-
buildCreateTableStatements
@NonNull public @NonNull String[] buildCreateTableStatements(@NonNull @NonNull PersistentEntity entity) Builds the creation table statement. Designed for testing and not production usage. For production a SQL migration tool such as Flyway or Liquibase is recommended.- Parameters:
entity- The entity- Returns:
- The tables for the give entity
-
buildCreateTableStatements
Builds the creation table statement for collection of entities. Designed for testing and not production usage. For production a SQL migration tool such as Flyway or Liquibase is recommended.- Parameters:
entities- The collection of entities- Returns:
- The tables for the given entities
-
getTableAsKeyword
Description copied from class:AbstractSqlLikeQueryBuilderGet the AS keyword to use for table aliases.- Overrides:
getTableAsKeywordin classAbstractSqlLikeQueryBuilder- Returns:
- The AS keyword if any
-
createSelectionVisitor
protected SqlQueryBuilder.SqlSelectionVisitor createSelectionVisitor(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, AbstractSqlLikeQueryBuilder.QueryState queryState, boolean distinct) Description copied from class:AbstractSqlLikeQueryBuilderCreate a selection visitor.- Overrides:
createSelectionVisitorin classAbstractSqlLikeQueryBuilder- Parameters:
annotationMetadata- The annotation metadataqueryState- The query statedistinct- The distinct- Returns:
- The visitor
-
resolveJoinType
Description copied from class:AbstractSqlLikeQueryBuilderResolves the join type.- Specified by:
resolveJoinTypein classAbstractSqlLikeQueryBuilder- Parameters:
jt- The join type- Returns:
- The join type.
-
buildInsert
@NonNull public @NonNull QueryResult buildInsert(io.micronaut.core.annotation.AnnotationMetadata repositoryMetadata, QueryBuilder.InsertQueryDefinition definition) Description copied from interface:QueryBuilderBuilds an insert statement for the given entity.- Parameters:
repositoryMetadata- The repository annotation metadatadefinition- The definition- Returns:
- The insert statement or null if the implementation doesn't require insert statements
-
getAliasName
Description copied from class:AbstractSqlLikeQueryBuilderGet an alias name for the given entity.- Overrides:
getAliasNamein classAbstractSqlLikeQueryBuilder- Parameters:
entity- The entity- Returns:
- The alias name
-
getTableName
Description copied from class:AbstractSqlLikeQueryBuilderGet the table name for the given entity.- Specified by:
getTableNamein classAbstractSqlLikeQueryBuilder- Parameters:
entity- The entity- Returns:
- The table name
-
appendUpdateSetParameter
protected void appendUpdateSetParameter(StringBuilder sb, String alias, PersistentProperty prop, Runnable appendParameter) Description copied from class:AbstractSqlLikeQueryBuilderAppends the SET=? call to the query string.- Overrides:
appendUpdateSetParameterin classAbstractSqlLikeQueryBuilder- Parameters:
sb- The string builderalias- The aliasprop- The propertyappendParameter- The append parameter action
-
buildJoin
protected void buildJoin(String joinType, StringBuilder query, AbstractSqlLikeQueryBuilder.QueryState queryState, PersistentAssociationPath joinAssociation, PersistentEntity associationOwner, String currentJoinAlias, String lastJoinAlias) Description copied from class:AbstractSqlLikeQueryBuilderBuild a join expression for the given alias, association, join type and builder.- Overrides:
buildJoinin classAbstractSqlLikeQueryBuilder- Parameters:
joinType- The join typequery- The query builderqueryState- The statejoinAssociation- The associationassociationOwner- The associated ownercurrentJoinAlias- The current join aliaslastJoinAlias- The last join alias
-
quote
Description copied from class:AbstractSqlLikeQueryBuilderQuote a persisted name (schema, table or column name) for the dialect.- Overrides:
quotein classAbstractSqlLikeQueryBuilder- Parameters:
persistedName- The persisted name.supportsDynamicValues- Whether persisted name supports dynamic values. Schema and table can have dynamic value (like ${config.entry}) and columns can't.- Returns:
- The quoted name
-
getColumnName
Description copied from class:AbstractSqlLikeQueryBuilderGet the column name for the given property.- Specified by:
getColumnNamein classAbstractSqlLikeQueryBuilder- Parameters:
persistentProperty- The property- Returns:
- The column name
-
appendForUpdate
protected void appendForUpdate(AbstractSqlLikeQueryBuilder.QueryPosition queryPosition, QueryBuilder.SelectQueryDefinition definition, StringBuilder queryBuilder) Description copied from class:AbstractSqlLikeQueryBuilderAdds "forUpdate" pessimistic locking.- Overrides:
appendForUpdatein classAbstractSqlLikeQueryBuilder- Parameters:
queryPosition- The query positiondefinition- The definitionqueryBuilder- The builder
-
computePropertyPaths
protected boolean computePropertyPaths()Description copied from class:AbstractSqlLikeQueryBuilderWhether property path expressions require computation by the implementation. In a certain query dialects property paths are supported (such as JPA-QL where you can do select foo.bar) whilst for explicit SQL queries paths like this have to be computed into aliases / column name references.- Specified by:
computePropertyPathsin classAbstractSqlLikeQueryBuilder- Returns:
- True if property path computation is required.
-
isAliasForBatch
protected boolean isAliasForBatch(PersistentEntity persistentEntity, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata) Description copied from class:AbstractSqlLikeQueryBuilderShould aliases be used in batch statements.- Specified by:
isAliasForBatchin classAbstractSqlLikeQueryBuilder- Parameters:
persistentEntity- the persistent entityannotationMetadata- the method annotation metadata- Returns:
- True if they should
-
formatParameter
Description copied from class:AbstractSqlLikeQueryBuilderFormat the parameter at the given index.- Specified by:
formatParameterin classAbstractSqlLikeQueryBuilder- Parameters:
index- The parameter- Returns:
- The index
-
selectAutoStrategy
Selects the default fallback strategy. For a generated value.- Parameters:
property- The Persistent property- Returns:
- The generated value
-
positionalParameterFormat
- Returns:
- The positional parameter format
-
appendLimitAndOrder
protected void appendLimitAndOrder(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryBuilder.SelectQueryDefinition definition, boolean appendLimit, boolean appendOrder, AbstractSqlLikeQueryBuilder.QueryState queryState) - Overrides:
appendLimitAndOrderin classAbstractSqlLikeQueryBuilder
-