Skip to content

Commit 057fe5d

Browse files
committed
JAVA-2700: Revisit execution profile parameters in mapper
This amends JAVA-2633 (5e1e510).
1 parent f3728a0 commit 057fe5d

18 files changed

Lines changed: 363 additions & 184 deletions

File tree

core/src/main/java/com/datastax/oss/driver/api/core/cql/StatementBuilder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,19 @@ protected StatementBuilder(StatementT template) {
9191
@NonNull
9292
public SelfT setExecutionProfileName(@Nullable String executionProfileName) {
9393
this.executionProfileName = executionProfileName;
94+
if (executionProfileName != null) {
95+
this.executionProfile = null;
96+
}
9497
return self;
9598
}
9699

97100
/** @see Statement#setExecutionProfile(DriverExecutionProfile) */
98101
@NonNull
99102
public SelfT setExecutionProfile(@Nullable DriverExecutionProfile executionProfile) {
100103
this.executionProfile = executionProfile;
101-
this.executionProfileName = null;
104+
if (executionProfile != null) {
105+
this.executionProfileName = null;
106+
}
102107
return self;
103108
}
104109

integration-tests/src/test/java/com/datastax/oss/driver/mapper/ProfileIT.java

Lines changed: 160 additions & 80 deletions
Large diffs are not rendered by default.

manual/mapper/mapper/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ assert dao1 == dao2;
111111

112112
### DAO parameterization
113113

114+
#### Keyspace and table
115+
114116
The mapper allows you to reuse the same DAO interface for different tables. For example, given the
115117
following definitions:
116118

@@ -159,6 +161,24 @@ ProductDao dao3 = inventoryMapper.productDao("keyspace3", "table3");
159161
The DAO's keyspace and table can also be injected into custom query strings; see [Query
160162
methods](../daos/query/).
161163
164+
#### Execution profile
165+
166+
Similarly, a DAO can be parameterized to use a particular [configuration
167+
profile](../../core/configuration/#execution-profiles):
168+
169+
```java
170+
@Mapper
171+
public interface InventoryMapper {
172+
@DaoFactory
173+
ProductDao productDao(@DaoProfile String profileName);
174+
175+
@DaoFactory
176+
ProductDao productDao(@DaoProfile DriverExecutionProfile profile);
177+
}
178+
```
179+
180+
The mapper will call `setExecutionProfileName` / `setExecutionProfile` on every generated statement.
181+
162182
### Schema validation
163183
164184
The mapper validates entity mappings against the database schema at runtime. This check is performed

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoDeleteMethodGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ public Optional<MethodSpec> generate() {
223223
statementName);
224224
populateBuilderWithStatementAttributes(methodBodyBuilder, methodElement);
225225
populateBuilderWithFunction(methodBodyBuilder, boundStatementFunction);
226-
populateBuilderWithProfile(methodBodyBuilder);
227226

228227
int nextParameterIndex = 0;
229228
if (hasEntityParameter) {

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoInsertMethodGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ public Optional<MethodSpec> generate() {
140140

141141
populateBuilderWithStatementAttributes(methodBodyBuilder, methodElement);
142142
populateBuilderWithFunction(methodBodyBuilder, boundStatementFunction);
143-
populateBuilderWithProfile(methodBodyBuilder);
144143

145144
warnIfCqlNamePresent(parameters.subList(0, 1));
146145
String entityParameterName = parameters.get(0).getSimpleName().toString();

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoMethodGenerator.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,6 @@ protected void populateBuilderWithFunction(
146146
}
147147
}
148148

149-
protected void populateBuilderWithProfile(CodeBlock.Builder builder) {
150-
builder.beginControlFlow("if(context.getExecutionProfileName() != null)");
151-
builder.addStatement(
152-
"boundStatementBuilder = boundStatementBuilder.setExecutionProfileName(context.getExecutionProfileName())");
153-
builder.endControlFlow();
154-
}
155-
156149
protected void populateBuilderWithStatementAttributes(
157150
CodeBlock.Builder builder, ExecutableElement methodElement) {
158151
StatementAttributes statementAttributes =

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoQueryMethodGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ public Optional<MethodSpec> generate() {
109109

110110
populateBuilderWithStatementAttributes(methodBodyBuilder, methodElement);
111111
populateBuilderWithFunction(methodBodyBuilder, boundStatementFunction);
112-
populateBuilderWithProfile(methodBodyBuilder);
113112

114113
if (validateCqlNamesPresent(parameters)) {
115114
GeneratedCodePatterns.bindParameters(

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoSelectMethodGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ public Optional<MethodSpec> generate() {
161161
statementName);
162162
populateBuilderWithStatementAttributes(methodBodyBuilder, methodElement);
163163
populateBuilderWithFunction(methodBodyBuilder, boundStatementFunction);
164-
populateBuilderWithProfile(methodBodyBuilder);
165164

166165
if (!primaryKeyParameters.isEmpty()) {
167166
List<CodeBlock> primaryKeyNames =

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/dao/DaoUpdateMethodGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ public Optional<MethodSpec> generate() {
126126

127127
populateBuilderWithStatementAttributes(methodBodyBuilder, methodElement);
128128
populateBuilderWithFunction(methodBodyBuilder, boundStatementFunction);
129-
populateBuilderWithProfile(methodBodyBuilder);
130129

131130
String entityParameterName = parameters.get(0).getSimpleName().toString();
132131

mapper-processor/src/main/java/com/datastax/oss/driver/internal/mapper/processor/mapper/MapperBuilderGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ protected JavaFile.Builder getContents() {
7575
.addAnnotation(Override.class)
7676
.returns(ClassName.get(interfaceElement))
7777
.addStatement(
78-
"$1T context = new $1T(session, defaultKeyspaceId, customState)",
78+
"$1T context = new $1T(session, defaultKeyspaceId, "
79+
+ "defaultExecutionProfileName, defaultExecutionProfile, customState)",
7980
DefaultMapperContext.class)
8081
.addStatement(
8182
"return new $T(context)",

0 commit comments

Comments
 (0)