Skip to content

Commit 9905c33

Browse files
authored
Merge pull request #9153 from ClSlaid/multiple-catalogs/show-tables
feat: implement show tables (from|in catalog.database)
2 parents 2bcfb67 + a477a5a commit 9905c33

File tree

12 files changed

+230
-116
lines changed

12 files changed

+230
-116
lines changed

src/query/ast/src/ast/statements/table.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use crate::ast::UriLocation;
3030

3131
#[derive(Debug, Clone, PartialEq)] // Tables
3232
pub struct ShowTablesStmt<'a> {
33+
pub catalog: Option<Identifier<'a>>,
3334
pub database: Option<Identifier<'a>>,
3435
pub full: bool,
3536
pub limit: Option<ShowLimit<'a>>,
@@ -47,7 +48,11 @@ impl Display for ShowTablesStmt<'_> {
4748
write!(f, " HISTORY")?;
4849
}
4950
if let Some(database) = &self.database {
50-
write!(f, " FROM {database}")?;
51+
write!(f, " FROM ")?;
52+
if let Some(catalog) = &self.catalog {
53+
write!(f, "{catalog}.",)?;
54+
}
55+
write!(f, "{database}")?;
5156
}
5257
if let Some(limit) = &self.limit {
5358
write!(f, " {limit}")?;

src/query/ast/src/parser/statement.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,17 @@ pub fn statement(i: Input) -> IResult<StatementMsg> {
332332
);
333333
let show_tables = map(
334334
rule! {
335-
SHOW ~ FULL? ~ TABLES ~ HISTORY? ~ ( ( FROM | IN ) ~ ^#ident )? ~ #show_limit?
335+
SHOW ~ FULL? ~ TABLES ~ HISTORY? ~ ( ( FROM | IN ) ~ #peroid_separated_idents_1_to_2 )? ~ #show_limit?
336336
},
337-
|(_, opt_full, _, opt_history, opt_database, limit)| {
337+
|(_, opt_full, _, opt_history, ctl_db, limit)| {
338+
let (catalog, database) = match ctl_db {
339+
Some((_, (Some(c), d))) => (Some(c), Some(d)),
340+
Some((_, (None, d))) => (None, Some(d)),
341+
_ => (None, None),
342+
};
338343
Statement::ShowTables(ShowTablesStmt {
339-
database: opt_database.map(|(_, database)| database),
344+
catalog,
345+
database,
340346
full: opt_full.is_some(),
341347
limit,
342348
with_history: opt_history.is_some(),

src/query/ast/tests/it/parser.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ fn test_statement() {
6767
r#"show databases format TabSeparatedWithNamesAndTypes;"#,
6868
r#"show tables"#,
6969
r#"show tables format TabSeparatedWithNamesAndTypes;"#,
70+
r#"show full tables"#,
71+
r#"show full tables from db"#,
72+
r#"show full tables from ctl.db"#,
7073
r#"show processlist;"#,
7174
r#"show create table a.b;"#,
7275
r#"show create table a.b format TabSeparatedWithNamesAndTypes;"#,

src/query/ast/tests/it/testdata/statement.txt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ SHOW TABLES
3737
---------- AST ------------
3838
ShowTables(
3939
ShowTablesStmt {
40+
catalog: None,
4041
database: None,
4142
full: false,
4243
limit: None,
@@ -52,6 +53,7 @@ SHOW TABLES
5253
---------- AST ------------
5354
ShowTables(
5455
ShowTablesStmt {
56+
catalog: None,
5557
database: None,
5658
full: false,
5759
limit: None,
@@ -64,6 +66,72 @@ ShowTables(
6466
Some(
6567
"TabSeparatedWithNamesAndTypes",
6668
)
69+
---------- Input ----------
70+
show full tables
71+
---------- Output ---------
72+
SHOW FULL TABLES
73+
---------- AST ------------
74+
ShowTables(
75+
ShowTablesStmt {
76+
catalog: None,
77+
database: None,
78+
full: true,
79+
limit: None,
80+
with_history: false,
81+
},
82+
)
83+
84+
85+
---------- Input ----------
86+
show full tables from db
87+
---------- Output ---------
88+
SHOW FULL TABLES FROM db
89+
---------- AST ------------
90+
ShowTables(
91+
ShowTablesStmt {
92+
catalog: None,
93+
database: Some(
94+
Identifier {
95+
name: "db",
96+
quote: None,
97+
span: Ident(22..24),
98+
},
99+
),
100+
full: true,
101+
limit: None,
102+
with_history: false,
103+
},
104+
)
105+
106+
107+
---------- Input ----------
108+
show full tables from ctl.db
109+
---------- Output ---------
110+
SHOW FULL TABLES FROM ctl.db
111+
---------- AST ------------
112+
ShowTables(
113+
ShowTablesStmt {
114+
catalog: Some(
115+
Identifier {
116+
name: "ctl",
117+
quote: None,
118+
span: Ident(22..25),
119+
},
120+
),
121+
database: Some(
122+
Identifier {
123+
name: "db",
124+
quote: None,
125+
span: Ident(26..28),
126+
},
127+
),
128+
full: true,
129+
limit: None,
130+
with_history: false,
131+
},
132+
)
133+
134+
67135
---------- Input ----------
68136
show processlist;
69137
---------- Output ---------

src/query/service/tests/it/servers/http/http_query_handlers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ async fn test_simple_sql() -> Result<()> {
137137
assert!(result.schema.is_some(), "{:?}", result);
138138
assert_eq!(
139139
result.schema.as_ref().unwrap().fields().len(),
140-
10,
140+
11,
141141
"{:?}",
142142
result
143143
);

src/query/service/tests/it/storages/system.rs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -321,13 +321,13 @@ async fn test_tables_table() -> Result<()> {
321321
let stream = table.read_data_block_stream(ctx, &source_plan).await?;
322322
let result = stream.try_collect::<Vec<_>>().await?;
323323
let block = &result[0];
324-
assert_eq!(block.num_columns(), 10);
324+
assert_eq!(block.num_columns(), 11);
325325

326326
// check column "dropped_on"
327327
for x in &result {
328328
for row in 0..x.num_rows() {
329-
// index of column dropped_on is 5
330-
let column = x.column(5);
329+
// index of column dropped_on is 6
330+
let column = x.column(6);
331331
let str = column.get_checked(row)?.to_string();
332332
// All of them should be NULL
333333
assert_eq!("NULL", str)
@@ -341,38 +341,38 @@ async fn test_tables_table() -> Result<()> {
341341
}
342342

343343
let expected = vec![
344-
r"\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
345-
r"\| database \| name \| engine \| cluster_by \| created_on \| num_rows \| data_size \| data_compressed_size \| index_size \|",
346-
r"\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
347-
r"\| information_schema \| columns \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
348-
r"\| information_schema \| keywords \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
349-
r"\| information_schema \| schemata \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
350-
r"\| information_schema \| tables \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
351-
r"\| information_schema \| views \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
352-
r"\| system \| catalogs \| SystemCatalogs \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
353-
r"\| system \| clustering_history \| SystemLogTable \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
354-
r"\| system \| clusters \| SystemClusters \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
355-
r"\| system \| columns \| SystemColumns \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
356-
r"\| system \| configs \| SystemConfigs \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
357-
r"\| system \| malloc_stats \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
358-
r"\| system \| malloc_stats_totals \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
359-
r"\| system \| contributors \| SystemContributors \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
360-
r"\| system \| credits \| SystemCredits \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
361-
r"\| system \| databases \| SystemDatabases \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
362-
r"\| system \| engines \| SystemEngines \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
363-
r"\| system \| functions \| SystemFunctions \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
364-
r"\| system \| metrics \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
365-
r"\| system \| one \| SystemOne \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
366-
r"\| system \| processes \| SystemProcesses \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
367-
r"\| system \| query_log \| SystemLogTable \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
368-
r"\| system \| roles \| SystemRoles \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
369-
r"\| system \| settings \| SystemSettings \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
370-
r"\| system \| stages \| SystemStages \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
371-
r"\| system \| tables \| SystemTables \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
372-
r"\| system \| tables_with_history \| SystemTables \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
373-
r"\| system \| tracing \| SystemTracing \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
374-
r"\| system \| users \| SystemUsers \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
375-
r"\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
344+
r"\+---------\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
345+
r"\| catalog \| database \| name \| engine \| cluster_by \| created_on \| num_rows \| data_size \| data_compressed_size \| index_size \|",
346+
r"\+---------\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
347+
r"\| default \| information_schema \| columns \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
348+
r"\| default \| information_schema \| keywords \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
349+
r"\| default \| information_schema \| schemata \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
350+
r"\| default \| information_schema \| tables \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
351+
r"\| default \| information_schema \| views \| VIEW \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
352+
r"\| default \| system \| catalogs \| SystemCatalogs \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
353+
r"\| default \| system \| clustering_history \| SystemLogTable \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
354+
r"\| default \| system \| clusters \| SystemClusters \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
355+
r"\| default \| system \| columns \| SystemColumns \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
356+
r"\| default \| system \| configs \| SystemConfigs \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
357+
r"\| default \| system \| malloc_stats \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
358+
r"\| default \| system \| malloc_stats_totals \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
359+
r"\| default \| system \| contributors \| SystemContributors \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
360+
r"\| default \| system \| credits \| SystemCredits \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
361+
r"\| default \| system \| databases \| SystemDatabases \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
362+
r"\| default \| system \| engines \| SystemEngines \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
363+
r"\| default \| system \| functions \| SystemFunctions \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
364+
r"\| default \| system \| metrics \| SystemMetrics \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
365+
r"\| default \| system \| one \| SystemOne \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
366+
r"\| default \| system \| processes \| SystemProcesses \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
367+
r"\| default \| system \| query_log \| SystemLogTable \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
368+
r"\| default \| system \| roles \| SystemRoles \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
369+
r"\| default \| system \| settings \| SystemSettings \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
370+
r"\| default \| system \| stages \| SystemStages \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
371+
r"\| default \| system \| tables \| SystemTables \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
372+
r"\| default \| system \| tables_with_history \| SystemTables \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
373+
r"\| default \| system \| tracing \| SystemTracing \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
374+
r"\| default \| system \| users \| SystemUsers \| \| \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [\+-]\d{4} \| NULL \| NULL \| NULL \| NULL \|",
375+
r"\+---------\+--------------------\+---------------------\+--------------------\+------------\+-------------------------------\+----------\+-----------\+----------------------\+------------\+",
376376
];
377377
common_datablocks::assert_blocks_sorted_eq_with_regex(expected, without_dropped.as_slice());
378378
// may need a method to work with regex

0 commit comments

Comments
 (0)