-
Notifications
You must be signed in to change notification settings - Fork 556
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: support INSERT INTO [TABLE] FUNCTION
of Clickhouse
#1633
base: main
Are you sure you want to change the base?
Conversation
d4ac9e2
to
123d574
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @byte-sourcerer!
@@ -470,8 +470,7 @@ pub struct Insert { | |||
/// INTO - optional keyword | |||
pub into: bool, | |||
/// TABLE | |||
#[cfg_attr(feature = "visitor", visit(with = "visit_relation"))] | |||
pub table_name: ObjectName, | |||
pub table_object: TableObject, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pub table_object: TableObject, | |
pub table: TableObject, |
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] | ||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] | ||
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))] | ||
pub enum TableObject { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we include a doc comment mentionign this is the target of an insert table statement? And then for the variants that it can either be a tablename or function with example SQL? That would make it easy for folks to get an overview of the struct without having to dig into the code or test out manually
@@ -8857,6 +8857,23 @@ impl<'a> Parser<'a> { | |||
} | |||
} | |||
|
|||
pub fn parse_table_object( | |||
&mut self, | |||
in_table_clause: bool, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the in_table_clause
flag needed? I imagine it'll always be false
@@ -8857,6 +8857,23 @@ impl<'a> Parser<'a> { | |||
} | |||
} | |||
|
|||
pub fn parse_table_object( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we add a doc comment for this given its a public method?
&mut self, | ||
in_table_clause: bool, | ||
) -> Result<TableObject, ParserError> { | ||
if dialect_of!(self is ClickHouseDialect) && self.parse_keyword(Keyword::FUNCTION) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use a dialect method for this? e.g.
if self.dialect.supports_function_table_objects() && self.parse_keyword(keyword::FUNCTION)
pub fn parse_table_function(&mut self) -> Result<Function, ParserError> { | ||
let fn_name = self.parse_object_name(false)?; | ||
self.parse_function_call(fn_name) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm wondering if its worth having this as a standalone method? It looks like it can be inlined given its only 2 LOC?
@@ -222,6 +222,11 @@ fn parse_create_table() { | |||
); | |||
} | |||
|
|||
#[test] | |||
fn parse_insert_into_function() { | |||
clickhouse().verified_stmt(r#"INSERT INTO TABLE FUNCTION remote('localhost', default.simple_table) VALUES (100, 'inserted via remote()')"#); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we add a similar test case without the TABLE
keyword?
Support
INSERT INTO [TABLE] FUNCTION
of Clickhouse.