Skip to content

Commit f34caa0

Browse files
committed
use INSERT OR IGNORE in SqliteStorageSupplier
support old sqlite versions
1 parent ccd3b36 commit f34caa0

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

storage/simple/src/main/java/me/hsgamer/topper/storage/simple/supplier/NewSqliteStorageSupplier.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,12 @@ protected List<String> toSaveStatement(String name, String[] keyColumns, String[
5656
statement.append(";");
5757
return Collections.singletonList(statement.toString());
5858
}
59+
60+
@Override
61+
protected List<Object[]> toSaveValues(Object[] keys, Object[] values) {
62+
Object[] queryValues = new Object[keys.length + values.length];
63+
System.arraycopy(keys, 0, queryValues, 0, keys.length);
64+
System.arraycopy(values, 0, queryValues, keys.length, values.length);
65+
return Collections.singletonList(queryValues);
66+
}
5967
}

storage/simple/src/main/java/me/hsgamer/topper/storage/simple/supplier/SqliteStorageSupplier.java

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import java.io.File;
99
import java.sql.Connection;
10-
import java.util.Collections;
10+
import java.util.Arrays;
1111
import java.util.List;
1212
import java.util.concurrent.atomic.AtomicReference;
1313
import java.util.function.Consumer;
@@ -45,34 +45,68 @@ protected void flushConnection(Connection connection) {
4545

4646
@Override
4747
protected List<String> toSaveStatement(String name, String[] keyColumns, String[] valueColumns) {
48-
StringBuilder statement = new StringBuilder("INSERT OR REPLACE INTO `")
48+
StringBuilder insertStatement = new StringBuilder("INSERT OR IGNORE INTO `")
4949
.append(name)
5050
.append("` (");
5151
for (int i = 0; i < keyColumns.length + valueColumns.length; i++) {
52-
statement.append("`")
52+
insertStatement.append("`")
5353
.append(i < keyColumns.length ? keyColumns[i] : valueColumns[i - keyColumns.length])
5454
.append("`");
5555
if (i != keyColumns.length + valueColumns.length - 1) {
56-
statement.append(", ");
56+
insertStatement.append(", ");
5757
}
5858
}
59-
statement.append(") VALUES (");
59+
insertStatement.append(") VALUES (");
6060
for (int i = 0; i < keyColumns.length + valueColumns.length; i++) {
61-
statement.append("?");
61+
insertStatement.append("?");
6262
if (i != keyColumns.length + valueColumns.length - 1) {
63-
statement.append(", ");
63+
insertStatement.append(", ");
6464
}
6565
}
66-
statement.append(");");
67-
return Collections.singletonList(statement.toString());
66+
insertStatement.append(");");
67+
68+
StringBuilder updateStatement = new StringBuilder("UPDATE `")
69+
.append(name)
70+
.append("` SET ");
71+
for (int i = 0; i < valueColumns.length; i++) {
72+
updateStatement.append("`")
73+
.append(valueColumns[i])
74+
.append("` = ?");
75+
if (i != valueColumns.length - 1) {
76+
updateStatement.append(", ");
77+
}
78+
}
79+
updateStatement.append(" WHERE ");
80+
for (int i = 0; i < keyColumns.length; i++) {
81+
updateStatement.append("`")
82+
.append(keyColumns[i])
83+
.append("` = ?");
84+
if (i != keyColumns.length - 1) {
85+
updateStatement.append(" AND ");
86+
}
87+
}
88+
updateStatement.append(";");
89+
90+
return Arrays.asList(
91+
insertStatement.toString(),
92+
updateStatement.toString()
93+
);
6894
}
6995

7096
@Override
7197
protected List<Object[]> toSaveValues(Object[] keys, Object[] values) {
72-
Object[] queryValues = new Object[keys.length + values.length];
73-
System.arraycopy(keys, 0, queryValues, 0, keys.length);
74-
System.arraycopy(values, 0, queryValues, keys.length, values.length);
75-
return Collections.singletonList(queryValues);
98+
Object[] insertValues = new Object[keys.length + values.length];
99+
System.arraycopy(keys, 0, insertValues, 0, keys.length);
100+
System.arraycopy(values, 0, insertValues, keys.length, values.length);
101+
102+
Object[] updateValues = new Object[values.length + keys.length];
103+
System.arraycopy(values, 0, updateValues, 0, values.length);
104+
System.arraycopy(keys, 0, updateValues, values.length, keys.length);
105+
106+
return Arrays.asList(
107+
insertValues,
108+
updateValues
109+
);
76110
}
77111

78112
@Override

0 commit comments

Comments
 (0)