@@ -20,6 +20,7 @@ use std::sync::Arc;
2020use chrono:: DateTime ;
2121use chrono:: Utc ;
2222use databend_common_ast:: ast:: Expr ;
23+ use databend_common_ast:: ast:: quote:: QuotedIdent ;
2324use databend_common_ast:: parser:: Dialect ;
2425use databend_common_ast:: parser:: parse_comma_separated_exprs;
2526use databend_common_ast:: parser:: tokenize_sql;
@@ -61,6 +62,22 @@ use crate::statistics::BasicColumnStatistics;
6162use crate :: table_args:: TableArgs ;
6263use crate :: table_context:: TableContext ;
6364
65+ pub fn quoted_table_reference (
66+ database_name : & str ,
67+ table_name : & str ,
68+ branch_name : Option < & str > ,
69+ quote : char ,
70+ ) -> String {
71+ let database = QuotedIdent ( database_name, quote) ;
72+ let table = QuotedIdent ( table_name, quote) ;
73+ if let Some ( branch_name) = branch_name {
74+ let branch = QuotedIdent ( branch_name, quote) ;
75+ format ! ( "{database}.{table}/{branch}" )
76+ } else {
77+ format ! ( "{database}.{table}" )
78+ }
79+ }
80+
6481#[ async_trait:: async_trait]
6582pub trait Table : Sync + Send {
6683 fn name ( & self ) -> & str {
@@ -366,9 +383,10 @@ pub trait Table: Sync + Send {
366383 ctx : Arc < dyn TableContext > ,
367384 database_name : & str ,
368385 table_name : & str ,
386+ branch_name : Option < & str > ,
369387 with_options : & str ,
370388 ) -> Result < String > {
371- let ( _, _, _, _) = ( ctx, database_name, table_name, with_options) ;
389+ let ( _, _, _, _, _ ) = ( ctx, database_name, table_name, branch_name , with_options) ;
372390
373391 Err ( ErrorCode :: Unimplemented ( format ! (
374392 "Change tracking operation is not supported for the table '{}', which uses the '{}' engine." ,
@@ -551,6 +569,17 @@ pub enum TimeNavigation {
551569 } ,
552570}
553571
572+ impl TimeNavigation {
573+ pub fn contains_table_tag ( & self ) -> bool {
574+ match self {
575+ TimeNavigation :: TimeTravel ( point) => point. is_table_tag ( ) ,
576+ TimeNavigation :: Changes { at, end, .. } => {
577+ at. is_table_tag ( ) || end. as_ref ( ) . is_some_and ( NavigationPoint :: is_table_tag)
578+ }
579+ }
580+ }
581+ }
582+
554583#[ derive( Debug , Clone , Eq , PartialEq ) ]
555584pub enum NavigationPoint {
556585 SnapshotID ( String ) ,
@@ -559,6 +588,12 @@ pub enum NavigationPoint {
559588 TableTag ( String ) ,
560589}
561590
591+ impl NavigationPoint {
592+ pub fn is_table_tag ( & self ) -> bool {
593+ matches ! ( self , NavigationPoint :: TableTag ( _) )
594+ }
595+ }
596+
562597#[ derive( Debug , Copy , Clone , Default , serde:: Serialize , serde:: Deserialize ) ]
563598pub struct TableStatistics {
564599 pub num_rows : Option < u64 > ,
0 commit comments