Skip to content

Commit d463ef7

Browse files
committed
feat(jdbc): add setGetGeneratedKeys on SQLiteDataSource and SQLiteConfig for proper cascading
Refs: #1135
1 parent 3b73529 commit d463ef7

File tree

5 files changed

+55
-1
lines changed

5 files changed

+55
-1
lines changed

USAGE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ SQLite has limited support to retrieve generated keys, using [last_insert_rowid]
147147

148148
By default the driver will eagerly retrieve the generated keys after each statement, which may impact performances.
149149

150-
You can disable the retrieval of generated keys in 2 ways:
150+
You can disable the retrieval of generated keys in 3 ways:
151+
- via `SQLiteDataSource#setGetGeneratedKeys(false)`
151152
- via `SQLiteConnectionConfig#setGetGeneratedKeys(false)`:
152153
- using the pragma `jdbc.get_generated_keys`:
153154
```java

src/main/java/org/sqlite/SQLiteConfig.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,4 +1189,12 @@ public void setBusyTimeout(int milliseconds) {
11891189
public int getBusyTimeout() {
11901190
return busyTimeout;
11911191
}
1192+
1193+
public boolean isGetGeneratedKeys() {
1194+
return this.defaultConnectionConfig.isGetGeneratedKeys();
1195+
}
1196+
1197+
public void setGetGeneratedKeys(boolean generatedKeys) {
1198+
this.defaultConnectionConfig.setGetGeneratedKeys(generatedKeys);
1199+
}
11921200
}

src/main/java/org/sqlite/SQLiteDataSource.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,15 @@ public void setTransactionMode(String transactionMode) {
437437
config.setTransactionMode(transactionMode);
438438
}
439439

440+
/**
441+
* Configure where generated keys will be retrieved for this database.
442+
*
443+
* @param generatedKeys true to retrieve generated keys
444+
*/
445+
public void setGetGeneratedKeys(boolean generatedKeys) {
446+
config.setGetGeneratedKeys(generatedKeys);
447+
}
448+
440449
/**
441450
* Sets the value of the user-version. It is a big-endian 32-bit signed integer stored in the
442451
* database header at offset 60.

src/test/java/org/sqlite/SQLiteConfigTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public void toProperties() {
1818
config.setDateStringFormat("yyyy/mm/dd");
1919
config.setDatePrecision("seconds");
2020
config.setDateClass("real");
21+
config.setGetGeneratedKeys(false);
2122

2223
Properties properties = config.toProperties();
2324

@@ -27,6 +28,8 @@ public void toProperties() {
2728
.isEqualTo(SQLiteConfig.DatePrecision.SECONDS.name());
2829
assertThat(properties.getProperty(SQLiteConfig.Pragma.DATE_CLASS.getPragmaName()))
2930
.isEqualTo(SQLiteConfig.DateClass.REAL.name());
31+
assertThat(properties.getProperty(Pragma.JDBC_GET_GENERATED_KEYS.getPragmaName()))
32+
.isEqualTo("false");
3033
}
3134

3235
@Test

src/test/java/org/sqlite/SQLiteDataSourceTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.nio.ByteOrder;
1515
import java.sql.Connection;
1616
import java.sql.ResultSet;
17+
import java.sql.SQLException;
1718
import java.sql.Statement;
1819
import org.junit.jupiter.api.AfterEach;
1920
import org.junit.jupiter.api.BeforeEach;
@@ -92,4 +93,36 @@ public void setBusyTimeout() {
9293
.isEqualTo("1234");
9394
assertThat(ds.getConfig().getBusyTimeout()).isEqualTo(1234);
9495
}
96+
97+
@Test
98+
public void setGetGeneratedKeys() throws SQLException {
99+
final SQLiteDataSource ds = new SQLiteDataSource();
100+
ds.setGetGeneratedKeys(false);
101+
assertThat(
102+
ds.getConfig()
103+
.toProperties()
104+
.getProperty(
105+
SQLiteConfig.Pragma.JDBC_GET_GENERATED_KEYS.pragmaName))
106+
.isEqualTo("false");
107+
assertThat(ds.getConfig().isGetGeneratedKeys()).isEqualTo(false);
108+
assertThat(
109+
((SQLiteConnection) ds.getConnection())
110+
.getConnectionConfig()
111+
.isGetGeneratedKeys())
112+
.isFalse();
113+
114+
ds.setGetGeneratedKeys(true);
115+
assertThat(
116+
ds.getConfig()
117+
.toProperties()
118+
.getProperty(
119+
SQLiteConfig.Pragma.JDBC_GET_GENERATED_KEYS.pragmaName))
120+
.isEqualTo("true");
121+
assertThat(ds.getConfig().isGetGeneratedKeys()).isEqualTo(true);
122+
assertThat(
123+
((SQLiteConnection) ds.getConnection())
124+
.getConnectionConfig()
125+
.isGetGeneratedKeys())
126+
.isTrue();
127+
}
95128
}

0 commit comments

Comments
 (0)