Skip to content

Commit f2dfc09

Browse files
authored
sql-statements: use EBNF to render syntax diagrams - second batch (#5531)
1 parent 67d4dda commit f2dfc09

25 files changed

+378
-351
lines changed

sql-statements/sql-statement-begin.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ In the absence of a `BEGIN` statement, every statement will by default autocommi
1212

1313
## Synopsis
1414

15-
**BeginTransactionStmt:**
16-
17-
![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png)
15+
```ebnf+diagram
16+
BeginTransactionStmt ::=
17+
'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )?
18+
| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' )?
19+
```
1820

1921
## Examples
2022

sql-statements/sql-statement-change-column.md

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,42 @@ The `ALTER TABLE.. CHANGE COLUMN` statement changes a column on an existing tabl
1010

1111
## Synopsis
1212

13-
**AlterTableStmt:**
14-
15-
![AlterTableStmt](/media/sqlgram/AlterTableStmt.png)
16-
17-
**AlterTableSpec:**
18-
19-
![AlterTableSpec](/media/sqlgram/AlterTableSpec.png)
20-
21-
**ColumnName:**
22-
23-
![ColumnName](/media/sqlgram/ColumnName.png)
24-
25-
**ColumnDef:**
26-
27-
![ColumnDef](/media/sqlgram/ColumnDef.png)
28-
29-
**ColumnPosition:**
30-
31-
![ColumnPosition](/media/sqlgram/ColumnPosition.png)
13+
```ebnf+diagram
14+
AlterTableStmt ::=
15+
'ALTER' IgnoreOptional 'TABLE' TableName ( AlterTableSpecListOpt AlterTablePartitionOpt | 'ANALYZE' 'PARTITION' PartitionNameList ( 'INDEX' IndexNameList )? AnalyzeOptionListOpt )
16+
17+
AlterTableSpec ::=
18+
TableOptionList
19+
| 'SET' 'TIFLASH' 'REPLICA' LengthNum LocationLabelList
20+
| 'CONVERT' 'TO' CharsetKw ( CharsetName | 'DEFAULT' ) OptCollate
21+
| 'ADD' ( ColumnKeywordOpt IfNotExists ( ColumnDef ColumnPosition | '(' TableElementList ')' ) | Constraint | 'PARTITION' IfNotExists NoWriteToBinLogAliasOpt ( PartitionDefinitionListOpt | 'PARTITIONS' NUM ) )
22+
| ( ( 'CHECK' | 'TRUNCATE' ) 'PARTITION' | ( 'OPTIMIZE' | 'REPAIR' | 'REBUILD' ) 'PARTITION' NoWriteToBinLogAliasOpt ) AllOrPartitionNameList
23+
| 'COALESCE' 'PARTITION' NoWriteToBinLogAliasOpt NUM
24+
| 'DROP' ( ColumnKeywordOpt IfExists ColumnName RestrictOrCascadeOpt | 'PRIMARY' 'KEY' | 'PARTITION' IfExists PartitionNameList | ( KeyOrIndex IfExists | 'CHECK' ) Identifier | 'FOREIGN' 'KEY' IfExists Symbol )
25+
| 'EXCHANGE' 'PARTITION' Identifier 'WITH' 'TABLE' TableName WithValidationOpt
26+
| ( 'IMPORT' | 'DISCARD' ) ( 'PARTITION' AllOrPartitionNameList )? 'TABLESPACE'
27+
| 'REORGANIZE' 'PARTITION' NoWriteToBinLogAliasOpt ReorganizePartitionRuleOpt
28+
| 'ORDER' 'BY' AlterOrderItem ( ',' AlterOrderItem )*
29+
| ( 'DISABLE' | 'ENABLE' ) 'KEYS'
30+
| ( 'MODIFY' ColumnKeywordOpt IfExists | 'CHANGE' ColumnKeywordOpt IfExists ColumnName ) ColumnDef ColumnPosition
31+
| 'ALTER' ( ColumnKeywordOpt ColumnName ( 'SET' 'DEFAULT' ( SignedLiteral | '(' Expression ')' ) | 'DROP' 'DEFAULT' ) | 'CHECK' Identifier EnforcedOrNot | 'INDEX' Identifier IndexInvisible )
32+
| 'RENAME' ( ( 'COLUMN' | KeyOrIndex ) Identifier 'TO' Identifier | ( 'TO' | '='? | 'AS' ) TableName )
33+
| LockClause
34+
| AlgorithmClause
35+
| 'FORCE'
36+
| ( 'WITH' | 'WITHOUT' ) 'VALIDATION'
37+
| 'SECONDARY_LOAD'
38+
| 'SECONDARY_UNLOAD'
39+
40+
ColumnName ::=
41+
Identifier ( '.' Identifier ( '.' Identifier )? )?
42+
43+
ColumnDef ::=
44+
ColumnName ( Type | 'SERIAL' ) ColumnOptionListOpt
45+
46+
ColumnPosition ::=
47+
( 'FIRST' | 'AFTER' ColumnName )?
48+
```
3249

3350
## Examples
3451

sql-statements/sql-statement-commit.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ In the absence of a `BEGIN` or `START TRANSACTION` statement, the default behavi
1212

1313
## Synopsis
1414

15-
**CommitStmt:**
15+
```ebnf+diagram
16+
CommitStmt ::=
17+
'COMMIT' CompletionTypeWithinTransaction?
1618
17-
![CommitStmt](/media/sqlgram/CommitStmt.png)
18-
19-
**CompletionTypeWithinTransaction:**
20-
21-
![CompletionTypeWithinTransaction](/media/sqlgram/CompletionTypeWithinTransaction.png)
19+
CompletionTypeWithinTransaction ::=
20+
'AND' ( 'CHAIN' ( 'NO' 'RELEASE' )? | 'NO' 'CHAIN' ( 'NO'? 'RELEASE' )? )
21+
| 'NO'? 'RELEASE'
22+
```
2223

2324
## Examples
2425

sql-statements/sql-statement-create-binding.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@ The bound SQL statement is parameterized and stored in the system table. When a
1414

1515
## Synopsis
1616

17-
**CreateBindingStmt:**
17+
```ebnf+diagram
18+
CreateBindingStmt ::=
19+
'CREATE' GlobalScope 'BINDING' 'FOR' SelectStmt 'USING' SelectStmt
1820
19-
![CreateBindingStmt](/media/sqlgram/CreateBindingStmt.png)
21+
GlobalScope ::=
22+
( 'GLOBAL' | 'SESSION' )?
2023
21-
**GlobalScope:**
22-
23-
![GlobalScope](/media/sqlgram/GlobalScope.png)
24-
25-
**SelectStmt**
26-
27-
![SelectStmt](/media/sqlgram/SelectStmt.png)
24+
SelectStmt ::=
25+
( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) OrderByOptional SelectStmtLimit SelectLockOpt SelectStmtIntoOption
26+
```
2827

2928
****
3029

@@ -142,4 +141,4 @@ This statement is a TiDB extension to MySQL syntax.
142141
* [SHOW [GLOBAL|SESSION] BINDINGS](/sql-statements/sql-statement-show-bindings.md)
143142
* [ANALYZE TABLE](/sql-statements/sql-statement-analyze-table.md)
144143
* [Optimizer Hints](/optimizer-hints.md)
145-
* [SQL Plan Management](/sql-plan-management.md)
144+
* [SQL Plan Management](/sql-plan-management.md)

sql-statements/sql-statement-create-database.md

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,19 @@ This statement creates a new database in TiDB. The MySQL terminology for 'databa
1010

1111
## Synopsis
1212

13-
**CreateDatabaseStmt:**
13+
```ebnf+diagram
14+
CreateDatabaseStmt ::=
15+
'CREATE' 'DATABASE' IfNotExists DBName DatabaseOptionListOpt
1416
15-
![CreateDatabaseStmt](/media/sqlgram/CreateDatabaseStmt.png)
17+
IfNotExists ::=
18+
( 'IF' 'NOT' 'EXISTS' )?
1619
17-
**IfNotExists:**
20+
DBName ::=
21+
Identifier
1822
19-
![IfNotExists](/media/sqlgram/IfNotExists.png)
20-
21-
**DBName:**
22-
23-
![DBName](/media/sqlgram/DBName.png)
24-
25-
**DatabaseOptionListOpt:**
26-
27-
![DatabaseOptionListOpt](/media/sqlgram/DatabaseOptionListOpt.png)
23+
DatabaseOptionListOpt ::=
24+
DatabaseOptionList?
25+
```
2826

2927
## Syntax
3028

sql-statements/sql-statement-create-index.md

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,65 +10,58 @@ This statement adds a new index to an existing table. It is an alternative synta
1010

1111
## Synopsis
1212

13-
**CreateIndexStmt:**
13+
```ebnf+diagram
14+
CreateIndexStmt ::=
15+
'CREATE' IndexKeyTypeOpt 'INDEX' IfNotExists Identifier IndexTypeOpt 'ON' TableName '(' IndexPartSpecificationList ')' IndexOptionList IndexLockAndAlgorithmOpt
1416
15-
![CreateIndexStmt](/media/sqlgram/CreateIndexStmt.png)
17+
IndexKeyTypeOpt ::=
18+
( 'UNIQUE' | 'SPATIAL' | 'FULLTEXT' )?
1619
17-
**IndexKeyTypeOpt:**
20+
IfNotExists ::=
21+
( 'IF' 'NOT' 'EXISTS' )?
1822
19-
![IndexKeyTypeOpt](/media/sqlgram/IndexKeyTypeOpt.png)
23+
IndexTypeOpt ::=
24+
IndexType?
2025
21-
**IfNotExists:**
26+
IndexPartSpecificationList ::=
27+
IndexPartSpecification ( ',' IndexPartSpecification )*
2228
23-
![IfNotExists](/media/sqlgram/IfNotExists.png)
29+
IndexOptionList ::=
30+
IndexOption*
2431
25-
**IndexTypeOpt:**
32+
IndexLockAndAlgorithmOpt ::=
33+
( LockClause AlgorithmClause? | AlgorithmClause LockClause? )?
2634
27-
![IndexTypeOpt](/media/sqlgram/IndexTypeOpt.png)
35+
IndexType ::=
36+
( 'USING' | 'TYPE' ) IndexTypeName
2837
29-
**IndexPartSpecificationList:**
38+
IndexPartSpecification ::=
39+
( ColumnName OptFieldLen | '(' Expression ')' ) Order
3040
31-
![IndexPartSpecificationList](/media/sqlgram/IndexPartSpecificationList.png)
41+
IndexOption ::=
42+
'KEY_BLOCK_SIZE' '='? LengthNum
43+
| IndexType
44+
| 'WITH' 'PARSER' Identifier
45+
| 'COMMENT' stringLit
46+
| IndexInvisible
3247
33-
**IndexOptionList:**
48+
IndexTypeName ::=
49+
'BTREE'
50+
| 'HASH'
51+
| 'RTREE'
3452
35-
![IndexOptionList](/media/sqlgram/IndexOptionList.png)
53+
ColumnName ::=
54+
Identifier ( '.' Identifier ( '.' Identifier )? )?
3655
37-
**IndexLockAndAlgorithmOpt:**
56+
OptFieldLen ::=
57+
FieldLen?
3858
39-
![IndexLockAndAlgorithmOpt](/media/sqlgram/IndexLockAndAlgorithmOpt.png)
59+
IndexNameList ::=
60+
( Identifier | 'PRIMARY' )? ( ',' ( Identifier | 'PRIMARY' ) )*
4061
41-
**IndexType:**
42-
43-
![IndexType](/media/sqlgram/IndexType.png)
44-
45-
**IndexPartSpecification:**
46-
47-
![IndexPartSpecification](/media/sqlgram/IndexPartSpecification.png)
48-
49-
**IndexOption:**
50-
51-
![IndexOption](/media/sqlgram/IndexOption.png)
52-
53-
**IndexTypeName:**
54-
55-
![IndexTypeName](/media/sqlgram/IndexTypeName.png)
56-
57-
**ColumnName:**
58-
59-
![ColumnName](/media/sqlgram/ColumnName.png)
60-
61-
**OptFieldLen:**
62-
63-
![OptFieldLen](/media/sqlgram/OptFieldLen.png)
64-
65-
**IndexNameList:**
66-
67-
![IndexNameList](/media/sqlgram/IndexNameList.png)
68-
69-
**KeyOrIndex:**
70-
71-
![KeyOrIndex](/media/sqlgram/KeyOrIndex.png)
62+
KeyOrIndex ::=
63+
'Key' | 'Index'
64+
```
7265

7366
## Examples
7467

sql-statements/sql-statement-create-role.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ This statement creates a new role, which can be assigned to users as part of rol
99

1010
## Synopsis
1111

12-
**CreateRoleStmt:**
12+
```ebnf+diagram
13+
CreateRoleStmt ::=
14+
'CREATE' 'ROLE' IfNotExists RoleSpec (',' RoleSpec)*
1315
14-
![CreateRoleStmt](/media/sqlgram/CreateRoleStmt.png)
16+
IfNotExists ::=
17+
('IF' 'NOT' 'EXISTS')?
1518
16-
**IfNotExists:**
17-
18-
![IfNotExists](/media/sqlgram/IfNotExists.png)
19-
20-
**RoleSpec:**
21-
22-
![RoleSpec](/media/sqlgram/RoleSpec.png)
19+
RoleSpec ::=
20+
Rolename
21+
```
2322

2423
## Examples
2524

sql-statements/sql-statement-create-sequence.md

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,31 @@ The `CREATE SEQUENCE` statement creates sequence objects in TiDB. The sequence i
1010

1111
## Synopsis
1212

13-
**CreateSequenceStmt:**
14-
15-
![CreateSequenceStmt](/media/sqlgram/CreateSequenceStmt.png)
16-
17-
**IfNotExists:**
18-
19-
![IfNotExists](/media/sqlgram/IfNotExists.png)
20-
21-
**TableName:**
22-
23-
![TableName](/media/sqlgram/TableName.png)
24-
25-
**CreateSequenceOptionListOpt:**
26-
27-
![CreateSequenceOptionListOpt](/media/sqlgram/CreateSequenceOptionListOpt.png)
28-
29-
**SequenceOptionList:**
30-
31-
![SequenceOptionList](/media/sqlgram/SequenceOptionList.png)
32-
33-
**SequenceOption:**
34-
35-
![SequenceOption](/media/sqlgram/SequenceOption.png)
13+
```ebnf+diagram
14+
CreateSequenceStmt ::=
15+
'CREATE' 'SEQUENCE' IfNotExists TableName CreateSequenceOptionListOpt CreateTableOptionListOpt
16+
17+
IfNotExists ::=
18+
('IF' 'NOT' 'EXISTS')?
19+
20+
TableName ::=
21+
Identifier ('.' Identifier)?
22+
23+
CreateSequenceOptionListOpt ::=
24+
SequenceOption*
25+
26+
SequenceOptionList ::=
27+
SequenceOption
28+
29+
SequenceOption ::=
30+
( 'INCREMENT' ( '='? | 'BY' ) | 'START' ( '='? | 'WITH' ) | ( 'MINVALUE' | 'MAXVALUE' | 'CACHE' ) '='? ) SignedNum
31+
| 'NOMINVALUE'
32+
| 'NO' ( 'MINVALUE' | 'MAXVALUE' | 'CACHE' | 'CYCLE' )
33+
| 'NOMAXVALUE'
34+
| 'NOCACHE'
35+
| 'CYCLE'
36+
| 'NOCYCLE'
37+
```
3638

3739
## Syntax
3840

sql-statements/sql-statement-create-table-like.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ This statement copies the definition of an existing table, without copying any d
1010

1111
## Synopsis
1212

13-
**CreateTableStmt:**
13+
```ebnf+diagram
14+
CreateTableLikeStmt ::=
15+
'CREATE' OptTemporary 'TABLE' IfNotExists TableName LikeTableWithOrWithoutParen
1416
15-
![CreateTableLikeStmt](/media/sqlgram/CreateTableLikeStmt.png)
16-
17-
**LikeTableWithOrWithoutParen:**
18-
19-
![LikeTableWithOrWithoutParen](/media/sqlgram/LikeTableWithOrWithoutParen.png)
17+
LikeTableWithOrWithoutParen ::=
18+
'LIKE' TableName
19+
| '(' 'LIKE' TableName ')'
20+
```
2021

2122
## Examples
2223

0 commit comments

Comments
 (0)