This is an automated email from the ASF dual-hosted git repository.

gaojun2048 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 904e9cf785 [bugfix] fix mysql create table comment special string bug 
(#6998)
904e9cf785 is described below

commit 904e9cf785815a83672f2a7e7d1bba64f8b1abec
Author: 老王 <[email protected]>
AuthorDate: Mon Jun 17 19:04:36 2024 +0800

    [bugfix] fix mysql create table comment special string bug (#6998)
---
 .../catalog/mysql/MysqlCreateTableSqlBuilder.java  |  5 +++-
 .../seatunnel/jdbc/JdbcMySqlSaveModeCatalogIT.java | 33 ++++++++++++++--------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/mysql/MysqlCreateTableSqlBuilder.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/mysql/MysqlCreateTableSqlBuilder.java
index 6e3b386f44..9187970120 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/mysql/MysqlCreateTableSqlBuilder.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/mysql/MysqlCreateTableSqlBuilder.java
@@ -200,7 +200,10 @@ public class MysqlCreateTableSqlBuilder {
         }
 
         if (column.getComment() != null) {
-            columnSqls.add("COMMENT '" + column.getComment() + "'");
+            columnSqls.add(
+                    "COMMENT '"
+                            + column.getComment().replace("'", 
"''").replace("\\", "\\\\")
+                            + "'");
         }
 
         return String.join(" ", columnSqls);
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-7/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMySqlSaveModeCatalogIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-7/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMySqlSaveModeCatalogIT.java
index 316947e1f7..749ec34606 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-7/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMySqlSaveModeCatalogIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-7/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMySqlSaveModeCatalogIT.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.connectors.seatunnel.jdbc;
 
 import org.apache.seatunnel.api.table.catalog.CatalogTable;
+import org.apache.seatunnel.api.table.catalog.Column;
 import org.apache.seatunnel.api.table.catalog.TablePath;
 import org.apache.seatunnel.common.utils.JdbcUrlUtil;
 import 
org.apache.seatunnel.connectors.seatunnel.jdbc.catalog.mysql.MySqlCatalog;
@@ -66,7 +67,7 @@ public class JdbcMySqlSaveModeCatalogIT extends TestSuiteBase 
implements TestRes
             "CREATE TABLE IF NOT EXISTS mysql_auto_create\n"
                     + "(\n  "
                     + "`id` int(11) NOT NULL AUTO_INCREMENT,\n"
-                    + "  `f_binary` binary(64) DEFAULT NULL,\n"
+                    + "  `f_binary` binary(64) DEFAULT NULL COMMENT 
'\"#¥%……&*();;'',,..``````//''@特殊注释''\\\\''\"',\n"
                     + "  `f_smallint` smallint(6) DEFAULT NULL,\n"
                     + "  `f_smallint_unsigned` smallint(5) unsigned DEFAULT 
NULL,\n"
                     + "  `f_mediumint` mediumint(9) DEFAULT NULL,\n"
@@ -153,30 +154,38 @@ public class JdbcMySqlSaveModeCatalogIT extends 
TestSuiteBase implements TestRes
     @Test
     public void testCatalog() {
         TablePath tablePathMySql = TablePath.of("auto", "mysql_auto_create");
-        TablePath tablePathMySql_Sink = TablePath.of("auto", 
"mysql_auto_create_sink");
+        TablePath tablePathMySqlSink = TablePath.of("auto", 
"mysql_auto_create_sink");
         MySqlCatalog mySqlCatalog = new MySqlCatalog("mysql", "root", 
MYSQL_PASSWORD, MysqlUrlInfo);
         mySqlCatalog.open();
         CatalogTable catalogTable = mySqlCatalog.getTable(tablePathMySql);
+        // source comment
+        Assertions.assertEquals(
+                catalogTable.getTableSchema().getColumns().get(1).getComment(),
+                "\"#¥%……&*();;',,..``````//'@特殊注释'\\'\"");
         // sink tableExists ?
-        boolean tableExistsBefore = 
mySqlCatalog.tableExists(tablePathMySql_Sink);
+        boolean tableExistsBefore = 
mySqlCatalog.tableExists(tablePathMySqlSink);
         Assertions.assertFalse(tableExistsBefore);
         // create table
-        mySqlCatalog.createTable(tablePathMySql_Sink, catalogTable, true);
-        boolean tableExistsAfter = 
mySqlCatalog.tableExists(tablePathMySql_Sink);
+        mySqlCatalog.createTable(tablePathMySqlSink, catalogTable, true);
+        boolean tableExistsAfter = 
mySqlCatalog.tableExists(tablePathMySqlSink);
         Assertions.assertTrue(tableExistsAfter);
+        // comment
+        final CatalogTable sinkTable = 
mySqlCatalog.getTable(tablePathMySqlSink);
+        final Column column = sinkTable.getTableSchema().getColumns().get(1);
+        Assertions.assertEquals(column.getComment(), 
"\"#¥%……&*();;',,..``````//'@特殊注释'\\'\"");
         // isExistsData ?
-        boolean existsDataBefore = 
mySqlCatalog.isExistsData(tablePathMySql_Sink);
+        boolean existsDataBefore = 
mySqlCatalog.isExistsData(tablePathMySqlSink);
         Assertions.assertFalse(existsDataBefore);
         // insert one data
-        mySqlCatalog.executeSql(tablePathMySql_Sink, customSql);
-        boolean existsDataAfter = 
mySqlCatalog.isExistsData(tablePathMySql_Sink);
+        mySqlCatalog.executeSql(tablePathMySqlSink, customSql);
+        boolean existsDataAfter = 
mySqlCatalog.isExistsData(tablePathMySqlSink);
         Assertions.assertTrue(existsDataAfter);
         // truncateTable
-        mySqlCatalog.truncateTable(tablePathMySql_Sink, true);
-        Assertions.assertFalse(mySqlCatalog.isExistsData(tablePathMySql_Sink));
+        mySqlCatalog.truncateTable(tablePathMySqlSink, true);
+        Assertions.assertFalse(mySqlCatalog.isExistsData(tablePathMySqlSink));
         // drop table
-        mySqlCatalog.dropTable(tablePathMySql_Sink, true);
-        Assertions.assertFalse(mySqlCatalog.tableExists(tablePathMySql_Sink));
+        mySqlCatalog.dropTable(tablePathMySqlSink, true);
+        Assertions.assertFalse(mySqlCatalog.tableExists(tablePathMySqlSink));
         mySqlCatalog.close();
     }
 

Reply via email to