You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/07/05 01:57:25 UTC

[doris] branch master updated: [feature-wip](multi-catalog) Add catalog to information_schema table "columns". (#10592)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 73ba806046 [feature-wip](multi-catalog) Add catalog to information_schema table "columns". (#10592)
73ba806046 is described below

commit 73ba806046510629ef3eab48d75b9e9a5263cc0a
Author: Jibing-Li <64...@users.noreply.github.com>
AuthorDate: Tue Jul 5 09:57:19 2022 +0800

    [feature-wip](multi-catalog) Add catalog to information_schema table "columns". (#10592)
---
 .../exec/schema_scanner/schema_columns_scanner.cpp | 22 ++++++++++++++++++++--
 .../apache/doris/service/FrontendServiceImpl.java  |  4 +++-
 gensrc/thrift/FrontendService.thrift               |  1 +
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
index bac45b4ab3..bfa2c93e24 100644
--- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
@@ -192,7 +192,18 @@ Status SchemaColumnsScanner::fill_one_row(Tuple* tuple, MemPool* pool) {
     memset((void*)tuple, 0, _tuple_desc->num_null_bytes());
 
     // TABLE_CATALOG
-    { tuple->set_null(_tuple_desc->slots()[0]->null_indicator_offset()); }
+    {
+        if (!_db_result.__isset.catalogs) {
+            tuple->set_null(_tuple_desc->slots()[0]->null_indicator_offset());
+        } else {
+            void* slot = tuple->get_slot(_tuple_desc->slots()[0]->tuple_offset());
+            StringValue* str_slot = reinterpret_cast<StringValue*>(slot);
+            std::string catalog_name = _db_result.catalogs[_db_index - 1];
+            str_slot->ptr = (char*)pool->allocate(catalog_name.size());
+            str_slot->len = catalog_name.size();
+            memcpy(str_slot->ptr, catalog_name.c_str(), str_slot->len);
+        }
+    }
     // TABLE_SCHEMA
     {
         void* slot = tuple->get_slot(_tuple_desc->slots()[1]->tuple_offset());
@@ -391,6 +402,9 @@ Status SchemaColumnsScanner::fill_one_row(Tuple* tuple, MemPool* pool) {
 Status SchemaColumnsScanner::get_new_desc() {
     TDescribeTableParams desc_params;
     desc_params.__set_db(_db_result.dbs[_db_index - 1]);
+    if (_db_result.__isset.catalogs) {
+        desc_params.__set_catalog(_db_result.catalogs[_db_index - 1]);
+    }
     desc_params.__set_table_name(_table_result.tables[_table_index++]);
     if (nullptr != _param->current_user_ident) {
         desc_params.__set_current_user_ident(*(_param->current_user_ident));
@@ -416,7 +430,11 @@ Status SchemaColumnsScanner::get_new_desc() {
 
 Status SchemaColumnsScanner::get_new_table() {
     TGetTablesParams table_params;
-    table_params.__set_db(_db_result.dbs[_db_index++]);
+    table_params.__set_db(_db_result.dbs[_db_index]);
+    if (_db_result.__isset.catalogs) {
+        table_params.__set_catalog(_db_result.catalogs[_db_index]);
+    }
+    _db_index++;
     if (nullptr != _param->table) {
         table_params.__set_pattern(*(_param->table));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index b8041b03a3..12d9035fd5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -390,7 +390,9 @@ public class FrontendServiceImpl implements FrontendService.Iface {
             return result;
         }
 
-        DatabaseIf<TableIf> db = Catalog.getCurrentCatalog().getCurrentDataSource().getDbNullable(params.db);
+        String catalog = Strings.isNullOrEmpty(params.catalog) ? InternalDataSource.INTERNAL_DS_NAME : params.catalog;
+        DatabaseIf<TableIf> db = Catalog.getCurrentCatalog().getDataSourceMgr()
+                .getCatalogOrException(catalog, ds -> new TException("Unknown catalog " + ds)).getDbNullable(params.db);
         if (db != null) {
             TableIf table = db.getTableNullable(params.getTableName());
             if (table != null) {
diff --git a/gensrc/thrift/FrontendService.thrift b/gensrc/thrift/FrontendService.thrift
index ff59b203ba..2735d3bbc1 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -68,6 +68,7 @@ struct TDescribeTableParams {
   4: optional string user_ip    // deprecated
   5: optional Types.TUserIdentity current_user_ident // to replace the user and user ip
   6: optional bool show_hidden_columns = false
+  7: optional string catalog
 }
 
 // Results of a call to describeTable()


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