From 00f5db9bc7f57a17e521190a88f4b561385ff2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Fri, 19 Apr 2024 08:25:41 +0200 Subject: [PATCH 1/8] ebnf select --- sql-statements/sql-statement-select.md | 80 ++++++++++---------------- 1 file changed, 31 insertions(+), 49 deletions(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 3c7a2321724f4..5d97d9709c9db 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -9,82 +9,64 @@ The `SELECT` statement is used to read data from TiDB. ## Synopsis -**SelectStmt:** - -![SelectStmt](/media/sqlgram/SelectStmt.png) - -**FromDual:** - -![FromDual](/media/sqlgram/FromDual.png) - -**SelectStmtOpts:** - -![SelectStmtOpts](/media/sqlgram/SelectStmtOpts.png) +```ebnf+diagram +SelectStmt ::= + ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) + OrderByOptional SelectStmtLimit SelectLockOpt SelectStmtIntoOption -**SelectStmtFieldList:** +FromDual ::= + "FROM" "DUAL" -![SelectStmtFieldList](/media/sqlgram/SelectStmtFieldList.png) +SelectStmtOpts ::= + TableOptimizerHints DefaultFalseDistictOpt PriorityOpt SelectStmtSQLSmallResult + SelectStmtSQLBigResult SelectStmtSQLBufferResult SelectStmtSQLCache SelectStmtCalcFoundRows + SelectStmtStraightJoin -**TableRefsClause:** +SelectStmtFieldList ::= + Field ("," Field)* -```ebnf+diagram TableRefsClause ::= TableRef AsOfClause? ( ',' TableRef AsOfClause? )* AsOfClause ::= 'AS' 'OF' 'TIMESTAMP' Expression -``` - -**WhereClauseOptional:** - -![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png) - -**SelectStmtGroup:** -![SelectStmtGroup](/media/sqlgram/SelectStmtGroup.png) +WhereClauseOptional ::= + WhereClause? -**HavingClause:** +SelectStmtGroup ::= + GroupByClause? -![HavingClause](/media/sqlgram/HavingClause.png) +HavingClause ::= + ( "HAVING" Expression)? -**OrderByOptional:** -![OrderByOptional](/media/sqlgram/OrderByOptional.png) +OrderByOptional ::= + OrderBy? -**SelectStmtLimit:** +SelectStmtLimit ::= + ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? +| "FETCH" FirstOrNext FetchFirstOpt RowOrRows "ONLY" ) -![SelectStmtLimit](/media/sqlgram/SelectStmtLimit.png) +FirstOrNext ::= + ("FIRST" | "NEXT") -**FirstOrNext:** +FetchFirstOpt ::= + LimitOption? -![FirstOrNext](/media/sqlgram/FirstOrNext.png) +RowOrRows ::= + ("ROW" | "ROWS") -**FetchFirstOpt:** - -![FetchFirstOpt](/media/sqlgram/FetchFirstOpt.png) - -**RowOrRows:** - -![RowOrRows](/media/sqlgram/RowOrRows.png) - -**SelectLockOpt:** - -```ebnf+diagram SelectLockOpt ::= ( ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? ) | ( 'LOCK' 'IN' 'SHARE' 'MODE' ) )? TableList ::= TableName ( ',' TableName )* -``` - -**WindowClauseOptional** -![WindowClauseOptional](/media/sqlgram/WindowClauseOptional.png) +WindowClauseOptional ::= + "WINDOW" WindowDefinition ("," WindowDefinition)* -**TableSampleOpt** - -```ebnf+diagram TableSampleOpt ::= 'TABLESAMPLE' 'REGIONS()' ``` From 52e0f9fdc1301764769b5f2e00171f5d6429da09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Fri, 19 Apr 2024 08:39:56 +0200 Subject: [PATCH 2/8] Updates --- sql-statements/sql-statement-select.md | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 5d97d9709c9db..7ed5a50834564 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -12,7 +12,7 @@ The `SELECT` statement is used to read data from TiDB. ```ebnf+diagram SelectStmt ::= ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) - OrderByOptional SelectStmtLimit SelectLockOpt SelectStmtIntoOption + OrderBy? SelectStmtLimit? SelectLockOpt? SelectStmtIntoOption FromDual ::= "FROM" "DUAL" @@ -40,26 +40,13 @@ SelectStmtGroup ::= HavingClause ::= ( "HAVING" Expression)? - -OrderByOptional ::= - OrderBy? - SelectStmtLimit ::= ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? -| "FETCH" FirstOrNext FetchFirstOpt RowOrRows "ONLY" ) - -FirstOrNext ::= - ("FIRST" | "NEXT") - -FetchFirstOpt ::= - LimitOption? - -RowOrRows ::= - ("ROW" | "ROWS") +| "FETCH" ("FIRST" | "NEXT") LimitOption ("ROW" | "ROWS") "ONLY" ) SelectLockOpt ::= - ( ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? ) -| ( 'LOCK' 'IN' 'SHARE' 'MODE' ) )? + ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? +| 'LOCK' 'IN' 'SHARE' 'MODE' ) TableList ::= TableName ( ',' TableName )* From 233adb2d776cb6fd6eadbc72f0426adf052f07cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Fri, 19 Apr 2024 08:52:37 +0200 Subject: [PATCH 3/8] Updates --- sql-statements/sql-statement-select.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 7ed5a50834564..c84dda29ba9ce 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -14,17 +14,20 @@ SelectStmt ::= ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) OrderBy? SelectStmtLimit? SelectLockOpt? SelectStmtIntoOption -FromDual ::= - "FROM" "DUAL" +SelectStmtBasic ::= + "SELECT" SelectStmtOpts Field ("," Field)* ( "HAVING" Expression)? + +SelectStmtFromDualTable ::= + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" "DUAL" WhereClauseOptional + +SelectStmtFromTable ::= + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause WhereClauseOptional SelectStmtGroup HavingClause WindowClauseOptional SelectStmtOpts ::= TableOptimizerHints DefaultFalseDistictOpt PriorityOpt SelectStmtSQLSmallResult SelectStmtSQLBigResult SelectStmtSQLBufferResult SelectStmtSQLCache SelectStmtCalcFoundRows SelectStmtStraightJoin -SelectStmtFieldList ::= - Field ("," Field)* - TableRefsClause ::= TableRef AsOfClause? ( ',' TableRef AsOfClause? )* @@ -37,9 +40,6 @@ WhereClauseOptional ::= SelectStmtGroup ::= GroupByClause? -HavingClause ::= - ( "HAVING" Expression)? - SelectStmtLimit ::= ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? | "FETCH" ("FIRST" | "NEXT") LimitOption ("ROW" | "ROWS") "ONLY" ) From 5021a89c822f32ae47d146f4880c31d24ac2571f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Fri, 19 Apr 2024 09:29:21 +0200 Subject: [PATCH 4/8] Update sql-statements/sql-statement-select.md Co-authored-by: kennytm --- sql-statements/sql-statement-select.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index c84dda29ba9ce..0566c08ae2028 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -55,7 +55,7 @@ WindowClauseOptional ::= "WINDOW" WindowDefinition ("," WindowDefinition)* TableSampleOpt ::= - 'TABLESAMPLE' 'REGIONS()' + 'TABLESAMPLE' 'REGIONS' '(' ')' ``` ## Description of the syntax elements From 848497962f8ec02c3bd8a43121f0ce0a54f5358a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Fri, 19 Apr 2024 12:44:39 +0200 Subject: [PATCH 5/8] Update sql-statements/sql-statement-select.md Co-authored-by: kennytm --- sql-statements/sql-statement-select.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 0566c08ae2028..aab71fb99731f 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -42,7 +42,7 @@ SelectStmtGroup ::= SelectStmtLimit ::= ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? -| "FETCH" ("FIRST" | "NEXT") LimitOption ("ROW" | "ROWS") "ONLY" ) +| "FETCH" ("FIRST" | "NEXT") LimitOption? ("ROW" | "ROWS") "ONLY" ) SelectLockOpt ::= ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? From d02612c34c79cfed219c331890d3d60bf9aa8caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Tue, 30 Apr 2024 09:57:30 +0200 Subject: [PATCH 6/8] Update based on review --- sql-statements/sql-statement-select.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index aab71fb99731f..117fdfbb323de 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -18,10 +18,10 @@ SelectStmtBasic ::= "SELECT" SelectStmtOpts Field ("," Field)* ( "HAVING" Expression)? SelectStmtFromDualTable ::= - "SELECT" SelectStmtOpts Field ("," Field)* "FROM" "DUAL" WhereClauseOptional + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" "DUAL" WhereClause? SelectStmtFromTable ::= - "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause WhereClauseOptional SelectStmtGroup HavingClause WindowClauseOptional + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause WhereClauseOptional GroupByClause? HavingClause WindowClause? SelectStmtOpts ::= TableOptimizerHints DefaultFalseDistictOpt PriorityOpt SelectStmtSQLSmallResult @@ -34,12 +34,6 @@ TableRefsClause ::= AsOfClause ::= 'AS' 'OF' 'TIMESTAMP' Expression -WhereClauseOptional ::= - WhereClause? - -SelectStmtGroup ::= - GroupByClause? - SelectStmtLimit ::= ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? | "FETCH" ("FIRST" | "NEXT") LimitOption? ("ROW" | "ROWS") "ONLY" ) From 2f4b57f99975894389d665ccfc037c8df3ef3c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Tue, 30 Apr 2024 10:00:29 +0200 Subject: [PATCH 7/8] Another update --- sql-statements/sql-statement-select.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 117fdfbb323de..1ab651c4e54ba 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -21,7 +21,8 @@ SelectStmtFromDualTable ::= "SELECT" SelectStmtOpts Field ("," Field)* "FROM" "DUAL" WhereClause? SelectStmtFromTable ::= - "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause WhereClauseOptional GroupByClause? HavingClause WindowClause? + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause + WhereClause? GroupByClause? ( "HAVING" Expression)? WindowClause? SelectStmtOpts ::= TableOptimizerHints DefaultFalseDistictOpt PriorityOpt SelectStmtSQLSmallResult From e7808d048531ab2813fabec05e315730586ff0f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Tue, 30 Apr 2024 10:01:48 +0200 Subject: [PATCH 8/8] Update WindowClause --- sql-statements/sql-statement-select.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 1ab651c4e54ba..188dd76d06d0c 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -46,7 +46,7 @@ SelectLockOpt ::= TableList ::= TableName ( ',' TableName )* -WindowClauseOptional ::= +WindowClause ::= "WINDOW" WindowDefinition ("," WindowDefinition)* TableSampleOpt ::=