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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit cf6b22c621a3a91a17b9184b35aedd1cc033f5e1
Author: zy-kkk <zhongy...@gmail.com>
AuthorDate: Sun Mar 10 18:16:56 2024 +0800

    [fix](jdbc catalog) fix type conversion error in MySQL JDBC Driver 5.x 
(#31880)
---
 docs/en/docs/lakehouse/multi-catalog/jdbc.md       |   8 +-
 docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md    |   8 +-
 .../org/apache/doris/jdbc/MySQLJdbcExecutor.java   |  35 +-
 .../jdbc/test_mysql_jdbc_driver5_catalog.out       | 446 +++++++++++++++
 .../jdbc/test_mysql_jdbc_driver5_catalog.groovy    | 606 +++++++++++++++++++++
 5 files changed, 1090 insertions(+), 13 deletions(-)

diff --git a/docs/en/docs/lakehouse/multi-catalog/jdbc.md 
b/docs/en/docs/lakehouse/multi-catalog/jdbc.md
index e0585cd13e1..6b3682c61fc 100644
--- a/docs/en/docs/lakehouse/multi-catalog/jdbc.md
+++ b/docs/en/docs/lakehouse/multi-catalog/jdbc.md
@@ -407,7 +407,7 @@ CREATE CATALOG jdbc_mysql PROPERTIES (
     "user" = "root",
     "password" = "123456",
     "jdbc_url" = "jdbc:mysql://127.0.0.1:3306/demo",
-    "driver_url" = "mysql-connector-java-5.1.47.jar",
+    "driver_url" = "mysql-connector-java-5.1.49.jar",
     "driver_class" = "com.mysql.jdbc.Driver"
 )
 ```
@@ -625,7 +625,7 @@ CREATE CATALOG jdbc_doris PROPERTIES (
     "user" = "root",
     "password" = "123456",
     "jdbc_url" = "jdbc:mysql://127.0.0.1:9030?useSSL=false",
-    "driver_url" = "mysql-connector-java-5.1.47.jar",
+    "driver_url" = "mysql-connector-java-5.1.49.jar",
     "driver_class" = "com.mysql.jdbc.Driver"
 )
 ```
@@ -899,12 +899,12 @@ It is recommended to use the following versions of Driver 
to connect to the corr
 
 |    Source    |                        JDBC Driver Version                    
    |
 
|:------------:|:-----------------------------------------------------------------:|
-| MySQL 5.x    |                  mysql-connector-java-5.1.47.jar              
    |
+| MySQL 5.x    |                  mysql-connector-java-5.1.49.jar              
    |
 |  MySQL 8.x   |                  mysql-connector-java-8.0.25.jar              
    |
 |  PostgreSQL  |                       postgresql-42.5.1.jar                   
    |
 |    Oracle    |                            ojdbc8.jar                         
    |
 |  SQLServer   |                    mssql-jdbc-11.2.3.jre8.jar                 
    |
-|    Doris     | mysql-connector-java-5.1.47.jar / 
mysql-connector-java-8.0.25.jar |
+|    Doris     | mysql-connector-java-5.1.49.jar / 
mysql-connector-java-8.0.25.jar |
 |  Clickhouse  |                   clickhouse-jdbc-0.4.2-all.jar               
    |
 |   SAP HAHA   |                             ngdbc.jar                         
    |
 | Trino/Presto |            trino-jdbc-389.jar / presto-jdbc-0.280.jar         
    |
diff --git a/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md 
b/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md
index ae28cc6ed59..dde24e1eb53 100644
--- a/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md
+++ b/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md
@@ -409,7 +409,7 @@ CALL EXECUTE_STMT(jdbc_catalog", "create table dbl1.tbl2 
(k1 int)");
         "user"="root",
         "password"="123456",
         "jdbc_url" = "jdbc:mysql://127.0.0.1:3306/demo",
-        "driver_url" = "mysql-connector-java-5.1.47.jar",
+        "driver_url" = "mysql-connector-java-5.1.49.jar",
         "driver_class" = "com.mysql.jdbc.Driver"
     )
     ```
@@ -629,7 +629,7 @@ CREATE CATALOG jdbc_doris PROPERTIES (
     "user"="root",
     "password"="123456",
     "jdbc_url" = "jdbc:mysql://127.0.0.1:9030?useSSL=false",
-    "driver_url" = "mysql-connector-java-5.1.47.jar",
+    "driver_url" = "mysql-connector-java-5.1.49.jar",
     "driver_class" = "com.mysql.jdbc.Driver"
 )
 ```
@@ -903,12 +903,12 @@ CREATE CATALOG `jdbc_db2` PROPERTIES (
 
 |    Source    |                        JDBC Driver Version                    
    |
 
|:------------:|:-----------------------------------------------------------------:|
-|  MySQL 5.x   |                  mysql-connector-java-5.1.47.jar              
    |
+|  MySQL 5.x   |                  mysql-connector-java-5.1.49.jar              
    |
 |  MySQL 8.x   |                  mysql-connector-java-8.0.25.jar              
    |
 |  PostgreSQL  |                       postgresql-42.5.1.jar                   
    |
 |    Oracle    |                            ojdbc8.jar                         
    |
 |  SQLServer   |                    mssql-jdbc-11.2.3.jre8.jar                 
    |
-|    Doris     | mysql-connector-java-5.1.47.jar / 
mysql-connector-java-8.0.25.jar |
+|    Doris     | mysql-connector-java-5.1.49.jar / 
mysql-connector-java-8.0.25.jar |
 |  Clickhouse  |                   clickhouse-jdbc-0.4.2-all.jar               
    |
 |   SAP HAHA   |                             ngdbc.jar                         
    |
 | Trino/Presto |            trino-jdbc-389.jar / presto-jdbc-0.280.jar         
    |
diff --git 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java
 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java
index bd5297836a6..6a7e2affd58 100644
--- 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java
+++ 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java
@@ -84,7 +84,10 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor {
                 block.add(new byte[batchSizeNum][]);
             } else if (outputTable.getColumnType(i).getType() == Type.ARRAY) {
                 block.add(new String[batchSizeNum]);
-            } else if (outputTable.getColumnType(i).getType() == Type.STRING) {
+            } else if (outputTable.getColumnType(i).getType() == Type.TINYINT
+                    || outputTable.getColumnType(i).getType() == Type.SMALLINT
+                    || outputTable.getColumnType(i).getType() == Type.LARGEINT
+                    || outputTable.getColumnType(i).getType() == Type.STRING) {
                 block.add(new Object[batchSizeNum]);
             } else {
                 
block.add(outputTable.getColumn(i).newObjectContainerArray(batchSizeNum));
@@ -105,15 +108,13 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor {
                 case BOOLEAN:
                     return resultSet.getObject(columnIndex + 1, Boolean.class);
                 case TINYINT:
-                    return resultSet.getObject(columnIndex + 1, Byte.class);
                 case SMALLINT:
-                    return resultSet.getObject(columnIndex + 1, Short.class);
+                case LARGEINT:
+                    return resultSet.getObject(columnIndex + 1);
                 case INT:
                     return resultSet.getObject(columnIndex + 1, Integer.class);
                 case BIGINT:
                     return resultSet.getObject(columnIndex + 1, Long.class);
-                case LARGEINT:
-                    return resultSet.getObject(columnIndex + 1, 
BigInteger.class);
                 case FLOAT:
                     return resultSet.getObject(columnIndex + 1, Float.class);
                 case DOUBLE:
@@ -144,6 +145,30 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor {
     @Override
     protected ColumnValueConverter getOutputConverter(ColumnType columnType, 
String replaceString) {
         switch (columnType.getType()) {
+            case TINYINT:
+                return createConverter(input -> {
+                    if (input instanceof Integer) {
+                        return ((Integer) input).byteValue();
+                    } else {
+                        return input;
+                    }
+                }, Byte.class);
+            case SMALLINT:
+                return createConverter(input -> {
+                    if (input instanceof Integer) {
+                        return ((Integer) input).shortValue();
+                    } else {
+                        return input;
+                    }
+                }, Short.class);
+            case LARGEINT:
+                return createConverter(input -> {
+                    if (input instanceof String) {
+                        return new BigInteger((String) input);
+                    } else {
+                        return input;
+                    }
+                }, BigInteger.class);
             case STRING:
                 if (replaceString.equals("bitmap") || 
replaceString.equals("hll")) {
                     return null;
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
new file mode 100644
index 00000000000..339ddaf9eba
--- /dev/null
+++ 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
@@ -0,0 +1,446 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+internal
+
+-- !sql --
+internal
+
+-- !sql --
+mysql_jdbc_catalog
+
+-- !ex_tb0 --
+111    abc
+112    abd
+113    abe
+114    abf
+115    abg
+
+-- !in_tb --
+111    abc
+112    abd
+113    abe
+114    abf
+115    abg
+
+-- !ex_tb1 --
+{"k1":"v1", "k2":"v2"}
+
+-- !ex_tb2 --
+123    10
+123    15
+123    20
+
+-- !ex_tb3 --
+mus    plat_code       1001169339      1590381433914   1590420872639   11      
1006061 beijing
+mus    plat_code       1001169339      1590402594411   1590420872639   11      
1006061 beijing
+mus    plat_code       1001169339      1590406790026   1590420872639   11      
1006061 beijing
+mus    plat_code       1001169339      1590420482288   1590420872639   11      
1006061 beijing
+mus    plat_code       1001169339      1590420872639   1590420872639   11      
1006061 beijing
+
+-- !ex_tb4 --
+1      111     2021-09-01T07:01:01     2021-09-01T08:01:01     1
+2      112     2021-09-02T07:01:01     2021-09-02T08:01:01     1
+3      113     0001-01-01T00:00        2021-12-01T08:01:01     2
+5      115     2021-09-01T07:02:01     2021-09-01T08:01:04     4
+6      116     2021-10-01T07:03:01     2022-09-01T08:02:05     5
+
+-- !ex_tb5 --
+1      test_apply_id   123321  zhangsan        zhangsan        ready   ok      
2       2022-01-01T02:03:04
+
+-- !ex_tb6 --
+639215401565159424     1143681147589283841     test
+639237839376089088     1143681147589283841     test123
+
+-- !ex_tb7 --
+2      sim     1.000
+2      sim     1.001
+2      sim     1.002
+
+-- !ex_tb8 --
+2022-07-15     2222    1       \N
+2022-07-15     ddddd   2       0.5
+
+-- !ex_tb9 --
+\N
+2022-01-01
+
+-- !ex_tb10 --
+a      1       2
+b      1       2
+c      1       2
+d      3       2
+
+-- !ex_tb11 --
+a      1
+b      1
+c      1
+
+-- !ex_tb12 --
+a      1
+b      1
+c      1
+
+-- !ex_tb13 --
+张三0    11      1234567 123     321312  1999-02-13T00:00        中国      男       0
+张三1    11      12345678        123     321312  1999-02-13T00:00        中国      
男       0
+张三2    11      12345671        123     321312  1999-02-13T00:00        中国      
男       0
+张三3    11      12345673        123     321312  1999-02-13T00:00        中国      
男       0
+张三4    11      123456711       123     321312  1999-02-13T00:00        中国      
男       0
+张三5    11      1232134567      123     321312  1999-02-13T00:00        中国      
男       0
+张三6    11      124314567       123     321312  1999-02-13T00:00        中国      
男       0
+张三7    11      123445167       123     321312  1998-02-13T00:00        中国      
男       0
+
+-- !ex_tb14 --
+123    2022-11-02      2022-11-02      8011    oppo
+abc    2022-11-02      2022-11-02      8011    agdtb
+bca    2022-11-02      2022-11-02      8012    vivo
+
+-- !ex_tb15 --
+2022-11-04     2022-10-31      2022-11-04      62      5.4103451446E9  
7.211386993606482E10    21      10      16      -       -       
2022-11-04T17:40:19
+
+-- !ex_tb16 --
+1      a       0       4       3       6       8
+1      b       0       4       4       8       8
+1      c       0       9       9       5       4
+1      d       0       7       6       1       7
+1      e       0       7       5       6       3
+2      a       0       3       4       1       6
+2      b       0       1       5       4       5
+2      c       0       5       7       9       1
+2      d       0       4       4       8       4
+2      e       0       6       4       7       8
+3      a       0       7       9       4       8
+3      b       0       4       9       8       1
+3      d       0       2       7       1       5
+3      e       0       2       4       3       4
+4      a       0       5       7       4       1
+4      b       0       3       4       2       7
+4      c       0       3       9       3       7
+4      d       0       1       5       6       4
+5      a       0       1       2       2       1
+5      b       0       6       6       2       9
+5      c       0       8       5       7       6
+5      d       0       6       2       7       7
+5      e       0       5       7       9       2
+6      a       0       1       1       8       8
+6      b       0       3       9       1       6
+6      c       0       3       1       3       8
+6      d       0       1       2       4       7
+6      e       0       1       9       7       6
+7      a       0       1       1       3       8
+7      b       0       3       2       8       1
+7      c       0       3       7       7       1
+7      d       0       6       1       5       6
+7      e       0       6       1       3       7
+8      a       0       3       2       8       2
+8      b       0       4       9       4       9
+8      c       0       1       7       1       5
+8      e       0       4       4       5       4
+9      a       0       8       3       9       1
+9      b       0       2       1       4       2
+9      c       0       8       3       9       8
+9      d       0       6       6       5       3
+9      e       0       9       1       9       7
+
+-- !ex_tb17 --
+1      6       1       1       2099.18 3       8       1554296.82      
68781940.49     d       8       5       0       d       a       7       9
+2      8       9       8       2900.42 1       6       97486621.73     
59634489.39     c       3       2       0       a       e       7       4
+3      5       7       3       6276.86 8       9       32758730.38     
10260499.72     c       8       1       0       d       c       9       2
+4      3       7       5       2449.00 6       3       91359059.28     
64743145.92     e       7       8       0       b       d       8       4
+5      6       4       5       9137.82 2       7       26526675.70     
90098303.36     a       6       7       0       d       e       4       1
+6      3       6       8       7601.25 4       9       49117098.47     
46499188.80     c       3       3       0       c       d       4       8
+7      3       2       8       5297.81 9       3       23753694.20     
96930000.64     c       7       2       0       b       e       1       5
+8      3       6       7       3683.85 5       7       26056250.91     
1127755.43      b       7       6       0       d       b       4       7
+9      3       9       1       4785.38 1       5       95199488.12     
94869703.42     a       4       4       0       c       d       2       4
+
+-- !ex_tb18 --
+-128   255     -32768  65535   -8388608        16777215        
-9223372036854775808    -2147483648     2147483647      4294967295      33.14   
422113.141      2342.23 aa      asdawdasdaasdasd        aaa     bbbbbbbb        
xaqwdqwdqwdqd   asdas
+1      1       1       1       1       1       1       1       1       1       
3.14    13.141  2342.23 aa      asdawdasdaasdasd        aaa     bbbbbbbb        
xaqwdqwdqwdqdwqwdqwdqd  asdadwqdqwddqwdsadqwdas
+127    255     32767   65535   8388607 16777215        9223372036854775807     
-2147483648     2147483647      4294967295      33.14   422113.141      2342.23 
aa      asdawdasdaasdasd        aaa     bbbbbbbb        xaqwdqwdqwdqd   
asdadwqdqwdsadqwdas
+
+-- !ex_tb19 --
+2022-11-27     07:09:51        2022    2022-11-27T07:09:51     
2022-11-27T07:09:51
+
+-- !ex_tb20 --
+1.12345        1.12345 1.12345 1.12345 1.12345 1.12345
+123456789012345678901234567890123.12345        
12345678901234567890123456789012.12345  
1234567890123456789012345678901234.12345        
123456789012345678901234567890123.12345 
123456789012345678901234567890123456789012345678901234567890.12345      
123456789012345678901234567890123456789012345678901234567890.12345
+
+-- !ex_tb21_1 --
+2      2
+
+-- !ex_tb21_2 --
+2      2
+
+-- !ex_tb21_3 --
+1      1
+2      2
+
+-- !ex_tb21_4 --
+2      2
+
+-- !ex_tb21_5 --
+1      1
+2      2
+
+-- !ex_tb21_6 --
+1      1
+
+-- !ex_tb21_7 --
+2      1
+
+-- !ex_tb21_8 --
+2      2
+
+-- !information_schema --
+character_sets
+collations
+column_privileges
+column_statistics
+columns
+engines
+events
+files
+global_variables
+key_column_usage
+metadata_name_ids
+parameters
+partitions
+profiling
+referential_constraints
+routines
+rowsets
+schema_privileges
+schemata
+session_variables
+statistics
+table_constraints
+table_privileges
+tables
+triggers
+user_privileges
+views
+
+-- !dt --
+2023-06-17T10:00       2023-06-17T10:00:01     2023-06-17T10:00:02     
2023-06-17T10:00:03     2023-06-17T10:00:04     2023-06-17T10:00:05     
2023-06-17T10:00:06
+
+-- !dt_null --
+\N
+0001-01-01T00:00
+2023-06-17T10:00
+
+-- !test_dz --
+1      \N
+2      2022-01-01
+3      0001-01-01
+
+-- !test_filter_not --
+张三1    11      12345678        123     321312  1999-02-13T00:00        中国      
男       0
+张三2    11      12345671        123     321312  1999-02-13T00:00        中国      
男       0
+张三3    11      12345673        123     321312  1999-02-13T00:00        中国      
男       0
+张三4    11      123456711       123     321312  1999-02-13T00:00        中国      
男       0
+张三5    11      1232134567      123     321312  1999-02-13T00:00        中国      
男       0
+张三6    11      124314567       123     321312  1999-02-13T00:00        中国      
男       0
+张三7    11      123445167       123     321312  1998-02-13T00:00        中国      
男       0
+
+-- !test_filter_not_old_plan --
+张三1    11      12345678        123     321312  1999-02-13T00:00        中国      
男       0
+张三2    11      12345671        123     321312  1999-02-13T00:00        中国      
男       0
+张三3    11      12345673        123     321312  1999-02-13T00:00        中国      
男       0
+张三4    11      123456711       123     321312  1999-02-13T00:00        中国      
男       0
+张三5    11      1232134567      123     321312  1999-02-13T00:00        中国      
男       0
+张三6    11      124314567       123     321312  1999-02-13T00:00        中国      
男       0
+张三7    11      123445167       123     321312  1998-02-13T00:00        中国      
男       0
+
+-- !test_insert1 --
+doris1 18
+
+-- !test_insert2 --
+doris2 19
+doris3 20
+
+-- !test_insert3 --
+doris2 19
+doris2 19
+doris3 20
+doris3 20
+
+-- !test_insert4 --
+1      abcHa1.12345    1.123450xkalowadawd     2022-10-01      3.14159 1       
2       0       100000  1.2345678       24.000  07:09:51        2022    
2022-11-27T07:09:51     2022-11-27T07:09:51
+
+-- !specified_database_1 --
+doris_test
+information_schema
+
+-- !specified_database_2 --
+doris_test
+information_schema
+
+-- !specified_database_3 --
+DORIS
+Doris
+doris
+information_schema
+init_db
+mysql
+performance_schema
+show_test_do_not_modify
+sys
+
+-- !specified_database_4 --
+information_schema
+
+-- !ex_tb1 --
+{"k1":"v1", "k2":"v2"}
+
+-- !mysql_all_types --
+\N     302     0       502     602     4.14159 0.0     6.14159 \N      -124    
-302    2013    -402    -502    -602    \N      2012-10-26T02:08:39     
2013-10-26T08:09:18     -5.14145        0.0     -7.1400 row2    \N      
09:11:09        text2   0xE86F6C6C6F20576F726C67        \N      \N      0x2F    
\N      0x88656C6C9F    Value3
+201    301     401     501     601     3.14159 4.1415926       5.14159 1       
-123    -301    2012    -401    -501    -601    2012-10-30      
2012-10-25T12:05:36     2012-10-25T08:08:08     -4.14145        -5.1400000001   
-6.1400 row1    line1   09:09:09        text1   0x48656C6C6F20576F726C64        
{"age": 30, "city": "London", "name": "Alice"}  Option1,Option3 0x2A    
0x48656C6C6F00000000000000      0x48656C6C6F    Value2
+202    302     402     502     602     4.14159 5.1415926       6.14159 0       
-124    -302    2013    -402    -502    -602    2012-11-01      
2012-10-26T02:08:39     2013-10-26T08:09:18     -5.14145        -6.1400000001   
-7.1400 row2    line2   09:11:09        text2   0xE86F6C6C6F20576F726C67        
{"age": 18, "city": "ChongQing", "name": "Gaoxin"}      Option1,Option2 0x2F    
0x58676C6C6F00000000000000      0x88656C6C9F    Value3
+203    303     403     503     603     7.14159 8.1415926       9.14159 0       
\N      -402    2017    -602    -902    -1102   2012-11-02      \N      
2013-10-27T08:11:18     -5.14145        -6.1400000000001        -7.1400 row3    
line3   09:11:09        text3   0xE86F6C6C6F20576F726C67        {"age": 24, 
"city": "ChongQing", "name": "ChenQi"}      Option2 0x2F    
0x58676C6C6F00000000000000      \N      Value1
+
+-- !select_insert_all_types --
+\N     302     0       502     602     4.14159 0.0     6.14159 \N      -124    
-302    2013    -402    -502    -602    \N      2012-10-26T02:08:39.345700      
2013-10-26T08:09:18     -5.14145        0.0     -7.1400 row2    \N      
09:11:09        text2   0xE86F6C6C6F20576F726C67        \N      \N      0x2F    
\N      0x88656C6C9F    Value3
+201    301     401     501     601     3.14159 4.1415926       5.14159 1       
-123    -301    2012    -401    -501    -601    2012-10-30      
2012-10-25T12:05:36.345700      2012-10-25T08:08:08     -4.14145        
-5.1400000001   -6.1400 row1    line1   09:09:09        text1   
0x48656C6C6F20576F726C64        {"age":30,"city":"London","name":"Alice"}       
Option1,Option3 0x2A    0x48656C6C6F00000000000000      0x48656C6C6F    Value2
+202    302     402     502     602     4.14159 5.1415926       6.14159 0       
-124    -302    2013    -402    -502    -602    2012-11-01      
2012-10-26T02:08:39.345700      2013-10-26T08:09:18     -5.14145        
-6.1400000001   -7.1400 row2    line2   09:11:09        text2   
0xE86F6C6C6F20576F726C67        {"age":18,"city":"ChongQing","name":"Gaoxin"}   
Option1,Option2 0x2F    0x58676C6C6F00000000000000      0x88656C6C9F    Value3
+203    303     403     503     603     7.14159 8.1415926       9.14159 0       
\N      -402    2017    -602    -902    -1102   2012-11-02      \N      
2013-10-27T08:11:18     -5.14145        -6.1400000000001        -7.1400 row3    
line3   09:11:09        text3   0xE86F6C6C6F20576F726C67        
{"age":24,"city":"ChongQing","name":"ChenQi"}   Option2 0x2F    
0x58676C6C6F00000000000000      \N      Value1
+
+-- !ctas --
+\N     302     0       502     602     4.14159 0.0     6.14159 \N      -124    
-302    2013    -402    -502    -602    \N      2012-10-26T02:08:39     
2013-10-26T08:09:18     -5.14145        0.0     -7.1400 row2    \N      
09:11:09        text2   0xE86F6C6C6F20576F726C67        \N      \N      0x2F    
\N      0x88656C6C9F    Value3
+201    301     401     501     601     3.14159 4.1415926       5.14159 1       
-123    -301    2012    -401    -501    -601    2012-10-30      
2012-10-25T12:05:36     2012-10-25T08:08:08     -4.14145        -5.1400000001   
-6.1400 row1    line1   09:09:09        text1   0x48656C6C6F20576F726C64        
{"age": 30, "city": "London", "name": "Alice"}  Option1,Option3 0x2A    
0x48656C6C6F00000000000000      0x48656C6C6F    Value2
+202    302     402     502     602     4.14159 5.1415926       6.14159 0       
-124    -302    2013    -402    -502    -602    2012-11-01      
2012-10-26T02:08:39     2013-10-26T08:09:18     -5.14145        -6.1400000001   
-7.1400 row2    line2   09:11:09        text2   0xE86F6C6C6F20576F726C67        
{"age": 18, "city": "ChongQing", "name": "Gaoxin"}      Option1,Option2 0x2F    
0x58676C6C6F00000000000000      0x88656C6C9F    Value3
+203    303     403     503     603     7.14159 8.1415926       9.14159 0       
\N      -402    2017    -602    -902    -1102   2012-11-02      \N      
2013-10-27T08:11:18     -5.14145        -6.1400000000001        -7.1400 row3    
line3   09:11:09        text3   0xE86F6C6C6F20576F726C67        {"age": 24, 
"city": "ChongQing", "name": "ChenQi"}      Option2 0x2F    
0x58676C6C6F00000000000000      \N      Value1
+
+-- !ctas_desc --
+bigint BIGINT  Yes     false   \N      NONE
+bigint_u       LARGEINT        Yes     false   \N      NONE
+binary TEXT    Yes     false   \N      NONE
+bit    TEXT    Yes     false   \N      NONE
+blob   TEXT    Yes     false   \N      NONE
+boolean        TINYINT Yes     false   \N      NONE
+char   TEXT    Yes     false   \N      NONE
+date   DATE    Yes     false   \N      NONE
+datetime       DATETIME        Yes     false   \N      NONE
+decimal        DECIMAL(12, 4)  Yes     false   \N      NONE
+decimal_u      DECIMAL(19, 5)  Yes     false   \N      NONE
+double DOUBLE  Yes     false   \N      NONE
+double_u       DOUBLE  Yes     false   \N      NONE
+enum   TEXT    Yes     false   \N      NONE
+float  FLOAT   Yes     false   \N      NONE
+float_u        FLOAT   Yes     false   \N      NONE
+int    INT     Yes     false   \N      NONE
+int_u  BIGINT  Yes     false   \N      NONE
+json   TEXT    Yes     false   \N      NONE
+mediumint      INT     Yes     false   \N      NONE
+mediumint_u    INT     Yes     true    \N      
+set    TEXT    Yes     false   \N      NONE
+smallint       SMALLINT        Yes     false   \N      NONE
+smallint_u     INT     Yes     true    \N      
+text   TEXT    Yes     false   \N      NONE
+time   TEXT    Yes     false   \N      NONE
+timestamp      DATETIME        Yes     false   \N      NONE
+tinyint        TINYINT Yes     false   \N      NONE
+tinyint_u      SMALLINT        Yes     true    \N      
+varbinary      TEXT    Yes     false   \N      NONE
+varchar        TEXT    Yes     false   \N      NONE
+year   SMALLINT        Yes     false   \N      NONE
+
+-- !mysql_view --
+10086  4294967295      201
+
+-- !filter1 --
+1      6       1       1       2099.18 3       8       1554296.82      
68781940.49     d       8       5       0       d       a       7       9
+
+-- !filter2 --
+1      6       1       1       2099.18 3       8       1554296.82      
68781940.49     d       8       5       0       d       a       7       9
+2      8       9       8       2900.42 1       6       97486621.73     
59634489.39     c       3       2       0       a       e       7       4
+3      5       7       3       6276.86 8       9       32758730.38     
10260499.72     c       8       1       0       d       c       9       2
+4      3       7       5       2449.00 6       3       91359059.28     
64743145.92     e       7       8       0       b       d       8       4
+5      6       4       5       9137.82 2       7       26526675.70     
90098303.36     a       6       7       0       d       e       4       1
+6      3       6       8       7601.25 4       9       49117098.47     
46499188.80     c       3       3       0       c       d       4       8
+7      3       2       8       5297.81 9       3       23753694.20     
96930000.64     c       7       2       0       b       e       1       5
+8      3       6       7       3683.85 5       7       26056250.91     
1127755.43      b       7       6       0       d       b       4       7
+9      3       9       1       4785.38 1       5       95199488.12     
94869703.42     a       4       4       0       c       d       2       4
+
+-- !filter3 --
+1      6       1       1       2099.18 3       8       1554296.82      
68781940.49     d       8       5       0       d       a       7       9
+
+-- !date_trunc --
+2023-06-17T10:00
+
+-- !money_format --
+1
+
+-- !date_add_year --
+2      2022-01-01
+
+-- !date_add_month --
+2      2022-01-01
+
+-- !date_add_week --
+2      2022-01-01
+
+-- !date_add_day --
+2      2022-01-01
+
+-- !date_add_hour --
+2      2022-01-01
+
+-- !date_add_min --
+2      2022-01-01
+
+-- !date_add_sec --
+2      2022-01-01
+
+-- !date_sub_year --
+2      2022-01-01
+
+-- !date_sub_month --
+2      2022-01-01
+
+-- !date_sub_week --
+2      2022-01-01
+
+-- !date_sub_day --
+2      2022-01-01
+
+-- !date_sub_hour --
+2      2022-01-01
+
+-- !date_sub_min --
+2      2022-01-01
+
+-- !date_sub_sec --
+2      2022-01-01
+
+-- !auto_default_t1 --
+0
+
+-- !auto_default_t2 --
+0
+
+-- !sql --
+doris_1
+doris_2
+doris_3
+doris_test
+information_schema
+init_db
+mysql
+performance_schema
+show_test_do_not_modify
+sys
+
+-- !sql --
+doris_1
+doris_2
+doris_3
+
+-- !sql --
+DORIS
+
+-- !sql --
+Doris
+
+-- !sql --
+doris
+
diff --git 
a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.groovy
 
b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.groovy
new file mode 100644
index 00000000000..b6b80952737
--- /dev/null
+++ 
b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.groovy
@@ -0,0 +1,606 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_mysql_jdbc_driver5_catalog", 
"p0,external,mysql,external_docker,external_docker_mysql") {
+    qt_sql """select current_catalog()"""
+
+    String enabled = context.config.otherConfigs.get("enableJdbcTest")
+    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+    String s3_endpoint = getS3Endpoint()
+    String bucket = getS3BucketName()
+    String driver_url = 
"https://${bucket}.${s3_endpoint}/regression/jdbc_driver/mysql-connector-java-5.1.49.jar";
+    if (enabled != null && enabled.equalsIgnoreCase("true")) {
+        String user = "test_jdbc_user";
+        String pwd = '123456';
+        def tokens = context.config.jdbcUrl.split('/')
+        def url = tokens[0] + "//" + tokens[2] + "/" + "information_schema" + 
"?"
+        String catalog_name = "mysql_jdbc_catalog";
+        String internal_db_name = "regression_test_jdbc_catalog_p0";
+        String ex_db_name = "doris_test";
+        String mysql_port = context.config.otherConfigs.get("mysql_57_port");
+        String inDorisTable = "test_mysql_jdbc_doris_in_tb";
+        String ex_tb0 = "ex_tb0";
+        String ex_tb1 = "ex_tb1";
+        String ex_tb2 = "ex_tb2";
+        String ex_tb3 = "ex_tb3";
+        String ex_tb4 = "ex_tb4";
+        String ex_tb5 = "ex_tb5";
+        String ex_tb6 = "ex_tb6";
+        String ex_tb7 = "ex_tb7";
+        String ex_tb8 = "ex_tb8";
+        String ex_tb9 = "ex_tb9";
+        String ex_tb10 = "ex_tb10";
+        String ex_tb11 = "ex_tb11";
+        String ex_tb12 = "ex_tb12";
+        String ex_tb13 = "ex_tb13";
+        String ex_tb14 = "ex_tb14";
+        String ex_tb15 = "ex_tb15";
+        String ex_tb16 = "ex_tb16";
+        String ex_tb17 = "ex_tb17";
+        String ex_tb18 = "ex_tb18";
+        String ex_tb19 = "ex_tb19";
+        String ex_tb20 = "ex_tb20";
+        String ex_tb21 = "test_key_word";
+        String test_insert = "test_insert";
+        String test_insert2 = "test_insert2";
+        String test_insert_all_types = "test_mysql_insert_all_types";
+        String test_ctas = "test_mysql_ctas";
+        String auto_default_t = "auto_default_t";
+        String dt = "dt";
+        String dt_null = "dt_null";
+        String test_zd = "test_zd"
+
+        try_sql("DROP USER ${user}")
+        sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+        sql """create database if not exists ${internal_db_name}; """
+
+        sql """drop catalog if exists ${catalog_name} """
+
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false&zeroDateTimeBehavior=convertToNull",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver"
+        );"""
+
+        sql """use ${internal_db_name}"""
+        sql  """ drop table if exists ${internal_db_name}.${inDorisTable} """
+        sql  """
+              CREATE TABLE ${internal_db_name}.${inDorisTable} (
+                `id` INT NULL COMMENT "主键id",
+                `name` string NULL COMMENT "名字"
+                ) DISTRIBUTED BY HASH(id) BUCKETS 10
+                PROPERTIES("replication_num" = "1");
+        """
+
+        // used for testing all types
+        sql  """ drop table if exists 
${internal_db_name}.${test_insert_all_types} """
+        sql  """
+                CREATE TABLE ${internal_db_name}.${test_insert_all_types} (
+                    `tinyint_u` SMALLINT,
+                    `smallint_u` INT,
+                    `mediumint_u` INT,
+                    `int_u` BIGINT,
+                    `bigint_u` LARGEINT,
+                    `decimal_u` DECIMAL(18, 5),
+                    `double_u` DOUBLE,
+                    `float_u` FLOAT,
+                    `boolean` TINYINT,
+                    `tinyint` TINYINT,
+                    `smallint` SMALLINT,
+                    `year` SMALLINT,
+                    `mediumint` INT,
+                    `int` INT,
+                    `bigint` BIGINT,
+                    `date` DATE,
+                    `timestamp` DATETIME(4) null,
+                    `datetime` DATETIME,
+                    `float` FLOAT,
+                    `double` DOUBLE,
+                    `decimal` DECIMAL(12, 4),
+                    `char` CHAR(5),
+                    `varchar` VARCHAR(10),
+                    `time` STRING,
+                    `text` STRING,
+                    `blob` STRING,
+                    `json` JSON,
+                    `set` STRING,
+                    `bit` STRING,
+                    `binary` STRING,
+                    `varbinary` STRING,
+                    `enum` STRING
+                ) DISTRIBUTED BY HASH(tinyint_u) BUCKETS 10
+                PROPERTIES("replication_num" = "1");
+        """
+
+        qt_sql """select current_catalog()"""
+        sql """switch ${catalog_name}"""
+        qt_sql """select current_catalog()"""
+        def res_dbs_log = sql "show databases;"
+               for(int i = 0;i < res_dbs_log.size();i++) {
+                       def tbs = sql "show tables from  `${res_dbs_log[i][0]}`"
+                       log.info( "database = ${res_dbs_log[i][0]} => tables = 
"+tbs.toString())
+               }
+        try {
+        
+            sql """ use ${ex_db_name}"""
+
+            order_qt_ex_tb0  """ select id, name from ${ex_tb0} order by id; 
"""
+            sql  """ insert into internal.${internal_db_name}.${inDorisTable} 
select id, name from ${ex_tb0}; """
+            order_qt_in_tb  """ select id, name from 
internal.${internal_db_name}.${inDorisTable} order by id; """
+
+            order_qt_ex_tb1  """ select * from ${ex_tb1} order by id; """
+            order_qt_ex_tb2  """ select * from ${ex_tb2} order by id; """
+            order_qt_ex_tb3  """ select * from ${ex_tb3} order by game_code; 
"""
+            order_qt_ex_tb4  """ select * from ${ex_tb4} order by products_id; 
"""
+            order_qt_ex_tb5  """ select * from ${ex_tb5} order by id; """
+            order_qt_ex_tb6  """ select * from ${ex_tb6} order by id; """
+            order_qt_ex_tb7  """ select * from ${ex_tb7} order by id; """
+            order_qt_ex_tb8  """ select * from ${ex_tb8} order by uid; """
+            order_qt_ex_tb9  """ select * from ${ex_tb9} order by c_date; """
+            order_qt_ex_tb10  """ select * from ${ex_tb10} order by aa; """
+            order_qt_ex_tb11  """ select * from ${ex_tb11} order by aa; """
+            order_qt_ex_tb12  """ select * from ${ex_tb12} order by cc; """
+            order_qt_ex_tb13  """ select * from ${ex_tb13} order by name; """
+            order_qt_ex_tb14  """ select * from ${ex_tb14} order by tid; """
+            order_qt_ex_tb15  """ select * from ${ex_tb15} order by col1; """
+            order_qt_ex_tb16  """ select * from ${ex_tb16} order by id; """
+            order_qt_ex_tb17  """ select * from ${ex_tb17} order by id; """
+            order_qt_ex_tb18  """ select * from ${ex_tb18} order by 
num_tinyint; """
+            order_qt_ex_tb19  """ select * from ${ex_tb19} order by 
date_value; """
+            order_qt_ex_tb20  """ select * from ${ex_tb20} order by 
decimal_normal; """
+            order_qt_ex_tb21_1  """ select `key`, `id` from ${ex_tb21} where 
`key` = 2 order by id;"""
+            order_qt_ex_tb21_2  """ select `key`, `id` from ${ex_tb21} where 
`key` like 2 order by id;"""
+            order_qt_ex_tb21_3  """ select `key`, `id` from ${ex_tb21} where 
`key` in (1,2) order by id;"""
+            order_qt_ex_tb21_4  """ select `key`, `id` from ${ex_tb21} where 
abs(`key`) = 2 order by id;"""
+            order_qt_ex_tb21_5  """ select `key`, `id` from ${ex_tb21} where 
`key` between 1 and 2 order by id;"""
+            order_qt_ex_tb21_6  """ select `key`, `id` from ${ex_tb21} where 
`key` = case when id = 1 then 1 else 0 end order by id;"""
+            order_qt_ex_tb21_7  """ select (`key` +1) as k, `id` from 
${ex_tb21} having abs(k) = 2 order by id;"""
+            order_qt_ex_tb21_8  """ select `key` as k, `id` from ${ex_tb21} 
having abs(k) = 2 order by id;"""
+            order_qt_information_schema """ show tables from 
information_schema; """
+            order_qt_dt """select * from ${dt}; """
+            order_qt_dt_null """select * from ${dt_null} order by 1; """
+            order_qt_test_dz """select * from ${test_zd} order by 1; """
+            order_qt_test_filter_not """select * from ${ex_tb13} where name 
not like '%张三0%' order by 1; """
+            order_qt_test_filter_not_old_plan """select /*+ 
SET_VAR(enable_nereids_planner=false) */ * from ${ex_tb13} where name not like 
'%张三0%' order by 1; """
+            explain {
+                sql("select `datetime` from all_types where 
to_date(`datetime`) = '2012-10-25';")
+                contains """ SELECT `datetime` FROM `doris_test`.`all_types` 
WHERE (date(`datetime`) = '2012-10-25')"""
+            }
+
+            explain {
+                sql("select /*+ SET_VAR(enable_ext_func_pred_pushdown = false) 
*/ `datetime` from all_types where to_date(`datetime`) = '2012-10-25';")
+                contains """SELECT `datetime` FROM `doris_test`.`all_types`"""
+            }
+
+            // test insert
+            String uuid1 = UUID.randomUUID().toString();
+            connect(user=user, password="${pwd}", url=url) {
+                try {
+                    sql """ insert into 
${catalog_name}.${ex_db_name}.${test_insert} values ('${uuid1}', 'doris1', 18) 
"""
+                    fail()
+                } catch (Exception e) {
+                    log.info(e.getMessage())
+                }
+            }
+
+            sql """GRANT LOAD_PRIV ON 
${catalog_name}.${ex_db_name}.${test_insert} TO ${user}"""
+
+            connect(user=user, password="${pwd}", url=url) {
+                try {
+                    sql """ insert into 
${catalog_name}.${ex_db_name}.${test_insert} values ('${uuid1}', 'doris1', 18) 
"""
+                } catch (Exception e) {
+                    fail();
+                }
+            }
+            order_qt_test_insert1 """ select name, age from ${test_insert} 
where id = '${uuid1}' order by age """
+
+            String uuid2 = UUID.randomUUID().toString();
+            sql """ insert into ${test_insert} values ('${uuid2}', 'doris2', 
19), ('${uuid2}', 'doris3', 20) """
+            order_qt_test_insert2 """ select name, age from ${test_insert} 
where id = '${uuid2}' order by age """
+
+            sql """ insert into ${test_insert} select * from ${test_insert} 
where id = '${uuid2}' """
+            order_qt_test_insert3 """ select name, age from ${test_insert} 
where id = '${uuid2}' order by age """
+
+            String uuid3 = UUID.randomUUID().toString();
+            sql """ INSERT INTO ${test_insert2} VALUES
+                    ('${uuid3}', true, 'abcHa1.12345', '1.123450xkalowadawd', 
'2022-10-01', 3.14159, 1, 2, 0, 100000, 1.2345678, 24.000, '07:09:51', '2022', 
'2022-11-27 07:09:51', '2022-11-27 07:09:51'); """
+            order_qt_test_insert4 """ select 
k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15 from ${test_insert2} where 
id = '${uuid3}' """
+        } finally {
+                       res_dbs_log = sql "show databases;"
+                       for(int i = 0;i < res_dbs_log.size();i++) {
+                               def tbs = sql "show tables from  
`${res_dbs_log[i][0]}`"
+                               log.info( "database = ${res_dbs_log[i][0]} => 
tables = "+tbs.toString())
+                       }
+               }
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test only_specified_database argument
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver",
+            "only_specified_database" = "true"
+        );"""
+
+        sql """switch ${catalog_name}"""
+
+        qt_specified_database_1   """ show databases; """
+
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test only_specified_database and include_database_list argument
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}?useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver",
+            "only_specified_database" = "true",
+            "include_database_list" = "doris_test"
+        );"""
+
+        sql """switch ${catalog_name}"""
+
+        qt_specified_database_2   """ show databases; """
+
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test only_specified_database and exclude_database_list argument
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}?useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver",
+            "only_specified_database" = "true",
+            "exclude_database_list" = "doris_test"
+        );"""
+
+        sql """switch ${catalog_name}"""
+
+        qt_specified_database_3   """ show databases; """
+
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test include_database_list and exclude_database_list have 
overlapping items case
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}?useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver",
+            "only_specified_database" = "true",
+            "include_database_list" = "doris_test",
+            "exclude_database_list" = "doris_test"
+        );"""
+
+        sql """switch ${catalog_name}"""
+
+        qt_specified_database_4   """ show databases; """
+
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test old create-catalog syntax for compatibility
+        sql """ CREATE CATALOG ${catalog_name} PROPERTIES (
+            "type"="jdbc",
+            "jdbc.user"="root",
+            "jdbc.password"="123456",
+            "jdbc.jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+            "jdbc.driver_url" = "${driver_url}",
+            "jdbc.driver_class" = "com.mysql.jdbc.Driver");
+        """
+        sql """ switch ${catalog_name} """
+        
+        res_dbs_log = sql "show databases;"
+               for(int i = 0;i < res_dbs_log.size();i++) {
+                       def tbs = sql "show tables from  `${res_dbs_log[i][0]}`"
+                       log.info( "database = ${res_dbs_log[i][0]} => tables = 
"+tbs.toString())
+               }
+        try {
+            sql """ use ${ex_db_name} """
+            order_qt_ex_tb1  """ select * from ${ex_tb1} order by id; """
+
+            // test all types supported by MySQL
+            sql """use doris_test;"""
+            qt_mysql_all_types """select * from all_types order by 
tinyint_u;"""
+
+            // test insert into internal.db.table select * from all_types
+            sql """ insert into 
internal.${internal_db_name}.${test_insert_all_types} select * from all_types; 
"""
+            order_qt_select_insert_all_types """ select * from 
internal.${internal_db_name}.${test_insert_all_types} order by tinyint_u; """
+
+            // test CTAS
+            sql  """ drop table if exists 
internal.${internal_db_name}.${test_ctas} """
+            sql """ create table internal.${internal_db_name}.${test_ctas}
+                    PROPERTIES("replication_num" = "1")
+                    AS select * from all_types;
+                """
+
+            order_qt_ctas """select * from 
internal.${internal_db_name}.${test_ctas} order by tinyint_u;"""
+
+            order_qt_ctas_desc """desc 
internal.${internal_db_name}.${test_ctas};"""
+        } finally {
+                       res_dbs_log = sql "show databases;"
+                       for(int i = 0;i < res_dbs_log.size();i++) {
+                               def tbs = sql "show tables from  
`${res_dbs_log[i][0]}`"
+                               log.info( "database = ${res_dbs_log[i][0]} => 
tables = "+tbs.toString())
+                       }
+               }
+        sql """ drop catalog if exists ${catalog_name} """
+
+        // test mysql view
+        sql """ drop catalog if exists view_catalog """
+        sql """ CREATE CATALOG view_catalog PROPERTIES (
+            "type"="jdbc",
+            "jdbc.user"="root",
+            "jdbc.password"="123456",
+            "jdbc.jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+            "jdbc.driver_url" = "${driver_url}",
+            "jdbc.driver_class" = "com.mysql.jdbc.Driver");
+        """
+        qt_mysql_view """ select * from view_catalog.doris_test.mysql_view 
order by col_1;"""
+        sql """ drop catalog if exists view_catalog; """
+
+        sql """ drop catalog if exists mysql_fun_push_catalog """
+        sql """ CREATE CATALOG mysql_fun_push_catalog PROPERTIES (
+            "type"="jdbc",
+            "jdbc.user"="root",
+            "jdbc.password"="123456",
+            "jdbc.jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+            "jdbc.driver_url" = "${driver_url}",
+            "jdbc.driver_class" = "com.mysql.jdbc.Driver");
+        """
+
+        sql """switch mysql_fun_push_catalog"""
+        res_dbs_log = sql "show databases;"
+               for(int i = 0;i < res_dbs_log.size();i++) {
+                       def tbs = sql "show tables from  `${res_dbs_log[i][0]}`"
+                       log.info( "database = ${res_dbs_log[i][0]} => tables = 
"+tbs.toString())
+               }
+        try {
+            sql """ use ${ex_db_name}"""
+            sql """ set enable_ext_func_pred_pushdown = "true"; """
+            order_qt_filter1 """select * from ${ex_tb17} where id = 1; """
+            order_qt_filter2 """select * from ${ex_tb17} where 1=1 order by 1; 
"""
+            order_qt_filter3 """select * from ${ex_tb17} where id = 1 and 1 = 
1; """
+            order_qt_date_trunc """ SELECT timestamp0  from dt where 
DATE_TRUNC(date_sub(timestamp0,INTERVAL 9 HOUR),'hour') > '2011-03-03 
17:39:05'; """
+            order_qt_money_format """ select k8 from test1 where 
money_format(k8) = '1.00'; """
+            explain {
+                sql("select k8 from test1 where money_format(k8) = '1.00';")
+
+                contains "QUERY: SELECT `k8` FROM `doris_test`.`test1`"
+            }
+            explain {
+                sql ("SELECT timestamp0  from dt where 
DATE_TRUNC(date_sub(timestamp0,INTERVAL 9 HOUR),'hour') > '2011-03-03 
17:39:05';")
+
+                contains "QUERY: SELECT `timestamp0` FROM `doris_test`.`dt`"
+            }
+            explain {
+                sql ("SELECT timestamp0  from dt where 
DATE_TRUNC(date_sub(timestamp0,INTERVAL 9 HOUR),'hour') > '2011-03-03 17:39:05' 
and timestamp0 > '2022-01-01';")
+
+                contains "QUERY: SELECT `timestamp0` FROM `doris_test`.`dt` 
WHERE (`timestamp0` > '2022-01-01 00:00:00')"
+            }
+            explain {
+                sql ("select k6, k8 from test1 where nvl(k6, null) = 1;")
+
+                contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` 
WHERE ((ifnull(`k6`, NULL) = 1))"
+            }
+            explain {
+                sql ("select k6, k8 from test1 where nvl(nvl(k6, null),null) = 
1;")
+
+                contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` 
WHERE ((ifnull(ifnull(`k6`, NULL), NULL) = 1))"
+            }
+            sql """ set enable_ext_func_pred_pushdown = "false"; """
+            explain {
+                sql ("select k6, k8 from test1 where nvl(k6, null) = 1 and k8 
= 1;")
+
+                contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` 
WHERE ((`k8` = 1))"
+            }
+            sql """ set enable_ext_func_pred_pushdown = "true"; """
+            // test date_add
+            sql """ set disable_nereids_rules='NORMALIZE_REWRITE_RULES'; """
+            order_qt_date_add_year """ select * from test_zd where 
date_add(d_z,interval 1 year) = '2023-01-01' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 year) 
= '2023-01-01' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 year) = '2023-01-01')"
+            }
+            order_qt_date_add_month """ select * from test_zd where 
date_add(d_z,interval 1 month) = '2022-02-01' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 
month) = '2022-02-01' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 month) = '2022-02-01')"
+            }
+            order_qt_date_add_week """ select * from test_zd where 
date_add(d_z,interval 1 week) = '2022-01-08' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 week) 
= '2022-01-08' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 week) = '2022-01-08')"
+            }
+            order_qt_date_add_day """ select * from test_zd where 
date_add(d_z,interval 1 day) = '2022-01-02' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 day) 
= '2022-01-02' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 day) = '2022-01-02')"
+            }
+            order_qt_date_add_hour """ select * from test_zd where 
date_add(d_z,interval 1 hour) = '2022-01-01 01:00:00' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 hour) 
= '2022-01-01 01:00:00' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 hour) = '2022-01-01 
01:00:00')"
+            }
+            order_qt_date_add_min """ select * from test_zd where 
date_add(d_z,interval 1 minute) = '2022-01-01 00:01:00' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 
minute) = '2022-01-01 00:01:00' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 minute) = '2022-01-01 
00:01:00')"
+            }
+            order_qt_date_add_sec """ select * from test_zd where 
date_add(d_z,interval 1 second) = '2022-01-01 00:00:01' order by 1; """
+            explain {
+                sql("select * from test_zd where date_add(d_z,interval 1 
second) = '2022-01-01 00:00:01' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_add(`d_z`, INTERVAL 1 second) = '2022-01-01 
00:00:01')"
+            }
+            // date_sub
+            order_qt_date_sub_year """ select * from test_zd where 
date_sub(d_z,interval 1 year) = '2021-01-01' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 year) 
= '2021-01-01' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 year) = '2021-01-01')"
+            }
+            order_qt_date_sub_month """ select * from test_zd where 
date_sub(d_z,interval 1 month) = '2021-12-01' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 
month) = '2021-12-01' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 month) = '2021-12-01')"
+            }
+            order_qt_date_sub_week """ select * from test_zd where 
date_sub(d_z,interval 1 week) = '2021-12-25' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 week) 
= '2021-12-25' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 week) = '2021-12-25')"
+            }
+            order_qt_date_sub_day """ select * from test_zd where 
date_sub(d_z,interval 1 day) = '2021-12-31' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 day) 
= '2021-12-31' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 day) = '2021-12-31')"
+            }
+            order_qt_date_sub_hour """ select * from test_zd where 
date_sub(d_z,interval 1 hour) = '2021-12-31 23:00:00' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 hour) 
= '2021-12-31 23:00:00' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 hour) = '2021-12-31 
23:00:00')"
+            }
+            order_qt_date_sub_min """ select * from test_zd where 
date_sub(d_z,interval 1 minute) = '2021-12-31 23:59:00' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 
minute) = '2021-12-31 23:59:00' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 minute) = '2021-12-31 
23:59:00')"
+            }
+            order_qt_date_sub_sec """ select * from test_zd where 
date_sub(d_z,interval 1 second) = '2021-12-31 23:59:59' order by 1; """
+            explain {
+                sql("select * from test_zd where date_sub(d_z,interval 1 
second) = '2021-12-31 23:59:59' order by 1;")
+
+                contains " QUERY: SELECT `id`, `d_z` FROM 
`doris_test`.`test_zd` WHERE (date_sub(`d_z`, INTERVAL 1 second) = '2021-12-31 
23:59:59')"
+            }
+            sql """ set disable_nereids_rules=''; """
+
+        } finally {
+                       res_dbs_log = sql "show databases;"
+                       for(int i = 0;i < res_dbs_log.size();i++) {
+                               def tbs = sql "show tables from  
`${res_dbs_log[i][0]}`"
+                               log.info( "database = ${res_dbs_log[i][0]} => 
tables = "+tbs.toString())
+                       }
+               }
+        sql """ drop catalog if exists mysql_fun_push_catalog; """
+
+        // test insert null
+
+        sql """drop catalog if exists ${catalog_name} """
+
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.jdbc.Driver"
+        );"""
+
+        sql """switch ${catalog_name}"""
+        sql """ use ${ex_db_name}"""
+
+        order_qt_auto_default_t1 """insert into ${auto_default_t}(name) 
values('a'); """
+        test {
+            sql "insert into ${auto_default_t}(name,dt) values('a', null);"
+            exception "Column `dt` is not nullable, but the inserted value is 
nullable."
+        }
+        test {
+            sql "insert into ${auto_default_t}(name,dt) select '1', null;"
+            exception "Column `dt` is not nullable, but the inserted value is 
nullable."
+        }
+        explain {
+            sql "insert into ${auto_default_t}(name,dt) select col1,col12 from 
ex_tb15;"
+            contains "PreparedStatement SQL: INSERT INTO 
`doris_test`.`auto_default_t`(`name`,`dt`) VALUES (?, ?)"
+        }
+        order_qt_auto_default_t2 """insert into ${auto_default_t}(name,dt) 
select col1, coalesce(col12,'2022-01-01 00:00:00') from ex_tb15 limit 1;"""
+        sql """drop catalog if exists ${catalog_name} """
+
+        // test lower_case_meta_names
+
+        sql """ drop catalog if exists mysql_lower_case_catalog """
+        sql """ CREATE CATALOG mysql_lower_case_catalog PROPERTIES (
+                    "type"="jdbc",
+                    "user"="root",
+                    "password"="123456",
+                    "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+                    "driver_url" = "${driver_url}",
+                    "driver_class" = "com.mysql.jdbc.Driver",
+                    "lower_case_meta_names" = "true",
+                    "meta_names_mapping" = '{"databases": [{"remoteDatabase": 
"DORIS","mapping": "doris_1"},{"remoteDatabase": "Doris","mapping": 
"doris_2"},{"remoteDatabase": "doris","mapping": "doris_3"}],"tables": 
[{"remoteDatabase": "Doris","remoteTable": "DORIS","mapping": 
"doris_1"},{"remoteDatabase": "Doris","remoteTable": "Doris","mapping": 
"doris_2"},{"remoteDatabase": "Doris","remoteTable": "doris","mapping": 
"doris_3"}]}'
+            );
+        """
+
+        qt_sql "show databases from mysql_lower_case_catalog;"
+        qt_sql "show tables from mysql_lower_case_catalog.doris_2;"
+        qt_sql "select * from mysql_lower_case_catalog.doris_2.doris_1 order 
by id;"
+        qt_sql "select * from mysql_lower_case_catalog.doris_2.doris_2 order 
by id;"
+        qt_sql "select * from mysql_lower_case_catalog.doris_2.doris_3 order 
by id;"
+
+        sql """ drop catalog if exists mysql_lower_case_catalog; """
+        sql """ drop catalog if exists mysql_lower_case_catalog2; """
+        test {
+            sql """ CREATE CATALOG mysql_lower_case_catalog2 PROPERTIES (
+                        "type"="jdbc",
+                        "user"="root",
+                        "password"="123456",
+                        "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+                        "driver_url" = "${driver_url}",
+                        "driver_class" = "com.mysql.jdbc.Driver",
+                        "lower_case_table_names" = "true",
+                        "meta_names_mapping" = '{"databases": 
[{"remoteDatabase": "DORIS","mapping": "doris_1"},{"remoteDatabase": 
"Doris","mapping": "doris_2"},{"remoteDatabase": "doris","mapping": 
"doris_3"}],"tables": [{"remoteDatabase": "Doris","remoteTable": 
"DORIS","mapping": "doris_1"},{"remoteDatabase": "Doris","remoteTable": 
"Doris","mapping": "doris_2"},{"remoteDatabase": "Doris","remoteTable": 
"doris","mapping": "doris_3"}]}'
+                    );
+                """
+            exception "Jdbc catalog property lower_case_table_names is not 
supported, please use lower_case_meta_names instead"
+            }
+        sql """ drop catalog if exists mysql_lower_case_catalog2; """
+        sql """ drop catalog if exists mysql_lower_case_catalog3; """
+        sql """ CREATE CATALOG mysql_lower_case_catalog3 PROPERTIES (
+                    "type"="jdbc",
+                    "user"="root",
+                    "password"="123456",
+                    "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false",
+                    "driver_url" = "${driver_url}",
+                    "driver_class" = "com.mysql.jdbc.Driver",
+                    "lower_case_meta_names" = "true",
+                    "meta_names_mapping" = "{\\\"databases\\\": 
[{\\\"remoteDatabase\\\": \\\"DORIS\\\",\\\"mapping\\\": 
\\\"doris_1\\\"},{\\\"remoteDatabase\\\": \\\"Doris\\\",\\\"mapping\\\": 
\\\"doris_2\\\"},{\\\"remoteDatabase\\\": \\\"doris\\\",\\\"mapping\\\": 
\\\"doris_3\\\"}],\\\"tables\\\": [{\\\"remoteDatabase\\\": 
\\\"Doris\\\",\\\"remoteTable\\\": \\\"DORIS\\\",\\\"mapping\\\": 
\\\"doris_1\\\"},{\\\"remoteDatabase\\\": \\\"Doris\\\",\\\"remoteTable\\\": 
\\\"Doris\\\",\\\"mapp [...]
+                    );
+                """
+        sql """ drop catalog if exists mysql_lower_case_catalog3; """
+    }
+}
+


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to