From 0302648793db96c427103680248f28a0bee7b31a Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Wed, 3 Dec 2025 10:12:39 -0700 Subject: [PATCH 1/6] support BOOL type mapped as NUMERIC (Int64) --- .../dialectadapter/mysql/MysqlDialectAdapter.java | 1 + .../mysql/MysqlDialectAdapterTest.java | 12 +++++++++++- .../teleport/v2/templates/MySQLDataTypesIT.java | 1 + .../test/resources/DataTypesIT/mysql-data-types.sql | 8 ++++++++ .../resources/DataTypesIT/mysql-spanner-schema.sql | 5 +++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/v2/sourcedb-to-spanner/src/main/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapter.java b/v2/sourcedb-to-spanner/src/main/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapter.java index 300b624cf7..ec3d2329d5 100644 --- a/v2/sourcedb-to-spanner/src/main/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapter.java +++ b/v2/sourcedb-to-spanner/src/main/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapter.java @@ -375,6 +375,7 @@ private ImmutableMap getTableCols( .put("TINYTEXT", IndexType.STRING) .put("DATETIME", IndexType.TIME_STAMP) .put("TIMESTAMP", IndexType.TIME_STAMP) + .put("BOOL", IndexType.NUMERIC) .build(); /** diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java index 3553edc6e5..e5dc08f90e 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java @@ -280,7 +280,7 @@ public void testDiscoverTablesRsException() throws SQLException { public void testDiscoverIndexesBasic() throws SQLException, RetriableSchemaDiscoveryException { ImmutableList testTables = ImmutableList.of("testTable1"); ImmutableList colTypes = - ImmutableList.of("float", "integer", "char", "varbinary", "binary"); + ImmutableList.of("float", "integer", "char", "varbinary", "binary", "bool"); ImmutableList expectedSourceColumnIndexInfos = ImmutableList.of( SourceColumnIndexInfo.builder() @@ -335,6 +335,16 @@ public void testDiscoverIndexesBasic() throws SQLException, RetriableSchemaDisco .setIndexType(IndexType.BINARY) .setOrdinalPosition(4) .build()); + SourceColumnIndexInfo.builder() + .setColumnName("testColBool") + .setIndexName("primary") + .setIsUnique(true) + .setIsPrimary(true) + .setCardinality(2L) + .setIndexType(IndexType.NUMERIC) + .setOrdinalPosition(5) + .build(), + final JdbcSchemaReference sourceSchemaReference = JdbcSchemaReference.builder().setDbName("testDB").build(); diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java index 01a5e429ed..6115d8c0dd 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java @@ -273,6 +273,7 @@ private Map>> getExpectedData() { "2005-01-01T00:01:54.123456000Z", "2037-12-30T23:59:59Z", "2038-01-18T23:59:59Z")); + expectedData.put("bool_pk", createRows("bool_pk", "0", "2", "1")); return expectedData; } diff --git a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-data-types.sql b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-data-types.sql index 80eaf164c0..06b20f3a3b 100644 --- a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-data-types.sql +++ b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-data-types.sql @@ -272,6 +272,12 @@ CREATE TABLE timestamp_pk_table ( CONSTRAINT PRIMARY KEY (id) ); +CREATE TABLE bool_pk_table ( + id BOOL PRIMARY KEY, + bool_pk_col BOOL NOT NULL +); + + ALTER TABLE `bigint_table` MODIFY `id` INT AUTO_INCREMENT; ALTER TABLE `bigint_unsigned_table` MODIFY `id` INT AUTO_INCREMENT; ALTER TABLE `binary_table` MODIFY `id` INT AUTO_INCREMENT; @@ -423,6 +429,8 @@ SET time_zone = 'Asia/Kolkata'; INSERT INTO `timestamp_pk_table` (`id`, `timestamp_pk_col`) VALUES ('2005-01-01 05:31:54.123456', '2005-01-01 05:31:54.123456'); SET time_zone = SYSTEM; +INSERT INTO `bool_pk_table` (`id`, `bool_pk_col`) VALUES (TRUE, TRUE), (FALSE, FALSE); + INSERT INTO `bigint_table` (`bigint_col`) VALUES (NULL); INSERT INTO `bigint_unsigned_table` (`bigint_unsigned_col`) VALUES (NULL); INSERT INTO `binary_table` (`binary_col`) VALUES (NULL); diff --git a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql index 4d6fa11a81..61093f4a9e 100644 --- a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql +++ b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql @@ -300,3 +300,8 @@ CREATE TABLE IF NOT EXISTS timestamp_pk_table ( id TIMESTAMP NOT NULL, timestamp_pk_col TIMESTAMP NOT NULL, ) PRIMARY KEY(id); + +CREATE TABLE IF NOT EXISTS bool_pk_table ( + id INT64 NOT NULL, + bool_pk_col INT64 NOT NULL, +) PRIMARY KEY(id); From 0804c7080ebfc615df893a42574f0fbf913ef1a8 Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Wed, 3 Dec 2025 12:00:15 -0700 Subject: [PATCH 2/6] update Spanner schema and expected data for BOOL columns --- .../google/cloud/teleport/v2/templates/MySQLDataTypesIT.java | 2 +- .../src/test/resources/DataTypesIT/mysql-spanner-schema.sql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java index 6115d8c0dd..22a5d996c4 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java @@ -273,7 +273,7 @@ private Map>> getExpectedData() { "2005-01-01T00:01:54.123456000Z", "2037-12-30T23:59:59Z", "2038-01-18T23:59:59Z")); - expectedData.put("bool_pk", createRows("bool_pk", "0", "2", "1")); + expectedData.put("bool_pk", createRows("bool_pk", "FALSE", "TRUE")); return expectedData; } diff --git a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql index 61093f4a9e..bf492e4dbe 100644 --- a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql +++ b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql @@ -302,6 +302,6 @@ CREATE TABLE IF NOT EXISTS timestamp_pk_table ( ) PRIMARY KEY(id); CREATE TABLE IF NOT EXISTS bool_pk_table ( - id INT64 NOT NULL, - bool_pk_col INT64 NOT NULL, + id BOOL NOT NULL, + bool_pk_col BOOL NOT NULL, ) PRIMARY KEY(id); From ae10a05d69a27b412df8409ce18cf5fd52238888 Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Mon, 8 Dec 2025 11:35:08 -0700 Subject: [PATCH 3/6] fix spotless error --- .../io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java index 8d84eaa33a..54e206d80b 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java @@ -343,7 +343,7 @@ public void testDiscoverIndexesBasic() throws SQLException, RetriableSchemaDisco .setCardinality(42L) .setIndexType(IndexType.BINARY) .setOrdinalPosition(4) - .build()); + .build(), SourceColumnIndexInfo.builder() .setColumnName("testColBool") .setIndexName("primary") @@ -352,7 +352,7 @@ public void testDiscoverIndexesBasic() throws SQLException, RetriableSchemaDisco .setCardinality(2L) .setIndexType(IndexType.NUMERIC) .setOrdinalPosition(5) - .build(), + .build()); final JdbcSchemaReference sourceSchemaReference = From 79e47051f89a5649258fdfc62b6c9e1cd4d57b93 Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Tue, 9 Dec 2025 11:10:07 -0700 Subject: [PATCH 4/6] fix Spotless error --- .../io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java index 1ba8ba1ea0..dab5d4587c 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/source/reader/io/jdbc/dialectadapter/mysql/MysqlDialectAdapterTest.java @@ -363,7 +363,6 @@ public void testDiscoverIndexesBasic() throws SQLException, RetriableSchemaDisco .setOrdinalPosition(6) .build(); - final JdbcSchemaReference sourceSchemaReference = JdbcSchemaReference.builder().setDbName("testDB").build(); ResultSet mockResultSet = mock(ResultSet.class); From 36c3a58f11e446e31616fb261edf356f44f72f00 Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Tue, 9 Dec 2025 13:32:43 -0700 Subject: [PATCH 5/6] Update mysql-spanner-schema.sql --- .../src/test/resources/DataTypesIT/mysql-spanner-schema.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql index 06a31aa71c..dfb4a7be16 100644 --- a/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql +++ b/v2/sourcedb-to-spanner/src/test/resources/DataTypesIT/mysql-spanner-schema.sql @@ -326,6 +326,8 @@ CREATE TABLE IF NOT EXISTS timestamp_pk_table ( CREATE TABLE IF NOT EXISTS bool_pk_table ( id BOOL NOT NULL, bool_pk_col BOOL NOT NULL, +) PRIMARY KEY(id); + CREATE TABLE IF NOT EXISTS year_pk_table ( id INT64 NOT NULL, year_pk_col INT64 NOT NULL, From ce239925a2ef5c65dce0055451b9b74b5df21586 Mon Sep 17 00:00:00 2001 From: gpalanisamyYopp Date: Thu, 11 Dec 2025 08:44:29 -0700 Subject: [PATCH 6/6] Fix bool_pk expected data to use boolean values --- .../google/cloud/teleport/v2/templates/MySQLDataTypesIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java index a0ea4d79d4..692b77f35d 100644 --- a/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java +++ b/v2/sourcedb-to-spanner/src/test/java/com/google/cloud/teleport/v2/templates/MySQLDataTypesIT.java @@ -277,7 +277,7 @@ private Map>> getExpectedData() { "2005-01-01T00:01:54.123456000Z", "2037-12-30T23:59:59Z", "2038-01-18T23:59:59Z")); - expectedData.put("bool_pk", createRows("bool_pk", "FALSE", "TRUE")); + expectedData.put("bool_pk", createRows("bool_pk", false, true)); expectedData.put("year_pk", createRows("year_pk", "1901", "2000")); return expectedData; }