Skip to content

Commit 74b6d65

Browse files
committed
Use pool schema/catalog for original values, lazy initialise originalSchema if required
1 parent 5e21cbf commit 74b6d65

File tree

8 files changed

+56
-6
lines changed

8 files changed

+56
-6
lines changed

ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,11 @@ default DataSourceBuilder schema(String schema) {
249249
return setSchema(schema);
250250
}
251251

252+
/**
253+
* Set the default database catalog to use.
254+
*/
255+
DataSourceBuilder catalog(String catalog);
256+
252257
/**
253258
* @deprecated - migrate to {@link #driver(String)}.
254259
*/
@@ -812,6 +817,11 @@ interface Settings extends DataSourceBuilder {
812817
*/
813818
String getSchema();
814819

820+
/**
821+
* Return the database catalog.
822+
*/
823+
String catalog();
824+
815825
/**
816826
* Return the driver instance to use.
817827
*/

ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class DataSourceConfig implements DataSourceBuilder.Settings {
3636
private String password;
3737
private String password2;
3838
private String schema;
39+
private String catalog;
3940
private Driver driver;
4041
private Class<? extends Driver> driverClass;
4142
private String driverClassName;
@@ -103,6 +104,7 @@ public DataSourceConfig copy() {
103104
copy.password = password;
104105
copy.password2 = password2;
105106
copy.schema = schema;
107+
copy.catalog = catalog;
106108
copy.platform = platform;
107109
copy.ownerUsername = ownerUsername;
108110
copy.ownerPassword = ownerPassword;
@@ -171,6 +173,9 @@ public DataSourceConfig setDefaults(DataSourceBuilder builder) {
171173
if (schema == null) {
172174
schema = other.getSchema();
173175
}
176+
if (catalog == null) {
177+
catalog = other.catalog();
178+
}
174179
if (minConnections == 2 && other.getMinConnections() < 2) {
175180
minConnections = other.getMinConnections();
176181
}
@@ -307,6 +312,17 @@ public DataSourceConfig setSchema(String schema) {
307312
return this;
308313
}
309314

315+
@Override
316+
public String catalog() {
317+
return catalog;
318+
}
319+
320+
@Override
321+
public DataSourceConfig catalog(String catalog) {
322+
this.catalog = catalog;
323+
return this;
324+
}
325+
310326
@Override
311327
public String getDriver() {
312328
return driverClassName;
@@ -740,6 +756,7 @@ private void loadSettings(ConfigPropertiesHelper properties) {
740756
password = properties.get("password", password);
741757
password2 = properties.get("password2", password2);
742758
schema = properties.get("schema", schema);
759+
catalog = properties.get("catalog", catalog);
743760
platform = properties.get("platform", platform);
744761
ownerUsername = properties.get("ownerUsername", ownerUsername);
745762
ownerPassword = properties.get("ownerPassword", ownerPassword);

ebean-datasource-api/src/test/java/io/ebean/datasource/DataSourceConfigTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public void copy() {
7777
source.setUrl("url");
7878
source.setReadOnlyUrl("readOnlyUrl");
7979
source.setSchema("sch");
80+
source.catalog("cat");
8081

8182
Map<String,String> customSource = new LinkedHashMap<>();
8283
customSource.put("a","a");
@@ -90,6 +91,7 @@ public void copy() {
9091
assertEquals("url", copy.getUrl());
9192
assertEquals("readOnlyUrl", copy.getReadOnlyUrl());
9293
assertEquals("sch", copy.getSchema());
94+
assertEquals("cat", copy.catalog());
9395
assertEquals(42, copy.getMinConnections());
9496
assertEquals(45, copy.getMaxConnections());
9597

@@ -113,6 +115,7 @@ public void defaults() {
113115
assertThat(readOnly.getUsername()).isEqualTo(config.getUsername());
114116
assertThat(readOnly.getPassword()).isEqualTo(config.getPassword());
115117
assertThat(readOnly.getSchema()).isEqualTo(config.getSchema());
118+
assertThat(readOnly.catalog()).isEqualTo(config.catalog());
116119
assertThat(readOnly.getMinConnections()).isEqualTo(config.getMinConnections());
117120
assertThat(readOnly.getCustomProperties()).containsKeys("useSSL");
118121
}
@@ -258,6 +261,7 @@ private static void assertConfigValues(DataSourceBuilder.Settings config) {
258261
assertThat(config.getUsername()).isEqualTo("myusername");
259262
assertThat(config.getPassword()).isEqualTo("mypassword");
260263
assertThat(config.getSchema()).isEqualTo("myschema");
264+
assertThat(config.catalog()).isEqualTo("mycat");
261265
assertThat(config.getApplicationName()).isEqualTo("myApp");
262266
Properties clientInfo = config.getClientInfo();
263267
assertThat(clientInfo.getProperty("ClientUser")).isEqualTo("ciu");

ebean-datasource-api/src/test/resources/example.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
datasource.foo.username=myusername
22
datasource.foo.password=mypassword
33
datasource.foo.schema=myschema
4+
datasource.foo.catalog=mycat
45
datasource.foo.url=myUrl
56
datasource.foo.readOnlyUrl=myReadOnlyUrl
67
datasource.foo.applicationName=myApp

ebean-datasource-api/src/test/resources/example2.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
bar.username=myusername
22
bar.password=mypassword
33
bar.schema=myschema
4+
bar.catalog=mycat
45
bar.url=myUrl
56
bar.readOnlyUrl=myReadOnlyUrl
67
bar.applicationName=myApp

ebean-datasource-api/src/test/resources/example3.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
username=myusername
22
password=mypassword
33
schema=myschema
4+
catalog=mycat
45
url=myUrl
56
readOnlyUrl=myReadOnlyUrl
67
applicationName=myApp

ebean-datasource/src/main/java/io/ebean/datasource/pool/ConnectionPool.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ final class ConnectionPool implements DataSourcePool {
4242
private final List<String> initSql;
4343
private final String user;
4444
private final String schema;
45+
private final String catalog;
4546
private final String heartbeatSql;
4647
private final int heartbeatFreqSecs;
4748
private final int heartbeatTimeoutSeconds;
@@ -119,6 +120,7 @@ final class ConnectionPool implements DataSourcePool {
119120
this.clientInfo = params.getClientInfo();
120121
this.queue = new PooledConnectionQueue(this);
121122
this.schema = params.getSchema();
123+
this.catalog = params.catalog();
122124
this.user = params.getUsername();
123125
this.shutdownOnJvmExit = params.isShutdownOnJvmExit();
124126
this.source = DriverDataSource.of(name, params);
@@ -251,6 +253,14 @@ public int size() {
251253
return size.get();
252254
}
253255

256+
String schema() {
257+
return schema;
258+
}
259+
260+
String catalog() {
261+
return catalog;
262+
}
263+
254264
/**
255265
* Increment the current pool size.
256266
*/

ebean-datasource/src/main/java/io/ebean/datasource/pool/PooledConnection.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ final class PooledConnection extends ConnectionDelegator {
8686
private boolean resetCatalog;
8787
private String currentSchema;
8888
private String currentCatalog;
89-
private final String originalSchema;
90-
private final String originalCatalog;
89+
private String originalSchema;
90+
private String originalCatalog;
9191

9292
private long startUseTime;
9393
private long lastUseTime;
@@ -118,12 +118,12 @@ final class PooledConnection extends ConnectionDelegator {
118118
this.pool = pool;
119119
this.connection = connection;
120120
this.name = pool.name() + uniqueId;
121+
this.originalSchema = pool.schema();
122+
this.originalCatalog = pool.catalog();
121123
this.pstmtCache = new PstmtCache(pool.pstmtCacheSize());
122124
this.maxStackTrace = pool.maxStackTraceSize();
123125
this.creationTime = System.currentTimeMillis();
124126
this.lastUseTime = creationTime;
125-
this.currentSchema = this.originalSchema = connection.getSchema();
126-
this.currentCatalog = this.originalCatalog = connection.getCatalog();
127127
pool.inc();
128128
}
129129

@@ -139,8 +139,6 @@ final class PooledConnection extends ConnectionDelegator {
139139
this.maxStackTrace = 0;
140140
this.creationTime = System.currentTimeMillis();
141141
this.lastUseTime = creationTime;
142-
this.currentSchema = this.originalSchema = "DEFAULT";
143-
this.currentCatalog = this.originalCatalog = "DEFAULT";
144142
}
145143

146144
/**
@@ -700,6 +698,10 @@ public void setSchema(String schema) throws SQLException {
700698
if (status == STATUS_IDLE) {
701699
throw new SQLException(IDLE_CONNECTION_ACCESSED_ERROR + "setSchema()");
702700
}
701+
if (originalSchema == null) {
702+
// lazily initialise the originalSchema
703+
originalSchema = getSchema();
704+
}
703705
currentSchema = schema;
704706
resetSchema = true;
705707
connection.setSchema(schema);
@@ -710,6 +712,10 @@ public void setCatalog(String catalog) throws SQLException {
710712
if (status == STATUS_IDLE) {
711713
throw new SQLException(IDLE_CONNECTION_ACCESSED_ERROR + "setCatalog()");
712714
}
715+
if (originalCatalog == null) {
716+
// lazily initialise the originalCatalog
717+
originalCatalog = getCatalog();
718+
}
713719
currentCatalog = catalog;
714720
resetCatalog = true;
715721
connection.setCatalog(catalog);

0 commit comments

Comments
 (0)