Skip to content

Commit be6886b

Browse files
committed
1 parent deac205 commit be6886b

File tree

5 files changed

+55
-15
lines changed

5 files changed

+55
-15
lines changed

project/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
group=org.babyfish.jimmer
2-
version=0.9.92
2+
version=0.9.93

project/jimmer-sql-kotlin/src/test/kotlin/org/babyfish/jimmer/sql/kt/mutation/SaveCommandTest.kt

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -903,45 +903,77 @@ class SaveCommandTest : AbstractMutationTest() {
903903
}
904904
}
905905
executeAndExpectResult({ con ->
906-
sqlClient {
907-
setDialect(object: H2Dialect() {
906+
val sqlClient = sqlClient {
907+
setDialect(object : H2Dialect() {
908908
override fun isUpsertSupported(): Boolean = false
909909
})
910910
setIdGenerator(IdentityIdGenerator.INSTANCE)
911-
}.entities.forConnection(con).save(author) {
911+
}
912+
sqlClient.entities.forConnection(con).save(author) {
913+
setAssociatedMode(Author::books, AssociatedSaveMode.APPEND_IF_ABSENT)
914+
}
915+
sqlClient.entities.forConnection(con).save(author) {
912916
setAssociatedMode(Author::books, AssociatedSaveMode.APPEND_IF_ABSENT)
913917
}
914918
}) {
915919
statement {
916920
sql(
917921
"""select tb_1_.ID, tb_1_.FIRST_NAME, tb_1_.LAST_NAME
918-
|from AUTHOR tb_1_
919-
|where (tb_1_.FIRST_NAME, tb_1_.LAST_NAME) = (?, ?)""".trimMargin()
922+
|from AUTHOR tb_1_
923+
|where (tb_1_.FIRST_NAME, tb_1_.LAST_NAME) = (?, ?)""".trimMargin()
920924
)
925+
variables("Michael", "Simpson")
921926
}
922927
statement {
923928
sql(
924929
"""insert into AUTHOR(FIRST_NAME, LAST_NAME, GENDER)
925-
|values(?, ?, ?)""".trimMargin()
930+
|values(?, ?, ?)""".trimMargin()
926931
)
927932
}
928933
statement {
929934
sql(
930935
"""select tb_1_.ID, tb_1_.NAME, tb_1_.EDITION
931-
|from BOOK tb_1_
932-
|where (tb_1_.NAME, tb_1_.EDITION) in ((?, ?), (?, ?))""".trimMargin()
936+
|from BOOK tb_1_
937+
|where (tb_1_.NAME, tb_1_.EDITION) in ((?, ?), (?, ?))""".trimMargin()
933938
)
934939
}
935940
statement {
936941
sql(
937942
"""insert into BOOK(NAME, EDITION, PRICE)
938-
|values(?, ?, ?)""".trimMargin()
943+
|values(?, ?, ?)""".trimMargin()
939944
)
940945
}
941946
statement {
942947
sql(
943948
"""insert into BOOK_AUTHOR_MAPPING(AUTHOR_ID, BOOK_ID)
944-
|values(?, ?)""".trimMargin()
949+
|values(?, ?)""".trimMargin()
950+
)
951+
batchVariables(0, 100L, 3L)
952+
}
953+
statement {
954+
sql(
955+
"""select tb_1_.ID, tb_1_.FIRST_NAME, tb_1_.LAST_NAME
956+
|from AUTHOR tb_1_
957+
|where (tb_1_.FIRST_NAME, tb_1_.LAST_NAME) = (?, ?)""".trimMargin()
958+
)
959+
}
960+
statement {
961+
sql(
962+
"""update AUTHOR set GENDER = ? where ID = ?"""
963+
)
964+
}
965+
statement {
966+
sql(
967+
"""select tb_1_.ID, tb_1_.NAME, tb_1_.EDITION
968+
|from BOOK tb_1_
969+
|where (tb_1_.NAME, tb_1_.EDITION) in ((?, ?), (?, ?))""".trimMargin()
970+
)
971+
}
972+
statement {
973+
sql(
974+
"""select BOOK_ID
975+
|from BOOK_AUTHOR_MAPPING
976+
|where AUTHOR_ID = ?""".trimMargin()
945977
)
946978
}
947979
entity {

project/jimmer-sql/src/main/java/org/babyfish/jimmer/sql/ast/impl/mutation/PreHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ void onResolve() {
984984
updatedWithoutKeyList.add(draft);
985985
items.add(newItem(draft, original));
986986
}
987-
if (!ignoreUpdate || ctx.path.getBackProp() != null && !ctx.path.getBackProp().isColumnDefinition()) {
987+
if (!ignoreUpdate || ctx.isIdRetrievingRequired()) {
988988
draft.__set(idPropId, original.__get(idPropId));
989989
}
990990
}

project/jimmer-sql/src/main/java/org/babyfish/jimmer/sql/ast/impl/mutation/SaveContext.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,13 @@ public SaveContext investigator(Executor.BatchContext ctx) {
206206
Investigators.toInvestigatorSqlClient(ctx.sqlClient(), ctx)
207207
);
208208
}
209+
210+
public boolean isIdRetrievingRequired() {
211+
MutationPath path = this.path;
212+
if (path.getParent() == null) {
213+
return false;
214+
}
215+
ImmutableProp backProp = path.getBackProp();
216+
return backProp == null || !backProp.isColumnDefinition();
217+
}
209218
}

project/jimmer-sql/src/main/java/org/babyfish/jimmer/sql/ast/impl/mutation/Saver.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ private void fetchIdIfNecessary(List<DraftSpi> drafts, Iterable<Batch<DraftSpi>>
252252
if (ctx.options.getMode() != SaveMode.INSERT_IF_ABSENT) {
253253
return;
254254
}
255-
if (ctx.path.getBackProp() == null || ctx.path.getBackProp().isColumnDefinition()) {
255+
if (!ctx.isIdRetrievingRequired()) {
256256
return;
257257
}
258258
fetchImpl(drafts, batches, true);
@@ -525,15 +525,14 @@ private void updateAssociations(Batch<DraftSpi> batch, ImmutableProp prop, boole
525525
if (detach) {
526526
switch (ctx.options.getAssociatedMode(prop)) {
527527
case APPEND:
528-
case APPEND_IF_ABSENT:
529528
case VIOLENTLY_REPLACE:
530529
middleTableOperator.append(retainedIdPairs);
531530
break;
532531
case UPDATE:
533532
case MERGE:
534533
middleTableOperator.merge(retainedIdPairs);
535534
break;
536-
case REPLACE:
535+
default:
537536
middleTableOperator.replace(retainedIdPairs);
538537
break;
539538
}

0 commit comments

Comments
 (0)