File tree Expand file tree Collapse file tree 4 files changed +42
-0
lines changed Expand file tree Collapse file tree 4 files changed +42
-0
lines changed Original file line number Diff line number Diff line change @@ -3239,6 +3239,9 @@ pub enum Statement {
32393239 ///
32403240 /// [SQLite](https://sqlite.org/lang_explain.html)
32413241 query_plan : bool ,
3242+ /// `EXPLAIN ESTIMATE`
3243+ /// [Clickhouse](https://clickhouse.com/docs/en/sql-reference/statements/explain#explain-estimate)
3244+ estimate : bool ,
32423245 /// A SQL query that specifies what to explain
32433246 statement : Box < Statement > ,
32443247 /// Optional output format of explain
@@ -3471,6 +3474,7 @@ impl fmt::Display for Statement {
34713474 verbose,
34723475 analyze,
34733476 query_plan,
3477+ estimate,
34743478 statement,
34753479 format,
34763480 options,
@@ -3483,6 +3487,9 @@ impl fmt::Display for Statement {
34833487 if * analyze {
34843488 write ! ( f, "ANALYZE " ) ?;
34853489 }
3490+ if * estimate {
3491+ write ! ( f, "ESTIMATE " ) ?;
3492+ }
34863493
34873494 if * verbose {
34883495 write ! ( f, "VERBOSE " ) ?;
Original file line number Diff line number Diff line change @@ -298,6 +298,7 @@ define_keywords!(
298298 ERROR ,
299299 ESCAPE ,
300300 ESCAPED ,
301+ ESTIMATE ,
301302 EVENT ,
302303 EVERY ,
303304 EXCEPT ,
Original file line number Diff line number Diff line change @@ -9091,6 +9091,7 @@ impl<'a> Parser<'a> {
90919091 let mut analyze = false;
90929092 let mut verbose = false;
90939093 let mut query_plan = false;
9094+ let mut estimate = false;
90949095 let mut format = None;
90959096 let mut options = None;
90969097
@@ -9103,6 +9104,8 @@ impl<'a> Parser<'a> {
91039104 options = Some(self.parse_utility_options()?)
91049105 } else if self.parse_keywords(&[Keyword::QUERY, Keyword::PLAN]) {
91059106 query_plan = true;
9107+ } else if self.parse_keyword(Keyword::ESTIMATE) {
9108+ estimate = true;
91069109 } else {
91079110 analyze = self.parse_keyword(Keyword::ANALYZE);
91089111 verbose = self.parse_keyword(Keyword::VERBOSE);
@@ -9120,6 +9123,7 @@ impl<'a> Parser<'a> {
91209123 analyze,
91219124 verbose,
91229125 query_plan,
9126+ estimate,
91239127 statement: Box::new(statement),
91249128 format,
91259129 options,
Original file line number Diff line number Diff line change @@ -4375,6 +4375,7 @@ fn run_explain_analyze(
43754375 analyze,
43764376 verbose,
43774377 query_plan,
4378+ estimate,
43784379 statement,
43794380 format,
43804381 options,
@@ -4384,6 +4385,7 @@ fn run_explain_analyze(
43844385 assert_eq ! ( format, expected_format) ;
43854386 assert_eq ! ( options, exepcted_options) ;
43864387 assert ! ( !query_plan) ;
4388+ assert ! ( !estimate) ;
43874389 assert_eq ! ( "SELECT sqrt(id) FROM foo" , statement. to_string( ) ) ;
43884390 }
43894391 _ => panic ! ( "Unexpected Statement, must be Explain" ) ,
@@ -4528,6 +4530,34 @@ fn parse_explain_query_plan() {
45284530 ) ;
45294531}
45304532
4533+ #[ test]
4534+ fn parse_explain_estimate ( ) {
4535+ let statement = all_dialects ( ) . verified_stmt ( "EXPLAIN ESTIMATE SELECT sqrt(id) FROM foo" ) ;
4536+
4537+ match & statement {
4538+ Statement :: Explain {
4539+ query_plan,
4540+ estimate,
4541+ analyze,
4542+ verbose,
4543+ statement,
4544+ ..
4545+ } => {
4546+ assert ! ( estimate) ;
4547+ assert ! ( !query_plan) ;
4548+ assert ! ( !analyze) ;
4549+ assert ! ( !verbose) ;
4550+ assert_eq ! ( "SELECT sqrt(id) FROM foo" , statement. to_string( ) ) ;
4551+ }
4552+ _ => unreachable ! ( ) ,
4553+ }
4554+
4555+ assert_eq ! (
4556+ "EXPLAIN ESTIMATE SELECT sqrt(id) FROM foo" ,
4557+ statement. to_string( )
4558+ ) ;
4559+ }
4560+
45314561#[ test]
45324562fn parse_named_argument_function ( ) {
45334563 let dialects = all_dialects_where ( |d| {
You can’t perform that action at this time.
0 commit comments