├── .editorconfig
├── .github
├── ISSUE_TEMPLATE
│ ├── bug.yml
│ ├── config.yml
│ └── feature.yml
├── dependabot.yml
├── pull_request_template.md
├── setup-unit.sh
└── workflows
│ ├── main.yml
│ └── publish-docker-images.yml
├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── docker-compose-ci.yml
├── dockerfiles
└── snowflake-cli.Dockerfile
├── environment_db2
├── environment_druid
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local-setup-unit.sh
├── lombok.config
├── plugin-jdbc-arrow-flight
├── build.gradle
└── src
│ └── main
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── arrowflight
│ │ ├── ArrowFlightCellConverter.java
│ │ ├── ArrowFlightConnectionInterface.java
│ │ ├── Queries.java
│ │ ├── Query.java
│ │ ├── Trigger.java
│ │ └── package-info.java
│ └── resources
│ └── icons
│ ├── io.kestra.plugin.jdbc.arrowflight.svg
│ └── plugin-icon.svg
├── plugin-jdbc-as400
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── as400
│ │ │ ├── As400CellConverter.java
│ │ │ ├── As400ConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.as400.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── as400
│ │ └── As400DriverTest.java
│ └── resources
│ ├── allure.properties
│ └── logback.xml
├── plugin-jdbc-clickhouse
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── clickhouse
│ │ │ ├── BulkInsert.java
│ │ │ ├── ClickHouseCellConverter.java
│ │ │ ├── ClickHouseLocalCLI.java
│ │ │ ├── ClickhouseConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.clickhouse.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── clickhouse
│ │ ├── AbstractClickHouseTest.java
│ │ ├── ClickHouseDriverTest.java
│ │ ├── ClickHouseLocalCLITest.java
│ │ ├── ClickHouseQueriesTest.java
│ │ ├── ClickHouseTest.java
│ │ └── ClickHouseTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── clickhouse-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── clickhouse.sql
│ └── clickhouse_queries.sql
├── plugin-jdbc-db2
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── db2
│ │ │ ├── Db2CellConverter.java
│ │ │ ├── Db2ConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.db2.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── db2
│ │ ├── DB2QueriesTest.java
│ │ ├── Db2DriverTest.java
│ │ ├── Db2Test.java
│ │ └── Db2TriggerTest.java
│ └── resources
│ ├── flows
│ ├── db2-listen.yml
│ └── read_db2.yml
│ └── scripts
│ ├── db2.sql
│ └── db2_queries.sql
├── plugin-jdbc-dremio
├── build.gradle
└── src
│ └── main
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── dremio
│ │ ├── DremioCellConverter.java
│ │ ├── DremioConnectionInterface.java
│ │ ├── Queries.java
│ │ ├── Query.java
│ │ ├── Trigger.java
│ │ └── package-info.java
│ └── resources
│ └── icons
│ ├── io.kestra.plugin.jdbc.dremio.svg
│ └── plugin-icon.svg
├── plugin-jdbc-druid
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── druid
│ │ │ ├── DruidCellConverter.java
│ │ │ ├── DruidConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.druid.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── druid
│ │ ├── DruidDriverTest.java
│ │ ├── DruidQueriesTest.java
│ │ ├── DruidTest.java
│ │ ├── DruidTestHelper.java
│ │ └── DruidTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── druid-listen.yml
│ └── logback.xml
├── plugin-jdbc-duckdb
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── duckdb
│ │ │ ├── DuckDbCellConverter.java
│ │ │ ├── DuckDbQueryInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.duckdb.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── duckdb
│ │ ├── DuckDBTriggerTest.java
│ │ ├── DuckDbDriverTest.java
│ │ ├── DuckDbQueriesTest.java
│ │ ├── DuckDbTest.java
│ │ ├── DuckDbTestUtils.java
│ │ └── RunnerTest.java
│ └── resources
│ ├── allure.properties
│ ├── db
│ ├── duck.db
│ └── file.db
│ ├── flows
│ └── duckdb-listen.yml
│ ├── full.csv
│ ├── logback.xml
│ └── sanity-checks
│ └── all_duckdb.yaml
├── plugin-jdbc-mariadb
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── mariadb
│ │ │ ├── MariaDbCellConverter.java
│ │ │ ├── MariaDbConnectionInterface.java
│ │ │ ├── MariaDbUtils.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.mariadb.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── mariadb
│ │ ├── LoadTest.java
│ │ ├── MariaDbDriverTest.java
│ │ ├── MariaDbTest.java
│ │ ├── MariaDbTriggerTest.java
│ │ └── QueriesMariaDbTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ ├── mysql-listen.yml
│ └── read_mysql.yaml
│ ├── load.csv
│ ├── logback.xml
│ └── scripts
│ ├── mariadb.sql
│ ├── mariadb_insert.sql
│ └── mariadb_queries.sql
├── plugin-jdbc-mysql
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── mysql
│ │ │ ├── Batch.java
│ │ │ ├── MySqlConnectionInterface.java
│ │ │ ├── MysqlCellConverter.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.mysql.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── mysql
│ │ ├── BatchTest.java
│ │ ├── LoadTest.java
│ │ ├── MySqlTriggerTest.java
│ │ ├── MysqlDriverTest.java
│ │ ├── MysqlTest.java
│ │ └── QueriesMysqlTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ ├── mysql-listen.yml
│ └── read_mysql.yaml
│ ├── load.csv
│ ├── logback.xml
│ └── scripts
│ ├── mysql.sql
│ ├── mysql_insert.sql
│ └── mysql_queries.sql
├── plugin-jdbc-oracle
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── oracle
│ │ │ ├── Batch.java
│ │ │ ├── OracleCellConverter.java
│ │ │ ├── OracleConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.oracle.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── oracle
│ │ ├── BatchTest.java
│ │ ├── OracleDriverTest.java
│ │ ├── OracleQueriesTest.java
│ │ ├── OracleTest.java
│ │ └── OracleTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── oracle-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── oracle.sql
│ ├── oracle_insert.sql
│ └── oracle_queries.sql
├── plugin-jdbc-pinot
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── pinot
│ │ │ ├── PinotCellConverter.java
│ │ │ ├── PinotConnectionInterface.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.pinot.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── pinot
│ │ ├── PinotDriverTest.java
│ │ ├── PinotQueriesTest.java
│ │ ├── PinotTest.java
│ │ └── PinotTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── pinot-listen.yml
│ └── logback.xml
├── plugin-jdbc-postgres
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── postgresql
│ │ │ ├── AbstractCopy.java
│ │ │ ├── Batch.java
│ │ │ ├── CopyIn.java
│ │ │ ├── CopyOut.java
│ │ │ ├── PostgresCellConverter.java
│ │ │ ├── PostgresConnectionInterface.java
│ │ │ ├── PostgresService.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.postgresql.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── postgresql
│ │ ├── BatchTest.java
│ │ ├── CopyTest.java
│ │ ├── PgsqlDriverTest.java
│ │ ├── PgsqlTest.java
│ │ ├── PgsqlTriggerTest.java
│ │ ├── QueriesPostgresTest.java
│ │ └── TestUtils.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ ├── pgsql-listen.yml
│ └── update_postgres.yaml
│ ├── logback.xml
│ ├── sanity-checks
│ └── all_postgres.yaml
│ └── scripts
│ ├── postgres.sql
│ ├── postgres_insert.sql
│ └── postgres_queries.sql
├── plugin-jdbc-redshift
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── redshift
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── RedshiftCellConverter.java
│ │ │ ├── RedshiftConnectionInterface.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.redshift.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── redshift
│ │ ├── RedshiftQueriesTest.java
│ │ ├── RedshiftTest.java
│ │ └── RedshiftTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── redshift-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── redshift.sql
│ └── redshift_queries.sql
├── plugin-jdbc-snowflake
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── snowflake
│ │ │ ├── AbstractSnowflakeConnection.java
│ │ │ ├── Download.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── RSAKeyPairUtils.java
│ │ │ ├── SnowflakeCLI.java
│ │ │ ├── SnowflakeCellConverter.java
│ │ │ ├── SnowflakeInterface.java
│ │ │ ├── Trigger.java
│ │ │ ├── Upload.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.snowflake.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── snowflake
│ │ ├── RSAKeyPairUtilsTest.java
│ │ ├── SnowflakeCLITest.java
│ │ ├── SnowflakeDriverTest.java
│ │ ├── SnowflakeQueriesTest.java
│ │ ├── SnowflakeTest.java
│ │ ├── SnowflakeTriggerTest.java
│ │ └── UploadDownloadTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── snowflake-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── snowflake.sql
│ └── snowflake_queries.sql
├── plugin-jdbc-sqlite
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── sqlite
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── SqliteCellConverter.java
│ │ │ ├── SqliteQueryInterface.java
│ │ │ ├── SqliteQueryUtils.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.sqlite.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── sqlite
│ │ ├── SqliteDriverTest.java
│ │ ├── SqliteQueriesTest.java
│ │ ├── SqliteTest.java
│ │ ├── SqliteTriggerTest.java
│ │ └── TestUtils.java
│ └── resources
│ ├── allure.properties
│ ├── db
│ └── Chinook_Sqlite.sqlite
│ ├── flows
│ └── sqlite-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── sqlite.sql
│ └── sqlite_queries.sql
├── plugin-jdbc-sqlserver
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── sqlserver
│ │ │ ├── Batch.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── SqlServerCellConverter.java
│ │ │ ├── SqlServerConnectionInterface.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.sqlserver.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── sqlserver
│ │ ├── BatchTest.java
│ │ ├── SqlServerDriverTest.java
│ │ ├── SqlServerQueriesTest.java
│ │ ├── SqlServerTest.java
│ │ └── SqlServerTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── sqlserver-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── sqlserver.sql
│ ├── sqlserver_insert.sql
│ └── sqlserver_queries.sql
├── plugin-jdbc-sybase
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── sybase
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── SybaseCellConverter.java
│ │ │ ├── SybaseConnectionInterface.java
│ │ │ ├── Trigger.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.sybase.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── sybase
│ │ ├── SybaseDriverTest.java
│ │ ├── SybaseQueriesTest.java
│ │ ├── SybaseTest.java
│ │ └── SybaseTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ ├── read_sybase.yaml
│ └── sybase-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── sybase.sql
│ └── sybase_queries.sql
├── plugin-jdbc-trino
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── trino
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ ├── TrinoCellConverter.java
│ │ │ ├── TrinoConnectionInterface.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.trino.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── trino
│ │ ├── TrinoDriverTest.java
│ │ ├── TrinoTest.java
│ │ └── TrinoTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── trino-listen.yml
│ ├── logback.xml
│ └── scripts
│ └── trino.sql
├── plugin-jdbc-vectorwise
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── vectorwise
│ │ │ ├── Batch.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ ├── VectorwiseCellConverter.java
│ │ │ ├── VetorwiseConnectionInterface.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.vectorwise.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── vectorwise
│ │ ├── BatchTest.java
│ │ ├── VectorwiseTest.java
│ │ └── VectorwiseTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── vectorwise-listen.yml
│ ├── logback.xml
│ └── scripts
│ └── vectorwise.sql
├── plugin-jdbc-vertica
├── build.gradle
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── kestra
│ │ │ └── plugin
│ │ │ └── jdbc
│ │ │ └── vertica
│ │ │ ├── Batch.java
│ │ │ ├── Queries.java
│ │ │ ├── Query.java
│ │ │ ├── Trigger.java
│ │ │ ├── VerticaCellConverter.java
│ │ │ ├── VerticaConnectionInterface.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── icons
│ │ ├── io.kestra.plugin.jdbc.vertica.svg
│ │ └── plugin-icon.svg
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ └── vertica
│ │ ├── BatchTest.java
│ │ ├── VerticaDriverTest.java
│ │ ├── VerticaQueriesTest.java
│ │ ├── VerticaTest.java
│ │ └── VerticaTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── flows
│ └── vectica-listen.yml
│ ├── logback.xml
│ └── scripts
│ ├── vertica.sql
│ ├── vertica_insert.sql
│ └── vertica_queries.sql
├── plugin-jdbc
├── build.gradle
└── src
│ ├── main
│ └── java
│ │ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ ├── AbstractCellConverter.java
│ │ ├── AbstractJdbcBaseQuery.java
│ │ ├── AbstractJdbcBatch.java
│ │ ├── AbstractJdbcQueries.java
│ │ ├── AbstractJdbcQuery.java
│ │ ├── AbstractJdbcTrigger.java
│ │ ├── JdbcConnectionInterface.java
│ │ ├── JdbcQueriesInterface.java
│ │ ├── JdbcQueryInterface.java
│ │ └── JdbcStatementInterface.java
│ └── test
│ ├── java
│ └── io
│ │ └── kestra
│ │ └── plugin
│ │ └── jdbc
│ │ ├── AbstractJdbcDriverTest.java
│ │ ├── AbstractJdbcTriggerTest.java
│ │ ├── AbstractRdbmsTest.java
│ │ └── JdbcTriggerTest.java
│ └── resources
│ ├── allure.properties
│ ├── application.yml
│ └── logback.xml
└── settings.gradle
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset=utf-8
5 | end_of_line=lf
6 | insert_final_newline=false
7 | trim_trailing_whitespace=true
8 | indent_style=space
9 | indent_size=4
10 | continuation_indent_size=4
11 |
12 | [*.yml]
13 | indent_size=2
14 |
15 | [*.md]
16 | indent_size=2
17 |
18 | [*.yaml]
19 | indent_size=2
20 |
21 | [*.json]
22 | indent_size=2
23 |
24 | [*.css]
25 | indent_size=2
26 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug.yml:
--------------------------------------------------------------------------------
1 | name: Bug report
2 | description: File a bug report
3 | body:
4 | - type: markdown
5 | attributes:
6 | value: |
7 | Thanks for reporting an issue! Please provide a [Minimal Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) and share any additional information that may help reproduce, troubleshoot, and hopefully fix the issue, including screenshots, error traceback, and your Kestra server logs. For quick questions, you can contact us directly on [Slack](https://kestra.io/slack).
8 | - type: textarea
9 | attributes:
10 | label: Describe the issue
11 | description: A concise description of the issue and how we can reproduce it.
12 | placeholder: Describe the issue step by step
13 | validations:
14 | required: true
15 | - type: textarea
16 | attributes:
17 | label: Environment
18 | description: Environment information where the problem occurs.
19 | value: |
20 | - Kestra Version: develop
21 | validations:
22 | required: false
23 | labels:
24 | - bug
25 | - area/plugin
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 | - name: Chat
3 | url: https://kestra.io/slack
4 | about: Chat with us on Slack.
5 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature.yml:
--------------------------------------------------------------------------------
1 | name: Feature request
2 | description: Create a new feature request
3 | body:
4 | - type: textarea
5 | attributes:
6 | label: Feature description
7 | placeholder: Tell us more about your feature request
8 | validations:
9 | required: true
10 | labels:
11 | - enhancement
12 | - area/plugin
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # See GitHub's docs for more information on this file:
2 | # https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/configuration-options-for-dependency-updates
3 | version: 2
4 | updates:
5 | # Maintain dependencies for GitHub Actions
6 | - package-ecosystem: "github-actions"
7 | directory: "/"
8 | schedule:
9 | # Check for updates to GitHub Actions every weekday
10 | interval: "weekly"
11 | labels:
12 | - "dependency-upgrade"
13 | open-pull-requests-limit: 50
14 |
15 | # Maintain dependencies for Gradle modules
16 | - package-ecosystem: "gradle"
17 | directory: "/"
18 | schedule:
19 | # Check for updates to Gradle modules every week
20 | interval: "weekly"
21 | labels:
22 | - "dependency-upgrade"
23 | open-pull-requests-limit: 50
24 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 |
8 |
9 | ### What changes are being made and why?
10 |
11 |
12 | ---
13 |
14 | ### How the changes have been QAed?
15 |
16 |
25 |
26 | ---
27 |
28 | ### Setup Instructions
29 |
30 |
38 |
--------------------------------------------------------------------------------
/.github/setup-unit.sh:
--------------------------------------------------------------------------------
1 | mkdir certs
2 | openssl req -new -x509 -days 365 -nodes -out certs/ca.crt -keyout certs/ca.key -subj "/CN=root-ca"
3 |
4 | mkdir certs/server
5 | openssl genrsa -des3 -out certs/server/server.key -passout pass:p4ssphrase 2048
6 | openssl rsa -in certs/server/server.key -passin pass:p4ssphrase -out certs/server/server.key
7 | openssl req -new -nodes -key certs/server/server.key -out certs/server/server.csr -subj "/CN=postgresql"
8 | openssl x509 -req -in certs/server/server.csr -days 365 -CA certs/ca.crt -CAkey certs/ca.key -CAcreateserial -out certs/server/server.crt
9 | sudo chmod -R 600 certs/server/
10 | sudo chown -R 1001 certs/server/
11 |
12 | mkdir certs/client
13 | openssl genrsa -des3 -out certs/client/client.key -passout pass:p4ssphrase 2048
14 | openssl rsa -in certs/client/client.key -passin pass:p4ssphrase -out certs/client/client-no-pass.key
15 | openssl req -new -nodes -key certs/client/client.key -passin pass:p4ssphrase -out certs/client/client.csr -subj "/CN=postgres"
16 | openssl x509 -req -in certs/client/client.csr -days 365 -CA certs/ca.crt -CAkey certs/ca.key -CAcreateserial -out certs/client/client.crt
17 |
18 | mkdir plugin-jdbc-postgres/src/test/resources/ssl/
19 | cp certs/client/* plugin-jdbc-postgres/src/test/resources/ssl/
20 | cp certs/ca.crt plugin-jdbc-postgres/src/test/resources/ssl/
21 |
22 | docker compose -f docker-compose-ci.yml up --quiet-pull -d mariadb sqlserver
23 | docker compose -f docker-compose-ci.yml up --quiet-pull -d --wait
24 | sleep 3
25 |
26 | docker exec -i plugin-jdbc-mariadb-1 mariadb -uroot -pmariadb_passwd --database=kestra -e """
27 | INSTALL SONAME 'auth_ed25519';
28 | CREATE USER 'ed25519'@'%' IDENTIFIED VIA ed25519 USING PASSWORD('secret');
29 | GRANT SELECT ON kestra.* TO 'ed25519'@'%' IDENTIFIED VIA ed25519 USING PASSWORD('secret');
30 | """
31 |
32 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Main
2 |
3 | on:
4 | schedule:
5 | - cron: '0 4 * * 1,2,3,4,5'
6 | push:
7 | branches:
8 | - master
9 | - main
10 | - releases/*
11 | tags:
12 | - v*
13 |
14 | pull_request:
15 | branches:
16 | - master
17 | - main
18 | - releases/*
19 |
20 | workflow_dispatch:
21 | inputs:
22 | skip-test:
23 | description: 'Skip test'
24 | type: choice
25 | required: true
26 | default: 'false'
27 | options:
28 | - "true"
29 | - "false"
30 |
31 | jobs:
32 | check:
33 | uses: kestra-io/actions/.github/workflows/plugins.yml@main
34 | with:
35 | skip-test: ${{ github.event.inputs.skip-test == 'true' }}
36 | secrets: inherit
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | Thumbs.db
2 | .DS_Store
3 | .gradle
4 | build/
5 | target/
6 | out/
7 | .idea
8 | .vscode
9 | *.iml
10 | *.ipr
11 | *.iws
12 | .project
13 | .settings
14 | .classpath
15 | .attach*
16 | plugin-jdbc-redshift/src/test/resources/application-test.yml
17 | plugin-jdbc-snowflake/src/test/resources/application-test.yml
18 | certs/
19 | plugin-jdbc-postgres/src/test/resources/ssl/
20 | openssl.cnf
21 |
22 | plugin-jdbc-sqlite/temp
23 | plugin-jdbc-duckdb/*.db
24 |
--------------------------------------------------------------------------------
/dockerfiles/snowflake-cli.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.11-slim
2 | LABEL org.opencontainers.image.source=https://github.com/kestra-io/plugin-jdbc
3 | LABEL org.opencontainers.image.description="Image with the latest snowflake-cli package"
4 | RUN pip install --upgrade pip
5 | RUN pip install --no-cache snowflake-cli
6 |
--------------------------------------------------------------------------------
/environment_db2:
--------------------------------------------------------------------------------
1 | LICENSE=accept
2 | DB2INSTANCE=db2inst1
3 | DB2INST1_PASSWORD=password
4 | DBNAME=testdb
5 | BLU=false
6 | ENABLE_ORACLE_COMPATIBILITY=false
7 | UPDATEAVAIL=NO
8 | TO_CREATE_SAMPLEDB=false
9 | REPODB=false
10 | IS_OSXFS=false
11 | PERSISTENT_HOME=true
12 | HADR_ENABLED=false
13 | ETCD_ENDPOINT=
14 | ETCD_USERNAME=
15 | ETCD_PASSWORD=
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | version=0.24.0-SNAPSHOT
2 | kestraVersion=[0.23,)
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kestra-io/plugin-jdbc/8d9476dee87f40d42dd46acb99ad4ee2e6f53ce3/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/lombok.config:
--------------------------------------------------------------------------------
1 | config.stopBubbling = true
2 | lombok.addLombokGeneratedAnnotation = true
3 | lombok.anyConstructor.addConstructorProperties = true
4 | lombok.equalsAndHashCode.callSuper = call
5 | lombok.tostring.callsuper = call
6 |
--------------------------------------------------------------------------------
/plugin-jdbc-arrow-flight/build.gradle:
--------------------------------------------------------------------------------
1 | project.description = 'Query a compatible database using the Kestra Apache Arrow Flight SQL JDBC plugin.'
2 |
3 | jar {
4 | manifest {
5 | attributes(
6 | "X-Kestra-Name": project.name,
7 | "X-Kestra-Title": "Arrow Flight SQL",
8 | "X-Kestra-Group": project.group + ".jdbc.arrowflight",
9 | "X-Kestra-Description": project.description,
10 | "X-Kestra-Version": project.version
11 | )
12 | }
13 | }
14 |
15 | dependencies {
16 | implementation("org.apache.arrow:flight-sql-jdbc-driver:18.3.0")
17 | implementation project(':plugin-jdbc')
18 |
19 | testImplementation project(':plugin-jdbc').sourceSets.test.output
20 | }
21 |
--------------------------------------------------------------------------------
/plugin-jdbc-arrow-flight/src/main/java/io/kestra/plugin/jdbc/arrowflight/ArrowFlightCellConverter.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.arrowflight;
2 |
3 | import io.kestra.plugin.jdbc.AbstractCellConverter;
4 |
5 | import java.sql.Connection;
6 | import java.sql.ResultSet;
7 | import java.sql.SQLException;
8 | import java.time.ZoneId;
9 |
10 | public class ArrowFlightCellConverter extends AbstractCellConverter {
11 |
12 | public ArrowFlightCellConverter(ZoneId zoneId) {
13 | super(zoneId);
14 | }
15 |
16 | @Override
17 | public Object convertCell(int columnIndex, ResultSet resultSet, Connection connection) throws SQLException {
18 | return super.convert(columnIndex, resultSet);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/plugin-jdbc-arrow-flight/src/main/java/io/kestra/plugin/jdbc/arrowflight/ArrowFlightConnectionInterface.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.arrowflight;
2 |
3 | import io.kestra.plugin.jdbc.JdbcConnectionInterface;
4 |
5 | public interface ArrowFlightConnectionInterface extends JdbcConnectionInterface {
6 | @Override
7 | default String getScheme() {
8 | return "jdbc:arrow-flight-sql";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/plugin-jdbc-arrow-flight/src/main/java/io/kestra/plugin/jdbc/arrowflight/package-info.java:
--------------------------------------------------------------------------------
1 | @PluginSubGroup(
2 | description = "This sub-group of plugins contains tasks for accessing a database through Apache Arrow Flight SQL.",
3 | categories = PluginSubGroup.PluginCategory.DATABASE
4 | )
5 | package io.kestra.plugin.jdbc.arrowflight;
6 |
7 | import io.kestra.core.models.annotations.PluginSubGroup;
--------------------------------------------------------------------------------
/plugin-jdbc-arrow-flight/src/main/resources/icons/plugin-icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/build.gradle:
--------------------------------------------------------------------------------
1 | project.description = 'Query AS400 databases using the Kestra JDBC plugin.'
2 |
3 | jar {
4 | manifest {
5 | attributes(
6 | "X-Kestra-Name": project.name,
7 | "X-Kestra-Title": "AS400",
8 | "X-Kestra-Group": project.group + ".jdbc.as400",
9 | "X-Kestra-Description": project.description,
10 | "X-Kestra-Version": project.version
11 | )
12 | }
13 | }
14 |
15 | dependencies {
16 | implementation 'net.sf.jt400:jt400:21.0.4'
17 | implementation project(':plugin-jdbc')
18 |
19 | testImplementation project(':plugin-jdbc').sourceSets.test.output
20 | }
21 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/main/java/io/kestra/plugin/jdbc/as400/As400CellConverter.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.as400;
2 |
3 | import io.kestra.plugin.jdbc.AbstractCellConverter;
4 |
5 | import java.sql.Connection;
6 | import java.sql.ResultSet;
7 | import java.sql.SQLException;
8 | import java.time.ZoneId;
9 |
10 | /**
11 | * Copied from the DB2 code as we cannot test AS400 we assume it works like DB2
12 | */
13 | public class As400CellConverter extends AbstractCellConverter {
14 | public As400CellConverter(ZoneId zoneId) {
15 | super(zoneId);
16 | }
17 |
18 | @Override
19 | public Object convertCell(int columnIndex, ResultSet rs, Connection connection) throws SQLException {
20 | Object data = rs.getObject(columnIndex);
21 |
22 | if (data == null) {
23 | return null;
24 | }
25 |
26 | String columnTypeName = rs.getMetaData().getColumnTypeName(columnIndex);
27 |
28 | return switch (columnTypeName.toLowerCase()) {
29 | case "char", "varchar" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getString(columnIndex);
30 | case "date" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getDate(columnIndex).toLocalDate();
31 | case "time" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getTime(columnIndex).toLocalTime();
32 | case "timestamp" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getTimestamp(columnIndex).toInstant();
33 | case "blob" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getBlob(columnIndex);
34 | case "clob" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getClob(columnIndex);
35 | case "nclob" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getNClob(columnIndex);
36 | case "xml" -> ((com.ibm.as400.access.AS400JDBCResultSet) rs).getSQLXML(columnIndex);
37 | default -> super.convert(columnIndex, rs);
38 | };
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/main/java/io/kestra/plugin/jdbc/as400/As400ConnectionInterface.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.as400;
2 |
3 | import io.kestra.plugin.jdbc.JdbcConnectionInterface;
4 |
5 | public interface As400ConnectionInterface extends JdbcConnectionInterface {
6 | @Override
7 | default String getScheme() {
8 | return "jdbc:as400";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/main/java/io/kestra/plugin/jdbc/as400/package-info.java:
--------------------------------------------------------------------------------
1 | @PluginSubGroup(
2 | description = "This sub-group of plugins contains tasks for accessing the AS400 database.",
3 | categories = PluginSubGroup.PluginCategory.DATABASE
4 | )
5 | package io.kestra.plugin.jdbc.as400;
6 |
7 | import io.kestra.core.models.annotations.PluginSubGroup;
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/test/java/io/kestra/plugin/jdbc/as400/As400DriverTest.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.as400;
2 |
3 | import io.kestra.plugin.jdbc.AbstractJdbcDriverTest;
4 | import io.kestra.core.junit.annotations.KestraTest;
5 |
6 | import java.sql.Driver;
7 |
8 | @KestraTest
9 | public class As400DriverTest extends AbstractJdbcDriverTest {
10 |
11 | @Override
12 | protected Class extends Driver> getDriverClass() {
13 | return com.ibm.as400.access.AS400JDBCDriver.class;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/test/resources/allure.properties:
--------------------------------------------------------------------------------
1 | allure.results.directory=build/allure-results
2 |
--------------------------------------------------------------------------------
/plugin-jdbc-as400/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/build.gradle:
--------------------------------------------------------------------------------
1 | project.description = 'Query ClickHouse databases using Kestra\'s JDBC plugin integration.'
2 |
3 | jar {
4 | manifest {
5 | attributes(
6 | "X-Kestra-Name": project.name,
7 | "X-Kestra-Title": "ClickHouse",
8 | "X-Kestra-Group": project.group + ".jdbc.clickhouse",
9 | "X-Kestra-Description": project.description,
10 | "X-Kestra-Version": project.version
11 | )
12 | }
13 | }
14 |
15 | dependencies {
16 | implementation 'com.clickhouse:clickhouse-jdbc:0.8.6'
17 | implementation 'org.lz4:lz4-java:1.8.0'
18 |
19 | implementation project(':plugin-jdbc')
20 |
21 | compileOnly group: "io.kestra", name: "script", version: kestraVersion
22 |
23 | testImplementation group: "io.kestra", name: "script", version: kestraVersion
24 |
25 | testImplementation project(':plugin-jdbc').sourceSets.test.output
26 | }
27 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/main/java/io/kestra/plugin/jdbc/clickhouse/ClickhouseConnectionInterface.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.clickhouse;
2 |
3 | import io.kestra.plugin.jdbc.JdbcConnectionInterface;
4 |
5 | public interface ClickhouseConnectionInterface extends JdbcConnectionInterface {
6 | @Override
7 | default String getScheme() {
8 | return "jdbc:clickhouse";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/main/java/io/kestra/plugin/jdbc/clickhouse/package-info.java:
--------------------------------------------------------------------------------
1 | @PluginSubGroup(
2 | description = "This sub-group of plugins contains tasks for accessing the ClickHouse database.",
3 | categories = PluginSubGroup.PluginCategory.DATABASE
4 | )
5 | package io.kestra.plugin.jdbc.clickhouse;
6 |
7 | import io.kestra.core.models.annotations.PluginSubGroup;
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/main/resources/icons/io.kestra.plugin.jdbc.clickhouse.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/main/resources/icons/plugin-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/test/java/io/kestra/plugin/jdbc/clickhouse/AbstractClickHouseTest.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.clickhouse;
2 |
3 | import io.kestra.plugin.jdbc.AbstractRdbmsTest;
4 |
5 | public abstract class AbstractClickHouseTest extends AbstractRdbmsTest {
6 |
7 | @Override
8 | protected String getUsername() {
9 | return "myuser";
10 | }
11 |
12 | @Override
13 | protected String getPassword() {
14 | return "mypassword";
15 | }
16 |
17 | @Override
18 | protected String getUrl() {
19 | return "jdbc:clickhouse://127.0.0.1:28123/default";
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/test/java/io/kestra/plugin/jdbc/clickhouse/ClickHouseDriverTest.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.clickhouse;
2 |
3 | import io.kestra.core.junit.annotations.KestraTest;
4 | import io.kestra.plugin.jdbc.AbstractJdbcDriverTest;
5 |
6 | import java.sql.Driver;
7 |
8 | @KestraTest
9 | public class ClickHouseDriverTest extends AbstractJdbcDriverTest {
10 | @Override
11 | protected Class extends Driver> getDriverClass() {
12 | return com.clickhouse.jdbc.ClickHouseDriver.class;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/test/java/io/kestra/plugin/jdbc/clickhouse/ClickHouseLocalCLITest.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.clickhouse;
2 |
3 | import io.kestra.core.junit.annotations.KestraTest;
4 | import io.kestra.core.models.property.Property;
5 | import io.kestra.core.runners.RunContext;
6 | import io.kestra.core.runners.RunContextFactory;
7 | import io.kestra.core.utils.IdUtils;
8 | import io.kestra.core.utils.TestsUtils;
9 | import io.kestra.plugin.scripts.exec.scripts.models.ScriptOutput;
10 | import jakarta.inject.Inject;
11 | import org.junit.jupiter.api.Test;
12 |
13 | import java.util.List;
14 | import java.util.Map;
15 |
16 | import static org.hamcrest.MatcherAssert.assertThat;
17 | import static org.hamcrest.Matchers.is;
18 |
19 | @KestraTest
20 | public class ClickHouseLocalCLITest {
21 |
22 | @Inject
23 | private RunContextFactory runContextFactory;
24 |
25 | @Test
26 | void run() throws Exception {
27 | ClickHouseLocalCLI clickhouseLocalCLI = ClickHouseLocalCLI.builder()
28 | .id(IdUtils.create())
29 | .type(ClickHouseLocalCLI.class.getName())
30 | .commands(Property.of(List.of("SELECT * FROM system.tables")))
31 | .build();
32 |
33 | RunContext runContext = TestsUtils.mockRunContext(runContextFactory, clickhouseLocalCLI, Map.of());
34 |
35 | ScriptOutput output = clickhouseLocalCLI.run(runContext);
36 |
37 | assertThat(output.getExitCode(), is(0));
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/plugin-jdbc-clickhouse/src/test/java/io/kestra/plugin/jdbc/clickhouse/ClickHouseTriggerTest.java:
--------------------------------------------------------------------------------
1 | package io.kestra.plugin.jdbc.clickhouse;
2 |
3 | import io.kestra.plugin.jdbc.AbstractJdbcTriggerTest;
4 | import io.kestra.core.junit.annotations.KestraTest;
5 | import org.junit.jupiter.api.Test;
6 |
7 | import java.io.FileNotFoundException;
8 | import java.net.URISyntaxException;
9 | import java.sql.SQLException;
10 | import java.util.List;
11 | import java.util.Map;
12 |
13 | import static org.hamcrest.MatcherAssert.assertThat;
14 | import static org.hamcrest.Matchers.is;
15 |
16 | @KestraTest
17 | class ClickHouseTriggerTest extends AbstractJdbcTriggerTest {
18 |
19 | @Test
20 | void run() throws Exception {
21 | var execution = triggerFlow(this.getClass().getClassLoader(), "flows","clickhouse-listen");
22 |
23 | var rows = (List