From e87710e6fb7209b5ea62099367a95a0ba8377645 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Thu, 4 Sep 2025 10:34:16 +0900 Subject: [PATCH 01/13] Support TiDB --- .github/workflows/ci.yaml | 222 ++++++++++++++++++ .../jdbc/JdbcAdminImportTestUtils.java | 16 ++ .../com/scalar/db/storage/jdbc/JdbcEnv.java | 6 + 3 files changed, 244 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index db0c6b3b74..0b7133aec8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1741,6 +1741,228 @@ jobs: name: db2_12.1_integration_test_reports_${{ matrix.mode.label }} path: core/build/reports/tests/integrationTestJdbc + integration-test-for-tidb-v6-5: + name: TiDB v6.5 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Install TiUP + run: | + curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh + echo "$HOME/.tiup/bin" >> $GITHUB_PATH + + - name: Start TiDB with TiUP Playground + timeout-minutes: 3 + run: | + tiup playground v6.5 --db 1 --pd 1 --kv 1 --tiflash 0 --without-monitor > tiup.log 2>&1 & + # Check if TiDB is running + while true; do + if mysql -h 127.0.0.1 -P 4000 -u root -e "SELECT 1" > /dev/null 2>&1; then + echo "TiDB is ready" + break + fi + echo "Waiting for TiDB to be ready..." + sleep 5 + done + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: tidb_v6_5_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-tidb-v7-5: + name: TiDB v7.5 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Install TiUP + run: | + curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh + echo "$HOME/.tiup/bin" >> $GITHUB_PATH + + - name: Start TiDB with TiUP Playground + timeout-minutes: 3 + run: | + tiup playground v7.5 --db 1 --pd 1 --kv 1 --tiflash 0 --without-monitor > tiup.log 2>&1 & + # Check if TiDB is running + while true; do + if mysql -h 127.0.0.1 -P 4000 -u root -e "SELECT 1" > /dev/null 2>&1; then + echo "TiDB is ready" + break + fi + echo "Waiting for TiDB to be ready..." + sleep 5 + done + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: tidb_v7_5_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-tidb-v8-5: + name: TiDB v8.5 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Install TiUP + run: | + curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh + echo "$HOME/.tiup/bin" >> $GITHUB_PATH + + - name: Start TiDB with TiUP Playground + timeout-minutes: 3 + run: | + tiup playground v8.5 --db 1 --pd 1 --kv 1 --tiflash 0 --without-monitor > tiup.log 2>&1 & + # Check if TiDB is running + while true; do + if mysql -h 127.0.0.1 -P 4000 -u root -e "SELECT 1" > /dev/null 2>&1; then + echo "TiDB is ready" + break + fi + echo "Waiting for TiDB to be ready..." + sleep 5 + done + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: tidb_v8_5_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + integration-test-for-multi-storage: name: Multi-storage integration test (${{ matrix.mode.label }}) runs-on: ubuntu-latest diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java index 333185686a..c9d03c988b 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java @@ -603,6 +603,13 @@ private List createExistingMysqlDatabaseWithAllDataTypes(String namesp UNSUPPORTED_DATA_TYPES_MYSQL.stream() .filter(type -> !type.equalsIgnoreCase("JSON")) .collect(Collectors.toList()))); + } else if (isTiDB()) { + data.addAll( + prepareCreateNonImportableTableSql( + namespace, + UNSUPPORTED_DATA_TYPES_MYSQL.stream() + .filter(type -> !type.equalsIgnoreCase("GEOMETRY")) + .collect(Collectors.toList()))); } else { data.addAll(prepareCreateNonImportableTableSql(namespace, UNSUPPORTED_DATA_TYPES_MYSQL)); } @@ -763,6 +770,15 @@ private boolean isMariaDB() { } } + private boolean isTiDB() { + try (Connection connection = dataSource.getConnection()) { + String version = connection.getMetaData().getDatabaseProductVersion(); + return version.contains("TiDB"); + } catch (SQLException e) { + throw new RuntimeException("Get database product version failed"); + } + } + private int getMajorVersion() { try (Connection connection = dataSource.getConnection()) { return connection.getMetaData().getDatabaseMajorVersion(); diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java index 3c7ab0eeed..fdc8965944 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java @@ -2,6 +2,7 @@ import com.scalar.db.config.DatabaseConfig; import java.util.Properties; +import org.assertj.core.util.Strings; public final class JdbcEnv { private static final String PROP_JDBC_URL = "scalardb.jdbc.url"; @@ -9,6 +10,7 @@ public final class JdbcEnv { private static final String PROP_JDBC_PASSWORD = "scalardb.jdbc.password"; private static final String PROP_JDBC_NORMAL_USERNAME = "scalardb.jdbc.normal_username"; private static final String PROP_JDBC_NORMAL_PASSWORD = "scalardb.jdbc.normal_password"; + private static final String PROP_JDBC_ISOLATION_LEVEL = "scalardb.jdbc.isolation_level"; private static final String DEFAULT_JDBC_URL = "jdbc:postgresql://localhost:5432/"; private static final String DEFAULT_JDBC_USERNAME = "postgres"; @@ -22,6 +24,7 @@ public static Properties getProperties(String testName) { String jdbcUrl = System.getProperty(PROP_JDBC_URL, DEFAULT_JDBC_URL); String username = System.getProperty(PROP_JDBC_USERNAME, DEFAULT_JDBC_USERNAME); String password = System.getProperty(PROP_JDBC_PASSWORD, DEFAULT_JDBC_PASSWORD); + String isolationLevel = System.getProperty(PROP_JDBC_ISOLATION_LEVEL); Properties properties = new Properties(); properties.setProperty(DatabaseConfig.CONTACT_POINTS, jdbcUrl); @@ -31,6 +34,9 @@ public static Properties getProperties(String testName) { properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN, "true"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_FILTERING, "true"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_ORDERING, "true"); + if (!Strings.isNullOrEmpty(isolationLevel)) { + properties.setProperty(JdbcConfig.ISOLATION_LEVEL, isolationLevel); + } // Add testName as a metadata schema suffix properties.setProperty( From d002937697b4b599ef0ad9f1bfa186eeebf6455b Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Tue, 30 Sep 2025 18:04:34 +0900 Subject: [PATCH 02/13] Try with read_commited transaction isolation --- .github/workflows/ci.yaml | 3540 ++++++++++++++++++------------------- 1 file changed, 1770 insertions(+), 1770 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0b7133aec8..9440cbef51 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -44,1702 +44,1702 @@ env: INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT: '"-Dscalardb.consensus_commit.coordinator.group_commit.enabled=true" "-Dscalardb.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis=15000" --tests "**.ConsensusCommit**"' jobs: - check: - name: Gradle check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'check' task - run: ./gradlew check buildSrc:check - - - name: Save Gradle test reports - if: always() - run: | - mkdir -p /tmp/gradle_test_reports/core - mkdir -p /tmp/gradle_test_reports/schema-loader - mkdir -p /tmp/gradle_test_reports/data-loader/core - mkdir -p /tmp/gradle_test_reports/data-loader/cli - cp -a core/build/reports/tests/test /tmp/gradle_test_reports/core/ - cp -a schema-loader/build/reports/tests/test /tmp/gradle_test_reports/schema-loader/ - cp -a data-loader/core/build/reports/tests/test /tmp/gradle_test_reports/data-loader/core/ - cp -a data-loader/cli/build/reports/tests/test /tmp/gradle_test_reports/data-loader/cli/ - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: gradle_check_reports - path: /tmp/gradle_test_reports - - - name: Save SpotBugs reports - if: always() - run: | - mkdir -p /tmp/gradle_spotbugs_reports/core - mkdir -p /tmp/gradle_spotbugs_reports/schema-loader - mkdir -p /tmp/gradle_spotbugs_reports/integration-test - mkdir -p /tmp/gradle_spotbugs_reports/data-loader/core - mkdir -p /tmp/gradle_spotbugs_reports/data-loader/cli - cp -a core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/core/ - cp -a schema-loader/build/reports/spotbugs /tmp/gradle_spotbugs_reports/schema-loader/ - cp -a integration-test/build/reports/spotbugs /tmp/gradle_spotbugs_reports/integration-test/ - cp -a data-loader/core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/core/ - cp -a data-loader/cli/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/cli/ - - - name: Upload Spotbugs reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: gradle_spotbugs_reports - path: /tmp/gradle_spotbugs_reports - - dockerfile-lint: - name: Lint dockerfiles - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Dockerfile Lint for ScalarDB Schema Loader - run: ./gradlew schema-loader:dockerfileLint - - - name: Dockerfile Lint for ScalarDB Data Loader CLI - run: ./gradlew data-loader:cli:dockerfileLint - - integration-test-for-cassandra-3-0: - name: Cassandra 3.0 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - cassandra: - image: cassandra:3.0 - env: - MAX_HEAP_SIZE: 2048m - HEAP_NEWSIZE: 512m - ports: - - 9042:9042 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestCassandra' task - run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: cassandra_3.0_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestCassandra - - integration-test-for-cassandra-3-11: - name: Cassandra 3.11 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - cassandra: - image: cassandra:3.11 - env: - MAX_HEAP_SIZE: 2048m - HEAP_NEWSIZE: 512m - ports: - - 9042:9042 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestCassandra' task - run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: cassandra_3.11_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestCassandra - - integration-test-for-cosmos: - name: Cosmos DB integration test (${{ matrix.mode.label }}) - runs-on: windows-latest - env: - # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. - # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} - SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" - SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.CR_PAT }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} - run: | - $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") - docker cp "${container_id}:oracle-jdk.exe" . - docker rm "$container_id" - Write-Host "Install Oracle JDK" - Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" - Write-Host "Oracle JDK installation successful" - if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { - $jdk_root_dir = "jdk-1.8" - } else { - $jdk_root_dir = "jdk-11" - } - echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} - - - name: Start Azure Cosmos DB emulator - run: | - Write-Host "Launching Cosmos DB Emulator" - Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator" - # Set startup timeout to 10min (600s), the default is 4min - Start-CosmosDbEmulator -Consistency Strong -Timeout 600 - - - name: Install TLS/SSL certificate - run: | - $cert = Get-ChildItem Cert:\LocalMachine\My | where{$_.FriendlyName -eq 'DocumentDbEmulatorCertificate'} - $params = @{ - Cert = $cert - Type = "CERT" - FilePath = "$home/tmp-cert.cer" - NoClobber = $true - } - Export-Certificate @params - certutil -encode $home/tmp-cert.cer $home/cosmosdbcert.cer - Remove-Item $home/tmp-cert.cer - # Setting the keystore option differs between Java 8 and Java 11+ - if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { - $keystore = "-keystore", "${env:JAVA_HOME}/jre/lib/security/cacerts" - } else { - $keystore = "-cacerts" - } - & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -importcert -noprompt -alias cosmos_emulator -file $home/cosmosdbcert.cer - & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -list -alias cosmos_emulator - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestCosmos' task - run: ./gradlew.bat integrationTestCosmos "-Dscalardb.cosmos.uri=https://localhost:8081/" "-Dscalardb.cosmos.password=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==" "-Dfile.encoding=UTF-8" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: cosmos_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestCosmos - - integration-test-for-dynamo: - name: DynamoDB integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - dynamodb: - image: amazon/dynamodb-local:1.17.0 - ports: - - 8000:8000 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestDynamo' task - run: ./gradlew integrationTestDynamo ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: dynamo_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestDynamo - - integration-test-for-jdbc-mysql-5-7: - name: MySQL 5.7 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run MySQL 5.7 - run: | - docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: mysql_5.7_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-mysql-8-0: - name: MySQL 8.0 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run MySQL 8.0 - run: | - docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: mysql_8.0_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-mysql-8-4: - name: MySQL 8.4 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run MySQL 8.4 - run: | - docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: mysql_8.4_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-postgresql-13: - name: PostgreSQL 13 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:13-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: postgresql_13_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-postgresql-14: - name: PostgreSQL 14 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:14-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: postgresql_14_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-postgresql-15: - name: PostgreSQL 15 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:15-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: postgresql_15_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-postgresql-16: - name: PostgreSQL 16 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:16-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: postgresql_16_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-postgresql-17: - name: PostgreSQL 17 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:17-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: postgresql_17_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-oracle-19: - name: Oracle 19 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - oracle: - image: ghcr.io/scalar-labs/oracle/db-prebuilt:19 - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.CR_PAT }} - ports: - - 1521:1521 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: oracle_19_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-oracle-21: - name: Oracle 21 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - oracle: - image: ghcr.io/scalar-labs/oracle/db-prebuilt:21 - credentials: - username: ${{ github.repository_owner }} - password: ${{ secrets.CR_PAT }} - env: - ORACLE_PWD: Oracle - ports: - - 1521:1521 - options: >- - --health-cmd "/opt/oracle/checkDBStatus.sh" - --health-interval 10s - --health-timeout 5s - --health-retries 120 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/XEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: oracle_21_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-oracle-23: - name: Oracle 23 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Free up ~14GB of disk space by removing the Android SDK - run: | - echo "Storage available before deletion" - df -h / - echo - sudo rm -r /usr/local/lib/android - echo "Storage available after deletion" - df -h / - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.CR_PAT }} - - - name: Start Oracle 23 container - run: docker run -d --name oracle-23 -p 1521:1521 ghcr.io/scalar-labs/oracle/db-prebuilt:23 - - - name: Wait for the container to be ready - timeout-minutes: 5 - run: | - while [ "`docker inspect -f {{.State.Health.Status}} oracle-23`" != "healthy" ] - do - sleep 10 - echo "Container is not yet ready" - done - echo "Container is ready" - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Stop Oracle 23 container - if: always() - run: docker stop oracle-23 | xargs docker rm - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: oracle_23_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-sqlserver-2017: - name: SQL Server 2017 integration test (${{ matrix.mode.label }}) - runs-on: windows-latest - env: - # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. - # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} - SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" - SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Setup Sql Server 2017 - uses: rails-sqlserver/setup-mssql@v1 - with: - components: sqlcmd,sqlengine - sa-password: "SqlServer17" - version: 2017 - - - name: Create database with Japanese collation for integration test - run: | - sqlcmd -S localhost -U sa -P SqlServer17 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.CR_PAT }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} - run: | - $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") - docker cp "${container_id}:oracle-jdk.exe" . - docker rm "$container_id" - Write-Host "Install Oracle JDK" - Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" - Write-Host "Oracle JDK installation successful" - if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { - $jdk_root_dir = "jdk-1.8" - } else { - $jdk_root_dir = "jdk-11" - } - echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew.bat integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" "-Dfile.encoding=UTF-8" "-Dscalardb.jdbc.username=sa" "-Dscalardb.jdbc.password=SqlServer17" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: sqlserver_2017_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-sqlserver-2019: - name: SQL Server 2019 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - sqlserver: - image: mcr.microsoft.com/mssql/server:2019-latest - env: - MSSQL_PID: "Express" - SA_PASSWORD: "SqlServer19" - ACCEPT_EULA: "Y" - ports: - - 1433:1433 - options: --name sqlserver19 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Create database with Japanese collation for integration test - run: | - docker exec sqlserver19 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer19 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer19 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: sqlserver_2019_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-sqlserver-2022: - name: SQL Server 2022 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - sqlserver: - image: mcr.microsoft.com/mssql/server:2022-latest - env: - MSSQL_PID: "Express" - SA_PASSWORD: "SqlServer22" - ACCEPT_EULA: "Y" - ports: - - 1433:1433 - options: --name sqlserver22 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Create database with Japanese collation for integration test - run: | - docker exec sqlserver22 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer22 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer22 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: sqlserver_2022_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-sqlite-3: - name: SQLite 3 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Set up SQLite3 - run: sudo apt-get install -y sqlite3 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:sqlite:integration.sqlite3?busy_timeout=50000 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: sqlite_3_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-mariadb-10: - name: MariaDB 10 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run MariaDB 10.11 - run: | - docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: mariadb_10_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-mariadb-11-4: - name: MariaDB 11.4 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run MariaDB 11.4 - run: | - docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: mariadb_11.4_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-yugabytedb-2: - name: YugabyteDB 2 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - name: Run YugabyteDB 2 - run: | - docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false" - - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: yugabytedb_2_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-db2-11-5: - name: Db2 11.5 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - db2: - image: icr.io/db2_community/db2:11.5.9.0 - env: - DB2INSTANCE: db2inst1 - DB2INST1_PASSWORD: db2inst1 - DBNAME: test_db - LICENSE: accept - ports: - - 50000:50000 - options: --privileged --name db2 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Wait for the container to be ready - timeout-minutes: 10 - run: | - while ! docker logs db2 2>&1 | grep -q "Setup has completed" - do - echo "Container is not yet ready" - sleep 5s - done - echo "Container is ready" - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: db2_11.5_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-jdbc-db2-12-1: - name: Db2 12.1 integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - db2: - image: icr.io/db2_community/db2:12.1.1.0 - env: - DB2INSTANCE: db2inst1 - DB2INST1_PASSWORD: db2inst1 - DBNAME: test_db - LICENSE: accept - ports: - - 50000:50000 - options: --privileged --name db2 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Wait for the container to be ready - timeout-minutes: 10 - run: | - while ! docker logs db2 2>&1 | grep -q "Setup has completed" - do - echo "Container is not yet ready" - sleep 5s - done - echo "Container is ready" - - - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: db2_12.1_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestJdbc +# check: +# name: Gradle check +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'check' task +# run: ./gradlew check buildSrc:check + +# - name: Save Gradle test reports +# if: always() +# run: | +# mkdir -p /tmp/gradle_test_reports/core +# mkdir -p /tmp/gradle_test_reports/schema-loader +# mkdir -p /tmp/gradle_test_reports/data-loader/core +# mkdir -p /tmp/gradle_test_reports/data-loader/cli +# cp -a core/build/reports/tests/test /tmp/gradle_test_reports/core/ +# cp -a schema-loader/build/reports/tests/test /tmp/gradle_test_reports/schema-loader/ +# cp -a data-loader/core/build/reports/tests/test /tmp/gradle_test_reports/data-loader/core/ +# cp -a data-loader/cli/build/reports/tests/test /tmp/gradle_test_reports/data-loader/cli/ + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: gradle_check_reports +# path: /tmp/gradle_test_reports + +# - name: Save SpotBugs reports +# if: always() +# run: | +# mkdir -p /tmp/gradle_spotbugs_reports/core +# mkdir -p /tmp/gradle_spotbugs_reports/schema-loader +# mkdir -p /tmp/gradle_spotbugs_reports/integration-test +# mkdir -p /tmp/gradle_spotbugs_reports/data-loader/core +# mkdir -p /tmp/gradle_spotbugs_reports/data-loader/cli +# cp -a core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/core/ +# cp -a schema-loader/build/reports/spotbugs /tmp/gradle_spotbugs_reports/schema-loader/ +# cp -a integration-test/build/reports/spotbugs /tmp/gradle_spotbugs_reports/integration-test/ +# cp -a data-loader/core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/core/ +# cp -a data-loader/cli/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/cli/ + +# - name: Upload Spotbugs reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: gradle_spotbugs_reports +# path: /tmp/gradle_spotbugs_reports + +# dockerfile-lint: +# name: Lint dockerfiles +# runs-on: ubuntu-latest + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Dockerfile Lint for ScalarDB Schema Loader +# run: ./gradlew schema-loader:dockerfileLint + +# - name: Dockerfile Lint for ScalarDB Data Loader CLI +# run: ./gradlew data-loader:cli:dockerfileLint + +# integration-test-for-cassandra-3-0: +# name: Cassandra 3.0 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# cassandra: +# image: cassandra:3.0 +# env: +# MAX_HEAP_SIZE: 2048m +# HEAP_NEWSIZE: 512m +# ports: +# - 9042:9042 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestCassandra' task +# run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: cassandra_3.0_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestCassandra + +# integration-test-for-cassandra-3-11: +# name: Cassandra 3.11 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# cassandra: +# image: cassandra:3.11 +# env: +# MAX_HEAP_SIZE: 2048m +# HEAP_NEWSIZE: 512m +# ports: +# - 9042:9042 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestCassandra' task +# run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: cassandra_3.11_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestCassandra + +# integration-test-for-cosmos: +# name: Cosmos DB integration test (${{ matrix.mode.label }}) +# runs-on: windows-latest +# env: + # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. + # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} +# SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" +# SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to GitHub Container Registry +# uses: docker/login-action@v3 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} +# with: +# registry: ghcr.io +# username: ${{ github.repository_owner }} +# password: ${{ secrets.CR_PAT }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} +# run: | +# $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") +# docker cp "${container_id}:oracle-jdk.exe" . +# docker rm "$container_id" +# Write-Host "Install Oracle JDK" +# Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" +# Write-Host "Oracle JDK installation successful" +# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { +# $jdk_root_dir = "jdk-1.8" +# } else { +# $jdk_root_dir = "jdk-11" +# } +# echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} + +# - name: Start Azure Cosmos DB emulator +# run: | +# Write-Host "Launching Cosmos DB Emulator" +# Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator" + # Set startup timeout to 10min (600s), the default is 4min +# Start-CosmosDbEmulator -Consistency Strong -Timeout 600 + +# - name: Install TLS/SSL certificate +# run: | +# $cert = Get-ChildItem Cert:\LocalMachine\My | where{$_.FriendlyName -eq 'DocumentDbEmulatorCertificate'} +# $params = @{ +# Cert = $cert +# Type = "CERT" +# FilePath = "$home/tmp-cert.cer" +# NoClobber = $true +# } +# Export-Certificate @params +# certutil -encode $home/tmp-cert.cer $home/cosmosdbcert.cer +# Remove-Item $home/tmp-cert.cer + # Setting the keystore option differs between Java 8 and Java 11+ +# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { +# $keystore = "-keystore", "${env:JAVA_HOME}/jre/lib/security/cacerts" +# } else { +# $keystore = "-cacerts" +# } +# & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -importcert -noprompt -alias cosmos_emulator -file $home/cosmosdbcert.cer +# & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -list -alias cosmos_emulator + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestCosmos' task +# run: ./gradlew.bat integrationTestCosmos "-Dscalardb.cosmos.uri=https://localhost:8081/" "-Dscalardb.cosmos.password=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==" "-Dfile.encoding=UTF-8" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: cosmos_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestCosmos + +# integration-test-for-dynamo: +# name: DynamoDB integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# dynamodb: +# image: amazon/dynamodb-local:1.17.0 +# ports: +# - 8000:8000 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestDynamo' task +# run: ./gradlew integrationTestDynamo ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: dynamo_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestDynamo + +# integration-test-for-jdbc-mysql-5-7: +# name: MySQL 5.7 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run MySQL 5.7 +# run: | +# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: mysql_5.7_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-mysql-8-0: +# name: MySQL 8.0 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run MySQL 8.0 +# run: | +# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: mysql_8.0_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-mysql-8-4: +# name: MySQL 8.4 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run MySQL 8.4 +# run: | +# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: mysql_8.4_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-postgresql-13: +# name: PostgreSQL 13 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:13-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: postgresql_13_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-postgresql-14: +# name: PostgreSQL 14 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:14-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: postgresql_14_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-postgresql-15: +# name: PostgreSQL 15 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:15-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: postgresql_15_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-postgresql-16: +# name: PostgreSQL 16 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:16-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: postgresql_16_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-postgresql-17: +# name: PostgreSQL 17 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:17-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: postgresql_17_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-oracle-19: +# name: Oracle 19 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# oracle: +# image: ghcr.io/scalar-labs/oracle/db-prebuilt:19 +# credentials: +# username: ${{ github.repository_owner }} +# password: ${{ secrets.CR_PAT }} +# ports: +# - 1521:1521 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: oracle_19_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-oracle-21: +# name: Oracle 21 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# oracle: +# image: ghcr.io/scalar-labs/oracle/db-prebuilt:21 +# credentials: +# username: ${{ github.repository_owner }} +# password: ${{ secrets.CR_PAT }} +# env: +# ORACLE_PWD: Oracle +# ports: +# - 1521:1521 +# options: >- +# --health-cmd "/opt/oracle/checkDBStatus.sh" +# --health-interval 10s +# --health-timeout 5s +# --health-retries 120 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/XEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: oracle_21_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-oracle-23: +# name: Oracle 23 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Free up ~14GB of disk space by removing the Android SDK +# run: | +# echo "Storage available before deletion" +# df -h / +# echo +# sudo rm -r /usr/local/lib/android +# echo "Storage available after deletion" +# df -h / + +# - name: Login to GitHub Container Registry +# uses: docker/login-action@v3 +# with: +# registry: ghcr.io +# username: ${{ github.repository_owner }} +# password: ${{ secrets.CR_PAT }} + +# - name: Start Oracle 23 container +# run: docker run -d --name oracle-23 -p 1521:1521 ghcr.io/scalar-labs/oracle/db-prebuilt:23 + +# - name: Wait for the container to be ready +# timeout-minutes: 5 +# run: | +# while [ "`docker inspect -f {{.State.Health.Status}} oracle-23`" != "healthy" ] +# do +# sleep 10 +# echo "Container is not yet ready" +# done +# echo "Container is ready" + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Stop Oracle 23 container +# if: always() +# run: docker stop oracle-23 | xargs docker rm + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: oracle_23_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-sqlserver-2017: +# name: SQL Server 2017 integration test (${{ matrix.mode.label }}) +# runs-on: windows-latest +# env: + # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. + # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} +# SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" +# SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Setup Sql Server 2017 +# uses: rails-sqlserver/setup-mssql@v1 +# with: +# components: sqlcmd,sqlengine +# sa-password: "SqlServer17" +# version: 2017 + +# - name: Create database with Japanese collation for integration test +# run: | +# sqlcmd -S localhost -U sa -P SqlServer17 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to GitHub Container Registry +# uses: docker/login-action@v3 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} +# with: +# registry: ghcr.io +# username: ${{ github.repository_owner }} +# password: ${{ secrets.CR_PAT }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} +# run: | +# $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") +# docker cp "${container_id}:oracle-jdk.exe" . +# docker rm "$container_id" +# Write-Host "Install Oracle JDK" +# Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" +# Write-Host "Oracle JDK installation successful" +# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { +# $jdk_root_dir = "jdk-1.8" +# } else { +# $jdk_root_dir = "jdk-11" +# } +# echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew.bat integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" "-Dfile.encoding=UTF-8" "-Dscalardb.jdbc.username=sa" "-Dscalardb.jdbc.password=SqlServer17" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: sqlserver_2017_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-sqlserver-2019: +# name: SQL Server 2019 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# sqlserver: +# image: mcr.microsoft.com/mssql/server:2019-latest +# env: +# MSSQL_PID: "Express" +# SA_PASSWORD: "SqlServer19" +# ACCEPT_EULA: "Y" +# ports: +# - 1433:1433 +# options: --name sqlserver19 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Create database with Japanese collation for integration test +# run: | +# docker exec sqlserver19 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer19 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer19 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: sqlserver_2019_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-sqlserver-2022: +# name: SQL Server 2022 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# sqlserver: +# image: mcr.microsoft.com/mssql/server:2022-latest +# env: +# MSSQL_PID: "Express" +# SA_PASSWORD: "SqlServer22" +# ACCEPT_EULA: "Y" +# ports: +# - 1433:1433 +# options: --name sqlserver22 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Create database with Japanese collation for integration test +# run: | +# docker exec sqlserver22 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer22 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer22 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: sqlserver_2022_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-sqlite-3: +# name: SQLite 3 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Set up SQLite3 +# run: sudo apt-get install -y sqlite3 + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:sqlite:integration.sqlite3?busy_timeout=50000 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: sqlite_3_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-mariadb-10: +# name: MariaDB 10 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run MariaDB 10.11 +# run: | +# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: mariadb_10_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-mariadb-11-4: +# name: MariaDB 11.4 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run MariaDB 11.4 +# run: | +# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: mariadb_11.4_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-yugabytedb-2: +# name: YugabyteDB 2 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - name: Run YugabyteDB 2 +# run: | +# docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false" + +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: yugabytedb_2_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-db2-11-5: +# name: Db2 11.5 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# db2: +# image: icr.io/db2_community/db2:11.5.9.0 +# env: +# DB2INSTANCE: db2inst1 +# DB2INST1_PASSWORD: db2inst1 +# DBNAME: test_db +# LICENSE: accept +# ports: +# - 50000:50000 +# options: --privileged --name db2 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Wait for the container to be ready +# timeout-minutes: 10 +# run: | +# while ! docker logs db2 2>&1 | grep -q "Setup has completed" +# do +# echo "Container is not yet ready" +# sleep 5s +# done +# echo "Container is ready" + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: db2_11.5_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc + +# integration-test-for-jdbc-db2-12-1: +# name: Db2 12.1 integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# db2: +# image: icr.io/db2_community/db2:12.1.1.0 +# env: +# DB2INSTANCE: db2inst1 +# DB2INST1_PASSWORD: db2inst1 +# DBNAME: test_db +# LICENSE: accept +# ports: +# - 50000:50000 +# options: --privileged --name db2 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Wait for the container to be ready +# timeout-minutes: 10 +# run: | +# while ! docker logs db2 2>&1 | grep -q "Setup has completed" +# do +# echo "Container is not yet ready" +# sleep 5s +# done +# echo "Container is ready" + +# - name: Execute Gradle 'integrationTestJdbc' task +# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# if: always() +# uses: actions/upload-artifact@v4 +# with: +# name: db2_12.1_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestJdbc integration-test-for-tidb-v6-5: name: TiDB v6.5 integration test (${{ matrix.mode.label }}) @@ -1806,7 +1806,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -1880,7 +1880,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -1954,7 +1954,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -1963,74 +1963,74 @@ jobs: name: tidb_v8_5_integration_test_reports_${{ matrix.mode.label }} path: core/build/reports/tests/integrationTestJdbc - integration-test-for-multi-storage: - name: Multi-storage integration test (${{ matrix.mode.label }}) - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:17-alpine - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - - cassandra: - image: cassandra:3.11 - env: - MAX_HEAP_SIZE: 2048m - HEAP_NEWSIZE: 512m - ports: - - 9042:9042 - - strategy: - matrix: - mode: - - label: default - group_commit_enabled: false - - label: with_group_commit - group_commit_enabled: true - - steps: - - uses: actions/checkout@v5 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v5 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test - uses: actions/setup-java@v5 - if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} - with: - java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} - distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - - - name: Login to Oracle container registry - uses: docker/login-action@v3 - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - with: - registry: container-registry.oracle.com - username: ${{ secrets.OCR_USERNAME }} - password: ${{ secrets.OCR_TOKEN }} - - - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test - if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} - run: | - container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") - docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Execute Gradle 'integrationTestMultiStorage' task - run: ./gradlew integrationTestMultiStorage ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - - - name: Upload Gradle test reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: multi_storage_integration_test_reports_${{ matrix.mode.label }} - path: core/build/reports/tests/integrationTestMultiStorage +# integration-test-for-multi-storage: +# name: Multi-storage integration test (${{ matrix.mode.label }}) +# runs-on: ubuntu-latest + +# services: +# postgres: +# image: postgres:17-alpine +# env: +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# ports: +# - 5432:5432 + +# cassandra: +# image: cassandra:3.11 +# env: +# MAX_HEAP_SIZE: 2048m +# HEAP_NEWSIZE: 512m +# ports: +# - 9042:9042 + +# strategy: +# matrix: +# mode: +# - label: default +# group_commit_enabled: false +# - label: with_group_commit +# group_commit_enabled: true + +# steps: +# - uses: actions/checkout@v5 + +# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) +# uses: actions/setup-java@v5 +# with: +# java-version: ${{ env.JAVA_VERSION }} +# distribution: ${{ env.JAVA_VENDOR }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test +# uses: actions/setup-java@v5 +# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} +# with: +# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} +# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + +# - name: Login to Oracle container registry +# uses: docker/login-action@v3 +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# with: +# registry: container-registry.oracle.com +# username: ${{ secrets.OCR_USERNAME }} +# password: ${{ secrets.OCR_TOKEN }} + +# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test +# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} +# run: | +# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") +# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + +# - name: Setup Gradle +# uses: gradle/actions/setup-gradle@v4 + +# - name: Execute Gradle 'integrationTestMultiStorage' task +# run: ./gradlew integrationTestMultiStorage ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + +# - name: Upload Gradle test reports +# uses: actions/upload-artifact@v4 +# if: always() +# with: +# name: multi_storage_integration_test_reports_${{ matrix.mode.label }} +# path: core/build/reports/tests/integrationTestMultiStorage From 602a8b79563fd62805ef6f9d97e107845c169667 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 3 Oct 2025 15:22:44 +0900 Subject: [PATCH 03/13] Set REPEATABLE_READ transaction isolation --- .github/workflows/ci.yaml | 3548 ++++++++++++++++++------------------- 1 file changed, 1774 insertions(+), 1774 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9440cbef51..b2fa894dbf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -44,1705 +44,1705 @@ env: INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT: '"-Dscalardb.consensus_commit.coordinator.group_commit.enabled=true" "-Dscalardb.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis=15000" --tests "**.ConsensusCommit**"' jobs: -# check: -# name: Gradle check -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'check' task -# run: ./gradlew check buildSrc:check - -# - name: Save Gradle test reports -# if: always() -# run: | -# mkdir -p /tmp/gradle_test_reports/core -# mkdir -p /tmp/gradle_test_reports/schema-loader -# mkdir -p /tmp/gradle_test_reports/data-loader/core -# mkdir -p /tmp/gradle_test_reports/data-loader/cli -# cp -a core/build/reports/tests/test /tmp/gradle_test_reports/core/ -# cp -a schema-loader/build/reports/tests/test /tmp/gradle_test_reports/schema-loader/ -# cp -a data-loader/core/build/reports/tests/test /tmp/gradle_test_reports/data-loader/core/ -# cp -a data-loader/cli/build/reports/tests/test /tmp/gradle_test_reports/data-loader/cli/ - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: gradle_check_reports -# path: /tmp/gradle_test_reports - -# - name: Save SpotBugs reports -# if: always() -# run: | -# mkdir -p /tmp/gradle_spotbugs_reports/core -# mkdir -p /tmp/gradle_spotbugs_reports/schema-loader -# mkdir -p /tmp/gradle_spotbugs_reports/integration-test -# mkdir -p /tmp/gradle_spotbugs_reports/data-loader/core -# mkdir -p /tmp/gradle_spotbugs_reports/data-loader/cli -# cp -a core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/core/ -# cp -a schema-loader/build/reports/spotbugs /tmp/gradle_spotbugs_reports/schema-loader/ -# cp -a integration-test/build/reports/spotbugs /tmp/gradle_spotbugs_reports/integration-test/ -# cp -a data-loader/core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/core/ -# cp -a data-loader/cli/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/cli/ - -# - name: Upload Spotbugs reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: gradle_spotbugs_reports -# path: /tmp/gradle_spotbugs_reports - -# dockerfile-lint: -# name: Lint dockerfiles -# runs-on: ubuntu-latest - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Dockerfile Lint for ScalarDB Schema Loader -# run: ./gradlew schema-loader:dockerfileLint - -# - name: Dockerfile Lint for ScalarDB Data Loader CLI -# run: ./gradlew data-loader:cli:dockerfileLint - -# integration-test-for-cassandra-3-0: -# name: Cassandra 3.0 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# cassandra: -# image: cassandra:3.0 -# env: -# MAX_HEAP_SIZE: 2048m -# HEAP_NEWSIZE: 512m -# ports: -# - 9042:9042 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestCassandra' task -# run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: cassandra_3.0_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestCassandra - -# integration-test-for-cassandra-3-11: -# name: Cassandra 3.11 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# cassandra: -# image: cassandra:3.11 -# env: -# MAX_HEAP_SIZE: 2048m -# HEAP_NEWSIZE: 512m -# ports: -# - 9042:9042 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestCassandra' task -# run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: cassandra_3.11_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestCassandra - -# integration-test-for-cosmos: -# name: Cosmos DB integration test (${{ matrix.mode.label }}) -# runs-on: windows-latest -# env: + check: + name: Gradle check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'check' task + run: ./gradlew check buildSrc:check + + - name: Save Gradle test reports + if: always() + run: | + mkdir -p /tmp/gradle_test_reports/core + mkdir -p /tmp/gradle_test_reports/schema-loader + mkdir -p /tmp/gradle_test_reports/data-loader/core + mkdir -p /tmp/gradle_test_reports/data-loader/cli + cp -a core/build/reports/tests/test /tmp/gradle_test_reports/core/ + cp -a schema-loader/build/reports/tests/test /tmp/gradle_test_reports/schema-loader/ + cp -a data-loader/core/build/reports/tests/test /tmp/gradle_test_reports/data-loader/core/ + cp -a data-loader/cli/build/reports/tests/test /tmp/gradle_test_reports/data-loader/cli/ + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: gradle_check_reports + path: /tmp/gradle_test_reports + + - name: Save SpotBugs reports + if: always() + run: | + mkdir -p /tmp/gradle_spotbugs_reports/core + mkdir -p /tmp/gradle_spotbugs_reports/schema-loader + mkdir -p /tmp/gradle_spotbugs_reports/integration-test + mkdir -p /tmp/gradle_spotbugs_reports/data-loader/core + mkdir -p /tmp/gradle_spotbugs_reports/data-loader/cli + cp -a core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/core/ + cp -a schema-loader/build/reports/spotbugs /tmp/gradle_spotbugs_reports/schema-loader/ + cp -a integration-test/build/reports/spotbugs /tmp/gradle_spotbugs_reports/integration-test/ + cp -a data-loader/core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/core/ + cp -a data-loader/cli/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/cli/ + + - name: Upload Spotbugs reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: gradle_spotbugs_reports + path: /tmp/gradle_spotbugs_reports + + dockerfile-lint: + name: Lint dockerfiles + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Dockerfile Lint for ScalarDB Schema Loader + run: ./gradlew schema-loader:dockerfileLint + + - name: Dockerfile Lint for ScalarDB Data Loader CLI + run: ./gradlew data-loader:cli:dockerfileLint + + integration-test-for-cassandra-3-0: + name: Cassandra 3.0 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + cassandra: + image: cassandra:3.0 + env: + MAX_HEAP_SIZE: 2048m + HEAP_NEWSIZE: 512m + ports: + - 9042:9042 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestCassandra' task + run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: cassandra_3.0_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestCassandra + + integration-test-for-cassandra-3-11: + name: Cassandra 3.11 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + cassandra: + image: cassandra:3.11 + env: + MAX_HEAP_SIZE: 2048m + HEAP_NEWSIZE: 512m + ports: + - 9042:9042 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestCassandra' task + run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: cassandra_3.11_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestCassandra + + integration-test-for-cosmos: + name: Cosmos DB integration test (${{ matrix.mode.label }}) + runs-on: windows-latest + env: # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} -# SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" -# SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to GitHub Container Registry -# uses: docker/login-action@v3 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} -# with: -# registry: ghcr.io -# username: ${{ github.repository_owner }} -# password: ${{ secrets.CR_PAT }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} -# run: | -# $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") -# docker cp "${container_id}:oracle-jdk.exe" . -# docker rm "$container_id" -# Write-Host "Install Oracle JDK" -# Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" -# Write-Host "Oracle JDK installation successful" -# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { -# $jdk_root_dir = "jdk-1.8" -# } else { -# $jdk_root_dir = "jdk-11" -# } -# echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} - -# - name: Start Azure Cosmos DB emulator -# run: | -# Write-Host "Launching Cosmos DB Emulator" -# Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator" + SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" + SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} + run: | + $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") + docker cp "${container_id}:oracle-jdk.exe" . + docker rm "$container_id" + Write-Host "Install Oracle JDK" + Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" + Write-Host "Oracle JDK installation successful" + if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { + $jdk_root_dir = "jdk-1.8" + } else { + $jdk_root_dir = "jdk-11" + } + echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} + + - name: Start Azure Cosmos DB emulator + run: | + Write-Host "Launching Cosmos DB Emulator" + Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator" # Set startup timeout to 10min (600s), the default is 4min -# Start-CosmosDbEmulator -Consistency Strong -Timeout 600 - -# - name: Install TLS/SSL certificate -# run: | -# $cert = Get-ChildItem Cert:\LocalMachine\My | where{$_.FriendlyName -eq 'DocumentDbEmulatorCertificate'} -# $params = @{ -# Cert = $cert -# Type = "CERT" -# FilePath = "$home/tmp-cert.cer" -# NoClobber = $true -# } -# Export-Certificate @params -# certutil -encode $home/tmp-cert.cer $home/cosmosdbcert.cer -# Remove-Item $home/tmp-cert.cer + Start-CosmosDbEmulator -Consistency Strong -Timeout 600 + + - name: Install TLS/SSL certificate + run: | + $cert = Get-ChildItem Cert:\LocalMachine\My | where{$_.FriendlyName -eq 'DocumentDbEmulatorCertificate'} + $params = @{ + Cert = $cert + Type = "CERT" + FilePath = "$home/tmp-cert.cer" + NoClobber = $true + } + Export-Certificate @params + certutil -encode $home/tmp-cert.cer $home/cosmosdbcert.cer + Remove-Item $home/tmp-cert.cer # Setting the keystore option differs between Java 8 and Java 11+ -# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { -# $keystore = "-keystore", "${env:JAVA_HOME}/jre/lib/security/cacerts" -# } else { -# $keystore = "-cacerts" -# } -# & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -importcert -noprompt -alias cosmos_emulator -file $home/cosmosdbcert.cer -# & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -list -alias cosmos_emulator - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestCosmos' task -# run: ./gradlew.bat integrationTestCosmos "-Dscalardb.cosmos.uri=https://localhost:8081/" "-Dscalardb.cosmos.password=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==" "-Dfile.encoding=UTF-8" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: cosmos_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestCosmos - -# integration-test-for-dynamo: -# name: DynamoDB integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# dynamodb: -# image: amazon/dynamodb-local:1.17.0 -# ports: -# - 8000:8000 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestDynamo' task -# run: ./gradlew integrationTestDynamo ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: dynamo_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestDynamo - -# integration-test-for-jdbc-mysql-5-7: -# name: MySQL 5.7 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run MySQL 5.7 -# run: | -# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: mysql_5.7_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-mysql-8-0: -# name: MySQL 8.0 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run MySQL 8.0 -# run: | -# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: mysql_8.0_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-mysql-8-4: -# name: MySQL 8.4 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run MySQL 8.4 -# run: | -# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: mysql_8.4_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-postgresql-13: -# name: PostgreSQL 13 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:13-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: postgresql_13_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-postgresql-14: -# name: PostgreSQL 14 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:14-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: postgresql_14_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-postgresql-15: -# name: PostgreSQL 15 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:15-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: postgresql_15_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-postgresql-16: -# name: PostgreSQL 16 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:16-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: postgresql_16_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-postgresql-17: -# name: PostgreSQL 17 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:17-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: postgresql_17_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-oracle-19: -# name: Oracle 19 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# oracle: -# image: ghcr.io/scalar-labs/oracle/db-prebuilt:19 -# credentials: -# username: ${{ github.repository_owner }} -# password: ${{ secrets.CR_PAT }} -# ports: -# - 1521:1521 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: oracle_19_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-oracle-21: -# name: Oracle 21 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# oracle: -# image: ghcr.io/scalar-labs/oracle/db-prebuilt:21 -# credentials: -# username: ${{ github.repository_owner }} -# password: ${{ secrets.CR_PAT }} -# env: -# ORACLE_PWD: Oracle -# ports: -# - 1521:1521 -# options: >- -# --health-cmd "/opt/oracle/checkDBStatus.sh" -# --health-interval 10s -# --health-timeout 5s -# --health-retries 120 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/XEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: oracle_21_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-oracle-23: -# name: Oracle 23 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Free up ~14GB of disk space by removing the Android SDK -# run: | -# echo "Storage available before deletion" -# df -h / -# echo -# sudo rm -r /usr/local/lib/android -# echo "Storage available after deletion" -# df -h / - -# - name: Login to GitHub Container Registry -# uses: docker/login-action@v3 -# with: -# registry: ghcr.io -# username: ${{ github.repository_owner }} -# password: ${{ secrets.CR_PAT }} - -# - name: Start Oracle 23 container -# run: docker run -d --name oracle-23 -p 1521:1521 ghcr.io/scalar-labs/oracle/db-prebuilt:23 - -# - name: Wait for the container to be ready -# timeout-minutes: 5 -# run: | -# while [ "`docker inspect -f {{.State.Health.Status}} oracle-23`" != "healthy" ] -# do -# sleep 10 -# echo "Container is not yet ready" -# done -# echo "Container is ready" - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Stop Oracle 23 container -# if: always() -# run: docker stop oracle-23 | xargs docker rm - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: oracle_23_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-sqlserver-2017: -# name: SQL Server 2017 integration test (${{ matrix.mode.label }}) -# runs-on: windows-latest -# env: - # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. - # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} -# SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" -# SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Setup Sql Server 2017 -# uses: rails-sqlserver/setup-mssql@v1 -# with: -# components: sqlcmd,sqlengine -# sa-password: "SqlServer17" -# version: 2017 - -# - name: Create database with Japanese collation for integration test -# run: | -# sqlcmd -S localhost -U sa -P SqlServer17 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to GitHub Container Registry -# uses: docker/login-action@v3 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} -# with: -# registry: ghcr.io -# username: ${{ github.repository_owner }} -# password: ${{ secrets.CR_PAT }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} -# run: | -# $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") -# docker cp "${container_id}:oracle-jdk.exe" . -# docker rm "$container_id" -# Write-Host "Install Oracle JDK" -# Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" -# Write-Host "Oracle JDK installation successful" -# if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { -# $jdk_root_dir = "jdk-1.8" -# } else { -# $jdk_root_dir = "jdk-11" -# } -# echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew.bat integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" "-Dfile.encoding=UTF-8" "-Dscalardb.jdbc.username=sa" "-Dscalardb.jdbc.password=SqlServer17" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: sqlserver_2017_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-sqlserver-2019: -# name: SQL Server 2019 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# sqlserver: -# image: mcr.microsoft.com/mssql/server:2019-latest -# env: -# MSSQL_PID: "Express" -# SA_PASSWORD: "SqlServer19" -# ACCEPT_EULA: "Y" -# ports: -# - 1433:1433 -# options: --name sqlserver19 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Create database with Japanese collation for integration test -# run: | -# docker exec sqlserver19 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer19 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer19 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: sqlserver_2019_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-sqlserver-2022: -# name: SQL Server 2022 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# sqlserver: -# image: mcr.microsoft.com/mssql/server:2022-latest -# env: -# MSSQL_PID: "Express" -# SA_PASSWORD: "SqlServer22" -# ACCEPT_EULA: "Y" -# ports: -# - 1433:1433 -# options: --name sqlserver22 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Create database with Japanese collation for integration test -# run: | -# docker exec sqlserver22 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer22 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer22 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: sqlserver_2022_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-sqlite-3: -# name: SQLite 3 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Set up SQLite3 -# run: sudo apt-get install -y sqlite3 - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:sqlite:integration.sqlite3?busy_timeout=50000 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: sqlite_3_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-mariadb-10: -# name: MariaDB 10 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run MariaDB 10.11 -# run: | -# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: mariadb_10_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-mariadb-11-4: -# name: MariaDB 11.4 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run MariaDB 11.4 -# run: | -# docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: mariadb_11.4_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-yugabytedb-2: -# name: YugabyteDB 2 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - name: Run YugabyteDB 2 -# run: | -# docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false" - -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: yugabytedb_2_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-db2-11-5: -# name: Db2 11.5 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# db2: -# image: icr.io/db2_community/db2:11.5.9.0 -# env: -# DB2INSTANCE: db2inst1 -# DB2INST1_PASSWORD: db2inst1 -# DBNAME: test_db -# LICENSE: accept -# ports: -# - 50000:50000 -# options: --privileged --name db2 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Wait for the container to be ready -# timeout-minutes: 10 -# run: | -# while ! docker logs db2 2>&1 | grep -q "Setup has completed" -# do -# echo "Container is not yet ready" -# sleep 5s -# done -# echo "Container is ready" - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: db2_11.5_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - -# integration-test-for-jdbc-db2-12-1: -# name: Db2 12.1 integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# db2: -# image: icr.io/db2_community/db2:12.1.1.0 -# env: -# DB2INSTANCE: db2inst1 -# DB2INST1_PASSWORD: db2inst1 -# DBNAME: test_db -# LICENSE: accept -# ports: -# - 50000:50000 -# options: --privileged --name db2 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Wait for the container to be ready -# timeout-minutes: 10 -# run: | -# while ! docker logs db2 2>&1 | grep -q "Setup has completed" -# do -# echo "Container is not yet ready" -# sleep 5s -# done -# echo "Container is ready" - -# - name: Execute Gradle 'integrationTestJdbc' task -# run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# if: always() -# uses: actions/upload-artifact@v4 -# with: -# name: db2_12.1_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestJdbc - - integration-test-for-tidb-v6-5: - name: TiDB v6.5 integration test (${{ matrix.mode.label }}) + if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { + $keystore = "-keystore", "${env:JAVA_HOME}/jre/lib/security/cacerts" + } else { + $keystore = "-cacerts" + } + & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -importcert -noprompt -alias cosmos_emulator -file $home/cosmosdbcert.cer + & ${env:JAVA_HOME}/bin/keytool.exe $keystore -storepass 'changeit' -list -alias cosmos_emulator + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestCosmos' task + run: ./gradlew.bat integrationTestCosmos "-Dscalardb.cosmos.uri=https://localhost:8081/" "-Dscalardb.cosmos.password=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==" "-Dfile.encoding=UTF-8" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: cosmos_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestCosmos + + integration-test-for-dynamo: + name: DynamoDB integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + dynamodb: + image: amazon/dynamodb-local:1.17.0 + ports: + - 8000:8000 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestDynamo' task + run: ./gradlew integrationTestDynamo ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: dynamo_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestDynamo + + integration-test-for-jdbc-mysql-5-7: + name: MySQL 5.7 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run MySQL 5.7 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mysql_5.7_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-mysql-8-0: + name: MySQL 8.0 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run MySQL 8.0 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mysql_8.0_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-mysql-8-4: + name: MySQL 8.4 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run MySQL 8.4 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306/ -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mysql_8.4_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-postgresql-13: + name: PostgreSQL 13 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:13-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: postgresql_13_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-postgresql-14: + name: PostgreSQL 14 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:14-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: postgresql_14_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-postgresql-15: + name: PostgreSQL 15 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:15-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: postgresql_15_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-postgresql-16: + name: PostgreSQL 16 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:16-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: postgresql_16_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-postgresql-17: + name: PostgreSQL 17 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:17-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: postgresql_17_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-oracle-19: + name: Oracle 19 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + oracle: + image: ghcr.io/scalar-labs/oracle/db-prebuilt:19 + credentials: + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + ports: + - 1521:1521 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: oracle_19_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-oracle-21: + name: Oracle 21 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + oracle: + image: ghcr.io/scalar-labs/oracle/db-prebuilt:21 + credentials: + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + env: + ORACLE_PWD: Oracle + ports: + - 1521:1521 + options: >- + --health-cmd "/opt/oracle/checkDBStatus.sh" + --health-interval 10s + --health-timeout 5s + --health-retries 120 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/XEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: oracle_21_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-oracle-23: + name: Oracle 23 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Free up ~14GB of disk space by removing the Android SDK + run: | + echo "Storage available before deletion" + df -h / + echo + sudo rm -r /usr/local/lib/android + echo "Storage available after deletion" + df -h / + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + + - name: Start Oracle 23 container + run: docker run -d --name oracle-23 -p 1521:1521 ghcr.io/scalar-labs/oracle/db-prebuilt:23 + + - name: Wait for the container to be ready + timeout-minutes: 5 + run: | + while [ "`docker inspect -f {{.State.Health.Status}} oracle-23`" != "healthy" ] + do + sleep 10 + echo "Container is not yet ready" + done + echo "Container is ready" + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 -Dscalardb.jdbc.username=SYSTEM -Dscalardb.jdbc.password=Oracle ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Stop Oracle 23 container + if: always() + run: docker stop oracle-23 | xargs docker rm + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: oracle_23_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-sqlserver-2017: + name: SQL Server 2017 integration test (${{ matrix.mode.label }}) + runs-on: windows-latest + env: + # Official Oracle JDK images that are windows compatible and publicly available through direct download do not exist for JDK 8 and 11 so we use instead cached versions hosted on the Scalar container registry. + # This variable evaluates to: if {!(Temurin JDK 8) && !(Oracle JDK 8 or 11)} then {true} else {false} + SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11: "${{ (github.event_name == 'workflow_dispatch' && !(inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'temurin') && !(inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' && (inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11'))) && 'true' || 'false' }}" + SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11: "${{ ((inputs.INT_TEST_JAVA_RUNTIME_VERSION == '8' || inputs.INT_TEST_JAVA_RUNTIME_VERSION == '11') && inputs.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle') && 'true' || 'false' }}" + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Setup Sql Server 2017 + uses: rails-sqlserver/setup-mssql@v1 + with: + components: sqlcmd,sqlengine + sa-password: "SqlServer17" + version: 2017 + + - name: Create database with Japanese collation for integration test + run: | + sqlcmd -S localhost -U sa -P SqlServer17 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_JDK_WHEN_NOT_ORACLE_8_OR_11 == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.SET_UP_INT_TEST_RUNTIME_ORACLE_JDK_8_OR_11 == 'true'}} + run: | + $container_id=$(docker create "ghcr.io/scalar-labs/oracle/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}-windows") + docker cp "${container_id}:oracle-jdk.exe" . + docker rm "$container_id" + Write-Host "Install Oracle JDK" + Start-Process "oracle-jdk.exe" -NoNewWindow -Wait -ArgumentList "/s" + Write-Host "Oracle JDK installation successful" + if ( ${env:INT_TEST_JAVA_RUNTIME_VERSION} -eq '8' ) { + $jdk_root_dir = "jdk-1.8" + } else { + $jdk_root_dir = "jdk-11" + } + echo "JAVA_HOME=C:\Program Files\Java\${jdk_root_dir}" >> ${env:GITHUB_ENV} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew.bat integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" "-Dfile.encoding=UTF-8" "-Dscalardb.jdbc.username=sa" "-Dscalardb.jdbc.password=SqlServer17" ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: sqlserver_2017_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-sqlserver-2019: + name: SQL Server 2019 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + sqlserver: + image: mcr.microsoft.com/mssql/server:2019-latest + env: + MSSQL_PID: "Express" + SA_PASSWORD: "SqlServer19" + ACCEPT_EULA: "Y" + ports: + - 1433:1433 + options: --name sqlserver19 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Create database with Japanese collation for integration test + run: | + docker exec sqlserver19 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer19 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer19 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: sqlserver_2019_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-sqlserver-2022: + name: SQL Server 2022 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + sqlserver: + image: mcr.microsoft.com/mssql/server:2022-latest + env: + MSSQL_PID: "Express" + SA_PASSWORD: "SqlServer22" + ACCEPT_EULA: "Y" + ports: + - 1433:1433 + options: --name sqlserver22 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Create database with Japanese collation for integration test + run: | + docker exec sqlserver22 /opt/mssql-tools18/bin/sqlcmd -S localhost -C -U sa -P SqlServer22 -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2;" + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc "-Dscalardb.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test_db;encrypt=true;trustServerCertificate=true" -Dscalardb.jdbc.username=sa -Dscalardb.jdbc.password=SqlServer22 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: sqlserver_2022_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-sqlite-3: + name: SQLite 3 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Set up SQLite3 + run: sudo apt-get install -y sqlite3 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:sqlite:integration.sqlite3?busy_timeout=50000 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: sqlite_3_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-mariadb-10: + name: MariaDB 10 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run MariaDB 10.11 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mariadb_10_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-mariadb-11-4: + name: MariaDB 11.4 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run MariaDB 11.4 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mariadb_11.4_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-yugabytedb-2: + name: YugabyteDB 2 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - name: Run YugabyteDB 2 + run: | + docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false" + + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: yugabytedb_2_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-db2-11-5: + name: Db2 11.5 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + db2: + image: icr.io/db2_community/db2:11.5.9.0 + env: + DB2INSTANCE: db2inst1 + DB2INST1_PASSWORD: db2inst1 + DBNAME: test_db + LICENSE: accept + ports: + - 50000:50000 + options: --privileged --name db2 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Wait for the container to be ready + timeout-minutes: 10 + run: | + while ! docker logs db2 2>&1 | grep -q "Setup has completed" + do + echo "Container is not yet ready" + sleep 5s + done + echo "Container is ready" + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: db2_11.5_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-jdbc-db2-12-1: + name: Db2 12.1 integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + db2: + image: icr.io/db2_community/db2:12.1.1.0 + env: + DB2INSTANCE: db2inst1 + DB2INST1_PASSWORD: db2inst1 + DBNAME: test_db + LICENSE: accept + ports: + - 50000:50000 + options: --privileged --name db2 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Wait for the container to be ready + timeout-minutes: 10 + run: | + while ! docker logs db2 2>&1 | grep -q "Setup has completed" + do + echo "Container is not yet ready" + sleep 5s + done + echo "Container is ready" + + - name: Execute Gradle 'integrationTestJdbc' task + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: db2_12.1_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestJdbc + + integration-test-for-tidb-6-5: + name: TiDB 6.5 integration test (${{ matrix.mode.label }}) runs-on: ubuntu-latest strategy: @@ -1806,17 +1806,17 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() uses: actions/upload-artifact@v4 with: - name: tidb_v6_5_integration_test_reports_${{ matrix.mode.label }} + name: tidb_6_5_integration_test_reports_${{ matrix.mode.label }} path: core/build/reports/tests/integrationTestJdbc integration-test-for-tidb-v7-5: - name: TiDB v7.5 integration test (${{ matrix.mode.label }}) + name: TiDB 7.5 integration test (${{ matrix.mode.label }}) runs-on: ubuntu-latest strategy: @@ -1880,17 +1880,17 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() uses: actions/upload-artifact@v4 with: - name: tidb_v7_5_integration_test_reports_${{ matrix.mode.label }} + name: tidb_7_5_integration_test_reports_${{ matrix.mode.label }} path: core/build/reports/tests/integrationTestJdbc integration-test-for-tidb-v8-5: - name: TiDB v8.5 integration test (${{ matrix.mode.label }}) + name: TiDB 8.5 integration test (${{ matrix.mode.label }}) runs-on: ubuntu-latest strategy: @@ -1954,83 +1954,83 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=READ_COMMITTED ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() uses: actions/upload-artifact@v4 with: - name: tidb_v8_5_integration_test_reports_${{ matrix.mode.label }} + name: tidb_8_5_integration_test_reports_${{ matrix.mode.label }} path: core/build/reports/tests/integrationTestJdbc -# integration-test-for-multi-storage: -# name: Multi-storage integration test (${{ matrix.mode.label }}) -# runs-on: ubuntu-latest - -# services: -# postgres: -# image: postgres:17-alpine -# env: -# POSTGRES_USER: postgres -# POSTGRES_PASSWORD: postgres -# ports: -# - 5432:5432 - -# cassandra: -# image: cassandra:3.11 -# env: -# MAX_HEAP_SIZE: 2048m -# HEAP_NEWSIZE: 512m -# ports: -# - 9042:9042 - -# strategy: -# matrix: -# mode: -# - label: default -# group_commit_enabled: false -# - label: with_group_commit -# group_commit_enabled: true - -# steps: -# - uses: actions/checkout@v5 - -# - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) -# uses: actions/setup-java@v5 -# with: -# java-version: ${{ env.JAVA_VERSION }} -# distribution: ${{ env.JAVA_VENDOR }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test -# uses: actions/setup-java@v5 -# if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} -# with: -# java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} -# distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} - -# - name: Login to Oracle container registry -# uses: docker/login-action@v3 -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# with: -# registry: container-registry.oracle.com -# username: ${{ secrets.OCR_USERNAME }} -# password: ${{ secrets.OCR_TOKEN }} - -# - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test -# if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} -# run: | -# container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") -# docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" - -# - name: Setup Gradle -# uses: gradle/actions/setup-gradle@v4 - -# - name: Execute Gradle 'integrationTestMultiStorage' task -# run: ./gradlew integrationTestMultiStorage ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - -# - name: Upload Gradle test reports -# uses: actions/upload-artifact@v4 -# if: always() -# with: -# name: multi_storage_integration_test_reports_${{ matrix.mode.label }} -# path: core/build/reports/tests/integrationTestMultiStorage + integration-test-for-multi-storage: + name: Multi-storage integration test (${{ matrix.mode.label }}) + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:17-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + cassandra: + image: cassandra:3.11 + env: + MAX_HEAP_SIZE: 2048m + HEAP_NEWSIZE: 512m + ports: + - 9042:9042 + + strategy: + matrix: + mode: + - label: default + group_commit_enabled: false + - label: with_group_commit + group_commit_enabled: true + + steps: + - uses: actions/checkout@v5 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v5 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test + uses: actions/setup-java@v5 + if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}} + with: + java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} + distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }} + + - name: Login to Oracle container registry + uses: docker/login-action@v3 + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + with: + registry: container-registry.oracle.com + username: ${{ secrets.OCR_USERNAME }} + password: ${{ secrets.OCR_TOKEN }} + + - name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test + if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }} + run: | + container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}") + docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestMultiStorage' task + run: ./gradlew integrationTestMultiStorage ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + + - name: Upload Gradle test reports + uses: actions/upload-artifact@v4 + if: always() + with: + name: multi_storage_integration_test_reports_${{ matrix.mode.label }} + path: core/build/reports/tests/integrationTestMultiStorage From 9213310356797612202c8bb841dbd61f109e632d Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 3 Oct 2025 17:45:23 +0900 Subject: [PATCH 04/13] Apply suggestion [skip ci] --- .../com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java index c9d03c988b..5671a2df72 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java @@ -766,7 +766,7 @@ private boolean isMariaDB() { String version = connection.getMetaData().getDatabaseProductVersion(); return version.contains("MariaDB"); } catch (SQLException e) { - throw new RuntimeException("Get database product version failed"); + throw new RuntimeException("Get database product version failed", e); } } @@ -775,7 +775,7 @@ private boolean isTiDB() { String version = connection.getMetaData().getDatabaseProductVersion(); return version.contains("TiDB"); } catch (SQLException e) { - throw new RuntimeException("Get database product version failed"); + throw new RuntimeException("Get database product version failed", e); } } From 0171a3cc294a91e5e90786acb6547df6ade20669 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Mon, 20 Oct 2025 11:48:07 +0900 Subject: [PATCH 05/13] For integration test, remove param to set transaction isolation level --- .github/workflows/ci.yaml | 6 +++--- .../java/com/scalar/db/storage/jdbc/JdbcEnv.java | 5 ----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a27499e560..cd598e60de 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1962,7 +1962,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2036,7 +2036,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2110,7 +2110,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java index 069786e958..81b3bc1679 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java @@ -10,7 +10,6 @@ public final class JdbcEnv { private static final String PROP_JDBC_PASSWORD = "scalardb.jdbc.password"; private static final String PROP_JDBC_NORMAL_USERNAME = "scalardb.jdbc.normal_username"; private static final String PROP_JDBC_NORMAL_PASSWORD = "scalardb.jdbc.normal_password"; - private static final String PROP_JDBC_ISOLATION_LEVEL = "scalardb.jdbc.isolation_level"; private static final String DEFAULT_JDBC_URL = "jdbc:postgresql://localhost:5432/"; private static final String DEFAULT_JDBC_USERNAME = "postgres"; @@ -24,7 +23,6 @@ public static Properties getProperties(String testName) { String jdbcUrl = System.getProperty(PROP_JDBC_URL, DEFAULT_JDBC_URL); String username = System.getProperty(PROP_JDBC_USERNAME, DEFAULT_JDBC_USERNAME); String password = System.getProperty(PROP_JDBC_PASSWORD, DEFAULT_JDBC_PASSWORD); - String isolationLevel = System.getProperty(PROP_JDBC_ISOLATION_LEVEL); Properties properties = new Properties(); properties.setProperty(DatabaseConfig.CONTACT_POINTS, jdbcUrl); @@ -34,9 +32,6 @@ public static Properties getProperties(String testName) { properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN, "true"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_FILTERING, "true"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_ORDERING, "true"); - if (!Strings.isNullOrEmpty(isolationLevel)) { - properties.setProperty(JdbcConfig.ISOLATION_LEVEL, isolationLevel); - } // Add testName as a metadata schema suffix properties.setProperty( From ffd678285d438a7a9db4b64b332fd08d93b37812 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Tue, 21 Oct 2025 11:07:52 +0900 Subject: [PATCH 06/13] Set fail-fast to false for TiDB CI --- .github/workflows/ci.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cd598e60de..a27499e560 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1962,7 +1962,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2036,7 +2036,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2110,7 +2110,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() From a01161c1733c4a082ed7218a82f283fb925b0e20 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 24 Oct 2025 11:49:10 +0900 Subject: [PATCH 07/13] Add RdbEngineTidb --- ...tAdminIntegrationTestWithJdbcDatabase.java | 97 ++++++++++++- ...bcAdminCaseSensitivityIntegrationTest.java | 131 +++++++++++++++++- .../jdbc/JdbcAdminIntegrationTest.java | 131 +++++++++++++++++- .../com/scalar/db/storage/jdbc/JdbcEnv.java | 1 - .../scalar/db/storage/jdbc/JdbcTestUtils.java | 4 + ...nAdminIntegrationTestWithJdbcDatabase.java | 97 ++++++++++++- .../JdbcTransactionAdminIntegrationTest.java | 97 ++++++++++++- .../java/com/scalar/db/common/CoreError.java | 12 ++ .../db/storage/jdbc/RdbEngineFactory.java | 31 ++++- .../scalar/db/storage/jdbc/RdbEngineTidb.java | 25 ++++ 10 files changed, 619 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineTidb.java diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java index 2045d48daa..103acf6b21 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java @@ -73,11 +73,17 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTidb() { + return JdbcTestUtils.isTidb(rdbEngine); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) - || JdbcTestUtils.isSqlite(rdbEngine); + || JdbcTestUtils.isSqlite(rdbEngine) + || isTidb(); } @SuppressWarnings("unused") @@ -301,6 +307,95 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } } + @Test + @EnabledIf("isTidb") + public void + alterColumnType_Tidb_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() + throws ExecutionException, TransactionException { + try { + // Arrange + Map options = getCreationOptions(); + TableMetadata.Builder currentTableMetadataBuilder = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.INT) + .addColumn("c4", DataType.BIGINT) + .addColumn("c5", DataType.FLOAT) + .addColumn("c6", DataType.DOUBLE) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.DATE) + .addColumn("c10", DataType.TIME) + .addColumn("c11", DataType.TIMESTAMPTZ) + .addColumn("c12", DataType.TIMESTAMP) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC); + TableMetadata currentTableMetadata = currentTableMetadataBuilder.build(); + admin.createTable(namespace1, TABLE4, currentTableMetadata, options); + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", 1) + .bigIntValue("c4", 2L) + .floatValue("c5", 3.0f) + .doubleValue("c6", 4.0d) + .textValue("c7", "5") + .blobValue("c8", "6".getBytes(StandardCharsets.UTF_8)) + .dateValue("c9", LocalDate.now(ZoneId.of("UTC"))) + .timeValue("c10", LocalTime.now(ZoneId.of("UTC"))) + .timestampTZValue("c11", Instant.now()) + .timestampValue("c12", LocalDateTime.now(ZoneOffset.UTC)); + transactionalInsert(insert.build()); + + // Act Assert + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c3", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c5", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c6", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c7", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c8", DataType.TEXT)) + .isInstanceOf(UnsupportedOperationException.class); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c9", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c10", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c11", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c12", DataType.TEXT)) + .doesNotThrowAnyException(); + + TableMetadata expectedTableMetadata = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.TEXT) + .addColumn("c4", DataType.TEXT) + .addColumn("c5", DataType.TEXT) + .addColumn("c6", DataType.TEXT) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.TEXT) + .addColumn("c10", DataType.TEXT) + .addColumn("c11", DataType.TEXT) + .addColumn("c12", DataType.TEXT) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC) + .build(); + assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); + } finally { + admin.dropTable(namespace1, TABLE4, true); + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminCaseSensitivityIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminCaseSensitivityIntegrationTest.java index 9c983ad1c7..1f64112edf 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminCaseSensitivityIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminCaseSensitivityIntegrationTest.java @@ -71,11 +71,17 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTidb() { + return JdbcTestUtils.isTidb(rdbEngine); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) - || JdbcTestUtils.isSqlite(rdbEngine); + || JdbcTestUtils.isSqlite(rdbEngine) + || isTidb(); } @SuppressWarnings("unused") @@ -371,6 +377,129 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } } + @Test + @EnabledIf("isTidb") + public void + alterColumnType_Tidb_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() + throws ExecutionException { + try (DistributedStorage storage = storageFactory.getStorage()) { + // Arrange + Map options = getCreationOptions(); + TableMetadata currentTableMetadata = + TableMetadata.newBuilder() + .addColumn(getColumnName1(), DataType.INT) + .addColumn(getColumnName2(), DataType.INT) + .addColumn(getColumnName3(), DataType.INT) + .addColumn(getColumnName4(), DataType.BIGINT) + .addColumn(getColumnName5(), DataType.FLOAT) + .addColumn(getColumnName6(), DataType.DOUBLE) + .addColumn(getColumnName7(), DataType.TEXT) + .addColumn(getColumnName8(), DataType.BLOB) + .addColumn(getColumnName9(), DataType.DATE) + .addColumn(getColumnName10(), DataType.TIME) + .addColumn(getColumnName11(), DataType.TIMESTAMP) + .addColumn(getColumnName12(), DataType.TIMESTAMPTZ) + .addPartitionKey(getColumnName1()) + .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC) + .build(); + + admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options); + PutBuilder.Buildable put = + Put.newBuilder() + .namespace(getNamespace1()) + .table(getTable4()) + .partitionKey(Key.ofInt(getColumnName1(), 1)) + .clusteringKey(Key.ofInt(getColumnName2(), 2)) + .intValue(getColumnName3(), 1) + .bigIntValue(getColumnName4(), 2L) + .floatValue(getColumnName5(), 3.0f) + .doubleValue(getColumnName6(), 4.0d) + .textValue(getColumnName7(), "5") + .blobValue(getColumnName8(), "6".getBytes(StandardCharsets.UTF_8)) + .dateValue(getColumnName9(), LocalDate.now(ZoneId.of("UTC"))) + .timeValue(getColumnName10(), LocalTime.now(ZoneId.of("UTC"))) + .timestampValue(getColumnName11(), LocalDateTime.now(ZoneOffset.UTC)) + .timestampTZValue(getColumnName12(), Instant.now()); + + storage.put(put.build()); + storage.close(); + + // Act Assert + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName3(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName4(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName5(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName6(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName7(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName8(), DataType.TEXT)) + .isInstanceOf(UnsupportedOperationException.class); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName9(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName10(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName11(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName12(), DataType.TEXT)) + .doesNotThrowAnyException(); + + TableMetadata expectedTableMetadata = + TableMetadata.newBuilder() + .addColumn(getColumnName1(), DataType.INT) + .addColumn(getColumnName2(), DataType.INT) + .addColumn(getColumnName3(), DataType.TEXT) + .addColumn(getColumnName4(), DataType.TEXT) + .addColumn(getColumnName5(), DataType.TEXT) + .addColumn(getColumnName6(), DataType.TEXT) + .addColumn(getColumnName7(), DataType.TEXT) + .addColumn(getColumnName8(), DataType.BLOB) + .addColumn(getColumnName9(), DataType.TEXT) + .addColumn(getColumnName10(), DataType.TEXT) + .addColumn(getColumnName11(), DataType.TEXT) + .addColumn(getColumnName12(), DataType.TEXT) + .addPartitionKey(getColumnName1()) + .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC) + .build(); + assertThat(admin.getTableMetadata(getNamespace1(), getTable4())) + .isEqualTo(expectedTableMetadata); + } finally { + admin.dropTable(getNamespace1(), getTable4(), true); + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java index aef7b4c00f..a9a5a205a2 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java @@ -72,11 +72,17 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTidb() { + return JdbcTestUtils.isTidb(rdbEngine); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) - || JdbcTestUtils.isSqlite(rdbEngine); + || JdbcTestUtils.isSqlite(rdbEngine) + || isTidb(); } @SuppressWarnings("unused") @@ -372,6 +378,129 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } } + @Test + @EnabledIf("isTidb") + public void + alterColumnType_Tidb_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() + throws ExecutionException { + try (DistributedStorage storage = storageFactory.getStorage()) { + // Arrange + Map options = getCreationOptions(); + TableMetadata currentTableMetadata = + TableMetadata.newBuilder() + .addColumn(getColumnName1(), DataType.INT) + .addColumn(getColumnName2(), DataType.INT) + .addColumn(getColumnName3(), DataType.INT) + .addColumn(getColumnName4(), DataType.BIGINT) + .addColumn(getColumnName5(), DataType.FLOAT) + .addColumn(getColumnName6(), DataType.DOUBLE) + .addColumn(getColumnName7(), DataType.TEXT) + .addColumn(getColumnName8(), DataType.BLOB) + .addColumn(getColumnName9(), DataType.DATE) + .addColumn(getColumnName10(), DataType.TIME) + .addColumn(getColumnName11(), DataType.TIMESTAMP) + .addColumn(getColumnName12(), DataType.TIMESTAMPTZ) + .addPartitionKey(getColumnName1()) + .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC) + .build(); + + admin.createTable(getNamespace1(), getTable4(), currentTableMetadata, options); + PutBuilder.Buildable put = + Put.newBuilder() + .namespace(getNamespace1()) + .table(getTable4()) + .partitionKey(Key.ofInt(getColumnName1(), 1)) + .clusteringKey(Key.ofInt(getColumnName2(), 2)) + .intValue(getColumnName3(), 1) + .bigIntValue(getColumnName4(), 2L) + .floatValue(getColumnName5(), 3.0f) + .doubleValue(getColumnName6(), 4.0d) + .textValue(getColumnName7(), "5") + .blobValue(getColumnName8(), "6".getBytes(StandardCharsets.UTF_8)) + .dateValue(getColumnName9(), LocalDate.now(ZoneId.of("UTC"))) + .timeValue(getColumnName10(), LocalTime.now(ZoneId.of("UTC"))) + .timestampValue(getColumnName11(), LocalDateTime.now(ZoneOffset.UTC)) + .timestampTZValue(getColumnName12(), Instant.now()); + + storage.put(put.build()); + storage.close(); + + // Act Assert + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName3(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName4(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName5(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName6(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName7(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName8(), DataType.TEXT)) + .isInstanceOf(UnsupportedOperationException.class); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName9(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName10(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName11(), DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode( + () -> + admin.alterColumnType( + getNamespace1(), getTable4(), getColumnName12(), DataType.TEXT)) + .doesNotThrowAnyException(); + + TableMetadata expectedTableMetadata = + TableMetadata.newBuilder() + .addColumn(getColumnName1(), DataType.INT) + .addColumn(getColumnName2(), DataType.INT) + .addColumn(getColumnName3(), DataType.TEXT) + .addColumn(getColumnName4(), DataType.TEXT) + .addColumn(getColumnName5(), DataType.TEXT) + .addColumn(getColumnName6(), DataType.TEXT) + .addColumn(getColumnName7(), DataType.TEXT) + .addColumn(getColumnName8(), DataType.BLOB) + .addColumn(getColumnName9(), DataType.TEXT) + .addColumn(getColumnName10(), DataType.TEXT) + .addColumn(getColumnName11(), DataType.TEXT) + .addColumn(getColumnName12(), DataType.TEXT) + .addPartitionKey(getColumnName1()) + .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC) + .build(); + assertThat(admin.getTableMetadata(getNamespace1(), getTable4())) + .isEqualTo(expectedTableMetadata); + } finally { + admin.dropTable(getNamespace1(), getTable4(), true); + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java index 81b3bc1679..f00916a0d3 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java @@ -2,7 +2,6 @@ import com.scalar.db.config.DatabaseConfig; import java.util.Properties; -import org.assertj.core.util.Strings; public final class JdbcEnv { private static final String PROP_JDBC_URL = "scalardb.jdbc.url"; diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcTestUtils.java index eda8d6843c..e3d05afd71 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcTestUtils.java @@ -90,6 +90,10 @@ public static boolean isMariaDB(RdbEngineStrategy rdbEngine) { return rdbEngine instanceof RdbEngineMariaDB; } + public static boolean isTidb(RdbEngineStrategy rdbEngine) { + return rdbEngine instanceof RdbEngineTidb; + } + /** * Filters the data types based on the RDB engine and the excluded data types. * diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java index 84ff64b846..897d05c272 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java @@ -73,11 +73,17 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTiDB() { + return JdbcTestUtils.isTidb(rdbEngine); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) - || JdbcTestUtils.isSqlite(rdbEngine); + || JdbcTestUtils.isSqlite(rdbEngine) + || isTiDB(); } @SuppressWarnings("unused") @@ -301,6 +307,95 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } } + @Test + @EnabledIf("isTiDB") + public void + alterColumnType_TiDB_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() + throws ExecutionException, TransactionException { + try { + // Arrange + Map options = getCreationOptions(); + TableMetadata.Builder currentTableMetadataBuilder = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.INT) + .addColumn("c4", DataType.BIGINT) + .addColumn("c5", DataType.FLOAT) + .addColumn("c6", DataType.DOUBLE) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.DATE) + .addColumn("c10", DataType.TIME) + .addColumn("c11", DataType.TIMESTAMPTZ) + .addColumn("c12", DataType.TIMESTAMP) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC); + TableMetadata currentTableMetadata = currentTableMetadataBuilder.build(); + admin.createTable(namespace1, TABLE4, currentTableMetadata, options); + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", 1) + .bigIntValue("c4", 2L) + .floatValue("c5", 3.0f) + .doubleValue("c6", 4.0d) + .textValue("c7", "5") + .blobValue("c8", "6".getBytes(StandardCharsets.UTF_8)) + .dateValue("c9", LocalDate.now(ZoneId.of("UTC"))) + .timeValue("c10", LocalTime.now(ZoneId.of("UTC"))) + .timestampTZValue("c11", Instant.now()) + .timestampValue("c12", LocalDateTime.now(ZoneOffset.UTC)); + transactionalInsert(insert.build()); + + // Act Assert + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c3", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c5", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c6", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c7", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c8", DataType.TEXT)) + .isInstanceOf(UnsupportedOperationException.class); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c9", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c10", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c11", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c12", DataType.TEXT)) + .doesNotThrowAnyException(); + + TableMetadata expectedTableMetadata = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.TEXT) + .addColumn("c4", DataType.TEXT) + .addColumn("c5", DataType.TEXT) + .addColumn("c6", DataType.TEXT) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.TEXT) + .addColumn("c10", DataType.TEXT) + .addColumn("c11", DataType.TEXT) + .addColumn("c12", DataType.TEXT) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC) + .build(); + assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); + } finally { + admin.dropTable(namespace1, TABLE4, true); + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java index b7bc6fe55a..33c6b05c3f 100644 --- a/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java @@ -146,11 +146,17 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTidb() { + return JdbcTestUtils.isTidb(rdbEngine); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) - || JdbcTestUtils.isSqlite(rdbEngine); + || JdbcTestUtils.isSqlite(rdbEngine) + || isTidb(); } @SuppressWarnings("unused") @@ -374,6 +380,95 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } } + @Test + @EnabledIf("isTidb") + public void + alterColumnType_Tidb_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() + throws ExecutionException, TransactionException { + try { + // Arrange + Map options = getCreationOptions(); + TableMetadata.Builder currentTableMetadataBuilder = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.INT) + .addColumn("c4", DataType.BIGINT) + .addColumn("c5", DataType.FLOAT) + .addColumn("c6", DataType.DOUBLE) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.DATE) + .addColumn("c10", DataType.TIME) + .addColumn("c11", DataType.TIMESTAMPTZ) + .addColumn("c12", DataType.TIMESTAMP) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC); + TableMetadata currentTableMetadata = currentTableMetadataBuilder.build(); + admin.createTable(namespace1, TABLE4, currentTableMetadata, options); + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", 1) + .bigIntValue("c4", 2L) + .floatValue("c5", 3.0f) + .doubleValue("c6", 4.0d) + .textValue("c7", "5") + .blobValue("c8", "6".getBytes(StandardCharsets.UTF_8)) + .dateValue("c9", LocalDate.now(ZoneId.of("UTC"))) + .timeValue("c10", LocalTime.now(ZoneId.of("UTC"))) + .timestampTZValue("c11", Instant.now()) + .timestampValue("c12", LocalDateTime.now(ZoneOffset.UTC)); + transactionalInsert(insert.build()); + + // Act Assert + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c3", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c5", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c6", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c7", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c8", DataType.TEXT)) + .isInstanceOf(UnsupportedOperationException.class); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c9", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c10", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c11", DataType.TEXT)) + .doesNotThrowAnyException(); + assertThatCode(() -> admin.alterColumnType(namespace1, TABLE4, "c12", DataType.TEXT)) + .doesNotThrowAnyException(); + + TableMetadata expectedTableMetadata = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.INT) + .addColumn("c3", DataType.TEXT) + .addColumn("c4", DataType.TEXT) + .addColumn("c5", DataType.TEXT) + .addColumn("c6", DataType.TEXT) + .addColumn("c7", DataType.TEXT) + .addColumn("c8", DataType.BLOB) + .addColumn("c9", DataType.TEXT) + .addColumn("c10", DataType.TEXT) + .addColumn("c11", DataType.TEXT) + .addColumn("c12", DataType.TEXT) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.ASC) + .build(); + assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); + } finally { + admin.dropTable(namespace1, TABLE4, true); + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/main/java/com/scalar/db/common/CoreError.java b/core/src/main/java/com/scalar/db/common/CoreError.java index 259b029be9..e02dc1f178 100644 --- a/core/src/main/java/com/scalar/db/common/CoreError.java +++ b/core/src/main/java/com/scalar/db/common/CoreError.java @@ -808,6 +808,12 @@ public enum CoreError implements ScalarDbError { "Db2 does not support column type conversion from %s to %s", "", ""), + JDBC_TIDB_UNSUPPORTED_COLUMN_TYPE_CONVERSION( + Category.USER_ERROR, + "0241", + "TiDB does not support column type conversion from %s to %s", + "", + ""), // // Errors for the concurrency error category @@ -1114,6 +1120,12 @@ public enum CoreError implements ScalarDbError { "Altering a column type failed. Table: %s; Column: %s; New column type: %s", "", ""), + JDBC_MYSQL_GETTING_CONNECTION_METADATA_FAILED( + Category.INTERNAL_ERROR, + "0063", + "Getting the MySQL JDBC connection metadata failed.", + "", + ""), // // Errors for the unknown transaction status error category diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineFactory.java b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineFactory.java index b8588d6e8b..3718411b28 100644 --- a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineFactory.java +++ b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineFactory.java @@ -1,6 +1,9 @@ package com.scalar.db.storage.jdbc; import com.scalar.db.common.CoreError; +import java.sql.Connection; +import java.sql.SQLException; +import org.apache.commons.dbcp2.BasicDataSource; /** Factory class of subclasses of {@link RdbEngineStrategy} */ public final class RdbEngineFactory { @@ -12,7 +15,7 @@ public static RdbEngineStrategy create(JdbcConfig config) { String jdbcUrl = config.getJdbcUrl(); if (jdbcUrl.startsWith("jdbc:mysql:")) { - return new RdbEngineMysql(config); + return createMysqlOrTidbEngine(config); } else if (jdbcUrl.startsWith("jdbc:postgresql:")) { return new RdbEnginePostgresql(); } else if (jdbcUrl.startsWith("jdbc:oracle:")) { @@ -32,4 +35,30 @@ public static RdbEngineStrategy create(JdbcConfig config) { CoreError.JDBC_RDB_ENGINE_NOT_SUPPORTED.buildMessage(jdbcUrl)); } } + + /** + * This creates a RdbEngine for MySQL or TiDB. Since TiDB uses the same connection string as + * MySQL, we can't determine if the storage is TiDB or MySQL by parsing the connection string, so + * we need to establish a connection and check the metadata to tell them apart. + * + * @param config the config + * @return a {@link RdbEngineMysql} or {@link RdbEngineTidb}. + */ + private static RdbEngineStrategy createMysqlOrTidbEngine(JdbcConfig config) { + RdbEngineMysql mysqlEngine = new RdbEngineMysql(config); + try (BasicDataSource dataSource = JdbcUtils.initDataSourceForAdmin(config, mysqlEngine); + Connection connection = dataSource.getConnection()) { + String version = connection.getMetaData().getDatabaseProductVersion(); + if (version.contains("TiDB")) { + return new RdbEngineTidb(config); + } else { + return mysqlEngine; + } + } catch (SQLException e) { + // We can't throw a checked exception here because it would break backward compatibility since + // the calling method is executed in constructor of JdbcAdmin or JdbcService + throw new RuntimeException( + CoreError.JDBC_MYSQL_GETTING_CONNECTION_METADATA_FAILED.buildMessage(e), e); + } + } } diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineTidb.java b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineTidb.java new file mode 100644 index 0000000000..6e66800293 --- /dev/null +++ b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineTidb.java @@ -0,0 +1,25 @@ +package com.scalar.db.storage.jdbc; + +import com.scalar.db.common.CoreError; +import com.scalar.db.io.DataType; + +/** + * This implements a RdbEngine for TiDB that extends MySQL one. TiDB is MySQL compatible and uses + * the same connection string, so special handling is needed to instantiate it, cf. {@link + * RdbEngineFactory#create(JdbcConfig)} + */ +public class RdbEngineTidb extends RdbEngineMysql { + + RdbEngineTidb(JdbcConfig config) { + super(config); + } + + @Override + public void throwIfAlterColumnTypeNotSupported(DataType from, DataType to) { + if (from == DataType.BLOB && to == DataType.TEXT) { + throw new UnsupportedOperationException( + CoreError.JDBC_TIDB_UNSUPPORTED_COLUMN_TYPE_CONVERSION.buildMessage( + from.toString(), to.toString())); + } + } +} From d6f88d65d1a3cf92b711227a4a6b3d8946d34ba1 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 24 Oct 2025 11:52:38 +0900 Subject: [PATCH 08/13] Fix CI --- .github/workflows/ci.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a27499e560..cd598e60de 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1962,7 +1962,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2036,7 +2036,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() @@ -2110,7 +2110,7 @@ jobs: uses: gradle/actions/setup-gradle@v5 - name: Execute Gradle 'integrationTestJdbc' task - run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= -Dscalardb.jdbc.isolation_level=REPEATABLE_READ ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} + run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mysql://localhost:4000 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password= ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }} - name: Upload Gradle test reports if: always() From 6b44d6f523962ff61289282f8e470e05d3d54c1f Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 24 Oct 2025 12:02:17 +0900 Subject: [PATCH 09/13] Fix camel case --- .../scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java | 4 ++-- ...tionTransactionAdminIntegrationTestWithJdbcDatabase.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java index f59411c4b5..0167071d95 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java @@ -635,7 +635,7 @@ private List createExistingMysqlDatabaseWithAllDataTypes(String namesp UNSUPPORTED_DATA_TYPES_MYSQL.stream() .filter(type -> !type.equalsIgnoreCase("JSON")) .collect(Collectors.toList()))); - } else if (isTiDB()) { + } else if (isTidb()) { data.addAll( prepareCreateNonImportableTableSql( namespace, @@ -891,7 +891,7 @@ private boolean isMariaDB() { } } - private boolean isTiDB() { + private boolean isTidb() { try (Connection connection = dataSource.getConnection()) { String version = connection.getMetaData().getDatabaseProductVersion(); return version.contains("TiDB"); diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java index 897d05c272..c8c2b0df1f 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java @@ -74,7 +74,7 @@ private boolean isSqlite() { } @SuppressWarnings("unused") - private boolean isTiDB() { + private boolean isTidb() { return JdbcTestUtils.isTidb(rdbEngine); } @@ -83,7 +83,7 @@ private boolean isColumnTypeConversionToTextNotFullySupported() { return JdbcTestUtils.isDb2(rdbEngine) || JdbcTestUtils.isOracle(rdbEngine) || JdbcTestUtils.isSqlite(rdbEngine) - || isTiDB(); + || isTidb(); } @SuppressWarnings("unused") @@ -308,7 +308,7 @@ public void renameColumn_Db2_ForPrimaryOrIndexKeyColumn_ShouldThrowUnsupportedOp } @Test - @EnabledIf("isTiDB") + @EnabledIf("isTidb") public void alterColumnType_TiDB_AlterColumnTypeFromEachExistingDataTypeToText_ShouldAlterColumnTypesCorrectlyIfSupported() throws ExecutionException, TransactionException { From cb2234dd845455fc3de977f643542f8f6c89e076 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 24 Oct 2025 13:19:48 +0900 Subject: [PATCH 10/13] Disable int test for BLOB to TEXT alteration in JdbcAdminImportTableIntegrationTest --- .../JdbcAdminImportTableIntegrationTest.java | 59 ++++++++++++++++++- .../jdbc/JdbcAdminImportTestUtils.java | 2 +- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTableIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTableIntegrationTest.java index 24dbca8db4..faab3ab1a1 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTableIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTableIntegrationTest.java @@ -88,9 +88,18 @@ private boolean isSqlite() { return JdbcEnv.isSqlite(); } + @SuppressWarnings("unused") + private boolean isTidb() { + return testUtils.isTidb(); + } + @SuppressWarnings("unused") private boolean isColumnTypeConversionToTextNotFullySupported() { - return JdbcEnv.isDb2() || JdbcEnv.isSqlServer() || JdbcEnv.isOracle() || JdbcEnv.isSqlite(); + return JdbcEnv.isDb2() + || JdbcEnv.isSqlServer() + || JdbcEnv.isOracle() + || JdbcEnv.isSqlite() + || isTidb(); } @SuppressWarnings("unused") @@ -219,6 +228,54 @@ public void importTable_ForUnsupportedDatabase_ShouldThrowUnsupportedOperationEx } } + @Test + @EnabledIf("isTidb") + public void + alterColumnType_Tidb_AlterColumnTypeFromEachExistingDataTypeToText_ForImportedTable_ShouldAlterColumnTypesCorrectly() + throws Exception { + // Arrange + testDataList.addAll(createExistingDatabaseWithAllDataTypes()); + for (TestData testData : testDataList) { + if (testData.isImportableTable()) { + admin.importTable( + getNamespace(), + testData.getTableName(), + Collections.emptyMap(), + testData.getOverrideColumnsType()); + } + } + + for (TestData testData : testDataList) { + if (testData.isImportableTable()) { + // Act + TableMetadata metadata = testData.getTableMetadata(); + for (String column : metadata.getColumnNames()) { + if (!metadata.getPartitionKeyNames().contains(column) + && !metadata.getClusteringKeyNames().contains(column)) { + if (metadata.getColumnDataType(column).equals(DataType.BLOB)) { + // Conversion from BLOB to TEXT is not supported in TiDB + continue; + } + admin.alterColumnType(getNamespace(), testData.getTableName(), column, DataType.TEXT); + } + } + + // Assert + TableMetadata newMetadata = admin.getTableMetadata(getNamespace(), testData.getTableName()); + assertThat(newMetadata).isNotNull(); + for (String column : metadata.getColumnNames()) { + if (!metadata.getPartitionKeyNames().contains(column) + && !metadata.getClusteringKeyNames().contains(column)) { + if (metadata.getColumnDataType(column).equals(DataType.BLOB)) { + continue; + } + assertThat(newMetadata.getColumnDataType(column)).isEqualTo(DataType.TEXT); + } + } + } + } + } + @Test @Override @DisabledIf("isWideningColumnTypeConversionNotFullySupported") diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java index 0167071d95..92ec1e190e 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminImportTestUtils.java @@ -891,7 +891,7 @@ private boolean isMariaDB() { } } - private boolean isTidb() { + boolean isTidb() { try (Connection connection = dataSource.getConnection()) { String version = connection.getMetaData().getDatabaseProductVersion(); return version.contains("TiDB"); From aa8b9cabd1d63991a758e1eb7e35fea3e8a38120 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Fri, 24 Oct 2025 14:08:44 +0900 Subject: [PATCH 11/13] Remove dot from the end of an error message [skip ci] --- core/src/main/java/com/scalar/db/common/CoreError.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/scalar/db/common/CoreError.java b/core/src/main/java/com/scalar/db/common/CoreError.java index e02dc1f178..97359d084d 100644 --- a/core/src/main/java/com/scalar/db/common/CoreError.java +++ b/core/src/main/java/com/scalar/db/common/CoreError.java @@ -1123,7 +1123,7 @@ public enum CoreError implements ScalarDbError { JDBC_MYSQL_GETTING_CONNECTION_METADATA_FAILED( Category.INTERNAL_ERROR, "0063", - "Getting the MySQL JDBC connection metadata failed.", + "Getting the MySQL JDBC connection metadata failed", "", ""), From 957b7affb05cd23a1a07f2a461a423b90eb48331 Mon Sep 17 00:00:00 2001 From: Vincent Guilpain Date: Tue, 28 Oct 2025 14:43:55 +0900 Subject: [PATCH 12/13] Apply spotless --- core/src/main/java/com/scalar/db/common/CoreError.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/main/java/com/scalar/db/common/CoreError.java b/core/src/main/java/com/scalar/db/common/CoreError.java index 97359d084d..6a39e8e39a 100644 --- a/core/src/main/java/com/scalar/db/common/CoreError.java +++ b/core/src/main/java/com/scalar/db/common/CoreError.java @@ -1121,11 +1121,7 @@ public enum CoreError implements ScalarDbError { "", ""), JDBC_MYSQL_GETTING_CONNECTION_METADATA_FAILED( - Category.INTERNAL_ERROR, - "0063", - "Getting the MySQL JDBC connection metadata failed", - "", - ""), + Category.INTERNAL_ERROR, "0063", "Getting the MySQL JDBC connection metadata failed", "", ""), // // Errors for the unknown transaction status error category From b486007401ca7d6e94b49795d43e2c4ddf653da4 Mon Sep 17 00:00:00 2001 From: brfrn169 Date: Tue, 28 Oct 2025 23:50:26 +0900 Subject: [PATCH 13/13] Add fail-fast --- .github/workflows/ci.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4e5ec5df49..fd28968bee 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1902,6 +1902,7 @@ jobs: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: mode: - label: default @@ -1976,6 +1977,7 @@ jobs: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: mode: - label: default @@ -2050,6 +2052,7 @@ jobs: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: mode: - label: default