diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml
index 405834306dcd..2c156f7e5e17 100644
--- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml
+++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml
@@ -2061,6 +2061,17 @@
allowedHosts:
hosts:
- api.tempo.io
+- name: Teradata
+ sourceDefinitionId: aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503
+ dockerRepository: airbyte/source-teradata
+ dockerImageTag: 0.1.0
+ documentationUrl: https://docs.airbyte.com/integrations/sources/teradata
+ icon: teradata.svg
+ sourceType: database
+ releaseStage: alpha
+ allowedHosts:
+ hosts:
+ - "${host}"
- name: TiDB
sourceDefinitionId: 0dad1a35-ccf8-4d03-b73e-6788c00b13ae
dockerRepository: airbyte/source-tidb
diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml
index 2fd731c9f59d..294b705c9426 100644
--- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml
+++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml
@@ -15429,6 +15429,180 @@
supportsNormalization: false
supportsDBT: false
supported_destination_sync_modes: []
+- dockerImage: "airbyte/source-teradata:0.1.0"
+ spec:
+ documentationUrl: "https://docs.airbyte.com/integrations/sources/teradata"
+ connectionSpecification:
+ $schema: "http://json-schema.org/draft-07/schema#"
+ title: "Teradata Source Spec"
+ type: "object"
+ required:
+ - "host"
+ - "database"
+ - "username"
+ properties:
+ host:
+ title: "Host"
+ description: "Hostname of the database."
+ type: "string"
+ order: 0
+ port:
+ title: "Port"
+ description: "Port of the database."
+ type: "integer"
+ minimum: 0
+ maximum: 65536
+ default: 3306
+ examples:
+ - "3306"
+ order: 1
+ database:
+ title: "Database"
+ description: "Name of the database."
+ type: "string"
+ order: 2
+ username:
+ title: "Username"
+ description: "Username to use to access the database."
+ type: "string"
+ order: 3
+ password:
+ title: "Password"
+ description: "Password associated with the username."
+ type: "string"
+ airbyte_secret: true
+ order: 4
+ jdbc_url_params:
+ title: "JDBC URL params"
+ description: "Additional properties to pass to the JDBC URL string when\
+ \ connecting to the database formatted as 'key=value' pairs separated\
+ \ by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)"
+ type: "string"
+ order: 5
+ replication_method:
+ title: "Replication method"
+ description: "Replication method to use for extracting data from the database.\
+ \ STANDARD replication requires no setup on the DB side but will not be\
+ \ able to represent deletions incrementally. CDC uses the Binlog to detect\
+ \ inserts, updates, and deletes. This needs to be configured on the source\
+ \ database itself."
+ type: "string"
+ order: 6
+ default: "STANDARD"
+ enum:
+ - "STANDARD"
+ - "CDC"
+ ssl:
+ title: "SSL Connection"
+ description: "Encrypt data using SSL. When activating SSL, please select\
+ \ one of the connection modes."
+ type: "boolean"
+ default: false
+ order: 7
+ ssl_mode:
+ title: "SSL Modes"
+ description: "SSL connection modes. \n disable - Chose this mode\
+ \ to disable encryption of communication between Airbyte and destination\
+ \ database\n allow - Chose this mode to enable encryption only\
+ \ when required by the destination database\n prefer - Chose this\
+ \ mode to allow unencrypted connection only if the destination database\
+ \ does not support encryption\n require - Chose this mode to always\
+ \ require encryption. If the destination database server does not support\
+ \ encryption, connection will fail\n verify-ca - Chose this mode\
+ \ to always require encryption and to verify that the destination database\
+ \ server has a valid SSL certificate\n verify-full - This is the\
+ \ most secure mode. Chose this mode to always require encryption and to\
+ \ verify the identity of the destination database server\n See more information\
+ \ - in the docs."
+ type: "object"
+ order: 8
+ oneOf:
+ - title: "disable"
+ additionalProperties: true
+ description: "Disable SSL."
+ required:
+ - "mode"
+ properties:
+ mode:
+ type: "string"
+ const: "disable"
+ order: 0
+ - title: "allow"
+ additionalProperties: true
+ description: "Allow SSL mode."
+ required:
+ - "mode"
+ properties:
+ mode:
+ type: "string"
+ const: "allow"
+ order: 0
+ - title: "prefer"
+ additionalProperties: true
+ description: "Prefer SSL mode."
+ required:
+ - "mode"
+ properties:
+ mode:
+ type: "string"
+ const: "prefer"
+ order: 0
+ - title: "require"
+ additionalProperties: true
+ description: "Require SSL mode."
+ required:
+ - "mode"
+ properties:
+ mode:
+ type: "string"
+ const: "require"
+ order: 0
+ - title: "verify-ca"
+ additionalProperties: true
+ description: "Verify-ca SSL mode."
+ required:
+ - "mode"
+ - "ssl_ca_certificate"
+ properties:
+ mode:
+ type: "string"
+ const: "verify-ca"
+ order: 0
+ ssl_ca_certificate:
+ type: "string"
+ title: "CA certificate"
+ description: "Specifies the file name of a PEM file that contains\
+ \ Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n\
+ \ See more information - in the docs."
+ airbyte_secret: true
+ multiline: true
+ order: 1
+ - title: "verify-full"
+ additionalProperties: true
+ description: "Verify-full SSL mode."
+ required:
+ - "mode"
+ - "ssl_ca_certificate"
+ properties:
+ mode:
+ type: "string"
+ const: "verify-full"
+ order: 0
+ ssl_ca_certificate:
+ type: "string"
+ title: "CA certificate"
+ description: "Specifies the file name of a PEM file that contains\
+ \ Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n\
+ \ See more information - in the docs."
+ airbyte_secret: true
+ multiline: true
+ order: 1
+ supportsNormalization: false
+ supportsDBT: false
+ supported_destination_sync_modes: []
- dockerImage: "airbyte/source-tidb:0.2.4"
spec:
documentationUrl: "https://docs.airbyte.com/integrations/sources/tidb"
diff --git a/airbyte-integrations/builds.md b/airbyte-integrations/builds.md
index 1a1d75ef7d90..647584fd328d 100644
--- a/airbyte-integrations/builds.md
+++ b/airbyte-integrations/builds.md
@@ -3,8 +3,8 @@
# Sources
-| name | status |
-|:-------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| name | status |
+|:-------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 3PL Central | [![source-amazon-seller-partner](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-tplcentral%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-tplcentral) |
| Adjust | [![source-adjust](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-adjust%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-adjust) |
| Airtable | [![source-airtable](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-airtable%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-airtable) |
@@ -12,7 +12,7 @@
| Amazon Seller Partner | [![source-amazon-seller-partner](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-amazon-seller-partner%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-amazon-seller-partner) |
| Amplitude | [![source-amplitude](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-amplitude%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-amplitude) |
| Apify Dataset | [![source-amplitude](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-apify-dataset%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-apify-dataset) |
-| AppsFlyer | [![source-appsflyer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appsflyer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appsflyer-singer) |
+| AppsFlyer | [![source-appsflyer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appsflyer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appsflyer-singer) |
| App Store | [![source-appstore-singer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appstore-singer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appstore-singer) |
| Asana | [![source-asana](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-asana%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-asana) |
| Ashby | [![source-ashby](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-ashby%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-ashby) |
@@ -61,7 +61,7 @@
| IBM Db2 | [![source-db2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-db2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-db2) |
| Insightly | [![source-insightly](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-insightly%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-insightly) |
| Instagram | [![source-instagram](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-instagram%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-instagram) |
-| Intercom | [![source-intercom](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-intercom%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-intercom) |
+| Intercom | [![source-intercom](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-intercom%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-intercom) |
| Iterable | [![source-iterable](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-iterable%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-iterable) |
| Jira | [![source-jira](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-jira%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-jira) |
| LinkedIn Ads | [![source-linkedin-ads](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-linkedin-ads%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-linkedin-ads) |
@@ -103,7 +103,7 @@
| Posthog | [![source-posthog](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-posthog%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-posthog) |
| PrestaShop | [![source-prestashop](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-prestashop%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-prestashop) |
| Primetric | [![source-primetric](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-primetric%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-primetric) |
-| PyPI | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fsource-pypi%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-pypi) |
+| PyPI | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fsource-pypi%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-pypi) |
| Public APIs | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-public-apis%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-public-apis) |
| CockroachDb | [![source-cockroachdb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-cockroachdb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-cockroachdb) |
| Confluence | [![source-confluence](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-confluence%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-confluence) |
@@ -139,9 +139,9 @@
| US Census | [![source-us-census](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-us-census%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-us-census) |
| Vitally | [![source-vitally](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-vitally%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-vitally) |
| Visma e-conomics | [![source-visma-economic](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-visma-economic%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-us-census) |
-| Waiteraid | [![source-waiteraid](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-waiteraid%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-waiteraid) |
+| Waiteraid | [![source-waiteraid](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-waiteraid%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-waiteraid) |
| Whisky Hunter | [![source-whisky-hunter](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-whisky-hunter%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-whisky-hunter) |
-| Workramp | [![source-workramp](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-workramp%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-workramp) |
+| Workramp | [![source-workramp](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-workramp%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-workramp) |
| Wrike | [![source-wrike](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-wrike%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-wrike) |
| YouTube Analytics | [![source-youtube-analytics](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-youtube-analytics%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-youtube-analytics) |
| Weatherstack | [![source-weatherstack](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-weatherstack%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-weatherstack) |
@@ -152,11 +152,12 @@
| Zendesk Talk | [![source-zendesk-talk](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zendesk-talk%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zendesk-talk) |
| Zoom | [![source-zoom-singer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zoom-singer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zoom-singer) |
| Zuora | [![source-zuora](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zuora%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zuora) |
+| Teradata | (Not Setup) |
# Destinations
-| name | status |
-|:---------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| name | status |
+|:---------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Azure Blob Storage | [![destination-azure-blob-storage](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-azure-blob-storage%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-azure-blob-storage) |
| BigQuery | [![destination-bigquery](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-bigquery%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-bigquery) |
| BigQuery Denormalized | [![destination-bigquery-denormalized](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-bigquery-denormalized%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-bigquery-denormalized) |
@@ -164,13 +165,13 @@
| Cassandra | [![destination-cassandra](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-cassandra%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-cassandra) |
| Databricks | [![destination-databricks](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-databricks%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-databricks) |
| Dev Null | [![destination-dev-null](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-dev-null%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-dev-null) |
-| Elasticsearch | [![destination-elasticsearch](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-elasticsearch%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-elasticsearch) |
+| Elasticsearch | [![destination-elasticsearch](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-elasticsearch%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-elasticsearch) |
| End-to-End Testing | [![destination-e2e-test](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-e2e-test%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-e2e-test) |
| Exasol | [![destination-exasol](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-exasol%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-exasol) |
| Google Cloud Storage (GCS) | [![destination-gcs](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-gcs%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-gcs) |
| Google Firestore | [![destination-firestore](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-firestore%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-firestore) |
| Google PubSub | [![destination-pubsub](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-pubsub%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-pubsub) |
-| Google Sheets | [![destination-google-sheets](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-google-sheets%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-google-sheets) | |
+| Google Sheets | [![destination-google-sheets](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-google-sheets%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-google-sheets) |
| Apache Iceberg | [![destination-iceberg](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-iceberg%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-iceberg) |
| Kafka | [![destination-kafka](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-kafka%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-kafka) |
| Keen (Chargify) | [![destination-keen](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-keen%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-keen) |
@@ -184,7 +185,7 @@
| Oracle | [![destination-oracle](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-oracle%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-oracle) |
| Postgres | [![destination-postgres](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-postgres%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-postgres) |
| Pulsar | [![destination-pulsar](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-pulsar%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-pulsar) |
-| R2 | [![destination-r2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-r2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-r2) |
+| R2 | [![destination-r2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-r2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-r2) |
| Redshift | [![destination-redshift](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-redshift%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-redshift) |
| Rockset | [![destination-rockset](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-rockset%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-rockset) |
| S3 | [![destination-s3](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-s3%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-s3) |
@@ -192,4 +193,4 @@
| SFTP-JSON | [![destination-sftp-json](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-sftp-json%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-sftp-json) |
| Snowflake | [![destination-snowflake](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-snowflake%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-snowflake) |
| Teradata | [![destination-teradata](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-teradata%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-teradata) |
-| TiDB | [![destination-tidb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-tidb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-tidb) |
\ No newline at end of file
+| TiDB | [![destination-tidb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-tidb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-tidb) |
diff --git a/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java
index f922d27b1db2..bba9eca3db41 100644
--- a/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java
+++ b/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java
@@ -389,7 +389,8 @@ protected AirbyteCatalog filterOutOtherSchemas(final AirbyteCatalog catalog) {
@Test
void testDiscoverWithMultipleSchemas() throws Exception {
// clickhouse and mysql do not have a concept of schemas, so this test does not make sense for them.
- if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse")) {
+ String driverClass = getDriverClass().toLowerCase();
+ if (driverClass.contains("mysql") || driverClass.contains("clickhouse") || driverClass.contains("teradata")) {
return;
}
@@ -836,10 +837,11 @@ protected void incrementalCursorCheck(
// See https://github.com/airbytehq/airbyte/issues/14732 for rationale and details.
@Test
- void testIncrementalWithConcurrentInsertion() throws Exception {
+ public void testIncrementalWithConcurrentInsertion() throws Exception {
+ final String driverName = getDriverClass().toLowerCase();
final String namespace = getDefaultNamespace();
final String fullyQualifiedTableName = getFullyQualifiedTableName(TABLE_NAME_AND_TIMESTAMP);
- final String columnDefinition = String.format("name VARCHAR(200) NOT NULL, timestamp %s NOT NULL", COL_TIMESTAMP_TYPE);
+ final String columnDefinition = String.format("name VARCHAR(200) NOT NULL, %s %s NOT NULL", COL_TIMESTAMP, COL_TIMESTAMP_TYPE);
// 1st sync
database.execute(ctx -> {
@@ -877,7 +879,12 @@ void testIncrementalWithConcurrentInsertion() throws Exception {
.filter(r -> r.getType() == Type.RECORD)
.map(r -> r.getRecord().getData().get(COL_NAME).asText())
.toList();
- assertEquals(List.of("a", "b"), firstSyncNames);
+ // teradata doesn't make insertion order guarantee when equal ordering value
+ if (driverName.contains("teradata")) {
+ assertThat(List.of("a", "b"), Matchers.containsInAnyOrder(firstSyncNames.toArray()));
+ } else {
+ assertEquals(List.of("a", "b"), firstSyncNames);
+ }
// 2nd sync
database.execute(ctx -> {
@@ -927,7 +934,14 @@ void testIncrementalWithConcurrentInsertion() throws Exception {
.filter(r -> r.getType() == Type.RECORD)
.map(r -> r.getRecord().getData().get(COL_NAME).asText())
.toList();
- assertEquals(List.of("c", "d", "e", "f"), thirdSyncExpectedNames);
+
+ // teradata doesn't make insertion order guarantee when equal ordering value
+ if (driverName.contains("teradata")) {
+ assertThat(List.of("c", "d", "e", "f"), Matchers.containsInAnyOrder(thirdSyncExpectedNames.toArray()));
+ } else {
+ assertEquals(List.of("c", "d", "e", "f"), thirdSyncExpectedNames);
+ }
+
}
private JsonNode getStateData(final AirbyteMessage airbyteMessage, final String streamName) {
@@ -1158,7 +1172,8 @@ private String getDefaultSchemaName() {
protected String getDefaultNamespace() {
// mysql does not support schemas. it namespaces using database names instead.
- if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse")) {
+ if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse") ||
+ getDriverClass().toLowerCase().contains("teradata")) {
return config.get(JdbcUtils.DATABASE_KEY).asText();
} else {
return SCHEMA_NAME;
diff --git a/airbyte-integrations/connectors/source-teradata/Dockerfile b/airbyte-integrations/connectors/source-teradata/Dockerfile
new file mode 100644
index 000000000000..eec3a3ac0810
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/Dockerfile
@@ -0,0 +1,21 @@
+FROM airbyte/integration-base-java:dev AS build
+
+WORKDIR /airbyte
+
+ENV APPLICATION source-teradata
+
+COPY build/distributions/${APPLICATION}*.tar ${APPLICATION}.tar
+
+RUN tar xf ${APPLICATION}.tar --strip-components=1 && rm -rf ${APPLICATION}.tar
+
+FROM airbyte/integration-base-java:dev
+
+WORKDIR /airbyte
+
+ENV APPLICATION source-teradata
+
+COPY --from=build /airbyte /airbyte
+
+# Airbyte's build system uses these labels to know what to name and tag the docker images produced by this Dockerfile.
+LABEL io.airbyte.version=0.1.0
+LABEL io.airbyte.name=airbyte/source-teradata
diff --git a/airbyte-integrations/connectors/source-teradata/README.md b/airbyte-integrations/connectors/source-teradata/README.md
new file mode 100644
index 000000000000..ad9a67489aa1
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/README.md
@@ -0,0 +1,69 @@
+# Source Teradata
+
+This is the repository for the Teradata source connector in Java.
+For information about how to use this connector within Airbyte, see [the User Documentation](https://docs.airbyte.com/integrations/sources/teradata).
+
+## Local development
+
+#### Building via Gradle
+From the Airbyte repository root, run:
+```
+./gradlew :airbyte-integrations:connectors:source-teradata:build
+```
+
+#### Create credentials
+**If you are a community contributor**, generate the necessary credentials and place them in `secrets/config.json` conforming to the spec file in `src/main/resources/spec.json`.
+Note that the `secrets` directory is git-ignored by default, so there is no danger of accidentally checking in sensitive information.
+
+**If you are an Airbyte core member**, follow the [instructions](https://docs.airbyte.com/connector-development#using-credentials-in-ci) to set up the credentials.
+
+### Locally running the connector docker image
+
+#### Build
+Build the connector image via Gradle:
+```
+./gradlew :airbyte-integrations:connectors:source-teradata:airbyteDocker
+```
+When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in
+the Dockerfile.
+
+#### Run
+Then run any of the connector commands as follows:
+```
+docker run --rm airbyte/source-teradata:dev spec
+docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-teradata:dev check --config /secrets/config.json
+docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-teradata:dev discover --config /secrets/config.json
+docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-teradata:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json
+```
+
+## Testing
+We use `JUnit` for Java tests.
+
+### Unit and Integration Tests
+Place unit tests under `src/test/...`
+Place integration tests in `src/test-integration/...`
+
+#### Acceptance Tests
+Airbyte has a standard test suite that all source connectors must pass. Implement the `TODO`s in
+`src/test-integration/java/io/airbyte/integrations/sources/TeradataSourceAcceptanceTest.java`.
+
+### Using gradle to run tests
+All commands should be run from airbyte project root.
+To run unit tests:
+```
+./gradlew :airbyte-integrations:connectors:source-teradata:unitTest
+```
+To run acceptance and custom integration tests:
+```
+./gradlew :airbyte-integrations:connectors:source-teradata:integrationTest
+```
+
+## Dependency Management
+
+### Publishing a new version of the connector
+You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what?
+1. Make sure your changes are passing unit and integration tests.
+1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)).
+1. Create a Pull Request.
+1. Pat yourself on the back for being an awesome contributor.
+1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master.
diff --git a/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml b/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml
new file mode 100644
index 000000000000..49f39cead0ef
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml
@@ -0,0 +1,8 @@
+# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference)
+# for more information about how to configure these tests
+connector_image: airbyte/source-teradata:dev
+acceptance_tests:
+ spec:
+ tests:
+ - spec_path: "src/test-integration/resources/expected_spec.json"
+ config_path: "secrets/config.json"
diff --git a/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh
new file mode 100644
index 000000000000..394835b93b09
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env sh
+
+# Build latest connector image
+docker build . -t $(cat acceptance-test-config.yml | grep "connector_image" | head -n 1 | cut -d: -f2-)
+
+# Pull latest acctest image
+docker pull airbyte/connector-acceptance-test:latest
+
+# Run
+docker run --rm -it \
+ -v /var/run/docker.sock:/var/run/docker.sock \
+ -v /tmp:/tmp \
+ -v $(pwd):/test_input \
+ airbyte/connector-acceptance-test \
+ --acceptance-test-config /test_input
diff --git a/airbyte-integrations/connectors/source-teradata/build.gradle b/airbyte-integrations/connectors/source-teradata/build.gradle
new file mode 100644
index 000000000000..47b083feee8a
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/build.gradle
@@ -0,0 +1,30 @@
+plugins {
+ id 'application'
+ id 'airbyte-docker'
+ id 'airbyte-integration-test-java'
+ id 'airbyte-connector-acceptance-test'
+}
+
+application {
+ mainClass = 'io.airbyte.integrations.source.teradata.TeradataSource'
+}
+
+dependencies {
+ implementation project(':airbyte-db:db-lib')
+ implementation project(':airbyte-integrations:bases:base-java')
+ implementation libs.airbyte.protocol
+ implementation project(':airbyte-integrations:connectors:source-jdbc')
+ implementation project(':airbyte-integrations:connectors:source-relational-db')
+
+ implementation 'com.teradata.jdbc:terajdbc:20.00.00.06'
+
+ testImplementation testFixtures(project(':airbyte-integrations:connectors:source-jdbc'))
+
+ testImplementation 'org.apache.commons:commons-lang3:3.11'
+
+ integrationTestJavaImplementation project(':airbyte-integrations:connectors:source-teradata')
+ integrationTestJavaImplementation project(':airbyte-integrations:bases:standard-source-test')
+
+ implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs)
+ integrationTestJavaImplementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs)
+}
diff --git a/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py
new file mode 100644
index 000000000000..9e6409236281
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
+#
+
+
+import pytest
+
+pytest_plugins = ("connector_acceptance_test.plugin",)
+
+
+@pytest.fixture(scope="session", autouse=True)
+def connector_setup():
+ """This fixture is a placeholder for external resources that acceptance test might require."""
+ # TODO: setup test dependencies if needed. otherwise remove the TODO comments
+ yield
+ # TODO: clean up test dependencies
diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java
new file mode 100644
index 000000000000..a19a01509df5
--- /dev/null
+++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2023 Airbyte, Inc., all rights reserved.
+ */
+
+package io.airbyte.integrations.source.teradata;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.ImmutableMap;
+import io.airbyte.commons.json.Jsons;
+import io.airbyte.commons.map.MoreMaps;
+import io.airbyte.db.factory.DataSourceFactory;
+import io.airbyte.db.jdbc.JdbcDatabase;
+import io.airbyte.db.jdbc.JdbcUtils;
+import io.airbyte.db.jdbc.StreamingJdbcDatabase;
+import io.airbyte.db.jdbc.streaming.AdaptiveStreamingQueryConfig;
+import io.airbyte.integrations.base.IntegrationRunner;
+import io.airbyte.integrations.base.Source;
+import io.airbyte.integrations.source.jdbc.AbstractJdbcSource;
+import io.airbyte.integrations.source.jdbc.JdbcDataSourceUtils;
+import io.airbyte.integrations.source.relationaldb.TableInfo;
+import io.airbyte.protocol.models.CommonField;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UncheckedIOException;
+import java.nio.charset.StandardCharsets;
+import java.sql.JDBCType;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.sql.DataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TeradataSource extends AbstractJdbcSource implements Source {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(TeradataSource.class);
+
+ private static final int INTERMEDIATE_STATE_EMISSION_FREQUENCY = 10_000;
+
+ static final String DRIVER_CLASS = "com.teradata.jdbc.TeraDriver";
+
+ public static final String PARAM_MODE = "mode";
+ public static final String PARAM_SSL = "ssl";
+ public static final String PARAM_SSL_MODE = "ssl_mode";
+ public static final String PARAM_SSLMODE = "sslmode";
+ public static final String PARAM_SSLCA = "sslca";
+ public static final String REQUIRE = "require";
+
+ private static final String CA_CERTIFICATE = "ca.pem";
+
+ public TeradataSource() {
+ super(DRIVER_CLASS, AdaptiveStreamingQueryConfig::new, new TeradataSourceOperations());
+ }
+
+ public static void main(final String[] args) throws Exception {
+ final Source source = new TeradataSource();
+ LOGGER.info("starting source: {}", TeradataSource.class);
+ new IntegrationRunner(source).run(args);
+ LOGGER.info("completed source: {}", TeradataSource.class);
+ }
+
+ @Override
+ public JsonNode toDatabaseConfig(final JsonNode config) {
+ final String schema = config.get(JdbcUtils.DATABASE_KEY).asText();
+
+ final String host = config.has(JdbcUtils.PORT_KEY) ?
+ config.get(JdbcUtils.HOST_KEY).asText() + ":" + config.get(JdbcUtils.PORT_KEY).asInt() :
+ config.get(JdbcUtils.HOST_KEY).asText();
+
+ final String jdbcUrl = String.format("jdbc:teradata://%s/", host);
+
+ final ImmutableMap.Builder