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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 865d30ded9a branch-3.0: [fix](jdbc catalog) Get statistics using 
remote name #46040 (#46113)
865d30ded9a is described below

commit 865d30ded9afed3215dda101e7f41ca019ff6f9b
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Dec 27 21:06:42 2024 +0800

    branch-3.0: [fix](jdbc catalog) Get statistics using remote name #46040 
(#46113)
    
    Cherry-picked from #46040
    
    Co-authored-by: zy-kkk <zhongy...@gmail.com>
---
 .../docker-compose/mysql/init/04-insert.sql        |   4 +
 .../postgresql/init/02-create-table.sql            |   5 +
 .../docker-compose/postgresql/init/04-insert.sql   |   3 +
 .../sqlserver/init/03-create-table.sql             |   5 +
 .../docker-compose/sqlserver/init/04-insert.sql    |   3 +
 .../doris/datasource/jdbc/JdbcExternalTable.java   |   4 +-
 .../jdbc/test_jdbc_row_count.groovy                | 108 +++++++++++++++++++++
 7 files changed, 130 insertions(+), 2 deletions(-)

diff --git a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql 
b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql
index 677a041258d..4c1be96caf3 100644
--- a/docker/thirdparties/docker-compose/mysql/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/mysql/init/04-insert.sql
@@ -1208,3 +1208,7 @@ INSERT INTO doris_test.t_char (char_col) VALUES 
(REPEAT('δΈ­', 255));
 
 INSERT INTO doris_test.`test_cast` VALUES (1, '1', '2022-01-01', '2022-01-01 
00:00:01');
 INSERT INTO doris_test.`test_cast` VALUES (2, '2', '2022-01-02', '2022-01-02 
00:00:01');
+
+ANALYZE TABLE Doris.doris;
+ANALYZE TABLE Doris.DORIS;
+ANALYZE TABLE Doris.Doris;
\ No newline at end of file
diff --git 
a/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql 
b/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql
index bafdd615839..8c13fa02e61 100644
--- a/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql
+++ b/docker/thirdparties/docker-compose/postgresql/init/02-create-table.sql
@@ -351,3 +351,8 @@ CREATE TABLE 
catalog_pg_test.test_all_support_types_array_2d (
     float8_value float8[][] NULL
 );
 
+create table doris_test.TEST_LOWER (
+    k1 bit,
+    k2 char(100)
+);
+
diff --git a/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql 
b/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql
index b2a14148ead..87f1f6c0d58 100644
--- a/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/postgresql/init/04-insert.sql
@@ -2940,3 +2940,6 @@ INSERT INTO 
catalog_pg_test.test_all_support_types_array_2d (
     ARRAY[ARRAY[5.5, 6.6], ARRAY[NULL::double precision, NULL::double 
precision]]
 );
 
+
+INSERT INTO doris_test.TEST_LOWER(k2) VALUES ('a');
+analyze doris_test.TEST_LOWER;
diff --git 
a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql 
b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
index b09a2ca47a6..ea3abff2d6e 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/03-create-table.sql
@@ -138,3 +138,8 @@ CREATE TABLE dbo.test_timestamp (
 id_col int PRIMARY KEY NOT NULL,
 timestamp_col timestamp NULL
 );
+
+CREATE TABLE dbo.TEST_LOWER (
+    id int PRIMARY KEY NOT NULL,
+    name varchar(10) NOT NULL
+);
diff --git a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql 
b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
index f671bd23050..1ba9ca593e7 100644
--- a/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/sqlserver/init/04-insert.sql
@@ -100,3 +100,6 @@ Insert into dbo.all_type values
 
(2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 
 insert into dbo.test_timestamp(id_col) values(1);
+
+Insert into dbo.TEST_LOWER values (1, 'doris');
+UPDATE STATISTICS dbo.TEST_LOWER;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
index 4bad19b8a69..36378e80ac3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
@@ -201,8 +201,8 @@ public class JdbcExternalTable extends ExternalTable {
     public long fetchRowCount() {
         Map<String, String> params = new HashMap<>();
         params.put("ctlName", catalog.getName());
-        params.put("dbName", dbName);
-        params.put("tblName", name);
+        params.put("dbName", this.db.getRemoteName());
+        params.put("tblName", this.remoteName);
         switch (((JdbcExternalCatalog) catalog).getDatabaseTypeName()) {
             case JdbcResource.MYSQL:
                 params.put("sql", MYSQL_ROW_COUNT_SQL);
diff --git 
a/regression-test/suites/external_table_p0/jdbc/test_jdbc_row_count.groovy 
b/regression-test/suites/external_table_p0/jdbc/test_jdbc_row_count.groovy
index c8220ce13dd..0d31ab37081 100644
--- a/regression-test/suites/external_table_p0/jdbc/test_jdbc_row_count.groovy
+++ b/regression-test/suites/external_table_p0/jdbc/test_jdbc_row_count.groovy
@@ -49,6 +49,34 @@ suite("test_jdbc_row_count", 
"p0,external,mysql,external_docker,external_docker_
         assertEquals("5", result[0][2])
         sql """drop catalog ${catalog_name}"""
 
+        // Test mysql lower
+        catalog_name = "test_mysql_lower_jdbc_row_count";
+        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",
+            "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"}]}'
+        );"""
+
+        sql """use ${catalog_name}.doris_test"""
+        result = sql """show table stats doris_2.doris_1"""
+        Thread.sleep(1000)
+        for (int i = 0; i < 60; i++) {
+            result = sql """show table stats doris_2.doris_1""";
+            if (result[0][2] != "-1") {
+                break;
+            }
+            logger.info("Table row count not ready yet. Wait 1 second.")
+            Thread.sleep(1000)
+        }
+        assertEquals("1", result[0][2])
+        sql """drop catalog ${catalog_name}"""
+
         // Test pg
         catalog_name = "test_pg_jdbc_row_count";
         driver_url = 
"https://${bucket}.${s3_endpoint}/regression/jdbc_driver/postgresql-42.5.0.jar";
@@ -76,6 +104,32 @@ suite("test_jdbc_row_count", 
"p0,external,mysql,external_docker,external_docker_
         assertEquals("1026", result[0][2])
         sql """drop catalog ${catalog_name}"""
 
+        // Test pg lower
+        catalog_name = "test_pg_lower_jdbc_row_count";
+        sql """drop catalog if exists ${catalog_name} """
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="postgres",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:postgresql://${externalEnvIp}:${pg_port}/postgres?currentSchema=doris_test&useSSL=false",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "org.postgresql.Driver",
+            "lower_case_meta_names" = "true"
+            );"""
+        sql """use ${catalog_name}.doris_test"""
+        result = sql """show table stats test_lower"""
+        Thread.sleep(1000)
+        for (int i = 0; i < 60; i++) {
+            result = sql """show table stats test_lower""";
+            if (result[0][2] != "-1") {
+                break;
+            }
+            logger.info("Table row count not ready yet. Wait 1 second.")
+            Thread.sleep(1000)
+        }
+        assertEquals("1", result[0][2])
+        sql """drop catalog ${catalog_name}"""
+
         // Test sqlserver
         catalog_name = "test_sqlserver_jdbc_row_count";
         driver_url = 
"https://${bucket}.${s3_endpoint}/regression/jdbc_driver/mssql-jdbc-11.2.3.jre8.jar";
@@ -103,6 +157,32 @@ suite("test_jdbc_row_count", 
"p0,external,mysql,external_docker,external_docker_
         assertEquals("3", result[0][2])
         sql """drop catalog ${catalog_name}"""
 
+        // Test sqlserver lower
+        catalog_name = "test_sqlserver_lower_jdbc_row_count";
+        sql """drop catalog if exists ${catalog_name} """
+        sql """ create catalog if not exists ${catalog_name} properties(
+                    "type"="jdbc",
+                    "user"="sa",
+                    "password"="Doris123456",
+                    "jdbc_url" = 
"jdbc:sqlserver://${externalEnvIp}:${sqlserver_port};encrypt=false;databaseName=doris_test;",
+                    "driver_url" = "${driver_url}",
+                    "driver_class" = 
"com.microsoft.sqlserver.jdbc.SQLServerDriver",
+                    "lower_case_meta_names" = "true"
+        );"""
+        sql """use ${catalog_name}.dbo"""
+        result = sql """show table stats test_lower"""
+        Thread.sleep(1000)
+        for (int i = 0; i < 60; i++) {
+            result = sql """show table stats test_lower""";
+            if (result[0][2] != "-1") {
+                break;
+            }
+            logger.info("Table row count not ready yet. Wait 1 second.")
+            Thread.sleep(1000)
+        }
+        assertEquals("1", result[0][2])
+        sql """drop catalog ${catalog_name}"""
+
         // Test oracle
         catalog_name = "test_oracle_jdbc_row_count";
         String oracle_port = context.config.otherConfigs.get("oracle_11_port");
@@ -132,6 +212,34 @@ suite("test_jdbc_row_count", 
"p0,external,mysql,external_docker,external_docker_
         }
         assertTrue("4".equals(result[0][2]) || "-1".equals(result[0][2]))
         sql """drop catalog ${catalog_name}"""
+
+        // Test oracle lower
+        catalog_name = "test_oracle_lower_jdbc_row_count";
+        sql """drop catalog if exists ${catalog_name} """
+        sql """
+            create catalog if not exists ${catalog_name} properties(
+                    "type"="jdbc",
+                    "user"="doris_test",
+                    "password"="123456",
+                    "jdbc_url" = 
"jdbc:oracle:thin:@${externalEnvIp}:${oracle_port}:${SID}",
+                    "driver_url" = "${driver_url}",
+                    "driver_class" = "oracle.jdbc.driver.OracleDriver",
+                    "lower_case_meta_names" = "true"
+            );
+        """
+        sql """use ${catalog_name}.doris_test"""
+        result = sql """show table stats student"""
+        Thread.sleep(1000)
+        for (int i = 0; i < 30; i++) {
+            result = sql """show table stats student""";
+            if (result[0][2] != "-1") {
+                break;
+            }
+            logger.info("Table row count not ready yet. Wait 1 second.")
+            Thread.sleep(1000)
+        }
+        assertTrue("4".equals(result[0][2]) || "-1".equals(result[0][2]))
+        sql """drop catalog ${catalog_name}"""
     }
 }
 


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

Reply via email to