diff --git a/docker_db.sh b/docker_db.sh index bf8d8b088076..55bd436153d8 100755 --- a/docker_db.sh +++ b/docker_db.sh @@ -1370,6 +1370,38 @@ informix_12_10() { fi } +spanner() { + spanner_emulator +} + +spanner_emulator() { + + $CONTAINER_CLI rm -f spanner || true + # Run emulator (gRPC on 9010, REST on 9020) + $CONTAINER_CLI run --name spanner -d \ + -p 9010:9010 \ + -p 9020:9020 \ + ${SPANNER_EMULATOR:-gcr.io/cloud-spanner-emulator/emulator:1.5.45} + + # Wait for emulator to be ready (check logs for known messages) + n=0 + until [ "$n" -ge 20 ]; do + OUTPUT="$($CONTAINER_CLI logs spanner 2>&1 || true)" + if [[ "$OUTPUT" == *"gRPC server listening"* ]] || [[ "$OUTPUT" == *"Cloud Spanner emulator running"* ]]; then + echo "Cloud Spanner emulator started." + break + fi + echo "Waiting for Cloud Spanner emulator to start..." + n=$((n+1)) + sleep 3 + done + + if [ "$n" -ge 20 ]; then + echo "Cloud Spanner emulator failed to start after 1 minute" + exit 1 + fi +} + if [ -z ${1} ]; then echo "No db name provided" echo "Provide one of:" @@ -1417,6 +1449,8 @@ if [ -z ${1} ]; then echo -e "\informix" echo -e "\informix_14_10" echo -e "\informix_12_10" + echo -e "\tspanner" + echo -e "\tspanner_emulator" else ${1} fi diff --git a/local-build-plugins/src/main/groovy/local.databases.gradle b/local-build-plugins/src/main/groovy/local.databases.gradle index ab8d6578dda6..1009a4b9e940 100644 --- a/local-build-plugins/src/main/groovy/local.databases.gradle +++ b/local-build-plugins/src/main/groovy/local.databases.gradle @@ -406,5 +406,15 @@ ext { 'jdbc.url' : 'jdbc:Altibase://' + dbHost + ':20300/mydb?force_clob_bind=true', 'jdbc.datasource' : 'Altibase.jdbc.driver.AltibaseDriver' ], + spanner : [ + 'db.dialect' : 'org.hibernate.dialect.SpannerDialect', + 'jdbc.driver' : 'com.google.cloud.spanner.jdbc.JdbcDriver', + 'jdbc.user' : '', // Not used by Spanner + 'jdbc.pass' : '', // Not used by Spanner + 'connection.init_sql' : '', + // autoConfigEmulator=true creates the necessary instances and DBs if they don't exist already + 'jdbc.url' : 'jdbc:cloudspanner:/projects/orm-test-project/instances/orm-test-instance/databases/orm-test-db?autoConfigEmulator=true;lenient=true', + 'jdbc.datasource' : 'com.google.cloud.spanner.jdbc.JdbcDriver' + ], ] } diff --git a/local-build-plugins/src/main/groovy/local.java-module.gradle b/local-build-plugins/src/main/groovy/local.java-module.gradle index e8ad687c6206..187329f2fb34 100644 --- a/local-build-plugins/src/main/groovy/local.java-module.gradle +++ b/local-build-plugins/src/main/groovy/local.java-module.gradle @@ -77,6 +77,7 @@ dependencies { testRuntimeOnly jdbcLibs.gaussdb testRuntimeOnly jdbcLibs.sybase testRuntimeOnly jdbcLibs.teradata + testRuntimeOnly jdbcLibs.spanner testRuntimeOnly rootProject.fileTree(dir: 'drivers', include: '*.jar') // Since both the DB2 driver and HANA have a package "net.jpountz" we have to add dependencies conditionally diff --git a/settings.gradle b/settings.gradle index 03a875daf7bb..0b943ef76bb0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -239,6 +239,7 @@ dependencyResolutionManagement { def teradataVersion = version "teradata", "20.00.00.51" def tidbVersion = version "tidb", mysqlVersion def altibaseVersion = version "altibase", "7.3.0.1.1" + def spannerVersion = version "spanner", "2.34.0" library( "h2", "com.h2database", "h2" ).versionRef( h2Version ) library( "h2gis", "org.orbisgis", "h2gis" ).versionRef( h2gisVersion ) @@ -264,6 +265,7 @@ dependencyResolutionManagement { library( "informix", "com.ibm.informix", "jdbc" ).versionRef( informixVersion ) library( "firebird", "org.firebirdsql.jdbc", "jaybird" ).versionRef( firebirdVersion ) library( "altibase", "com.altibase", "altibase-jdbc" ).versionRef( altibaseVersion ) + library( "spanner", "com.google.cloud", "google-cloud-spanner-jdbc" ).versionRef( spannerVersion ) } mavenLibs { def mavenCoreVersion = version "mavenCore", "3.9.9"