Skip to content

Commit 7d42ce6

Browse files
committed
address todo
1 parent 9c5c087 commit 7d42ce6

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44

55
allprojects {
66
group = 'net.staticstudios'
7-
version = '3.0.1-SNAPSHOT'
7+
version = '3.0.2-SNAPSHOT'
88

99
repositories {
1010
mavenCentral()

core/src/main/java/net/staticstudios/data/DataManager.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,15 +1242,19 @@ public <T> T get(String schema, String table, String column, ColumnValuePairs id
12421242

12431243
public void set(String schema, String table, String column, ColumnValuePairs idColumns, List<Link> idColumnLinks, Object value, int delay) {
12441244
StringBuilder sqlBuilder;
1245+
1246+
@Language("SQL") String h2Sql;
1247+
@Language("SQL") String pgSql;
1248+
12451249
if (idColumnLinks.isEmpty()) {
12461250
sqlBuilder = new StringBuilder().append("UPDATE \"").append(schema).append("\".\"").append(table).append("\" SET \"").append(column).append("\" = ? WHERE ");
12471251
for (ColumnValuePair columnValuePair : idColumns) {
12481252
String name = columnValuePair.column();
12491253
sqlBuilder.append("\"").append(name).append("\" = ? AND ");
12501254
}
12511255
sqlBuilder.setLength(sqlBuilder.length() - 5);
1256+
pgSql = h2Sql = sqlBuilder.toString();
12521257
} else { // we're dealing with a foreign key
1253-
//todo: use update on conclifct bla bla bla for pg
12541258
sqlBuilder = new StringBuilder().append("MERGE INTO \"").append(schema).append("\".\"").append(table).append("\" target USING (VALUES (?");
12551259
sqlBuilder.append(", ?".repeat(idColumns.getPairs().length));
12561260
sqlBuilder.append(")) AS source (\"").append(column).append("\"");
@@ -1299,23 +1303,40 @@ public void set(String schema, String table, String column, ColumnValuePairs idC
12991303
sqlBuilder.append(", source.\"").append(name).append("\"");
13001304
}
13011305
sqlBuilder.append(")");
1302-
}
1303-
@Language("SQL") String h2Sql = sqlBuilder.toString();
13041306

1305-
sqlBuilder.setLength(0);
1306-
sqlBuilder.append("UPDATE \"").append(schema).append("\".\"").append(table).append("\" SET \"").append(column).append("\" = ? WHERE ");
1307-
for (ColumnValuePair columnValuePair : idColumns) {
1308-
String name = columnValuePair.column();
1309-
for (Link link : idColumnLinks) {
1310-
if (link.columnInReferringTable().equals(columnValuePair.column())) {
1311-
name = link.columnInReferencedTable();
1312-
break;
1307+
h2Sql = sqlBuilder.toString();
1308+
sqlBuilder.setLength(0);
1309+
1310+
sqlBuilder.append("INSERT INTO \"").append(schema).append("\".\"").append(table).append("\" (\"").append(column).append("\"");
1311+
for (ColumnValuePair columnValuePair : idColumns) {
1312+
String name = columnValuePair.column();
1313+
for (Link link : idColumnLinks) {
1314+
if (link.columnInReferringTable().equals(columnValuePair.column())) {
1315+
name = link.columnInReferencedTable();
1316+
break;
1317+
}
13131318
}
1319+
sqlBuilder.append(", \"").append(name).append("\"");
13141320
}
1315-
sqlBuilder.append("\"").append(name).append("\" = ? AND ");
1321+
sqlBuilder.append(") VALUES (?");
1322+
for (ColumnValuePair columnValuePair : idColumns) {
1323+
sqlBuilder.append(", ?");
1324+
}
1325+
sqlBuilder.append(") ON CONFLICT (");
1326+
for (ColumnValuePair columnValuePair : idColumns) {
1327+
String name = columnValuePair.column();
1328+
for (Link link : idColumnLinks) {
1329+
if (link.columnInReferringTable().equals(columnValuePair.column())) {
1330+
name = link.columnInReferencedTable();
1331+
break;
1332+
}
1333+
}
1334+
sqlBuilder.append("\"").append(name).append("\", ");
1335+
}
1336+
sqlBuilder.setLength(sqlBuilder.length() - 2);
1337+
sqlBuilder.append(") DO UPDATE SET \"").append(column).append("\" = EXCLUDED.\"").append(column).append("\"");
1338+
pgSql = sqlBuilder.toString();
13161339
}
1317-
sqlBuilder.setLength(sqlBuilder.length() - 5);
1318-
@Language("SQL") String pgSql = sqlBuilder.toString();
13191340

13201341
List<Object> values = new ArrayList<>(1 + idColumns.getPairs().length);
13211342
values.add(serialize(value));

0 commit comments

Comments
 (0)