Skip to content

Commit edf588c

Browse files
committed
Fix
1 parent fe31eeb commit edf588c

4 files changed

Lines changed: 32 additions & 2 deletions

File tree

core/src/main/java/me/zort/sqllib/SQLiteDatabaseConnectionImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.zort.sqllib;
22

3+
import me.zort.sqllib.api.Query;
34
import me.zort.sqllib.api.data.QueryResult;
45
import me.zort.sqllib.api.data.QueryRowsResult;
56
import me.zort.sqllib.api.data.Row;
@@ -136,4 +137,11 @@ public UpsertQuery upsert(@Nullable String table) {
136137
throw new IllegalStatementOperationException("Default upsert is not supported by SQLite!");
137138
}
138139

140+
@Override
141+
public QueryResult exec(Query query) {
142+
if (query instanceof UpsertQuery && ((UpsertQuery) query).getAssignedSaveObject() != null)
143+
return save(((UpsertQuery) query).getTable(), ((UpsertQuery) query).getAssignedSaveObject());
144+
145+
return super.exec(query);
146+
}
139147
}

core/src/main/java/me/zort/sqllib/internal/query/UpsertQuery.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package me.zort.sqllib.internal.query;
22

3+
import lombok.Getter;
4+
import lombok.Setter;
35
import me.zort.sqllib.SQLDatabaseConnection;
46
import me.zort.sqllib.internal.query.part.SetStatement;
57
import org.jetbrains.annotations.Nullable;
@@ -8,6 +10,10 @@
810

911
public class UpsertQuery extends InsertQuery {
1012

13+
@Setter
14+
@Getter
15+
private Object assignedSaveObject = null; // Can be null, only relevant in SQLite mode.
16+
1117
public UpsertQuery(SQLDatabaseConnection connection) {
1218
super(connection);
1319
}

core/src/main/java/me/zort/sqllib/mapping/builder/NativeQueryBuilder.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package me.zort.sqllib.mapping.builder;
22

3+
import lombok.Getter;
4+
import me.zort.sqllib.api.Executive;
35
import me.zort.sqllib.api.SQLConnection;
46
import me.zort.sqllib.internal.query.QueryDetails;
57
import me.zort.sqllib.internal.query.QueryNode;
@@ -20,7 +22,7 @@ public class NativeQueryBuilder implements QueryAnnotation.QueryBuilder<Annotati
2022
@Override
2123
public QueryNode<?> build(SQLConnection connection, Annotation queryAnnotation, Method method, ParameterPair[] parameters) {
2224
PlaceholderMapper mapper = new PlaceholderMapper(parameters);
23-
return new QueryNode<QueryNode<?>>(null, new ArrayList<>(), QueryPriority.GENERAL) {
25+
return new LocalQueryNodeExecutive(connection) {
2426
private int currPhIndex = 0;
2527
@Override
2628
public QueryDetails buildQueryDetails() {
@@ -59,4 +61,15 @@ private String nextPlaceholder() {
5961
};
6062
}
6163

64+
private static abstract class LocalQueryNodeExecutive extends QueryNode<QueryNode<?>> implements Executive {
65+
66+
@Getter
67+
private final SQLConnection connection;
68+
69+
public LocalQueryNodeExecutive(SQLConnection connection) {
70+
super(null, new ArrayList<>(), QueryPriority.GENERAL);
71+
this.connection = connection;
72+
}
73+
}
74+
6275
}

core/src/main/java/me/zort/sqllib/mapping/builder/SaveQueryBuilder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ public QueryNode<?> build(SQLConnection connection, Save queryAnnotation, Method
2020

2121
String table = Table.Util.getFromContext(method, parameters);
2222

23-
UpsertQuery query = ((SQLDatabaseConnectionImpl) connection).save(getSaveableObject(parameters));
23+
Object saveableObject = getSaveableObject(parameters);
24+
25+
UpsertQuery query = ((SQLDatabaseConnectionImpl) connection).save(saveableObject);
2426
query.table(table);
27+
query.setAssignedSaveObject(saveableObject);
2528

2629
return query;
2730
}

0 commit comments

Comments
 (0)