diff --git a/common/src/main/java/com/adaptivescale/rosetta/common/TranslationMatrix.java b/common/src/main/java/com/adaptivescale/rosetta/common/TranslationMatrix.java index b4785532..a442be3b 100644 --- a/common/src/main/java/com/adaptivescale/rosetta/common/TranslationMatrix.java +++ b/common/src/main/java/com/adaptivescale/rosetta/common/TranslationMatrix.java @@ -1,5 +1,6 @@ package com.adaptivescale.rosetta.common; +import com.adaptivescale.rosetta.common.models.DatabaseTemplateModel; import com.adaptivescale.rosetta.common.models.TranslationAttributeModel; import com.adaptivescale.rosetta.common.models.TranslationModel; import lombok.extern.slf4j.Slf4j; @@ -20,6 +21,11 @@ public class TranslationMatrix { private static final String TRANSLATION_TABLE_NAME = "TRANSLATION"; private static final String TRANSLATION_ATTRIBUTE_TABLE_NAME = "TRANSLATION_ATTRIBUTE"; + private static final String DATABASE_TEMPLATE_TABLE_NAME = "DATABASE_TEMPLATE"; + + private static final String DEFAULT_DATABASE_TEMPLATE_FILE = "translation_matrix/database_template.csv"; + + private static TranslationMatrix instance = null; public TranslationMatrix() { @@ -58,6 +64,14 @@ void initTables() throws IOException { "ON "+ TRANSLATION_TABLE_NAME +" (source_type, source_column_type, target_type)"; execute(index); execute(uniqueIndex); + + String databaseTemplateTable = "CREATE TABLE "+ DATABASE_TEMPLATE_TABLE_NAME +"(id INT PRIMARY KEY AUTO_INCREMENT, " + + "database_type VARCHAR(255) not null, " + + "template_name VARCHAR(255) not null, " + + "template_file VARCHAR(255) not null " + + ");"; + execute(databaseTemplateTable); + loadCSVData(); } @@ -66,7 +80,9 @@ void loadCSVData() throws IOException { StringBuilder dataInsertQuery = new StringBuilder(); StringBuilder attributesInsertQuery = new StringBuilder(); + StringBuilder databaseTemplateInsertQuery = new StringBuilder(); + readDatabaseTemplate(databaseTemplateInsertQuery); Map> translationAttributesMappedByTranslationId = readTranslationAttributes(attributesInsertQuery); BufferedReader br = readTranslationMatrixFile(); @@ -86,6 +102,7 @@ void loadCSVData() throws IOException { } execute(dataInsertQuery.toString()); execute(attributesInsertQuery.toString()); + execute(databaseTemplateInsertQuery.toString()); } void execute(String sql) { @@ -144,6 +161,36 @@ private List getTranslationAttributeRecords(String qu } } + private Map> getDatabaseTemplates(String query) { + try { + Connection connection = DriverManager.getConnection(URL); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + Map> result = new HashMap<>(); + + while (resultSet.next()) { + DatabaseTemplateModel databaseTemplateModel = new DatabaseTemplateModel(); + databaseTemplateModel.setId(resultSet.getInt("id")); + databaseTemplateModel.setDatabaseType(resultSet.getString("database_type")); + databaseTemplateModel.setTemplateName(resultSet.getString("template_name")); + databaseTemplateModel.setTemplateFile(resultSet.getString("template_file")); + + if (!result.containsKey(databaseTemplateModel.getDatabaseType())) { + result.put(databaseTemplateModel.getDatabaseType(), new HashMap<>()); + } + + result.get(databaseTemplateModel.getDatabaseType()) + .put(databaseTemplateModel.getTemplateName(), databaseTemplateModel.getTemplateFile()); + } + + connection.close(); + + return result; + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + public TranslationModel findById(Integer id) { String query = String.format("SELECT TOP 1 * from %s where id=%s", TRANSLATION_TABLE_NAME, id); return getSingleRecord(query); @@ -167,6 +214,13 @@ public List findByTranslationAttributesByTranslationI return getTranslationAttributeRecords(query); } + public Map> findDatabaseTemplates() { + String query = String.format("SELECT * from %s", + DATABASE_TEMPLATE_TABLE_NAME); + + return getDatabaseTemplates(query); + } + private Map> readTranslationAttributes(StringBuilder attributesInsertQuery) throws IOException { Map> translationAttributesMappedByTranslationId = new HashMap<>(); BufferedReader br = readTranslationAttributesFile(); @@ -190,6 +244,23 @@ private Map> readTranslationAttributes( return translationAttributesMappedByTranslationId; } + private void readDatabaseTemplate(StringBuilder databaseTemplateInsertQuery) throws IOException { + BufferedReader br = readDatabaseTemplateFile(); + String line = ""; + while ((line = br.readLine()) != null) + { + String[] translation = line.split(DELIMITER); + DatabaseTemplateModel databaseTemplateModel = new DatabaseTemplateModel(); + databaseTemplateModel.setId(Integer.valueOf(translation[0])); + databaseTemplateModel.setDatabaseType(translation[1]); + databaseTemplateModel.setTemplateName(translation[2]); + databaseTemplateModel.setTemplateFile(translation[3]); + + String insertStatement = databaseTemplateModel.generateInsertStatement(DATABASE_TEMPLATE_TABLE_NAME); + databaseTemplateInsertQuery.append(insertStatement); + } + } + private BufferedReader readTranslationMatrixFile() throws FileNotFoundException { //Check for the translation file from the ENV variable EXTERNAL_TRANSLATION_FILE String externalTranslationFile = System.getenv(EXTERNAL_TRANSLATION_FILE_ENV); @@ -217,4 +288,10 @@ private BufferedReader readTranslationAttributesFile() throws FileNotFoundExcept InputStream resourceAsStream = TranslationMatrix.class.getClassLoader().getResourceAsStream(DEFAULT_TRANSLATION_ATTRIBUTE_FILE); return new BufferedReader(new InputStreamReader(resourceAsStream)); } + + private BufferedReader readDatabaseTemplateFile() throws FileNotFoundException { + //If the file is not provided in the project read it from the resources + InputStream resourceAsStream = TranslationMatrix.class.getClassLoader().getResourceAsStream(DEFAULT_DATABASE_TEMPLATE_FILE); + return new BufferedReader(new InputStreamReader(resourceAsStream)); + } } diff --git a/common/src/main/java/com/adaptivescale/rosetta/common/models/DatabaseTemplateModel.java b/common/src/main/java/com/adaptivescale/rosetta/common/models/DatabaseTemplateModel.java new file mode 100644 index 00000000..f82334aa --- /dev/null +++ b/common/src/main/java/com/adaptivescale/rosetta/common/models/DatabaseTemplateModel.java @@ -0,0 +1,66 @@ +package com.adaptivescale.rosetta.common.models; + +public class DatabaseTemplateModel { + + private Integer id; + + private String databaseType; + + private String templateName; + + private String templateFile; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDatabaseType() { + return databaseType; + } + + public void setDatabaseType(String databaseType) { + this.databaseType = databaseType; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getTemplateFile() { + return templateFile; + } + + public void setTemplateFile(String templateFile) { + this.templateFile = templateFile; + } + + public String generateInsertStatement(String tableName) { + StringBuilder builder = new StringBuilder(); + builder.append("insert into ").append(tableName) + .append(" values (") + .append(id) + .append(", '").append(databaseType).append("' ") + .append(", '").append(templateName).append("' ") + .append(", '").append(templateFile).append("' ") + .append(");"); + return builder.toString(); + } + + @Override + public String toString() { + return "DatabaseTemplateModel{" + + "id=" + id + + ", databaseType='" + databaseType + '\'' + + ", templateName='" + templateName + '\'' + + ", templateFile='" + templateFile + '\'' + + '}'; + } +} diff --git a/ddl/src/main/java/com/adaptivescale/rosetta/ddl/DatabaseTemplateEnum.java b/ddl/src/main/java/com/adaptivescale/rosetta/ddl/DatabaseTemplateEnum.java new file mode 100644 index 00000000..a3471e92 --- /dev/null +++ b/ddl/src/main/java/com/adaptivescale/rosetta/ddl/DatabaseTemplateEnum.java @@ -0,0 +1,27 @@ +package com.adaptivescale.rosetta.ddl; + +public enum DatabaseTemplateEnum { + + SCHEMA_CREATE("schema_create"), + TABLE_CREATE("table_create"), + TABLE_ALTER("table_alter"), + TABLE_ALTER_DROP_PRIMARY_KEY("table_alter_drop_primary_key"), + TABLE_ALTER_ADD_PRIMARY_KEY("table_alter_add_primary_key"), + TABLE_DROP("table_drop"), + FOREIGNKEY_CREATE("foreignkey_create"), + FOREIGNKEY_DROP("foreignkey_drop"), + COLUMN_ADD("column_add"), + COLUMN_ALTER_TYPE("column_alter_type"), + COLUMN_ALTER_NULL("column_alter_null"), + COLUMN_DROP("column_drop"); + + private String name; + + DatabaseTemplateEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/ddl/src/main/java/com/adaptivescale/rosetta/ddl/targets/sqlserver/SQLServerDDLGenerator.java b/ddl/src/main/java/com/adaptivescale/rosetta/ddl/targets/sqlserver/SQLServerDDLGenerator.java index 67936741..a6b35a33 100644 --- a/ddl/src/main/java/com/adaptivescale/rosetta/ddl/targets/sqlserver/SQLServerDDLGenerator.java +++ b/ddl/src/main/java/com/adaptivescale/rosetta/ddl/targets/sqlserver/SQLServerDDLGenerator.java @@ -1,5 +1,6 @@ package com.adaptivescale.rosetta.ddl.targets.sqlserver; +import com.adaptivescale.rosetta.common.TranslationMatrix; import com.adaptivescale.rosetta.common.annotations.RosettaModule; import com.adaptivescale.rosetta.common.models.Column; import com.adaptivescale.rosetta.common.models.Database; @@ -17,6 +18,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.adaptivescale.rosetta.ddl.DatabaseTemplateEnum.*; + @Slf4j @RosettaModule( name = "sqlserver", @@ -24,32 +27,12 @@ ) public class SQLServerDDLGenerator implements DDL { - private final static String TABLE_CREATE_TEMPLATE = "sqlserver/table/create"; - - private final static String TABLE_ALTER_TEMPLATE = "sqlserver/table/alter"; - - private final static String TABLE_ALTER_DROP_PRIMARY_KEY_TEMPLATE = "sqlserver/table/alter_drop_primary_key"; - - private final static String TABLE_ALTER_ADD_PRIMARY_KEY_TEMPLATE = "sqlserver/table/alter_add_primary_key"; - - private final static String TABLE_DROP_TEMPLATE = "sqlserver/table/drop"; - - private final static String SCHEMA_CREATE_TEMPLATE = "sqlserver/schema/create"; - - private final static String FOREIGN_KEY_CREATE_TEMPLATE = "sqlserver/foreignkey/create"; - - private final static String FOREIGN_KEY_DROP_TEMPLATE = "sqlserver/foreignkey/drop"; - - private final static String COLUMN_ADD_TEMPLATE = "sqlserver/column/add"; - - private final static String COLUMN_ALTER_TYPE_TEMPLATE = "sqlserver/column/alter_column_type"; - - private final static String COLUMN_ALTER_NULL_TEMPLATE = "sqlserver/column/alter_column_null"; - - private final static String COLUMN_DROP_TEMPLATE = "sqlserver/column/drop"; - private final ColumnSQLDecoratorFactory columnSQLDecoratorFactory = new SQLServerColumnDecoratorFactory(); + private Map databaseTemplates = TranslationMatrix + .getInstance() + .findDatabaseTemplates() + .get("sqlserver"); @Override public String createColumn(Column column) { @@ -74,7 +57,8 @@ public String createTable(Table table, boolean dropTableIfExists) { createParams.put("schemaName", table.getSchema()); createParams.put("tableName", table.getName()); createParams.put("tableCode", definitionAsString); - stringBuilder.append(TemplateEngine.process(TABLE_CREATE_TEMPLATE, createParams)); + Optional.ofNullable(databaseTemplates.get(TABLE_CREATE.getName())) + .ifPresent(it -> stringBuilder.append(TemplateEngine.process(it, createParams))); Optional.ofNullable(table) .map(this::foreignKeys) @@ -118,7 +102,9 @@ public String createForeignKey(ForeignKey foreignKey) { params.put("primaryTableName", foreignKey.getPrimaryTableName()); params.put("foreignKeyPrimaryColumnName", foreignKey.getPrimaryColumnName()); params.put("foreignkeyName", foreignKey.getName()); - return TemplateEngine.process(FOREIGN_KEY_CREATE_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(FOREIGNKEY_CREATE.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } @Override @@ -132,17 +118,20 @@ public String alterColumn(ColumnChange change) { if (!Objects.equals(expected.getTypeName(), actual.getTypeName())) { params.put("dataType", expected.getTypeName()); - return TemplateEngine.process(COLUMN_ALTER_TYPE_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(COLUMN_ALTER_TYPE.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } if (!Objects.equals(expected.isNullable(), actual.isNullable())) { if (expected.isNullable()) { params.put("nullDefinition", "DROP NOT NULL"); - return TemplateEngine.process(COLUMN_ALTER_NULL_TEMPLATE, params); } else { params.put("nullDefinition", "SET NOT NULL"); - return TemplateEngine.process(COLUMN_ALTER_NULL_TEMPLATE, params); } + return Optional.ofNullable(databaseTemplates.get(COLUMN_ALTER_NULL.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } log.info("No action taken for changes detected in column: {}.{}.{}", change.getTable().getSchema(), @@ -161,7 +150,9 @@ public String dropColumn(ColumnChange change) { params.put("schemaName", table.getSchema()); params.put("tableName", table.getName()); params.put("columnName", actual.getName()); - return TemplateEngine.process(COLUMN_DROP_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(COLUMN_DROP.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } @Override @@ -173,7 +164,9 @@ public String addColumn(ColumnChange change) { params.put("schemaName", table.getSchema()); params.put("tableName", table.getName()); params.put("columnDefinition", columnSQLDecoratorFactory.decoratorFor(expected).expressSQl()); - return TemplateEngine.process(COLUMN_ADD_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(COLUMN_ADD.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } @Override @@ -181,7 +174,9 @@ public String dropTable(Table actual) { Map params = new HashMap<>(); params.put("schemaName", actual.getSchema()); params.put("tableName", actual.getName()); - return TemplateEngine.process(TABLE_DROP_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(TABLE_DROP.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } @Override @@ -195,7 +190,9 @@ public String dropForeignKey(ForeignKey actual) { params.put("schemaName", actual.getSchema()); params.put("tableName", actual.getTableName()); params.put("foreignkeyName", actual.getName()); - return TemplateEngine.process(FOREIGN_KEY_DROP_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(FOREIGNKEY_DROP.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } @Override @@ -209,9 +206,10 @@ public String alterTable(Table expected, Table actual) { if (doesPKExist) { params.put("schemaName", expected.getSchema()); params.put("tableName", tableNameWithSchema(expected)); - stringBuilder.append( - TemplateEngine.process(TABLE_ALTER_DROP_PRIMARY_KEY_TEMPLATE, params) - ); + String tableAlter = Optional.ofNullable(databaseTemplates.get(TABLE_ALTER_DROP_PRIMARY_KEY.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); + stringBuilder.append(tableAlter); } if (doWeNeedToCreatePk) { @@ -220,9 +218,10 @@ public String alterTable(Table expected, Table actual) { params.put("schemaName", expected.getSchema()); params.put("tableName", tableNameWithSchema(expected)); params.put("primaryKeyDefinition", primaryKeysForTable.get()); - stringBuilder.append( - TemplateEngine.process(TABLE_ALTER_ADD_PRIMARY_KEY_TEMPLATE, params) - ); + String tableAlter = Optional.ofNullable(databaseTemplates.get(TABLE_ALTER_ADD_PRIMARY_KEY.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); + stringBuilder.append(tableAlter); } } @@ -287,6 +286,8 @@ private String tableNameWithSchema(Table table) { private String createSchema(String schema) { Map params = new HashMap<>(); params.put("schemaName", schema); - return TemplateEngine.process(SCHEMA_CREATE_TEMPLATE, params); + return Optional.ofNullable(databaseTemplates.get(SCHEMA_CREATE.getName())) + .map(it -> TemplateEngine.process(it, params)) + .orElse(""); } } diff --git a/ddl/src/test/resources/translation_matrix/database_template.csv b/ddl/src/test/resources/translation_matrix/database_template.csv new file mode 100644 index 00000000..7d22aeb2 --- /dev/null +++ b/ddl/src/test/resources/translation_matrix/database_template.csv @@ -0,0 +1,12 @@ +1;;sqlserver;;table_create;;sqlserver/table/create +2;;sqlserver;;table_alter;;sqlserver/table/alter +3;;sqlserver;;table_alter_drop_primary_key;;sqlserver/table/alter_drop_primary_key +4;;sqlserver;;table_alter_add_primary_key;;sqlserver/table/alter_add_primary_key +5;;sqlserver;;table_drop;;sqlserver/table/drop +6;;sqlserver;;schema_create;;sqlserver/schema/create +7;;sqlserver;;foreignkey_create;;sqlserver/foreignkey/create +8;;sqlserver;;foreignkey_drop;;sqlserver/foreignkey/drop +9;;sqlserver;;column_add;;sqlserver/column/add +10;;sqlserver;;column_alter_type;;sqlserver/column/alter_column_type +11;;sqlserver;;column_alter_null;;sqlserver/column/alter_column_null +12;;sqlserver;;column_drop;;sqlserver/column/drop \ No newline at end of file diff --git a/ddl/src/test/resources/translation_matrix/translation.csv b/ddl/src/test/resources/translation_matrix/translation.csv new file mode 100644 index 00000000..1da8e0ee --- /dev/null +++ b/ddl/src/test/resources/translation_matrix/translation.csv @@ -0,0 +1,844 @@ +1;;kinetica;;wkt;;mysql;;varbinary +2;;kinetica;;bytes;;mysql;;varbinary +3;;kinetica;;float;;mysql;;float +4;;kinetica;;boolean;;mysql;;bit +5;;kinetica;;double;;mysql;;double +6;;kinetica;;decimal;;mysql;;decimal +7;;kinetica;;string;;mysql;;text +8;;kinetica;;char256;;mysql;;text +9;;kinetica;;char128;;mysql;;text +10;;kinetica;;char64;;mysql;;text +11;;kinetica;;char32;;mysql;;text +12;;kinetica;;char16;;mysql;;text +13;;kinetica;;char8;;mysql;;text +14;;kinetica;;char4;;mysql;;text +15;;kinetica;;char2;;mysql;;text +16;;kinetica;;char1;;mysql;;text +17;;kinetica;;ipv4;;mysql;;text +18;;kinetica;;time;;mysql;;time +19;;kinetica;;long;;mysql;;bigint +20;;kinetica;;ulong;;mysql;;bigint unsigned +21;;kinetica;;timestamp;;mysql;;timestamp +22;;kinetica;;int;;mysql;;int +23;;kinetica;;int16;;mysql;;int +24;;kinetica;;int8;;mysql;;int +25;;kinetica;;integer;;mysql;;int +26;;kinetica;;varchar;;mysql;;varchar +27;;kinetica;;datetime;;mysql;;datetime +28;;kinetica;;date;;mysql;;date +29;;kinetica;;string;;bigquery;;string +30;;kinetica;;char256;;bigquery;;string +31;;kinetica;;char128;;bigquery;;string +32;;kinetica;;char64;;bigquery;;string +33;;kinetica;;char32;;bigquery;;string +34;;kinetica;;char16;;bigquery;;string +35;;kinetica;;char8;;bigquery;;string +36;;kinetica;;char4;;bigquery;;string +37;;kinetica;;char2;;bigquery;;string +38;;kinetica;;char1;;bigquery;;string +39;;kinetica;;ipv4;;bigquery;;string +40;;kinetica;;wkt;;bigquery;;string +41;;kinetica;;uuid;;bigquery;;string +42;;kinetica;;varchar;;bigquery;;string +43;;kinetica;;bytes;;bigquery;;bytes +44;;kinetica;;int8;;bigquery;;tinyint +45;;kinetica;;int16;;bigquery;;smallint +46;;kinetica;;int;;bigquery;;int +47;;kinetica;;integer;;bigquery;;integer +48;;kinetica;;float;;bigquery;;float +49;;kinetica;;double;;bigquery;;decimal +50;;kinetica;;double precision;;bigquery;;decimal +51;;kinetica;;decimal;;bigquery;;bigdecimal +52;;kinetica;;date;;bigquery;;date +53;;kinetica;;datetime;;bigquery;;datetime +54;;kinetica;;long;;bigquery;;int64 +55;;kinetica;;boolean;;bigquery;;bool +56;;kinetica;;timestamp;;bigquery;;timestamp +57;;kinetica;;time;;bigquery;;timestamp +58;;kinetica;;int16;;postgres;;smallint +59;;kinetica;;int8;;postgres;;smallint +60;;kinetica;;long;;postgres;;bigint +61;;kinetica;;ulong;;postgres;;bigint +62;;kinetica;;uuid;;postgres;;uuid +63;;kinetica;;varchar;;postgres;;character varying +64;;kinetica;;geometry;;postgres;;geometry +65;;kinetica;;int;;postgres;;integer +66;;kinetica;;integer;;postgres;;integer +67;;kinetica;;float;;postgres;;real +68;;kinetica;;double;;postgres;;decimal +69;;kinetica;;decimal;;postgres;;decimal +70;;kinetica;;string;;postgres;;text +71;;kinetica;;char256;;postgres;;text +72;;kinetica;;char128;;postgres;;text +73;;kinetica;;char64;;postgres;;text +74;;kinetica;;char32;;postgres;;text +75;;kinetica;;char16;;postgres;;text +76;;kinetica;;char8;;postgres;;text +77;;kinetica;;char4;;postgres;;text +78;;kinetica;;char2;;postgres;;text +79;;kinetica;;char1;;postgres;;text +80;;kinetica;;ipv4;;postgres;;text +81;;kinetica;;bytes;;postgres;;bytea +82;;kinetica;;date;;postgres;;date +83;;kinetica;;boolean;;postgres;;boolean +84;;kinetica;;datetime;;postgres;;timestamp +85;;kinetica;;timestamp;;postgres;;timestamp +86;;kinetica;;time;;postgres;;timestamp +87;;kinetica;;string;;snowflake;;text +88;;kinetica;;char256;;snowflake;;text +89;;kinetica;;char128;;snowflake;;text +90;;kinetica;;char64;;snowflake;;text +91;;kinetica;;char32;;snowflake;;text +92;;kinetica;;char16;;snowflake;;text +93;;kinetica;;char8;;snowflake;;text +94;;kinetica;;char4;;snowflake;;text +95;;kinetica;;char2;;snowflake;;text +96;;kinetica;;char1;;snowflake;;text +97;;kinetica;;ipv4;;snowflake;;text +98;;kinetica;;uuid;;snowflake;;text +99;;kinetica;;int;;snowflake;;integer +100;;kinetica;;integer;;snowflake;;integer +101;;kinetica;;varchar;;snowflake;;varchar +102;;kinetica;;int8;;snowflake;;tinyint +103;;kinetica;;int16;;snowflake;;smallint +104;;kinetica;;long;;snowflake;;bigint +105;;kinetica;;float;;snowflake;;float +106;;kinetica;;double;;snowflake;;double +107;;kinetica;;decimal;;snowflake;;decimal +108;;kinetica;;timestamp;;snowflake;;timestamp +109;;kinetica;;date;;snowflake;;date +110;;kinetica;;datetime;;snowflake;;datetime +111;;kinetica;;bytes;;snowflake;;binary +112;;kinetica;;boolean;;snowflake;;boolean +113;;kinetica;;time;;snowflake;;time +114;;mysql;;char;;kinetica;;string +115;;mysql;;varchar;;kinetica;;string +116;;mysql;;tinytext;;kinetica;;string +117;;mysql;;text;;kinetica;;string +118;;mysql;;mediumtext;;kinetica;;string +119;;mysql;;enum;;kinetica;;string +120;;mysql;;longtext;;kinetica;;string +121;;mysql;;set;;kinetica;;string +122;;mysql;;boolean;;kinetica;;string +123;;mysql;;geometry;;kinetica;;string +124;;mysql;;blob;;kinetica;;string +125;;mysql;;year;;kinetica;;string +126;;mysql;;tinyblob;;kinetica;;bytes +127;;mysql;;mediumblob;;kinetica;;bytes +128;;mysql;;bool;;kinetica;;bytes +129;;mysql;;point;;kinetica;;geometry +130;;mysql;;linestring;;kinetica;;geometry +131;;mysql;;polygon;;kinetica;;geometry +132;;mysql;;tinyint;;kinetica;;int8 +133;;mysql;;bit;;kinetica;;int8 +134;;mysql;;tinyint unsigned;;kinetica;;int8 +135;;mysql;;smallint;;kinetica;;int16 +136;;mysql;;smallint unsigned;;kinetica;;int16 +137;;mysql;;mediumint;;kinetica;;int +138;;mysql;;int unsigned;;kinetica;;int +139;;mysql;;mediumint unsigned;;kinetica;;int +140;;mysql;;int;;kinetica;;int +141;;mysql;;integer;;kinetica;;int +142;;mysql;;bigint;;kinetica;;long +143;;mysql;;bigint unsigned;;kinetica;;long +144;;mysql;;float;;kinetica;;float +145;;mysql;;float unsigned;;kinetica;;float +146;;mysql;;double;;kinetica;;double +147;;mysql;;double precision;;kinetica;;double +148;;mysql;;decimal;;kinetica;;double +149;;mysql;;double unsigned;;kinetica;;double +150;;mysql;;date;;kinetica;;date +151;;mysql;;datetime;;kinetica;;datetime +152;;mysql;;time;;kinetica;;time +153;;mysql;;binary;;kinetica;;bytes +154;;mysql;;varbinary;;kinetica;;bytes +155;;mysql;;timestamp;;kinetica;;timestamp +156;;mysql;;char;;bigquery;;string +157;;mysql;;varchar;;bigquery;;string +158;;mysql;;tinytext;;bigquery;;string +159;;mysql;;text;;bigquery;;string +160;;mysql;;mediumtext;;bigquery;;string +161;;mysql;;enum;;bigquery;;string +162;;mysql;;longtext;;bigquery;;string +163;;mysql;;tinyblob;;bigquery;;bytes +164;;mysql;;blob;;bigquery;;bytes +165;;mysql;;mediumblob;;bigquery;;bytes +166;;mysql;;binary;;bigquery;;bytes +167;;mysql;;varbinary;;bigquery;;bytes +168;;mysql;;longblob;;bigquery;;bytes +169;;mysql;;tinyint;;bigquery;;tinyint +170;;mysql;;bit;;bigquery;;tinyint +171;;mysql;;tinyint unsigned;;bigquery;;tinyint +172;;mysql;;bool;;bigquery;;bool +173;;mysql;;boolean;;bigquery;;boolean +174;;mysql;;smallint;;bigquery;;smallint +175;;mysql;;smallint unsigned;;bigquery;;smallint +176;;mysql;;mediumint;;bigquery;;int +177;;mysql;;mediumint unsigned;;bigquery;;int +178;;mysql;;int;;bigquery;;int +179;;mysql;;year;;bigquery;;int +180;;mysql;;integer;;bigquery;;int64 +181;;mysql;;int unsigned;;bigquery;;int64 +182;;mysql;;bigint unsigned;;bigquery;;int64 +183;;mysql;;bigint;;bigquery;;bigint +184;;mysql;;float;;bigquery;;float64 +185;;mysql;;float unsigned;;bigquery;;float64 +186;;mysql;;double unsigned;;bigquery;;float64 +187;;mysql;;double;;bigquery;;decimal +188;;mysql;;double precision;;bigquery;;decimal +189;;mysql;;geometry;;bigquery;;geography +190;;mysql;;point;;bigquery;;geography +191;;mysql;;linestring;;bigquery;;geography +192;;mysql;;polygon;;bigquery;;geography +193;;mysql;;decimal;;bigquery;;bigdecimal +194;;mysql;;date;;bigquery;;date +195;;mysql;;datetime;;bigquery;;datetime +196;;mysql;;timestamp;;bigquery;;timestamp +197;;mysql;;time;;bigquery;;timestamp +198;;mysql;;json;;bigquery;;json +199;;mysql;;set;;bigquery;;array +200;;mysql;;bit;;postgres;;bit +201;;mysql;;bool;;postgres;;boolean +202;;mysql;;boolean;;postgres;;boolean +203;;mysql;;smallint;;postgres;;smallint +204;;mysql;;smallint unsigned;;postgres;;smallint +205;;mysql;;tinyint unsigned;;postgres;;smallint +206;;mysql;;bigint;;postgres;;bigint +207;;mysql;;bigint unsigned;;postgres;;bigint +208;;mysql;;mediumint;;postgres;;integer +209;;mysql;;mediumint unsigned;;postgres;;integer +210;;mysql;;int;;postgres;;integer +211;;mysql;;integer;;postgres;;integer +212;;mysql;;year;;postgres;;integer +213;;mysql;;int unsigned;;postgres;;integer +214;;mysql;;float;;postgres;;real +215;;mysql;;float unsigned;;postgres;;real +216;;mysql;;double;;postgres;;decimal +217;;mysql;;decimal;;postgres;;decimal +218;;mysql;;double unsigned;;postgres;;decimal +219;;mysql;;double precision;;postgres;;double precision +220;;mysql;;point;;postgres;;point +221;;mysql;;linestring;;postgres;;lseg +222;;mysql;;polygon;;postgres;;polygon +223;;mysql;;varchar;;postgres;;character varying +224;;mysql;;char;;postgres;;character +225;;mysql;;tinytext;;postgres;;text +226;;mysql;;text;;postgres;;text +227;;mysql;;mediumtext;;postgres;;text +228;;mysql;;longtext;;postgres;;text +229;;mysql;;tinyblob;;postgres;;bytea +230;;mysql;;blob;;postgres;;bytea +231;;mysql;;mediumblob;;postgres;;bytea +232;;mysql;;binary;;postgres;;bytea +233;;mysql;;varbinary;;postgres;;bytea +234;;mysql;;longblob;;postgres;;bytea +235;;mysql;;enum;;postgres;;enum +236;;mysql;;set;;postgres;;set +237;;mysql;;lseg;;postgres;;linestring +238;;mysql;;date;;postgres;;date +239;;mysql;;datetime;;postgres;;timestamp +240;;mysql;;timestamp;;postgres;;timestamp +241;;mysql;;time;;postgres;;timestamp +242;;mysql;;json;;postgres;;json +243;;mysql;;char;;snowflake;;char +244;;mysql;;varchar;;snowflake;;varchar +245;;mysql;;tinytext;;snowflake;;text +246;;mysql;;text;;snowflake;;text +247;;mysql;;longtext;;snowflake;;text +248;;mysql;;enum;;snowflake;;text +249;;mysql;;mediumtext;;snowflake;;text +250;;mysql;;binary;;snowflake;;binary +251;;mysql;;varbinary;;snowflake;;varbinary +252;;mysql;;blob;;snowflake;;varbinary +253;;mysql;;boolean;;snowflake;;boolean +254;;mysql;;bit;;snowflake;;boolean +255;;mysql;;bool;;snowflake;;boolean +256;;mysql;;int;;snowflake;;integer +257;;mysql;;int unsigned;;snowflake;;integer +258;;mysql;;integer;;snowflake;;integer +259;;mysql;;mediumint;;snowflake;;integer +260;;mysql;;mediumint unsigned;;snowflake;;integer +261;;mysql;;tinyint;;snowflake;;tinyint +262;;mysql;;tinyint unsigned;;snowflake;;tinyint +263;;mysql;;smallint;;snowflake;;smallint +264;;mysql;;smallint unsigned;;snowflake;;smallint +265;;mysql;;year;;snowflake;;smallint +266;;mysql;;bigint;;snowflake;;bigint +267;;mysql;;bigint unsigned;;snowflake;;bigint +268;;mysql;;float;;snowflake;;float +269;;mysql;;float unsigned;;snowflake;;float +270;;mysql;;double;;snowflake;;double +271;;mysql;;double unsigned;;snowflake;;double +272;;mysql;;double precision;;snowflake;;double precision +273;;mysql;;decimal;;snowflake;;decimal +274;;mysql;;dec;;snowflake;;decimal +275;;mysql;;timestamp;;snowflake;;timestamp +276;;mysql;;date;;snowflake;;date +277;;mysql;;datetime;;snowflake;;datetime +278;;mysql;;time;;snowflake;;time +279;;mysql;;geometry;;snowflake;;geography +280;;mysql;;set;;snowflake;;array +281;;mysql;;tinyblob;;snowflake;;variant +282;;mysql;;mediumblob;;snowflake;;variant +283;;mysql;;longblob;;snowflake;;variant +284;;mysql;;json;;snowflake;;variant +285;;mysql;;point;;snowflake;;object +286;;mysql;;linestring;;snowflake;;object +287;;mysql;;polygon;;snowflake;;object +288;;bigquery;;string;;kinetica;;string +289;;bigquery;;boolean;;kinetica;;string +290;;bigquery;;bool;;kinetica;;string +291;;bigquery;;timestamp;;kinetica;;timestamp +292;;bigquery;;int64;;kinetica;;int +293;;bigquery;;float64;;kinetica;;double +294;;bigquery;;date;;kinetica;;date +295;;bigquery;;datetime;;kinetica;;datetime +296;;bigquery;;time;;kinetica;;time +297;;bigquery;;numeric;;kinetica;;decimal +298;;bigquery;;bignumeric;;kinetica;;decimal +299;;bigquery;;bytes;;kinetica;;bytes +300;;bigquery;;string;;mysql;;text +301;;bigquery;;decimal;;mysql;;decimal +302;;bigquery;;bigdecimal;;mysql;;varchar +303;;bigquery;;date;;mysql;;date +304;;bigquery;;datetime;;mysql;;datetime +305;;bigquery;;float64;;mysql;;float +306;;bigquery;;numeric;;mysql;;numeric +307;;bigquery;;bignumeric;;mysql;;numeric +308;;bigquery;;boolean;;mysql;;bool +309;;bigquery;;bool;;mysql;;bool +310;;bigquery;;json;;mysql;;json +311;;bigquery;;array;;mysql;;json +312;;bigquery;;timestamp;;mysql;;timestamp +313;;bigquery;;interval;;mysql;;timestamp +314;;bigquery;;time;;mysql;;time +315;;bigquery;;integer;;mysql;;integer +316;;bigquery;;bigint;;mysql;;bigint +317;;bigquery;;smallint;;mysql;;smallint +318;;bigquery;;int64;;mysql;;bigint +319;;bigquery;;bytes;;mysql;;blob +320;;bigquery;;geography;;mysql;;geometry +321;;bigquery;;tinyint;;mysql;;tinyint +322;;bigquery;;byteint;;mysql;;tinyint +323;;bigquery;;string;;postgres;;character varying +324;;bigquery;;int64;;postgres;;bigint +325;;bigquery;;bigint;;postgres;;bigint +326;;bigquery;;array;;postgres;;array +327;;bigquery;;date;;postgres;;date +328;;bigquery;;boolean;;postgres;;boolean +329;;bigquery;;bool;;postgres;;boolean +330;;bigquery;;time;;postgres;;time +331;;bigquery;;bytes;;postgres;;bytea +332;;bigquery;;numeric;;postgres;;numeric +333;;bigquery;;interval;;postgres;;interval +334;;bigquery;;json;;postgres;;json +335;;bigquery;;int;;postgres;;integer +336;;bigquery;;integer;;postgres;;integer +337;;bigquery;;tinyint;;postgres;;smallint +338;;bigquery;;byteint;;postgres;;smallint +339;;bigquery;;decimal;;postgres;;decimal +340;;bigquery;;float64;;postgres;;numeric +341;;bigquery;;bignumeric;;postgres;;numeric +342;;bigquery;;timestamp;;postgres;;timestamp +343;;bigquery;;datetime;;postgres;;timestamp +344;;bigquery;;string;;snowflake;;string +345;;bigquery;;timestamp;;snowflake;;timestamp +346;;bigquery;;int64;;snowflake;;integer +347;;bigquery;;float64;;snowflake;;float +348;;bigquery;;array;;snowflake;;array +349;;bigquery;;date;;snowflake;;date +350;;bigquery;;datetime;;snowflake;;datetime +351;;bigquery;;boolean;;snowflake;;boolean +352;;bigquery;;time;;snowflake;;time +353;;bigquery;;geography;;snowflake;;geography +354;;bigquery;;numeric;;snowflake;;numeric +355;;bigquery;;bignumeric;;snowflake;;number +356;;bigquery;;bytes;;snowflake;;binary +357;;bigquery;;struct;;snowflake;;object +358;;postgres;;character;;kinetica;;string +359;;postgres;;character varying;;kinetica;;string +360;;postgres;;cidr;;kinetica;;string +361;;postgres;;inet;;kinetica;;string +362;;postgres;;json;;kinetica;;string +363;;postgres;;macaddr;;kinetica;;string +364;;postgres;;macaddr8;;kinetica;;string +365;;postgres;;text;;kinetica;;string +366;;postgres;;uuid;;kinetica;;string +367;;postgres;;varchar;;kinetica;;string +368;;postgres;;boolean;;kinetica;;string +369;;postgres;;bool;;kinetica;;string +370;;postgres;;mpaa_rating;;kinetica;;string +371;;postgres;;_text;;kinetica;;string +372;;postgres;;tsvector;;kinetica;;string +373;;postgres;;bpchar;;kinetica;;string +374;;postgres;;interval;;kinetica;;string +375;;postgres;;txid_snapshot;;kinetica;;string +376;;postgres;;jsonb;;kinetica;;string +377;;postgres;;_numeric;;kinetica;;string +378;;postgres;;_interval;;kinetica;;string +379;;postgres;;bytea;;kinetica;;bytes +380;;postgres;;bit;;kinetica;;int8 +381;;postgres;;bit varying;;kinetica;;int8 +382;;postgres;;int8;;kinetica;;int8 +383;;postgres;;smallint;;kinetica;;int16 +384;;postgres;;smallserial;;kinetica;;int16 +385;;postgres;;serial;;kinetica;;int +386;;postgres;;integer;;kinetica;;int +387;;postgres;;int;;kinetica;;int +388;;postgres;;int4;;kinetica;;int +389;;postgres;;year;;kinetica;;int +390;;postgres;;int2;;kinetica;;int +391;;postgres;;bigint;;kinetica;;long +392;;postgres;;bigserial;;kinetica;;long +393;;postgres;;real;;kinetica;;float +394;;postgres;;money;;kinetica;;float +395;;postgres;;double;;kinetica;;double +396;;postgres;;double precision;;kinetica;;double +397;;postgres;;numeric;;kinetica;;double +398;;postgres;;decimal;;kinetica;;decimal +399;;postgres;;date;;kinetica;;date +400;;postgres;;time;;kinetica;;time +401;;postgres;;float8;;kinetica;;float +402;;postgres;;timestamp;;kinetica;;datetime +403;;postgres;;bytea;;mysql;;varbinary +404;;postgres;;macaddr8;;mysql;;varchar +405;;postgres;;money;;mysql;;float +406;;postgres;;float8;;mysql;;float +407;;postgres;;numeric;;mysql;;numeric +408;;postgres;;inet;;mysql;;int unsigned +409;;postgres;;real;;mysql;;real +410;;postgres;;smallint;;mysql;;smallint +411;;postgres;;smallserial;;mysql;;smallint +412;;postgres;;text;;mysql;;text +413;;postgres;;varchar;;mysql;;text +414;;postgres;;bpchar;;mysql;;text +415;;postgres;;txid_snapshot;;mysql;;text +416;;postgres;;_numeric;;mysql;;text +417;;postgres;;_interval;;mysql;;text +418;;postgres;;time;;mysql;;time +419;;postgres;;timestamp;;mysql;;timestamp +420;;postgres;;interval;;mysql;;timestamp +421;;postgres;;integer;;mysql;;int +422;;postgres;;serial;;mysql;;int +423;;postgres;;int2;;mysql;;int +424;;postgres;;int4;;mysql;;int +425;;postgres;;int8;;mysql;;int +426;;postgres;;character;;mysql;;char +427;;postgres;;character varying;;mysql;;varchar +428;;postgres;;cidr;;mysql;;bigint unsigned +429;;postgres;;json;;mysql;;json +430;;postgres;;date;;mysql;;date +431;;postgres;;double precision;;mysql;;double precision +432;;postgres;;boolean;;mysql;;bool +433;;postgres;;bool;;mysql;;bool +434;;postgres;;macaddr;;mysql;;varchar +435;;postgres;;bigint;;mysql;;bigint +436;;postgres;;bigserial;;mysql;;bigint +437;;postgres;;box;;mysql;;polygon +438;;postgres;;circle;;mysql;;polygon +439;;postgres;;polygon;;mysql;;polygon +440;;postgres;;path;;mysql;;linestring +441;;postgres;;line;;mysql;;linestring +442;;postgres;;lseg;;mysql;;linestring +443;;postgres;;bit;;mysql;;bit +444;;postgres;;bit varying;;mysql;;bit +445;;postgres;;xml;;mysql;;longtext +446;;postgres;;tsvector;;mysql;;longtext +447;;postgres;;tsquery;;mysql;;longtext +448;;postgres;;uuid;;mysql;;longtext +449;;postgres;;jsonb;;mysql;;longblob +450;;postgres;;bigint;;bigquery;;int64 +451;;postgres;;bigserial;;bigquery;;int64 +452;;postgres;;cidr;;bigquery;;int64 +453;;postgres;;inet;;bigquery;;int64 +454;;postgres;;integer;;bigquery;;int64 +455;;postgres;;smallint;;bigquery;;int64 +456;;postgres;;smallserial;;bigquery;;int64 +457;;postgres;;serial;;bigquery;;int64 +458;;postgres;;int2;;bigquery;;int64 +459;;postgres;;int4;;bigquery;;int64 +460;;postgres;;year;;bigquery;;int64 +461;;postgres;;bit;;bigquery;;int64 +462;;postgres;;int8;;bigquery;;int64 +463;;postgres;;bit varying;;bigquery;;bytes +464;;postgres;;bytea;;bigquery;;bytes +465;;postgres;;boolean;;bigquery;;bool +466;;postgres;;bool;;bigquery;;bool +467;;postgres;;character;;bigquery;;string +468;;postgres;;character varying;;bigquery;;string +469;;postgres;;macaddr;;bigquery;;string +470;;postgres;;macaddr8;;bigquery;;string +471;;postgres;;text;;bigquery;;string +472;;postgres;;varchar;;bigquery;;string +473;;postgres;;mpaa_rating;;bigquery;;string +474;;postgres;;bpchar;;bigquery;;string +475;;postgres;;jsonb;;bigquery;;string +476;;postgres;;tsquery;;bigquery;;string +477;;postgres;;tsvector;;bigquery;;string +478;;postgres;;txid_snapshot;;bigquery;;string +479;;postgres;;uuid;;bigquery;;string +480;;postgres;;xml;;bigquery;;string +481;;postgres;;date;;bigquery;;date +482;;postgres;;double precision;;bigquery;;float64 +483;;postgres;;money;;bigquery;;float64 +484;;postgres;;real;;bigquery;;float64 +485;;postgres;;float8;;bigquery;;float64 +486;;postgres;;json;;bigquery;;json +487;;postgres;;interval;;bigquery;;timestamp +488;;postgres;;timestamp;;bigquery;;timestamp +489;;postgres;;timestamptz;;bigquery;;timestamp +490;;postgres;;timetz;;bigquery;;time +491;;postgres;;time;;bigquery;;time +492;;postgres;;numeric;;bigquery;;numeric +493;;postgres;;_text;;bigquery;;array +494;;postgres;;_numeric;;bigquery;;array +495;;postgres;;_interval;;bigquery;;array +496;;postgres;;timestamp;;snowflake;;timestamp +497;;postgres;;timestamptz;;snowflake;;timestamp +498;;postgres;;int2;;snowflake;;smallint +499;;postgres;;smallserial;;snowflake;;smallint +500;;postgres;;bool;;snowflake;;boolean +501;;postgres;;date;;snowflake;;date +502;;postgres;;time;;snowflake;;time +503;;postgres;;timetz;;snowflake;;time +504;;postgres;;uuid;;snowflake;;string +505;;postgres;;mpaa_rating;;snowflake;;string +506;;postgres;;tsvector;;snowflake;;string +507;;postgres;;bpchar;;snowflake;;character +508;;postgres;;character;;snowflake;;character +509;;postgres;;character varying;;snowflake;;character +510;;postgres;;bit;;snowflake;;binary +511;;postgres;;double precision;;snowflake;;double precision +512;;postgres;;varbit;;snowflake;;varbinary +513;;postgres;;bytea;;snowflake;;varbinary +514;;postgres;;float4;;snowflake;;float +515;;postgres;;real;;snowflake;;float +516;;postgres;;float8;;snowflake;;float8 +517;;postgres;;macaddr;;snowflake;;text +518;;postgres;;macaddr8;;snowflake;;text +519;;postgres;;cidr;;snowflake;;text +520;;postgres;;text;;snowflake;;text +521;;postgres;;bigserial;;snowflake;;bigint +522;;postgres;;int8;;snowflake;;bigint +523;;postgres;;numeric;;snowflake;;numeric +524;;postgres;;money;;snowflake;;numeric +525;;postgres;;varchar;;snowflake;;varchar +526;;postgres;;interval;;snowflake;;varchar +527;;postgres;;txid_snapshot;;snowflake;;varchar +528;;postgres;;tsquery;;snowflake;;varchar +529;;postgres;;json;;snowflake;;variant +530;;postgres;;jsonb;;snowflake;;variant +531;;postgres;;xml;;snowflake;;variant +532;;postgres;;int4;;snowflake;;integer +533;;postgres;;serial;;snowflake;;integer +534;;postgres;;year;;snowflake;;integer +535;;postgres;;box;;snowflake;;geography +536;;postgres;;circle;;snowflake;;geography +537;;postgres;;line;;snowflake;;geography +538;;postgres;;lseg;;snowflake;;geography +539;;postgres;;path;;snowflake;;geography +540;;postgres;;point;;snowflake;;geography +541;;postgres;;polygon;;snowflake;;geography +542;;postgres;;_text;;snowflake;;array +543;;postgres;;_bool;;snowflake;;array +544;;postgres;;_bit;;snowflake;;array +545;;postgres;;_box;;snowflake;;array +546;;postgres;;_bpchar;;snowflake;;array +547;;postgres;;_bytea;;snowflake;;array +548;;postgres;;_char;;snowflake;;array +549;;postgres;;_cidr;;snowflake;;array +550;;postgres;;_circle;;snowflake;;array +551;;postgres;;_date;;snowflake;;array +552;;postgres;;_float4;;snowflake;;array +553;;postgres;;_float8;;snowflake;;array +554;;postgres;;_int2;;snowflake;;array +555;;postgres;;_int4;;snowflake;;array +556;;postgres;;_int8;;snowflake;;array +557;;postgres;;_interval;;snowflake;;array +558;;postgres;;_json;;snowflake;;array +559;;postgres;;_jsonb;;snowflake;;array +560;;postgres;;_line;;snowflake;;array +561;;postgres;;_lseg;;snowflake;;array +562;;postgres;;_macaddr;;snowflake;;array +563;;postgres;;_macaddr8;;snowflake;;array +564;;postgres;;_money;;snowflake;;array +565;;postgres;;_numeric;;snowflake;;array +566;;postgres;;_pg_lsn;;snowflake;;array +567;;postgres;;_point;;snowflake;;array +568;;postgres;;_polygon;;snowflake;;array +569;;postgres;;_time;;snowflake;;array +570;;postgres;;_uuid;;snowflake;;array +571;;postgres;;_varbit;;snowflake;;array +572;;postgres;;_varchar;;snowflake;;array +573;;postgres;;_xml;;snowflake;;array +574;;postgres;;_timestamp;;snowflake;;array +575;;postgres;;_path;;snowflake;;array +576;;postgres;;_tsquery;;snowflake;;array +577;;postgres;;_tsvector;;snowflake;;array +578;;postgres;;_txid_snapshot;;snowflake;;array +579;;snowflake;;number;;kinetica;;bignumeric +580;;snowflake;;decimal;;kinetica;;decimal +581;;snowflake;;double;;kinetica;;decimal +582;;snowflake;;double precision;;kinetica;;decimal +583;;snowflake;;real;;kinetica;;decimal +584;;snowflake;;geometry;;kinetica;;geometry +585;;snowflake;;numeric;;kinetica;;numeric +586;;snowflake;;int;;kinetica;;int +587;;snowflake;;integer;;kinetica;;int +588;;snowflake;;bigint;;kinetica;;int +589;;snowflake;;smallint;;kinetica;;int +590;;snowflake;;tinyint;;kinetica;;int +591;;snowflake;;byteint;;kinetica;;int +592;;snowflake;;float;;kinetica;;float +593;;snowflake;;float4;;kinetica;;float +594;;snowflake;;float8;;kinetica;;float +595;;snowflake;;varchar;;kinetica;;string +596;;snowflake;;char;;kinetica;;string +597;;snowflake;;character;;kinetica;;string +598;;snowflake;;string;;kinetica;;string +599;;snowflake;;text;;kinetica;;string +600;;snowflake;;bool;;kinetica;;string +601;;snowflake;;boolean;;kinetica;;string +602;;snowflake;;binary;;kinetica;;bytes +603;;snowflake;;varbinary;;kinetica;;bytes +604;;snowflake;;date;;kinetica;;date +605;;snowflake;;datetime;;kinetica;;datetime +606;;snowflake;;time;;kinetica;;time +607;;snowflake;;timestamp;;kinetica;;timestamp +608;;snowflake;;timestampltz;;kinetica;;timestamp +609;;snowflake;;timestampntz;;kinetica;;timestamp +610;;snowflake;;timestamptz;;kinetica;;timestamp +611;;snowflake;;numeric;;mysql;;numeric +612;;snowflake;;number;;mysql;;numeric +613;;snowflake;;decimal;;mysql;;decimal +614;;snowflake;;int;;mysql;;int +615;;snowflake;;integer;;mysql;;integer +616;;snowflake;;bigint;;mysql;;bigint +617;;snowflake;;smallint;;mysql;;smallint +618;;snowflake;;tinyint;;mysql;;tinyint +619;;snowflake;;byteint;;mysql;;tinyint +620;;snowflake;;float;;mysql;;float +621;;snowflake;;float4;;mysql;;float +622;;snowflake;;float8;;mysql;;float +623;;snowflake;;double;;mysql;;double +624;;snowflake;;double precision;;mysql;;double precision +625;;snowflake;;real;;mysql;;real +626;;snowflake;;varchar;;mysql;;varchar +627;;snowflake;;char;;mysql;;char +628;;snowflake;;character;;mysql;;char +629;;snowflake;;text;;mysql;;text +630;;snowflake;;binary;;mysql;;binary +631;;snowflake;;varbinary;;mysql;;varbinary +632;;snowflake;;boolean;;mysql;;bool +633;;snowflake;;date;;mysql;;date +634;;snowflake;;datetime;;mysql;;datetime +635;;snowflake;;time;;mysql;;time +636;;snowflake;;timestamp;;mysql;;timestamp +637;;snowflake;;timestampltz;;mysql;;timestamp +638;;snowflake;;timestampntz;;mysql;;timestamp +639;;snowflake;;timestamptz;;mysql;;timestamp +640;;snowflake;;variant;;mysql;;json +641;;snowflake;;object;;mysql;;json +642;;snowflake;;array;;mysql;;json +643;;snowflake;;number;;bigquery;;bignumeric +644;;snowflake;;decimal;;bigquery;;decimal +645;;snowflake;;double;;bigquery;;decimal +646;;snowflake;;double precision;;bigquery;;decimal +647;;snowflake;;real;;bigquery;;decimal +648;;snowflake;;numeric;;bigquery;;numeric +649;;snowflake;;int;;bigquery;;int +650;;snowflake;;integer;;bigquery;;integer +651;;snowflake;;bigint;;bigquery;;bigint +652;;snowflake;;smallint;;bigquery;;smallint +653;;snowflake;;tinyint;;bigquery;;tinyint +654;;snowflake;;byteint;;bigquery;;byteint +655;;snowflake;;float;;bigquery;;float64 +656;;snowflake;;float4;;bigquery;;float64 +657;;snowflake;;float8;;bigquery;;float64 +658;;snowflake;;varchar;;bigquery;;string +659;;snowflake;;char;;bigquery;;string +660;;snowflake;;character;;bigquery;;string +661;;snowflake;;string;;bigquery;;string +662;;snowflake;;text;;bigquery;;string +663;;snowflake;;binary;;bigquery;;bytes +664;;snowflake;;varbinary;;bigquery;;bytes +665;;snowflake;;boolean;;bigquery;;bool +666;;snowflake;;date;;bigquery;;date +667;;snowflake;;datetime;;bigquery;;datetime +668;;snowflake;;time;;bigquery;;time +669;;snowflake;;timestamp;;bigquery;;timestamp +670;;snowflake;;timestampltz;;bigquery;;timestamp +671;;snowflake;;timestampntz;;bigquery;;timestamp +672;;snowflake;;timestamptz;;bigquery;;timestamp +673;;snowflake;;object;;bigquery;;json +674;;snowflake;;variant;;bigquery;;json +675;;snowflake;;array;;bigquery;;array +676;;snowflake;;geography;;bigquery;;geography +677;;snowflake;;number;;postgres;;numeric +678;;snowflake;;numeric;;postgres;;numeric +679;;snowflake;;decimal;;postgres;;decimal +680;;snowflake;;int;;postgres;;integer +681;;snowflake;;integer;;postgres;;integer +682;;snowflake;;bigint;;postgres;;bigint +683;;snowflake;;smallint;;postgres;;smallint +684;;snowflake;;tinyint;;postgres;;smallint +685;;snowflake;;byteint;;postgres;;smallint +686;;snowflake;;float;;postgres;;real +687;;snowflake;;float4;;postgres;;real +688;;snowflake;;float8;;postgres;;real +689;;snowflake;;real;;postgres;;real +690;;snowflake;;double precision;;postgres;;double precision +691;;snowflake;;double;;postgres;;double precision +692;;snowflake;;varchar;;postgres;;character varying +693;;snowflake;;character;;postgres;;character +694;;snowflake;;char;;postgres;;character +695;;snowflake;;string;;postgres;;text +696;;snowflake;;text;;postgres;;text +697;;snowflake;;binary;;postgres;;bytea +698;;snowflake;;varbinary;;postgres;;bytea +699;;snowflake;;date;;postgres;;date +700;;snowflake;;time;;postgres;;time +701;;snowflake;;datetime;;postgres;;timestamp +702;;snowflake;;timestamp;;postgres;;timestamp +703;;snowflake;;timestampntz;;postgres;;timestamp +704;;snowflake;;timestampltz;;postgres;;timestamptz +705;;snowflake;;timestamptz;;postgres;;timestamptz +706;;snowflake;;variant;;postgres;;jsonb +707;;snowflake;;object;;postgres;;jsonb +708;;snowflake;;boolean;;postgres;;boolean +709;;sqlserver;;bigint;;snowflake;;bigint +710;;sqlserver;;bit;;snowflake;;byteint +711;;sqlserver;;decimal;;snowflake;;decimal +712;;sqlserver;;int;;snowflake;;int +713;;sqlserver;;money;;snowflake;;number(16,4) +714;;sqlserver;;numeric;;snowflake;;numeric +715;;sqlserver;;smallint;;snowflake;;smallint +716;;sqlserver;;smallmoney;;snowflake;;number(6,4) +717;;sqlserver;;tinyint;;snowflake;;tinyint +718;;sqlserver;;float;;snowflake;;float +719;;sqlserver;;real;;snowflake;;real +720;;sqlserver;;date;;snowflake;;date +721;;sqlserver;;datetime2;;snowflake;;datetime +722;;sqlserver;;datetime;;snowflake;;datetime +723;;sqlserver;;datetimeoffset;;snowflake;;timestamp +724;;sqlserver;;smalldatetime;;snowflake;;timestamp +725;;sqlserver;;time;;snowflake;;time +726;;sqlserver;;char;;snowflake;;char +727;;sqlserver;;text;;snowflake;;text +728;;sqlserver;;varchar;;snowflake;;varchar +729;;sqlserver;;nchar;;snowflake;;nchar +730;;sqlserver;;ntext;;snowflake;;nvarchar +731;;sqlserver;;nvarchar;;snowflake;;nvarchar +732;;sqlserver;;binary;;snowflake;;binary +733;;sqlserver;;image;;snowflake;;varbinary +734;;sqlserver;;varbinary;;snowflake;;varbinary +735;;sqlserver;;cursor;;snowflake;;text +736;;sqlserver;;hierarchyid;;snowflake;;varbinary +737;;sqlserver;;sql_variant;;snowflake;;text +738;;sqlserver;;geometry;;snowflake;;geometry +739;;sqlserver;;table;;snowflake;;text +740;;sqlserver;;rowversion;;snowflake;;int +741;;sqlserver;;uniqueidentifier;;snowflake;;text +742;;sqlserver;;geography;;snowflake;;geography +743;;sqlserver;;xml;;snowflake;;variant +744;;sqlserver;;int identity;;snowflake;;int +745;;mysql;;tinyint unsigned;;mysql;;tinyint +746;;mysql;;smallint unsigned;;mysql;;smallint +747;;mysql;;int unsigned;;mysql;;int +748;;mysql;;mediumint unsigned;;mysql;;mediumint +749;;mysql;;bigint unsigned;;mysql;;bigint +750;;mysql;;float unsigned;;mysql;;float +751;;mysql;;double unsigned;;mysql;;double +752;;postgres;;year;;postgres;;integer +753;;postgres;;mpaa_rating;;postgres;;text +754;;postgres;;_text;;mysql;;text +755;;sqlserver;;bigint;;db2;;bigint +756;;sqlserver;;bit;;db2;;smallint +757;;sqlserver;;decimal;;db2;;decimal +758;;sqlserver;;int;;db2;;int +759;;sqlserver;;money;;db2;;numeric(16,4) +760;;sqlserver;;numeric;;db2;;numeric +761;;sqlserver;;smallint;;db2;;smallint +762;;sqlserver;;smallmoney;;db2;;numeric(6,4) +763;;sqlserver;;tinyint;;db2;;smallint +764;;sqlserver;;float;;db2;;decfloat +765;;sqlserver;;real;;db2;;real +766;;sqlserver;;date;;db2;;date +767;;sqlserver;;datetime2;;db2;;timestamp +768;;sqlserver;;datetimeoffset;;db2;;timestamp +769;;sqlserver;;smalldatetime;;db2;;timestamp +770;;sqlserver;;time;;db2;;time +771;;sqlserver;;char;;db2;;character +772;;sqlserver;;text;;db2;;clob +773;;sqlserver;;varchar;;db2;;varchar +774;;sqlserver;;nchar;;db2;;character +775;;sqlserver;;ntext;;db2;;clob +776;;sqlserver;;nvarchar;;db2;;varchar +777;;sqlserver;;binary;;db2;;binary +778;;sqlserver;;image;;db2;;varbinary +779;;sqlserver;;varbinary;;db2;;varbinary +780;;sqlserver;;cursor;;db2;;clob +781;;sqlserver;;hierarchyid;;db2;;varbinary +782;;sqlserver;;sql_variant;;db2;;clob +783;;sqlserver;;table;;db2;;clob +784;;sqlserver;;rowversion;;db2;;int +785;;sqlserver;;xml;;db2;;xml +786;;db2;;character;;sqlserver;;char +787;;db2;;varchar;;sqlserver;;varchar +788;;db2;;clob;;sqlserver;;text +789;;db2;;graphic;;sqlserver;;text +790;;db2;;vargraphic;;sqlserver;;ntext +791;;db2;;binary;;sqlserver;;binary +792;;db2;;varbinary;;sqlserver;;varbinary +793;;db2;;smallint;;sqlserver;;smallint +794;;db2;;integer;;sqlserver;;int +795;;db2;;int;;sqlserver;;int +796;;db2;;bigint;;sqlserver;;bigint +797;;db2;;decimal;;sqlserver;;decimal +798;;db2;;numeric;;sqlserver;;decimal +799;;db2;;decfloat;;sqlserver;;float +800;;db2;;real;;sqlserver;;real +801;;db2;;double;;sqlserver;;numeric +802;;db2;;date;;sqlserver;;date +803;;db2;;time;;sqlserver;;time +804;;db2;;timestamp;;sqlserver;;datetime +805;;db2;;xml;;sqlserver;;xml +806;;db2;;character;;oracle;;char +807;;db2;;varchar;;oracle;;varchar2 +808;;db2;;clob;;oracle;;clob +809;;db2;;graphic;;oracle;;nchar +810;;db2;;vargraphic;;oracle;;nvarchar2 +811;;db2;;blob;;oracle;;blob +812;;db2;;smallint;;oracle;;number(5) +813;;db2;;integer;;oracle;;number(10) +814;;db2;;int;;oracle;;number(10) +815;;db2;;bigint;;oracle;;number(19) +816;;db2;;decimal;;oracle;;number +817;;db2;;numeric;;oracle;;number +818;;db2;;decfloat;;oracle;;binary_double +819;;db2;;real;;oracle;;binary_double +820;;db2;;double;;oracle;;binary_double +821;;db2;;date;;oracle;;date +822;;db2;;time;;oracle;;date +823;;db2;;timestamp;;oracle;;timestamp +824;;db2;;xml;;oracle;;xmltype +825;;oracle;;number;;db2;;numeric +826;;oracle;;float;;db2;;decfloat +827;;oracle;;binary_float;;db2;;decfloat +828;;oracle;;binary_double;;db2;;double +829;;oracle;;long;;db2;;bigint +830;;oracle;;char;;db2;;character +831;;oracle;;varchar2;;db2;;varchar +832;;oracle;;nchar;;db2;;character +833;;oracle;;nvarchar2;;db2;;varchar +834;;oracle;;clob;;db2;;clob +835;;oracle;;nclob;;db2;;dbclob +836;;oracle;;xmltype;;db2;;xml +837;;oracle;;date;;db2;;date +838;;oracle;;timestamp;;db2;;timestamp +839;;oracle;;rowid;;db2;;rowid +840;;oracle;;blob;;db2;;blob +841;;oracle;;bfile;;db2;;dbclob +842;;oracle;;long raw;;db2;;varchar +843;;oracle;;interval year;;db2;;timestamp +844;;oracle;;interval day;;db2;;timestamp diff --git a/ddl/src/test/resources/translation_matrix/translation_attribute.csv b/ddl/src/test/resources/translation_matrix/translation_attribute.csv new file mode 100644 index 00000000..7609821d --- /dev/null +++ b/ddl/src/test/resources/translation_matrix/translation_attribute.csv @@ -0,0 +1,3 @@ +1;;302;;columnDisplaySize;;38 +2;;404;;columnDisplaySize;;30 +3;;434;;columnDisplaySize;;17 diff --git a/translator/src/main/resources/translation_matrix/database_template.csv b/translator/src/main/resources/translation_matrix/database_template.csv new file mode 100644 index 00000000..7d22aeb2 --- /dev/null +++ b/translator/src/main/resources/translation_matrix/database_template.csv @@ -0,0 +1,12 @@ +1;;sqlserver;;table_create;;sqlserver/table/create +2;;sqlserver;;table_alter;;sqlserver/table/alter +3;;sqlserver;;table_alter_drop_primary_key;;sqlserver/table/alter_drop_primary_key +4;;sqlserver;;table_alter_add_primary_key;;sqlserver/table/alter_add_primary_key +5;;sqlserver;;table_drop;;sqlserver/table/drop +6;;sqlserver;;schema_create;;sqlserver/schema/create +7;;sqlserver;;foreignkey_create;;sqlserver/foreignkey/create +8;;sqlserver;;foreignkey_drop;;sqlserver/foreignkey/drop +9;;sqlserver;;column_add;;sqlserver/column/add +10;;sqlserver;;column_alter_type;;sqlserver/column/alter_column_type +11;;sqlserver;;column_alter_null;;sqlserver/column/alter_column_null +12;;sqlserver;;column_drop;;sqlserver/column/drop \ No newline at end of file