diff --git a/.github/workflows/broken_links_checker.yml b/.github/workflows/broken_links_checker.yml
index 82ec1cd..0fbcad5 100644
--- a/.github/workflows/broken_links_checker.yml
+++ b/.github/workflows/broken_links_checker.yml
@@ -1,3 +1,5 @@
+# Generated by Project Keeper
+# https://github.com/exasol/project-keeper/blob/main/project-keeper/src/main/resources/templates/.github/workflows/broken_links_checker.yml
name: Broken Links Checker
on:
diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml
index c1fa218..d447c0e 100644
--- a/.github/workflows/ci-build.yml
+++ b/.github/workflows/ci-build.yml
@@ -1,11 +1,16 @@
name: CI Build
-
on:
- - push
+ push:
+ branches:
+ - main
+ pull_request:
jobs:
build:
runs-on: ubuntu-latest
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
steps:
- name: Checkout the repository
uses: actions/checkout@v4
@@ -54,11 +59,13 @@ jobs:
name: Signed Exasol Tableau Connectors
path: target/tableau-exasol-connector-*.taco
- - name: Set up JDK 11
+ - name: Set up JDKs
uses: actions/setup-java@v4
with:
distribution: "temurin"
- java-version: 11
+ java-version: |
+ 11
+ 17
cache: "maven"
- name: Project Keeper Verify
diff --git a/.project-keeper.yml b/.project-keeper.yml
index 3309a2a..c11a9b3 100644
--- a/.project-keeper.yml
+++ b/.project-keeper.yml
@@ -23,8 +23,8 @@ version:
excludes:
- regex: "(?s)E-PK-CORE-62: The project's README\\.md does not contain a valid badges block\\. Please add or replace the following badges.*"
- "E-PK-CORE-18: Outdated content: '.github/workflows/ci-build.yml'"
+ - "E-PK-CORE-18: Outdated content: '.github/workflows/release_droid_upload_github_release_assets.yml'"
- "E-PK-CORE-17: Missing required file: '.github/workflows/ci-build-next-java.yml'"
- "E-PK-CORE-17: Missing required file: '.github/workflows/dependencies_check.yml'"
- "E-PK-CORE-17: Missing required file: '.github/workflows/release_droid_prepare_original_checksum.yml'"
- "E-PK-CORE-17: Missing required file: '.github/workflows/release_droid_print_quick_checksum.yml'"
- - "E-PK-CORE-18: Outdated content: '.github/workflows/release_droid_upload_github_release_assets.yml'"
diff --git a/dependencies.md b/dependencies.md
index 1056ef9..440461a 100644
--- a/dependencies.md
+++ b/dependencies.md
@@ -21,17 +21,18 @@
| Dependency | License |
| ------------------------------------------------------- | -------------------------------- |
| [SonarQube Scanner for Maven][6] | [GNU LGPL 3][7] |
-| [Apache Maven Compiler Plugin][8] | [Apache-2.0][9] |
-| [Apache Maven Enforcer Plugin][10] | [Apache-2.0][9] |
-| [Maven Flatten Plugin][11] | [Apache Software Licenese][9] |
-| [Project Keeper Maven plugin][12] | [The MIT License][13] |
-| [org.sonatype.ossindex.maven:ossindex-maven-plugin][14] | [ASL2][15] |
-| [Maven Surefire Plugin][16] | [Apache-2.0][9] |
-| [Versions Maven Plugin][17] | [Apache License, Version 2.0][9] |
-| [duplicate-finder-maven-plugin Maven Mojo][18] | [Apache License 2.0][19] |
-| [JaCoCo :: Maven Plugin][20] | [Eclipse Public License 2.0][21] |
-| [error-code-crawler-maven-plugin][22] | [MIT License][23] |
-| [Reproducible Build Maven Plugin][24] | [Apache 2.0][15] |
+| [Apache Maven Toolchains Plugin][8] | [Apache License, Version 2.0][9] |
+| [Apache Maven Compiler Plugin][10] | [Apache-2.0][9] |
+| [Apache Maven Enforcer Plugin][11] | [Apache-2.0][9] |
+| [Maven Flatten Plugin][12] | [Apache Software Licenese][9] |
+| [Project Keeper Maven plugin][13] | [The MIT License][14] |
+| [org.sonatype.ossindex.maven:ossindex-maven-plugin][15] | [ASL2][16] |
+| [Maven Surefire Plugin][17] | [Apache-2.0][9] |
+| [Versions Maven Plugin][18] | [Apache License, Version 2.0][9] |
+| [duplicate-finder-maven-plugin Maven Mojo][19] | [Apache License 2.0][20] |
+| [JaCoCo :: Maven Plugin][21] | [Eclipse Public License 2.0][22] |
+| [error-code-crawler-maven-plugin][23] | [MIT License][24] |
+| [Reproducible Build Maven Plugin][25] | [Apache 2.0][16] |
## Tableau Server gui Tests
@@ -39,36 +40,37 @@
| Dependency | License |
| ----------------------------------------------- | ---------------------------------------------- |
-| [org.seleniumhq.selenium:selenium-java][25] | [The Apache Software License, Version 2.0][15] |
+| [org.seleniumhq.selenium:selenium-java][26] | [The Apache Software License, Version 2.0][16] |
| [Hamcrest][0] | [BSD License 3][1] |
| [JUnit Jupiter (Aggregator)][2] | [Eclipse Public License v2.0][3] |
-| [WebDriverManager][26] | [Apache 2.0][27] |
-| [mockito-junit-jupiter][28] | [MIT][29] |
-| [JSON in Java][30] | [Public Domain][31] |
-| [Testcontainers :: JUnit Jupiter Extension][32] | [MIT][33] |
-| [Test containers for Exasol on Docker][34] | [MIT License][35] |
-| [Test Database Builder for Java][36] | [MIT License][37] |
-| [Bouncy Castle Provider][38] | [Bouncy Castle Licence][39] |
-| [jackson-databind][40] | [The Apache Software License, Version 2.0][9] |
-| [Apache Commons IO][41] | [Apache-2.0][9] |
+| [WebDriverManager][27] | [Apache 2.0][28] |
+| [mockito-junit-jupiter][29] | [MIT][30] |
+| [JSON in Java][31] | [Public Domain][32] |
+| [Testcontainers :: JUnit Jupiter Extension][33] | [MIT][34] |
+| [Test containers for Exasol on Docker][35] | [MIT License][36] |
+| [Test Database Builder for Java][37] | [MIT License][38] |
+| [Bouncy Castle Provider][39] | [Bouncy Castle Licence][40] |
+| [jackson-databind][41] | [The Apache Software License, Version 2.0][9] |
+| [Apache Commons IO][42] | [Apache-2.0][9] |
### Plugin Dependencies
| Dependency | License |
| ------------------------------------------------------- | -------------------------------- |
| [SonarQube Scanner for Maven][6] | [GNU LGPL 3][7] |
-| [Apache Maven Compiler Plugin][8] | [Apache-2.0][9] |
-| [Apache Maven Enforcer Plugin][10] | [Apache-2.0][9] |
-| [Maven Flatten Plugin][11] | [Apache Software Licenese][9] |
-| [Project Keeper Maven plugin][12] | [The MIT License][13] |
-| [org.sonatype.ossindex.maven:ossindex-maven-plugin][14] | [ASL2][15] |
-| [Maven Surefire Plugin][16] | [Apache-2.0][9] |
-| [Versions Maven Plugin][17] | [Apache License, Version 2.0][9] |
-| [duplicate-finder-maven-plugin Maven Mojo][18] | [Apache License 2.0][19] |
-| [JaCoCo :: Maven Plugin][20] | [Eclipse Public License 2.0][21] |
-| [error-code-crawler-maven-plugin][22] | [MIT License][23] |
-| [Reproducible Build Maven Plugin][24] | [Apache 2.0][15] |
-| [Exec Maven Plugin][42] | [Apache License 2][9] |
+| [Apache Maven Toolchains Plugin][8] | [Apache License, Version 2.0][9] |
+| [Apache Maven Compiler Plugin][10] | [Apache-2.0][9] |
+| [Apache Maven Enforcer Plugin][11] | [Apache-2.0][9] |
+| [Maven Flatten Plugin][12] | [Apache Software Licenese][9] |
+| [Project Keeper Maven plugin][13] | [The MIT License][14] |
+| [org.sonatype.ossindex.maven:ossindex-maven-plugin][15] | [ASL2][16] |
+| [Maven Surefire Plugin][17] | [Apache-2.0][9] |
+| [Versions Maven Plugin][18] | [Apache License, Version 2.0][9] |
+| [duplicate-finder-maven-plugin Maven Mojo][19] | [Apache License 2.0][20] |
+| [JaCoCo :: Maven Plugin][21] | [Eclipse Public License 2.0][22] |
+| [error-code-crawler-maven-plugin][23] | [MIT License][24] |
+| [Reproducible Build Maven Plugin][25] | [Apache 2.0][16] |
+| [Exec Maven Plugin][43] | [Apache License 2][9] |
## Exasol Connector for Tableau
@@ -77,17 +79,18 @@
| Dependency | License |
| ------------------------------------------------------- | -------------------------------- |
| [SonarQube Scanner for Maven][6] | [GNU LGPL 3][7] |
-| [Apache Maven Compiler Plugin][8] | [Apache-2.0][9] |
-| [Apache Maven Enforcer Plugin][10] | [Apache-2.0][9] |
-| [Maven Flatten Plugin][11] | [Apache Software Licenese][9] |
-| [Project Keeper Maven plugin][12] | [The MIT License][13] |
-| [org.sonatype.ossindex.maven:ossindex-maven-plugin][14] | [ASL2][15] |
-| [Maven Surefire Plugin][16] | [Apache-2.0][9] |
-| [Versions Maven Plugin][17] | [Apache License, Version 2.0][9] |
-| [duplicate-finder-maven-plugin Maven Mojo][18] | [Apache License 2.0][19] |
-| [JaCoCo :: Maven Plugin][20] | [Eclipse Public License 2.0][21] |
-| [error-code-crawler-maven-plugin][22] | [MIT License][23] |
-| [Reproducible Build Maven Plugin][24] | [Apache 2.0][15] |
+| [Apache Maven Toolchains Plugin][8] | [Apache License, Version 2.0][9] |
+| [Apache Maven Compiler Plugin][10] | [Apache-2.0][9] |
+| [Apache Maven Enforcer Plugin][11] | [Apache-2.0][9] |
+| [Maven Flatten Plugin][12] | [Apache Software Licenese][9] |
+| [Project Keeper Maven plugin][13] | [The MIT License][14] |
+| [org.sonatype.ossindex.maven:ossindex-maven-plugin][15] | [ASL2][16] |
+| [Maven Surefire Plugin][17] | [Apache-2.0][9] |
+| [Versions Maven Plugin][18] | [Apache License, Version 2.0][9] |
+| [duplicate-finder-maven-plugin Maven Mojo][19] | [Apache License 2.0][20] |
+| [JaCoCo :: Maven Plugin][21] | [Eclipse Public License 2.0][22] |
+| [error-code-crawler-maven-plugin][23] | [MIT License][24] |
+| [Reproducible Build Maven Plugin][25] | [Apache 2.0][16] |
## Javascript-test
@@ -99,38 +102,39 @@
[5]: https://repo1.maven.org/maven2/com/exasol/exasol-jdbc/7.1.20/exasol-jdbc-7.1.20-license.txt
[6]: http://sonarsource.github.io/sonar-scanner-maven/
[7]: http://www.gnu.org/licenses/lgpl.txt
-[8]: https://maven.apache.org/plugins/maven-compiler-plugin/
+[8]: https://maven.apache.org/plugins/maven-toolchains-plugin/
[9]: https://www.apache.org/licenses/LICENSE-2.0.txt
-[10]: https://maven.apache.org/enforcer/maven-enforcer-plugin/
-[11]: https://www.mojohaus.org/flatten-maven-plugin/
-[12]: https://github.com/exasol/project-keeper/
-[13]: https://github.com/exasol/project-keeper/blob/main/LICENSE
-[14]: https://sonatype.github.io/ossindex-maven/maven-plugin/
-[15]: http://www.apache.org/licenses/LICENSE-2.0.txt
-[16]: https://maven.apache.org/surefire/maven-surefire-plugin/
-[17]: https://www.mojohaus.org/versions/versions-maven-plugin/
-[18]: https://basepom.github.io/duplicate-finder-maven-plugin
-[19]: http://www.apache.org/licenses/LICENSE-2.0.html
-[20]: https://www.jacoco.org/jacoco/trunk/doc/maven.html
-[21]: https://www.eclipse.org/legal/epl-2.0/
-[22]: https://github.com/exasol/error-code-crawler-maven-plugin/
-[23]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE
-[24]: http://zlika.github.io/reproducible-build-maven-plugin
-[25]: https://selenium.dev/
-[26]: https://bonigarcia.dev/webdrivermanager/
-[27]: https://www.apache.org/licenses/LICENSE-2.0
-[28]: https://github.com/mockito/mockito
-[29]: https://opensource.org/licenses/MIT
-[30]: https://github.com/douglascrockford/JSON-java
-[31]: https://github.com/stleary/JSON-java/blob/master/LICENSE
-[32]: https://java.testcontainers.org
-[33]: http://opensource.org/licenses/MIT
-[34]: https://github.com/exasol/exasol-testcontainers/
-[35]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE
-[36]: https://github.com/exasol/test-db-builder-java/
-[37]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE
-[38]: https://www.bouncycastle.org/java.html
-[39]: https://www.bouncycastle.org/licence.html
-[40]: https://github.com/FasterXML/jackson
-[41]: https://commons.apache.org/proper/commons-io/
-[42]: https://www.mojohaus.org/exec-maven-plugin
+[10]: https://maven.apache.org/plugins/maven-compiler-plugin/
+[11]: https://maven.apache.org/enforcer/maven-enforcer-plugin/
+[12]: https://www.mojohaus.org/flatten-maven-plugin/
+[13]: https://github.com/exasol/project-keeper/
+[14]: https://github.com/exasol/project-keeper/blob/main/LICENSE
+[15]: https://sonatype.github.io/ossindex-maven/maven-plugin/
+[16]: http://www.apache.org/licenses/LICENSE-2.0.txt
+[17]: https://maven.apache.org/surefire/maven-surefire-plugin/
+[18]: https://www.mojohaus.org/versions/versions-maven-plugin/
+[19]: https://basepom.github.io/duplicate-finder-maven-plugin
+[20]: http://www.apache.org/licenses/LICENSE-2.0.html
+[21]: https://www.jacoco.org/jacoco/trunk/doc/maven.html
+[22]: https://www.eclipse.org/legal/epl-2.0/
+[23]: https://github.com/exasol/error-code-crawler-maven-plugin/
+[24]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE
+[25]: http://zlika.github.io/reproducible-build-maven-plugin
+[26]: https://selenium.dev/
+[27]: https://bonigarcia.dev/webdrivermanager/
+[28]: https://www.apache.org/licenses/LICENSE-2.0
+[29]: https://github.com/mockito/mockito
+[30]: https://opensource.org/licenses/MIT
+[31]: https://github.com/douglascrockford/JSON-java
+[32]: https://github.com/stleary/JSON-java/blob/master/LICENSE
+[33]: https://java.testcontainers.org
+[34]: http://opensource.org/licenses/MIT
+[35]: https://github.com/exasol/exasol-testcontainers/
+[36]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE
+[37]: https://github.com/exasol/test-db-builder-java/
+[38]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE
+[39]: https://www.bouncycastle.org/java.html
+[40]: https://www.bouncycastle.org/licence.html
+[41]: https://github.com/FasterXML/jackson
+[42]: https://commons.apache.org/proper/commons-io/
+[43]: https://www.mojohaus.org/exec-maven-plugin
diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md
index 284a071..0cebc80 100644
--- a/doc/changes/changelog.md
+++ b/doc/changes/changelog.md
@@ -1,5 +1,6 @@
# Changes
+* [1.0.5](changes_1.0.5.md)
* [1.0.4](changes_1.0.4.md)
* [1.0.3](changes_1.0.3.md)
* [1.0.2](changes_1.0.2.md)
diff --git a/doc/changes/changes_1.0.5.md b/doc/changes/changes_1.0.5.md
new file mode 100644
index 0000000..eff47bd
--- /dev/null
+++ b/doc/changes/changes_1.0.5.md
@@ -0,0 +1,44 @@
+# Tableau Connector 1.0.5, released 2024-01-17
+
+Code name: Fix `DATEADD` function for `DATE` argument
+
+## Summary
+
+This release fixes the return type of the `DATEADD` when using a `DATE` as argument. Before, the function returned a `DATE` type when adding an hour, minute or second. This is fixed now and `DATEADD` always returns a `TIMESTAMP` when adding an hour, minute or second even when a `DATE` was used as argument.
+
+## Bugfixes
+
+* #74: Fixed return type of `DATEADD` function
+
+## Dependency Updates
+
+### JDBC Kerberos Setup Tests
+
+#### Plugin Dependency Updates
+
+* Updated `com.exasol:project-keeper-maven-plugin:2.9.17` to `3.0.0`
+* Updated `org.apache.maven.plugins:maven-surefire-plugin:3.2.2` to `3.2.3`
+* Added `org.apache.maven.plugins:maven-toolchains-plugin:3.1.0`
+
+### Tableau Server GUI Tests
+
+#### Test Dependency Updates
+
+* Updated `com.fasterxml.jackson.core:jackson-databind:2.16.0` to `2.16.1`
+* Updated `io.github.bonigarcia:webdrivermanager:5.6.2` to `5.6.3`
+* Updated `org.mockito:mockito-junit-jupiter:5.8.0` to `5.9.0`
+* Updated `org.seleniumhq.selenium:selenium-java:4.16.0` to `4.16.1`
+
+#### Plugin Dependency Updates
+
+* Updated `com.exasol:project-keeper-maven-plugin:2.9.17` to `3.0.0`
+* Updated `org.apache.maven.plugins:maven-surefire-plugin:3.2.2` to `3.2.3`
+* Added `org.apache.maven.plugins:maven-toolchains-plugin:3.1.0`
+
+### Exasol Connector for Tableau
+
+#### Plugin Dependency Updates
+
+* Updated `com.exasol:project-keeper-maven-plugin:2.9.17` to `3.0.0`
+* Updated `org.apache.maven.plugins:maven-surefire-plugin:3.2.2` to `3.2.3`
+* Added `org.apache.maven.plugins:maven-toolchains-plugin:3.1.0`
diff --git a/doc/developer_guide/developer_guide.md b/doc/developer_guide/developer_guide.md
index 98483f9..a21c599 100644
--- a/doc/developer_guide/developer_guide.md
+++ b/doc/developer_guide/developer_guide.md
@@ -132,14 +132,13 @@ You can run TDVT tests under Windows and macOS. This guide describes the setup f
### Initial Setup
* Create a new Exasol database running on port `8563`.
-* Prepare database schema by running [tools/load_tvdt_test_data.sql](../../tools/load_tvdt_test_data.sql).
+* Prepare database schema `TESTV1` by running [tools/load_tvdt_test_data.sql](../../tools/load_tvdt_test_data.sql).
* Configure hostname of the Exasol database: Add an entry to `C:\Windows\System32\Drivers\etc\hosts` (adapt the IP to your database):
```
10.0.0.2 exasol.example.com
```
-* Install TDVT as described in the [TDVT documentation](https://tableau.github.io/connector-plugin-sdk/docs/tdvt#set-up).
* Update the Exasol certificate fingerprint in the four `*.tds` files:
* [tdvt_jdbc/tds/cast_calcs.exasol_jdbc.tds](../../tdvt_jdbc/tds/cast_calcs.exasol_jdbc.tds)
* [tdvt_jdbc/tds/Staples.exasol_jdbc.tds](../../tdvt_jdbc/tds/Staples.exasol_jdbc.tds)
@@ -151,13 +150,25 @@ You can run TDVT tests under Windows and macOS. This guide describes the setup f
* [tdvt_odbc/config/tdvt/tdvt_override.ini](../../tdvt_odbc/config/tdvt/tdvt_override.ini)
* Ensure that directory `C:\Program Files\Tableau\Connectors\` does not contain any `.tabco` files as tests would use them instead of the sources.
+#### Install TDVT
+
+TDVT library must be installed in a Python virtual environment (venv). The [TDVT documentation](https://tableau.github.io/connector-plugin-sdk/docs/tdvt#set-up) describes how to do this.
+
+However we provide a script that automatically clones and installs TDVT into a new venv at `target/tdvt-venv`:
+
+```sh
+./tools/setup_tdvt.sh
+```
+
+Script `tools/run_tdvt_tests.sh` will automatically use this venv.
+
### Configure Test Suites
-You can configure the tests suites to run in files
-* [tdvt_jdbc/config/exasol_jdbc.ini](../../tdvt_jdbc/config/exasol_jdbc.ini)
-* [tdvt_odbc/config/exasol_odbc.ini](../../tdvt_odbc/config/exasol_odbc.ini)
+You can configure test suites to enable or disable tests using the following `.ini` files.
+* JDBC: [tdvt_jdbc/config/exasol_jdbc.ini](../../tdvt_jdbc/config/exasol_jdbc.ini)
+* ODBC: [tdvt_odbc/config/exasol_odbc.ini](../../tdvt_odbc/config/exasol_odbc.ini)
-After modifying these files you need to re-generate the test suite by adding the `--generate` argument to the `tdvt.tdvt run` command.
+After modifying these files you need to re-generate the test suite by adding the `--generate` argument to the `tdvt.tdvt run` command. Script `tools/run_tdvt_tests.sh` uses this option by default.
See the [manual](https://tableau.github.io/connector-plugin-sdk/docs/tdvt#ini-file-structure) for details about the available tests.
@@ -174,6 +185,7 @@ This will collect test results in `target/tdvt_results_jdbc/` resp. `target/tdvt
* JDBC Connector:
```sh
+ source target/tdvt-venv/Scripts/activate
cd tdvt_jdbc
python -m tdvt.tdvt run exasol_jdbc --generate
python -m tdvt.tdvt run exasol_jdbc
@@ -182,6 +194,7 @@ This will collect test results in `target/tdvt_results_jdbc/` resp. `target/tdvt
* ODBC Connector:
```sh
+ source target/tdvt-venv/Scripts/activate
cd tdvt_odbc
python -m tdvt.tdvt run exasol_odbc --generate
python -m tdvt.tdvt run exasol_odbc
diff --git a/javascript-test/package-lock.json b/javascript-test/package-lock.json
index b92ae89..c10a222 100644
--- a/javascript-test/package-lock.json
+++ b/javascript-test/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "tableau-connector-unit-tests",
- "version": "1.0.4",
+ "version": "1.0.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "tableau-connector-unit-tests",
- "version": "1.0.4",
+ "version": "1.0.5",
"devDependencies": {
"jest": "^29.7.0",
"xml2json": "^0.12.0"
@@ -119,21 +119,21 @@
}
},
"node_modules/@babel/core": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz",
- "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
+ "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.5",
- "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.5",
- "@babel/parser": "^7.23.5",
+ "@babel/helpers": "^7.23.7",
+ "@babel/parser": "^7.23.6",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.5",
- "@babel/types": "^7.23.5",
+ "@babel/traverse": "^7.23.7",
+ "@babel/types": "^7.23.6",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -149,12 +149,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz",
- "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.5",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -164,14 +164,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -305,14 +305,14 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz",
- "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==",
+ "version": "7.23.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz",
+ "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==",
"dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.5",
- "@babel/types": "^7.23.5"
+ "@babel/traverse": "^7.23.7",
+ "@babel/types": "^7.23.6"
},
"engines": {
"node": ">=6.9.0"
@@ -404,9 +404,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz",
- "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -607,20 +607,20 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz",
- "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+ "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.5",
+ "@babel/generator": "^7.23.6",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.5",
- "@babel/types": "^7.23.5",
- "debug": "^4.1.0",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -628,9 +628,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz",
- "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
@@ -989,9 +989,9 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz",
+ "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -1036,9 +1036,9 @@
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.7",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
- "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
@@ -1055,9 +1055,9 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.4",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
- "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
+ "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
@@ -1097,9 +1097,9 @@
}
},
"node_modules/@types/node": {
- "version": "20.10.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz",
- "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==",
+ "version": "20.11.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz",
+ "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -1397,9 +1397,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001566",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz",
- "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==",
+ "version": "1.0.30001578",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001578.tgz",
+ "integrity": "sha512-J/jkFgsQ3NEl4w2lCoM9ZPxrD+FoBNJ7uJUpGVjIg/j0OwJosWM36EPDv+Yyi0V4twBk9pPmlFS+PLykgEvUmg==",
"dev": true,
"funding": [
{
@@ -1616,9 +1616,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.607",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.607.tgz",
- "integrity": "sha512-YUlnPwE6eYxzwBnFmawA8LiLRfm70R2aJRIUv0n03uHt/cUzzYACOogmvk8M2+hVzt/kB80KJXx7d5f5JofPvQ==",
+ "version": "1.4.635",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.635.tgz",
+ "integrity": "sha512-iu/2D0zolKU3iDGXXxdOzNf72Jnokn+K1IN6Kk4iV6l1Tr2g/qy+mvmtfAiBwZe5S3aB5r92vp+zSZ69scYRrg==",
"dev": true
},
"node_modules/emittery": {
@@ -1898,13 +1898,13 @@
}
},
"node_modules/hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.3.1.tgz",
+ "integrity": "sha512-v7E+yIjcHECn973i0xHm4kJkEpv3C8sbYS4344WXbzYqRyiDD7rjnnKo4hsJkejQBAFdRMUGNHySeSPKSH9Rqw==",
+ "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
"dev": true,
"engines": {
- "node": ">=4.0.0"
+ "node": ">=6.0.0"
}
},
"node_modules/html-escaper": {
diff --git a/javascript-test/package.json b/javascript-test/package.json
index d9b91f8..ceb28b8 100644
--- a/javascript-test/package.json
+++ b/javascript-test/package.json
@@ -1,6 +1,6 @@
{
"name": "tableau-connector-unit-tests",
- "version": "1.0.4",
+ "version": "1.0.5",
"type": "commonjs",
"scripts": {
"test": "jest",
diff --git a/jdbc-kerberos-setup-test/pk_generated_parent.pom b/jdbc-kerberos-setup-test/pk_generated_parent.pom
index ce455cc..df3a4f4 100644
--- a/jdbc-kerberos-setup-test/pk_generated_parent.pom
+++ b/jdbc-kerberos-setup-test/pk_generated_parent.pom
@@ -15,6 +15,8 @@
UTF-8
UTF-8
11
+ exasol
+ https://sonarcloud.io
@@ -45,6 +47,25 @@
sonar-maven-plugin
3.10.0.2594
+
+ org.apache.maven.plugins
+ maven-toolchains-plugin
+ 3.1.0
+
+
+
+ toolchain
+
+
+
+
+
+
+ ${java.version}
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -75,6 +96,9 @@
3.6.3
+
+ 17
+
@@ -122,7 +146,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.2.2
+ 3.2.3
diff --git a/jdbc-kerberos-setup-test/pom.xml b/jdbc-kerberos-setup-test/pom.xml
index 33e565b..fe95746 100644
--- a/jdbc-kerberos-setup-test/pom.xml
+++ b/jdbc-kerberos-setup-test/pom.xml
@@ -36,7 +36,7 @@
com.exasol
project-keeper-maven-plugin
- 2.9.17
+ 3.0.0
diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom
index c499d12..00fd1aa 100644
--- a/pk_generated_parent.pom
+++ b/pk_generated_parent.pom
@@ -9,6 +9,8 @@
UTF-8
UTF-8
11
+ exasol
+ https://sonarcloud.io
@@ -39,6 +41,25 @@
sonar-maven-plugin
3.10.0.2594
+
+ org.apache.maven.plugins
+ maven-toolchains-plugin
+ 3.1.0
+
+
+
+ toolchain
+
+
+
+
+
+
+ ${java.version}
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -69,6 +90,9 @@
3.6.3
+
+ 17
+
@@ -116,7 +140,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.2.2
+ 3.2.3
diff --git a/pom.xml b/pom.xml
index c80a0e5..590af6a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
${revision}
- 1.0.4
+ 1.0.5
tableau-server-GUI-tests
@@ -26,7 +26,7 @@
com.exasol
project-keeper-maven-plugin
- 2.9.17
+ 3.0.0
diff --git a/src/exasol_jdbc/dialect.tdd b/src/exasol_jdbc/dialect.tdd
index e27ec72..9f85a0e 100644
--- a/src/exasol_jdbc/dialect.tdd
+++ b/src/exasol_jdbc/dialect.tdd
@@ -977,6 +977,9 @@
ADD_MONTHS(%3, (3 * %2))
ADD_MONTHS(%3, %2)
(%3 + (7 * %2))
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' HOUR)
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' MINUTE)
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' SECOND)
diff --git a/src/exasol_jdbc/manifest.xml b/src/exasol_jdbc/manifest.xml
index c9cd19e..eb7716d 100644
--- a/src/exasol_jdbc/manifest.xml
+++ b/src/exasol_jdbc/manifest.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/src/exasol_odbc/dialect.tdd b/src/exasol_odbc/dialect.tdd
index ca744d9..43965d2 100644
--- a/src/exasol_odbc/dialect.tdd
+++ b/src/exasol_odbc/dialect.tdd
@@ -977,6 +977,9 @@
ADD_MONTHS(%3, (3 * %2))
ADD_MONTHS(%3, %2)
(%3 + (7 * %2))
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' HOUR)
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' MINUTE)
+ (CAST(%3 AS TIMESTAMP) + %2 * INTERVAL '1' SECOND)
diff --git a/src/exasol_odbc/manifest.xml b/src/exasol_odbc/manifest.xml
index f2fbafa..b1d21f9 100644
--- a/src/exasol_odbc/manifest.xml
+++ b/src/exasol_odbc/manifest.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/tableau-server-GUI-tests/pk_generated_parent.pom b/tableau-server-GUI-tests/pk_generated_parent.pom
index 56aa97d..0e707e2 100644
--- a/tableau-server-GUI-tests/pk_generated_parent.pom
+++ b/tableau-server-GUI-tests/pk_generated_parent.pom
@@ -15,6 +15,8 @@
UTF-8
UTF-8
11
+ exasol
+ https://sonarcloud.io
@@ -45,6 +47,25 @@
sonar-maven-plugin
3.10.0.2594
+
+ org.apache.maven.plugins
+ maven-toolchains-plugin
+ 3.1.0
+
+
+
+ toolchain
+
+
+
+
+
+
+ ${java.version}
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -75,6 +96,9 @@
3.6.3
+
+ 17
+
@@ -122,7 +146,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.2.2
+ 3.2.3
diff --git a/tableau-server-GUI-tests/pom.xml b/tableau-server-GUI-tests/pom.xml
index 0678654..220648a 100644
--- a/tableau-server-GUI-tests/pom.xml
+++ b/tableau-server-GUI-tests/pom.xml
@@ -15,7 +15,7 @@
org.seleniumhq.selenium
selenium-java
- 4.16.0
+ 4.16.1
test
@@ -33,13 +33,13 @@
io.github.bonigarcia
webdrivermanager
- 5.6.2
+ 5.6.3
test
org.mockito
mockito-junit-jupiter
- 5.8.0
+ 5.9.0
test
@@ -77,7 +77,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.16.0
+ 2.16.1
test
@@ -93,7 +93,7 @@
com.exasol
project-keeper-maven-plugin
- 2.9.17
+ 3.0.0
diff --git a/tools/package_connector.sh b/tools/package_connector.sh
index bb9df2c..0db9efb 100755
--- a/tools/package_connector.sh
+++ b/tools/package_connector.sh
@@ -3,12 +3,10 @@ set -euo pipefail
project_dir="$( cd "$(dirname "$0")/.." >/dev/null 2>&1 ; pwd -P )"
readonly project_dir
-target_dir="$project_dir/target/"
-readonly target_dir
-sdk_dir="$target_dir/sdk"
-readonly sdk_dir
-packager_dir="$sdk_dir/connector-packager/"
-readonly packager_dir
+readonly target_dir="$project_dir/target/"
+readonly sdk_dir="$target_dir/connector-plugin-sdk/"
+readonly packager_dir="$sdk_dir/connector-packager/"
+
set_up_environment () {
clone_tableau_connector_plugin_sdk_repository
diff --git a/tools/run_tdvt_tests.sh b/tools/run_tdvt_tests.sh
index b3c18d2..8afaf68 100644
--- a/tools/run_tdvt_tests.sh
+++ b/tools/run_tdvt_tests.sh
@@ -3,11 +3,30 @@ set -euo pipefail
project_dir="$( cd "$(dirname "$0")/.." >/dev/null 2>&1 ; pwd -P )"
readonly project_dir
-target_dir="$project_dir/target"
-readonly target_dir
+readonly target_dir="$project_dir/target"
+readonly venv_dir="$target_dir/tdvt-venv"
skip_generate=false
+verify_no_connector_installed() {
+ readonly connector_dir=$(cygpath "C:\Program Files\Tableau\Connectors")
+ echo "$connector_dir"
+ if [ "$(ls -A "$connector_dir")" ]; then
+ echo "ERROR: Connectors are installed in $connector_dir that might override code under test: $(ls -A "$connector_dir")"
+ echo "ERROR: Please delete all files in $connector_dir"
+ exit 1
+ fi
+}
+
+activate_venv() {
+ if [ ! -d "$venv_dir" ]; then
+ echo "ERROR: Python venv not found at $venv_dir. Please run tools\setup_tdvt.sh"
+ exit 1
+ fi
+ echo "Activating venv at $venv_dir"
+ source "$venv_dir/Scripts/activate"
+}
+
get_version() {
type="$1"
grep "plugin-version" < "$project_dir/src/exasol_$type/manifest.xml" | sed 's/^.*plugin-version="\([^"]*\)".*$/\1/'
@@ -43,6 +62,10 @@ run_tests () {
echo "Created test result archive $test_results_archive"
}
+verify_no_connector_installed
+
+activate_venv
+
test_type=${1-}
if [[ -z "${test_type}" ]] ; then
diff --git a/tools/setup_tdvt.sh b/tools/setup_tdvt.sh
new file mode 100644
index 0000000..1526fb7
--- /dev/null
+++ b/tools/setup_tdvt.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+project_dir="$( cd "$(dirname "$0")/.." >/dev/null 2>&1 ; pwd -P )"
+readonly project_dir
+readonly target_dir="$project_dir/target"
+
+readonly sdk_dir="$target_dir/connector-plugin-sdk"
+readonly venv_dir="$target_dir/tdvt-venv"
+
+if [ ! -d "$sdk_dir" ]; then
+ echo "Cloning Tableau Connector Plugin SDK repository to $sdk_dir..."
+ mkdir -p "$sdk_dir"
+ git clone https://github.com/tableau/connector-plugin-sdk.git "$sdk_dir"
+else
+ echo "Tableau Connector Plugin SDK already exists at $sdk_dir, no need to clone it."
+fi
+
+echo "Deleting venv at $venv_dir..."
+rm -rf "$venv_dir"
+
+echo "Creating venv at $venv_dir..."
+python -m venv "$venv_dir"
+source "$venv_dir/Scripts/activate"
+
+echo "Upgrading pip..."
+python -m pip install --upgrade pip
+
+echo "Install setuptools"
+python -m pip install setuptools
+
+echo "Installing TDVT..."
+cd "$sdk_dir/tdvt"
+python -m pip install -e .
+python -m pip list