From 457d2a620c73f48be618c5d6fc318dc4c3aa20d6 Mon Sep 17 00:00:00 2001 From: jeremyhi Date: Sat, 8 Mar 2025 19:53:15 +0800 Subject: [PATCH] feat: add get table api --- Cargo.lock | 4 +++ src/sst-convert/Cargo.toml | 4 +++ src/sst-convert/src/table.rs | 55 ++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index eeee32a6bc..2885e3e5bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11207,10 +11207,14 @@ dependencies = [ name = "sst-convert" version = "0.13.0" dependencies = [ + "catalog", + "common-meta", + "meta-client", "mito2", "object-store", "snafu 0.8.5", "store-api", + "table", ] [[package]] diff --git a/src/sst-convert/Cargo.toml b/src/sst-convert/Cargo.toml index 2e71c2bf21..73c5a6f03c 100644 --- a/src/sst-convert/Cargo.toml +++ b/src/sst-convert/Cargo.toml @@ -5,10 +5,14 @@ edition.workspace = true license.workspace = true [dependencies] +catalog.workspace = true +common-meta.workspace = true +meta-client.workspace = true mito2.workspace = true object-store.workspace = true snafu.workspace = true store-api.workspace = true +table.workspace = true [lints] workspace = true diff --git a/src/sst-convert/src/table.rs b/src/sst-convert/src/table.rs index e05bec46bf..254dac6465 100644 --- a/src/sst-convert/src/table.rs +++ b/src/sst-convert/src/table.rs @@ -13,3 +13,58 @@ // limitations under the License. //! Utilities to get table metadata. + +use std::sync::Arc; + +use catalog::kvbackend::MetaKvBackend; +use common_meta::key::table_info::TableInfoValue; +use common_meta::key::table_name::TableNameKey; +use common_meta::key::{TableMetadataManager, TableMetadataManagerRef}; +use meta_client::{MetaClientOptions, MetaClientType}; + +pub struct TableMetadataHelper { + table_metadata_manager: TableMetadataManagerRef, +} + +impl TableMetadataHelper { + pub async fn new(meta_options: &MetaClientOptions) -> Self { + let backend = build_kv_backend(meta_options).await; + let table_metadata_manager = Arc::new(TableMetadataManager::new(Arc::new(backend))); + Self { + table_metadata_manager, + } + } + + /// Get table info. + pub async fn get_table( + &self, + catalog: &str, + schema: &str, + table: &str, + ) -> Option { + let table_name = TableNameKey::new(catalog, schema, table); + let table_id = self + .table_metadata_manager + .table_name_manager() + .get(table_name) + .await + .unwrap() + .map(|v| v.table_id()) + .unwrap(); + + self.table_metadata_manager + .table_info_manager() + .get(table_id) + .await + .unwrap() + .map(|v| v.into_inner()) + } +} + +async fn build_kv_backend(meta_options: &MetaClientOptions) -> MetaKvBackend { + let meta_client = meta_client::create_meta_client(MetaClientType::Frontend, meta_options) + .await + .unwrap(); + + MetaKvBackend::new(meta_client) +}