Skip to content

Commit 26c9fc8

Browse files
authored
Fix invalid update statement. (#538)
Close #537
1 parent 6572d47 commit 26c9fc8

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/query/BuilderSupport.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import java.util.Objects;
5+
import java.util.Optional;
56
import java.util.function.BiFunction;
67
import java.util.function.Function;
78
import org.seasar.doma.DomaException;
@@ -76,6 +77,20 @@ public void column(PropertyMetamodel<?> propertyMetamodel) {
7677
propertyMetamodel.accept(propertyMetamodelVisitor);
7778
}
7879

80+
public void columnWithoutAlias(Operand.Prop prop) {
81+
columnWithoutAlias(prop.value);
82+
}
83+
84+
public void columnWithoutAlias(PropertyMetamodel<?> propertyMetamodel) {
85+
propertyMetamodel.accept(
86+
new PropertyMetamodelVisitor() {
87+
@Override
88+
protected Optional<String> getAlias(PropertyMetamodel<?> propertyMetamodel) {
89+
return Optional.empty();
90+
}
91+
});
92+
}
93+
7994
public void param(Operand.Param param) {
8095
InParameter<?> parameter = param.createInParameter(config);
8196
param(parameter);
@@ -442,15 +457,23 @@ class PropertyMetamodelVisitor
442457

443458
@Override
444459
public void visit(PropertyMetamodel<?> propertyMetamodel) {
460+
Optional<String> alias = getAlias(propertyMetamodel);
461+
alias.ifPresent(
462+
it -> {
463+
buf.appendSql(it);
464+
buf.appendSql(".");
465+
});
466+
EntityPropertyType<?, ?> propertyType = propertyMetamodel.asType();
467+
buf.appendSql(
468+
propertyType.getColumnName(config.getNaming()::apply, config.getDialect()::applyQuote));
469+
}
470+
471+
protected Optional<String> getAlias(PropertyMetamodel<?> propertyMetamodel) {
445472
String alias = aliasManager.getAlias(propertyMetamodel);
446473
if (alias == null) {
447474
throw new DomaException(Message.DOMA6004, propertyMetamodel.getName());
448475
}
449-
buf.appendSql(alias);
450-
buf.appendSql(".");
451-
EntityPropertyType<?, ?> propertyType = propertyMetamodel.asType();
452-
buf.appendSql(
453-
propertyType.getColumnName(config.getNaming()::apply, config.getDialect()::applyQuote));
476+
return Optional.of(alias);
454477
}
455478

456479
@Override

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/query/UpdateBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private void operand(Operand operand) {
8383
}
8484

8585
private void column(Operand.Prop prop) {
86-
support.column(prop);
86+
support.columnWithoutAlias(prop);
8787
}
8888

8989
private void visitCriterion(int index, Criterion criterion) {

doma-core/src/test/java/org/seasar/doma/jdbc/criteria/NativeSqlUpdateTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void set() {
2626
});
2727

2828
Sql<?> sql = stmt.asSql();
29-
assertEquals("update EMP t0_ set t0_.NAME = 'bbb', t0_.SALARY = null", sql.getFormattedSql());
29+
assertEquals("update EMP t0_ set NAME = 'bbb', SALARY = null", sql.getFormattedSql());
3030
}
3131

3232
@Test
@@ -44,7 +44,6 @@ void where() {
4444

4545
Sql<?> sql = stmt.asSql();
4646
assertEquals(
47-
"update EMP t0_ set t0_.NAME = 'bbb', t0_.SALARY = 1000 where t0_.ID = 1",
48-
sql.getFormattedSql());
47+
"update EMP t0_ set NAME = 'bbb', SALARY = 1000 where t0_.ID = 1", sql.getFormattedSql());
4948
}
5049
}

0 commit comments

Comments
 (0)