Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@ public Properties getXaProperties(@Nullable String logicalDbName) {
return properties;
}

public String getInitialSql(@Nullable String logicalDbName) {
String initialSql = getDatasourceProperties().initialSql().orElse("");
if (!StringUtil.isNullOrEmpty(logicalDbName) && getDatasourceProperties().datasources().containsKey(logicalDbName)) {
initialSql = getDatasourceProperties().datasources().get(logicalDbName).initialSql().orElse("");
}
return initialSql;
}

public boolean isXa(@Nullable String logicalDbName) {
if (!StringUtil.isNullOrEmpty(logicalDbName) && getDatasourceProperties().datasources().containsKey(logicalDbName)) {
return getDatasourceProperties().datasources().get(logicalDbName).xa();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.smallrye.config.WithParentName;

import java.util.Map;
import java.util.Optional;

@ConfigMapping(prefix = "quarkus.dbaas")
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
Expand Down Expand Up @@ -52,6 +53,12 @@ public interface DatasourceProperties {
@WithDefault("false")
boolean xa();

/**
* initial sql
*/
@WithName("datasource.initial-sql")
Optional<String> initialSql();

/**
* jdbc
*/
Expand Down Expand Up @@ -83,5 +90,11 @@ interface JDBCProperties {
@WithName("xa")
@WithDefault("false")
boolean xa();

/**
* initial sql
*/
@WithName("initial-sql")
Optional<String> initialSql();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ public AgroalConnectionFactoryConfigurationBuilder xaProperties(Properties xaPro
return this;
}

public AgroalConnectionFactoryConfigurationBuilder initialSql(String initialSql) {
configurationHolder.initialSql = initialSql;
return this;
}

public AgroalConnectionFactoryConfiguration build() {
return configurationHolder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ private AgroalDataSource createDatasource(String url, String username, String pa
SimplePassword securityPassword = new SimplePassword(password);
Properties jdbcProperties = dbaasPoolConfiguration.getJdbcProperties(logicalDbName);
Properties xaProperties = dbaasPoolConfiguration.getXaProperties(logicalDbName);
String initialSql = dbaasPoolConfiguration.getInitialSql(logicalDbName);
removeJdbcPrefixedProperties(connectionParams);
if (connectionParams != null && !connectionParams.isEmpty()) {
jdbcProperties.putAll(connectionParams);
Expand All @@ -246,6 +247,7 @@ private AgroalDataSource createDatasource(String url, String username, String pa
.jdbcUrl(url)
.jdbcProperties(jdbcProperties)
.xaProperties(xaProperties)
.initialSql(initialSql)
.principal(new NamePrincipal(username))
.credential(securityPassword)
.securityProvider(new DbaasSecurityProvider(securityPassword))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,66 @@
assertThrows(FlywayException.class, () -> dbaaSPostgresDbCreationService.getOrCreatePostgresDatabase(getServiceClassifier()));
}

@Test
public void mustUseGlobalInitialSql() {

Check warning on line 639 in core-quarkus-extensions/dbaas-client/dbaas-datasource/runtime/src/test/java/com/netcracker/cloud/core/quarkus/dbaas/datasource/service/impl/DbaaSPostgresDbCreationServiceImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this 'public' modifier.

See more on https://sonarcloud.io/project/issues?id=Netcracker_qubership-core-java-libs&issues=AZ7AbQ5bgXcvZhNFXcMT&open=AZ7AbQ5bgXcvZhNFXcMT&pullRequest=104
String globalInitialSql = "SET TIME ZONE 'UTC'";

DbaasDatasourcePoolConfiguration poolConfiguration = mock(DbaasDatasourcePoolConfiguration.class);
DatasourceProperties properties = mock(DatasourceProperties.class);
when(properties.debugDatasourceListeners()).thenReturn(false);
when(properties.globalJdbcProperties()).thenReturn(new HashMap<>());
when(poolConfiguration.getDatasourceProperties()).thenReturn(properties);
when(poolConfiguration.getJdbcProperties(any())).thenCallRealMethod();
when(poolConfiguration.getInitialSql(isNull())).thenReturn(globalInitialSql);

when(dbaaSClient.getOrCreateDatabase(any(), anyString(), anyMap(), any(DatabaseConfig.class)))
.thenReturn(getPostgresDatabase("test-url", "test-username", "test-password"));

DbaaSPostgresDbCreationServiceImpl service = dataSourceCreationServiceImplBuilder
.setDbaasPoolConfiguration(poolConfiguration)
.build();

PostgresDatabase result = service.getOrCreatePostgresDatabase(getTenantClassifier("test-tenant"));

AgroalConnectionFactoryConfiguration config = ((AgroalDataSource) result.getConnectionProperties().getDataSource())
.getConfiguration().connectionPoolConfiguration().connectionFactoryConfiguration();
assertEquals(globalInitialSql, config.initialSql());
}

@Test
public void mustUsePerDbInitialSqlOverridesGlobal() {

Check warning on line 665 in core-quarkus-extensions/dbaas-client/dbaas-datasource/runtime/src/test/java/com/netcracker/cloud/core/quarkus/dbaas/datasource/service/impl/DbaaSPostgresDbCreationServiceImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this 'public' modifier.

See more on https://sonarcloud.io/project/issues?id=Netcracker_qubership-core-java-libs&issues=AZ7AbQ5bgXcvZhNFXcMU&open=AZ7AbQ5bgXcvZhNFXcMU&pullRequest=104
String perDbInitialSql = "SET search_path TO my_schema";

DbaasDatasourcePoolConfiguration poolConfiguration = mock(DbaasDatasourcePoolConfiguration.class);
DatasourceProperties properties = mock(DatasourceProperties.class);
when(properties.debugDatasourceListeners()).thenReturn(false);
when(properties.globalJdbcProperties()).thenReturn(new HashMap<>());
when(poolConfiguration.getDatasourceProperties()).thenReturn(properties);
when(poolConfiguration.getJdbcProperties(any())).thenCallRealMethod();
when(poolConfiguration.getInitialSql(eq("configs"))).thenReturn(perDbInitialSql);

Check warning on line 674 in core-quarkus-extensions/dbaas-client/dbaas-datasource/runtime/src/test/java/com/netcracker/cloud/core/quarkus/dbaas/datasource/service/impl/DbaaSPostgresDbCreationServiceImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless "eq(...)" invocation; pass the values directly.

See more on https://sonarcloud.io/project/issues?id=Netcracker_qubership-core-java-libs&issues=AZ7AbQ5bgXcvZhNFXcMV&open=AZ7AbQ5bgXcvZhNFXcMV&pullRequest=104

AgroalConnectionPoolConfigurationFactory factory = mock(AgroalConnectionPoolConfigurationFactory.class);
doReturn(connectionPoolConfiguration).when(factory).createAgroalConnectionPoolConfiguration(any(), any());

DbaasDbClassifier classifier = getTenantClassifierWithLogicalDb("test-tenant");
PostgresDatabase postgresDatabase = getPostgresDatabase("test-url", "test-username", "test-password");
postgresDatabase.setClassifier(new TreeMap<>(classifier.asMap()));
when(dbaaSClient.getOrCreateDatabase(any(), anyString(), anyMap(), any(DatabaseConfig.class)))
.thenReturn(postgresDatabase);

DbaaSPostgresDbCreationServiceImpl service = dataSourceCreationServiceImplBuilder
.setDbaasPoolConfiguration(poolConfiguration)
.setConnectionPoolConfigurationFactory(factory)
.build();

PostgresDatabase result = service.getOrCreatePostgresDatabase(classifier);

AgroalConnectionFactoryConfiguration config = ((AgroalDataSource) result.getConnectionProperties().getDataSource())
.getConfiguration().connectionPoolConfiguration().connectionFactoryConfiguration();
assertEquals(perDbInitialSql, config.initialSql());
verify(poolConfiguration, never()).getInitialSql(isNull());
}

private DbaasDbClassifier getTenantClassifier(String tenantId) {
Map<String, Object> params = new HashMap<>();
params.put("microserviceName", "test-service");
Expand Down
Loading