diff --git a/pom.xml b/pom.xml
index cbbdd63bc2..c57d0287a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1601-where-clause-SNAPSHOT
pom
Spring Data Relational Parent
@@ -47,6 +47,9 @@
4.2.0
1.0.1
+
+ 1.37
+ 0.4.0.BUILD-SNAPSHOT
2017
@@ -154,6 +157,98 @@
+
+
+ jmh
+
+
+ com.github.mp911de.microbenchmark-runner
+ microbenchmark-runner-junit5
+ ${mbr.version}
+ test
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+ test
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+ test
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.3.0
+
+
+ add-source
+ generate-sources
+
+ add-test-source
+
+
+
+ src/jmh/java
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+ true
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+
+ run-benchmarks
+ pre-integration-test
+
+ exec
+
+
+ test
+ java
+
+ -classpath
+
+ org.openjdk.jmh.Main
+ .*
+
+
+
+
+
+
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index 271486f02a..738f08166e 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1601-where-clause-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index c2f44d3f96..7d5e900055 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-jdbc
- 3.2.0-SNAPSHOT
+ 3.2.0-1601-where-clause-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1601-where-clause-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/AggregateReader.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/AggregateReader.java
index 77813ea9b3..4070894735 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/AggregateReader.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/AggregateReader.java
@@ -18,25 +18,33 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+import java.util.Optional;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.relational.core.dialect.Dialect;
import org.springframework.data.relational.core.mapping.AggregatePath;
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
+import org.springframework.data.relational.core.query.Criteria;
+import org.springframework.data.relational.core.query.CriteriaDefinition;
+import org.springframework.data.relational.core.query.Query;
+import org.springframework.data.relational.core.sql.Condition;
+import org.springframework.data.relational.core.sql.Table;
import org.springframework.data.relational.core.sqlgeneration.AliasFactory;
import org.springframework.data.relational.core.sqlgeneration.SingleQuerySqlGenerator;
import org.springframework.data.relational.core.sqlgeneration.SqlGenerator;
import org.springframework.data.relational.domain.RowDocument;
+import org.springframework.data.util.Streamable;
+import org.springframework.jdbc.core.ResultSetExtractor;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
/**
* Reads complete Aggregates from the database, by generating appropriate SQL using a {@link SingleQuerySqlGenerator}
- * through {@link org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate}. Results are converterd into an
+ * through {@link org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate}. Results are converted into an
* intermediate {@link RowDocumentResultSetExtractor RowDocument} and mapped via
* {@link org.springframework.data.relational.core.conversion.RelationalConverter#read(Class, RowDocument)}.
*
@@ -45,12 +53,14 @@
* @author Mark Paluch
* @since 3.2
*/
-class AggregateReader {
+class AggregateReader implements PathToColumnMapping {
private final RelationalPersistentEntity aggregate;
- private final org.springframework.data.relational.core.sqlgeneration.SqlGenerator sqlGenerator;
+ private final Table table;
+ private final SqlGenerator sqlGenerator;
private final JdbcConverter converter;
private final NamedParameterJdbcOperations jdbcTemplate;
+ private final AliasFactory aliasFactory;
private final RowDocumentResultSetExtractor extractor;
AggregateReader(Dialect dialect, JdbcConverter converter, AliasFactory aliasFactory,
@@ -59,44 +69,88 @@ class AggregateReader {
this.converter = converter;
this.aggregate = aggregate;
this.jdbcTemplate = jdbcTemplate;
+ this.table = Table.create(aggregate.getQualifiedTableName());
+ this.sqlGenerator = new SingleQuerySqlGenerator(converter.getMappingContext(), aliasFactory, dialect, aggregate);
+ this.aliasFactory = aliasFactory;
+ this.extractor = new RowDocumentResultSetExtractor(converter.getMappingContext(), this);
+ }
+
+ @Override
+ public String column(AggregatePath path) {
- this.sqlGenerator = new CachingSqlGenerator(
- new SingleQuerySqlGenerator(converter.getMappingContext(), aliasFactory, dialect, aggregate));
+ String alias = aliasFactory.getColumnAlias(path);
+
+ if (alias == null) {
+ throw new IllegalStateException(String.format("Alias for '%s' must not be null", path));
+ }
- this.extractor = new RowDocumentResultSetExtractor(converter.getMappingContext(),
- createPathToColumnMapping(aliasFactory));
+ return alias;
}
- public List findAll() {
- return jdbcTemplate.query(sqlGenerator.findAll(), this::extractAll);
+ @Override
+ public String keyColumn(AggregatePath path) {
+ return aliasFactory.getKeyAlias(path);
}
@Nullable
public T findById(Object id) {
- id = converter.writeValue(id, aggregate.getRequiredIdProperty().getTypeInformation());
+ Query query = Query.query(Criteria.where(aggregate.getRequiredIdProperty().getName()).is(id)).limit(1);
- return jdbcTemplate.query(sqlGenerator.findById(), Map.of("id", id), this::extractZeroOrOne);
+ return findOne(query);
}
- public Iterable findAllById(Iterable> ids) {
+ @Nullable
+ public T findOne(Query query) {
+ return doFind(query, this::extractZeroOrOne);
+ }
- List
- *
+ *
* @author Mark Paluch
* @since 1.1
* @see FilteredSubtreeVisitor
*/
abstract class TypedSubtreeVisitor extends DelegatingVisitor {
+ private static final ConcurrentReferenceHashMap, ResolvableType> refCache = new ConcurrentReferenceHashMap<>();
+ private static final ConcurrentReferenceHashMap, Assignable> assignable = new ConcurrentReferenceHashMap<>();
+
private final ResolvableType type;
private @Nullable Visitable currentSegment;
+ enum Assignable {
+ YES, NO,
+ }
+
/**
* Creates a new {@link TypedSubtreeVisitor}.
*/
TypedSubtreeVisitor() {
- this.type = ResolvableType.forClass(getClass()).as(TypedSubtreeVisitor.class).getGeneric(0);
+ this.type = refCache.computeIfAbsent(this.getClass(),
+ key -> ResolvableType.forClass(key).as(TypedSubtreeVisitor.class).getGeneric(0));
}
/**
* Creates a new {@link TypedSubtreeVisitor} with an explicitly provided type.
*/
- TypedSubtreeVisitor(Class type) {
- this.type = ResolvableType.forType(type);
+ TypedSubtreeVisitor(Class type) {
+ this.type = refCache.computeIfAbsent(type, key -> ResolvableType.forClass(type));
}
/**
@@ -117,7 +126,7 @@ public final Delegation doEnter(Visitable segment) {
if (currentSegment == null) {
- if (this.type.isInstance(segment)) {
+ if (isAssignable(this.type, segment)) {
currentSegment = segment;
return enterMatched((T) segment);
@@ -142,4 +151,16 @@ public final Delegation doLeave(Visitable segment) {
return leaveNested(segment);
}
}
+
+ private static boolean isAssignable(ResolvableType type, Visitable segment) {
+
+ Assignable assignable = TypedSubtreeVisitor.assignable.get(segment.getClass());
+
+ if (assignable == null) {
+ assignable = type.isInstance(segment) ? Assignable.YES : Assignable.NO;
+ TypedSubtreeVisitor.assignable.put(segment.getClass(), assignable);
+ }
+
+ return assignable == Assignable.YES;
+ }
}
diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGenerator.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGenerator.java
index 5bb11e4b81..9326a55f1f 100644
--- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGenerator.java
+++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGenerator.java
@@ -21,6 +21,7 @@
import java.util.Map;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PersistentPropertyPath;
import org.springframework.data.mapping.PersistentPropertyPaths;
@@ -45,7 +46,6 @@ public class SingleQuerySqlGenerator implements SqlGenerator {
private final Dialect dialect;
private final AliasFactory aliases;
private final RelationalPersistentEntity> aggregate;
- private final Table table;
public SingleQuerySqlGenerator(RelationalMappingContext context, AliasFactory aliasFactory, Dialect dialect,
RelationalPersistentEntity> aggregate) {
@@ -54,47 +54,14 @@ public SingleQuerySqlGenerator(RelationalMappingContext context, AliasFactory al
this.aliases = aliasFactory;
this.dialect = dialect;
this.aggregate = aggregate;
-
- this.table = Table.create(aggregate.getQualifiedTableName());
}
@Override
- public String findAll() {
- return createSelect(null);
- }
-
- @Override
- public String findById() {
-
- AggregatePath path = getRootIdPath();
- Condition condition = Conditions.isEqual(table.column(path.getColumnInfo().name()), Expressions.just(":id"));
-
+ public String findAll(@Nullable Condition condition) {
return createSelect(condition);
}
- @Override
- public String findAllById() {
-
- AggregatePath path = getRootIdPath();
- Condition condition = Conditions.in(table.column(path.getColumnInfo().name()), Expressions.just(":ids"));
-
- return createSelect(condition);
- }
-
- /**
- * @return The {@link AggregatePath} to the id property of the aggregate root.
- */
- private AggregatePath getRootIdPath() {
- return context.getAggregatePath(aggregate).append(aggregate.getRequiredIdProperty());
- }
-
- /**
- * Creates a SQL suitable of loading all the data required for constructing complete aggregates.
- *
- * @param condition a constraint for limiting the aggregates to be loaded.
- * @return a {@literal String} containing the generated SQL statement
- */
- private String createSelect(Condition condition) {
+ String createSelect(@Nullable Condition condition) {
AggregatePath rootPath = context.getAggregatePath(aggregate);
QueryMeta queryMeta = createInlineQuery(rootPath, condition);
@@ -137,7 +104,7 @@ private String createSelect(Condition condition) {
finalColumns.add(rootIdExpression);
Select fullQuery = StatementBuilder.select(finalColumns).from(inlineQuery).orderBy(rootIdExpression, just("rn"))
- .build();
+ .build(false);
return SqlRenderer.create(new RenderContextFactory(dialect).createRenderContext()).render(fullQuery);
}
@@ -151,7 +118,7 @@ private InlineQuery createMainSelect(List columns, AggregatePath roo
select = applyJoins(rootPath, inlineQueries, select);
SelectBuilder.BuildSelect buildSelect = applyWhereCondition(rootPath, inlineQueries, select);
- Select mainSelect = buildSelect.build();
+ Select mainSelect = buildSelect.build(false);
return InlineQuery.create(mainSelect, "main");
}
@@ -167,7 +134,7 @@ private List createInlineQueries(PersistentPropertyPaths, Relationa
List inlineQueries = new ArrayList<>();
- for (PersistentPropertyPath ppp : paths) {
+ for (PersistentPropertyPath extends RelationalPersistentProperty> ppp : paths) {
QueryMeta queryMeta = createInlineQuery(context.getAggregatePath(ppp), null);
inlineQueries.add(queryMeta);
@@ -187,7 +154,7 @@ private List createInlineQueries(PersistentPropertyPaths, Relationa
* @param condition a condition that is to be applied to the query. May be {@literal null}.
* @return an inline query for the given path.
*/
- private QueryMeta createInlineQuery(AggregatePath basePath, Condition condition) {
+ private QueryMeta createInlineQuery(AggregatePath basePath, @Nullable Condition condition) {
RelationalPersistentEntity> entity = basePath.getRequiredLeafEntity();
Table table = Table.create(entity.getQualifiedTableName());
@@ -248,7 +215,7 @@ private QueryMeta createInlineQuery(AggregatePath basePath, Condition condition)
SelectBuilder.BuildSelect buildSelect = condition != null ? select.where(condition) : select;
- InlineQuery inlineQuery = InlineQuery.create(buildSelect.build(),
+ InlineQuery inlineQuery = InlineQuery.create(buildSelect.build(false),
aliases.getTableAlias(context.getAggregatePath(entity)));
return QueryMeta.of(basePath, inlineQuery, columnAliases, just(id), just(backReferenceAlias), just(keyAlias),
just(rowNumberAlias), just(rowCountAlias));
diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SqlGenerator.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SqlGenerator.java
index 78049657e0..fe783882a5 100644
--- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SqlGenerator.java
+++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sqlgeneration/SqlGenerator.java
@@ -15,6 +15,9 @@
*/
package org.springframework.data.relational.core.sqlgeneration;
+import org.springframework.data.relational.core.sql.Condition;
+import org.springframework.lang.Nullable;
+
/**
* Generates SQL statements for loading aggregates.
*
@@ -22,11 +25,12 @@
* @since 3.2
*/
public interface SqlGenerator {
- String findAll();
- String findById();
+ default String findAll() {
+ return findAll(null);
+ }
- String findAllById();
+ String findAll(@Nullable Condition condition);
AliasFactory getAliasFactory();
}
diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/ParameterMetadataProvider.java b/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/ParameterMetadataProvider.java
index 818fa8578f..2f781e89c3 100644
--- a/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/ParameterMetadataProvider.java
+++ b/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/ParameterMetadataProvider.java
@@ -137,16 +137,12 @@ protected Object prepareParameterValue(@Nullable Object value, Class> valueTyp
return value;
}
- switch (partType) {
- case STARTING_WITH:
- return (ValueFunction) escaper -> escaper.escape(value.toString()) + "%";
- case ENDING_WITH:
- return (ValueFunction) escaper -> "%" + escaper.escape(value.toString());
- case CONTAINING:
- case NOT_CONTAINING:
- return (ValueFunction) escaper -> "%" + escaper.escape(value.toString()) + "%";
- default:
- return value;
- }
+ return switch (partType) {
+ case STARTING_WITH -> (ValueFunction) escaper -> escaper.escape(value.toString()) + "%";
+ case ENDING_WITH -> (ValueFunction) escaper -> "%" + escaper.escape(value.toString());
+ case CONTAINING, NOT_CONTAINING -> (ValueFunction) escaper -> "%" + escaper.escape(value.toString())
+ + "%";
+ default -> value;
+ };
}
}
diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DerivedSqlIdentifierUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DerivedSqlIdentifierUnitTests.java
index 5742a2c4ed..bb62ab7b91 100644
--- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DerivedSqlIdentifierUnitTests.java
+++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DerivedSqlIdentifierUnitTests.java
@@ -16,7 +16,6 @@
package org.springframework.data.relational.core.mapping;
import static org.assertj.core.api.Assertions.*;
-import static org.assertj.core.api.SoftAssertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.data.relational.core.sql.IdentifierProcessing;
@@ -44,7 +43,6 @@ public void quotedSimpleObjectIdentifierWithAdjustableLetterCasing() {
assertThat(identifier.toSql(BRACKETS_LOWER_CASE)).isEqualTo("[somename]");
assertThat(identifier.getReference(BRACKETS_LOWER_CASE)).isEqualTo("someName");
assertThat(identifier.getReference()).isEqualTo("someName");
-
}
@Test // DATAJDBC-386
@@ -77,12 +75,12 @@ public void equality() {
SqlIdentifier notSimple = SqlIdentifier.from(new DerivedSqlIdentifier("simple", false),
new DerivedSqlIdentifier("not", false));
- assertSoftly(softly -> {
+ assertThat(basis).isEqualTo(equal).isEqualTo(SqlIdentifier.unquoted("simple"))
+ .hasSameHashCodeAs(SqlIdentifier.unquoted("simple"));
+ assertThat(equal).isEqualTo(basis);
+ assertThat(basis).isNotEqualTo(quoted);
+ assertThat(basis).isNotEqualTo(notSimple);
- softly.assertThat(basis).isEqualTo(equal);
- softly.assertThat(equal).isEqualTo(basis);
- softly.assertThat(basis).isNotEqualTo(quoted);
- softly.assertThat(basis).isNotEqualTo(notSimple);
- });
+ assertThat(quoted).isEqualTo(SqlIdentifier.quoted("SIMPLE")).hasSameHashCodeAs(SqlIdentifier.quoted("SIMPLE"));
}
}
diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGeneratorUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGeneratorUnitTests.java
index 5721ce2b42..ade6e0dad1 100644
--- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGeneratorUnitTests.java
+++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SingleQuerySqlGeneratorUnitTests.java
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.springframework.data.relational.core.sqlgeneration;
import static org.springframework.data.relational.core.sqlgeneration.SqlAssert.*;
@@ -28,7 +27,10 @@
import org.springframework.data.relational.core.dialect.PostgresDialect;
import org.springframework.data.relational.core.mapping.AggregatePath;
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
+import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
+import org.springframework.data.relational.core.sql.Conditions;
+import org.springframework.data.relational.core.sql.Table;
/**
* Tests for {@link SingleQuerySqlGenerator}.
@@ -76,7 +78,8 @@ void createSelectForFindAll() {
@Test // GH-1446
void createSelectForFindById() {
- String sql = sqlGenerator.findById();
+ Table table = Table.create(persistentEntity.getQualifiedTableName());
+ String sql = sqlGenerator.findAll(table.column("id").isEqualTo(Conditions.just(":id")));
SqlAssert baseSelect = assertThatParsed(sql).hasInlineView();
@@ -94,13 +97,14 @@ void createSelectForFindById() {
col("\"id\"").as(alias("id")), //
col("\"name\"").as(alias("name")) //
) //
- .extractWhereClause().isEqualTo("\"trivial_aggregate\".\"id\" = :id");
+ .extractWhereClause().isEqualTo("\"trivial_aggregate\".id = :id");
}
@Test // GH-1446
void createSelectForFindAllById() {
- String sql = sqlGenerator.findAllById();
+ Table table = Table.create(persistentEntity.getQualifiedTableName());
+ String sql = sqlGenerator.findAll(table.column("id").in(Conditions.just(":ids")));
SqlAssert baseSelect = assertThatParsed(sql).hasInlineView();
@@ -118,7 +122,7 @@ void createSelectForFindAllById() {
col("\"id\"").as(alias("id")), //
col("\"name\"").as(alias("name")) //
) //
- .extractWhereClause().isEqualTo("\"trivial_aggregate\".\"id\" IN (:ids)");
+ .extractWhereClause().isEqualTo("\"trivial_aggregate\".id IN (:ids)");
}
}
@@ -133,7 +137,8 @@ private AggregateWithSingleReference() {
@Test // GH-1446
void createSelectForFindById() {
- String sql = sqlGenerator.findById();
+ Table table = Table.create(persistentEntity.getQualifiedTableName());
+ String sql = sqlGenerator.findAll(table.column("id").isEqualTo(Conditions.just(":id")));
String rootRowNumber = rnAlias();
String rootCount = rcAlias();
@@ -167,7 +172,7 @@ void createSelectForFindById() {
col("\"id\"").as(alias("id")), //
col("\"name\"").as(alias("name")) //
) //
- .extractWhereClause().isEqualTo("\"single_reference_aggregate\".\"id\" = :id");
+ .extractWhereClause().isEqualTo("\"single_reference_aggregate\".id = :id");
baseSelect.hasInlineViewSelectingFrom("\"trivial_aggregate\"") //
.hasExactlyColumns( //
rn(col("\"single_reference_aggregate\"")).as(trivialsRowNumber), //
@@ -206,13 +211,14 @@ record SingleReferenceAggregate(@Id Long id, String name, List
private class AbstractTestFixture {
final Class> aggregateRootType;
final SingleQuerySqlGenerator sqlGenerator;
+ final RelationalPersistentEntity> persistentEntity;
final AliasFactory aliases;
private AbstractTestFixture(Class> aggregateRootType) {
this.aggregateRootType = aggregateRootType;
- this.sqlGenerator = new SingleQuerySqlGenerator(context, new AliasFactory(), dialect,
- context.getRequiredPersistentEntity(aggregateRootType));
+ this.persistentEntity = context.getRequiredPersistentEntity(aggregateRootType);
+ this.sqlGenerator = new SingleQuerySqlGenerator(context, new AliasFactory(), dialect, persistentEntity);
this.aliases = sqlGenerator.getAliasFactory();
}