diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..97a662d62c5
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Created-By: 13 (Oracle Corporation)
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml
new file mode 100644
index 00000000000..54f5296f7e9
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml
new file mode 100644
index 00000000000..1b3432c3177
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js
new file mode 100644
index 00000000000..1a16fddaec1
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js
@@ -0,0 +1,28 @@
+(function dsbuilder(attr){
+ var connStr = "jdbc:opensearch://";
+ // Set SSL value in connection string
+ if (attr[connectionHelper.attributeSSLMode] == "require"){
+ connStr += "https://";
+ } else {
+ connStr += "http://";
+ }
+
+ // Set host information in connection string
+ connStr += attr[connectionHelper.attributeServer] + ":" + attr[connectionHelper.attributePort] + "?";
+
+ // Set authentication values in connection string
+ var authAttrValue = attr[connectionHelper.attributeAuthentication];
+ if (authAttrValue == "auth-none"){
+ connStr += "auth=NONE&trustSelfSigned=" + attr["v-trustSelfSigned"];
+ } else if (authAttrValue == "auth-integrated"){
+ connStr += "auth=AWS_SIGV4";
+ var region = attr["v-region"];
+ if (region){
+ connStr += "&Region=" + region;
+ }
+ } else { //if (authAttrValue == "auth-user-pass"){
+ connStr += "auth=BASIC&user=" + attr[connectionHelper.attributeUsername] + "&password=" + attr[connectionHelper.attributePassword] + "&trustSelfSigned=" + attr["v-trustSelfSigned"];
+ }
+
+ return [connStr];
+})
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr
new file mode 100644
index 00000000000..c51adc002ec
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+ localhost
+ 9200
+
+
+ server
+ port
+ authentication
+ username
+ password
+ sslmode
+ v-region
+ v-trustSelfSigned
+
+
+
+
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd
new file mode 100644
index 00000000000..f33f42444e5
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd
@@ -0,0 +1,349 @@
+
+
+
+
+ STDDEV_SAMP(%1)
+ NULL
+
+
+
+ VAR_SAMP(%1)
+ NULL
+
+
+
+
+ DATE_FORMAT(%1, '%Y-%m-%d')
+
+
+
+ DATE_FORMAT(%1, '%Y-%m-%d %H:%i:%s')
+
+
+
+ CAST(%1 AS TIMESTAMP)
+
+
+
+
+ TO_DAYS(%1) - 693961.0
+
+
+
+
+ (%1 AND NOT %2 OR NOT %1 AND %2)
+
+
+
+
+ (%1 AND %2 = 0 OR NOT %1 AND %2 <> 0)
+
+
+
+
+ (%1 <> %2)
+
+
+
+
+ (%1 = 0 AND %2 OR %1 <> 0 AND NOT %2)
+
+
+
+
+ (%1 <> %2)
+
+
+
+
+ (%1 <> %2)
+
+
+
+
+ (CAST(DATE_FORMAT(DATE(%1), '%Y-%m-%d 00:00:00') AS TIMESTAMP) <> %2)
+
+
+
+
+ (%1 <> CAST(DATE_FORMAT(DATE(%2), '%Y-%m-%d 00:00:00') AS TIMESTAMP))
+
+
+
+
+
+ DATE_ADD(DATE_ADD(%1, INTERVAL FLOOR(%2) DAY), INTERVAL CAST(86400 * (%2 - FLOOR(%2)) AS INT) SECOND)
+
+
+
+
+ (%1 * -1)
+
+
+
+ (%1 * -1)
+
+
+
+
+ DATE_SUB(DATE_SUB(%1, INTERVAL FLOOR(%2) DAY), INTERVAL CAST(86400 * (%2 - FLOOR(%2)) AS INT) SECOND)
+
+
+
+
+ CAST(%1 AS DOUBLE) / %2
+
+
+
+
+
+ CASE WHEN %1 = 0 THEN NULL ELSE COT(%1) END
+
+
+
+ CASE WHEN %2 = 0 THEN NULL ELSE ( %1 / %2 ) END
+
+
+
+
+ CASE WHEN %2 = 0 THEN NULL ELSE ( %1 / %2 ) END
+
+
+
+
+ (CASE WHEN %1 > 0 THEN LN(%1) ELSE NULL END)
+
+
+
+ CASE WHEN %1 > 0 THEN LOG10(%1) ELSE NULL END
+
+
+
+ CASE WHEN %1 > 0 AND %2 > 0 AND %2 <> 1 THEN LOG(%2,%1) ELSE NULL END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 > %2 THEN %1
+ ELSE %2 END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 > %2 THEN %1
+ ELSE %2 END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 > %2 THEN %1
+ ELSE %2 END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 < %2 THEN %1
+ ELSE %2 END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 < %2 THEN %1
+ ELSE %2 END
+
+
+
+
+ CASE WHEN ISNULL(%1) THEN NULL
+ WHEN ISNULL(%2) THEN NULL
+ WHEN %1 < %2 THEN %1
+ ELSE %2 END
+
+
+
+
+
+ DAY_OF_YEAR(%1)
+
+
+
+ DAY_OF_MONTH(%1)
+
+
+
+ DAY_OF_WEEK(%1)
+
+
+
+
+ SUBSTR(%1,%2)
+
+
+
+
+ SUBSTR(%1,CAST(%2 as int))
+
+
+
+
+ SUBSTR(%1,%2,%3)
+
+
+
+
+
+ SUBSTR(%1,CAST(%2 as int),%3)
+
+
+
+
+
+ SUBSTR(%1,%2,CAST(%3 as int))
+
+
+
+
+
+ SUBSTR(%1,CAST(%2 as int),CAST(%3 as int))
+
+
+
+
+
+
+
+
+ LOCATE(%2,%1,CAST(%3 as int))
+
+
+
+
+
+ LOCATE(%2,%1,%3)
+
+
+
+
+
+
+ (YEAR(%3) - YEAR(%2))
+ ((YEAR(%3) - YEAR(%2)) * 4 + (QUARTER(%3) - QUARTER(%2)))
+ ((YEAR(%3) - YEAR(%2)) * 12 + (MONTH(%3) - MONTH(%2)))
+ (TO_DAYS(%3) - TO_DAYS(%2))
+ (TO_DAYS(%3) - TO_DAYS(%2))
+ (TO_DAYS(%3) - TO_DAYS(%2))
+ FLOOR(((TO_DAYS(%3) - (DAYOFWEEK(%3) - 1)) - (TO_DAYS(%2) - (DAYOFWEEK(%2) - 1)))/7)
+
+ ((TO_DAYS(%3) - TO_DAYS(%2)) * 24 + FLOOR(TIME_TO_SEC(%3) / 3600) - FLOOR(TIME_TO_SEC(%2) / 3600))
+
+ ((TO_DAYS(%3) - TO_DAYS(%2)) * 1440 + FLOOR(TIME_TO_SEC(%3) / 60) - FLOOR(TIME_TO_SEC(%2) / 60))
+
+ ((TO_DAYS(%3) - TO_DAYS(%2)) * 86400 + (TIME_TO_SEC(%3) - TIME_TO_SEC(%2)))
+
+
+
+
+
+ FLOOR((( TO_DAYS(%3) - ((7 + DAYOFWEEK(%3) - 2) % 7)) - (TO_DAYS(%2) - ((7 + DAYOFWEEK(%2) - 2) % 7) ) )/7)
+
+
+
+
+
+
+ YEAR(%2)
+ QUARTER(%2)
+ MONTH(%2)
+ DAYOFYEAR(%2)
+ DAYOFMONTH(%2)
+ DAYNAME(%2)
+ FLOOR((7 + DAYOFYEAR(%2) - 1 + DAYOFWEEK(DATE_FORMAT(%2, '%Y-01-01 00:00:00')) - 1) / 7)
+ HOUR(%2)
+ MINUTE(%2)
+ SECOND(%2)
+
+
+
+
+ FLOOR((7 + DAYOFYEAR(%2) - 1 + ((7 + DAYOFWEEK(DATE_FORMAT(%2, '%Y-01-01 00:00:00')) - 2) % 7) ) / 7)
+
+
+
+
+
+ DATE_FORMAT( %2, '%Y-01-01 00:00:00' )
+ CONCAT(DATE_FORMAT(%2, '%Y-'), CONCAT(CAST((3*(QUARTER(%2)-1)+1) AS STRING), '-01 00:00:00'))
+ DATE_FORMAT( %2, '%Y-%m-01 00:00:00' )
+ DATE_FORMAT( %2, '%Y-%m-%d 00:00:00' )
+ DATE_FORMAT( %2, '%Y-%m-%d 00:00:00' )
+ DATE_FORMAT( %2, '%Y-%m-%d 00:00:00' )
+ FROM_DAYS( TO_DAYS(%2) - (DAYOFWEEK(%2) - 1))
+ DATE_FORMAT( %2, '%Y-%m-%d %H:00:00' )
+ DATE_FORMAT( %2, '%Y-%m-%d %H:%i:00' )
+ DATE_FORMAT( %2, '%Y-%m-%d %H:%i:%s' )
+
+
+
+
+ FROM_DAYS( TO_DAYS(%2) - ((7 + DAYOFWEEK(%2) - 2) % 7) )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml
new file mode 100644
index 00000000000..20c99b96be0
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco
new file mode 100644
index 00000000000..590a4ba3885
Binary files /dev/null and b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco differ