This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 568f5ea add parser support for SQL_MODE=ANSI_QUOTES (#8506)
568f5ea is described below
commit 568f5eaca23453d779e50d57d6496b160e39f7b3
Author: JingShang Lu <[email protected]>
AuthorDate: Mon Dec 7 17:53:09 2020 +0800
add parser support for SQL_MODE=ANSI_QUOTES (#8506)
* add parser support for SQL_MODE=ANSI_QUOTES
* fix
---
.../src/main/antlr4/imports/mysql/BaseRule.g4 | 101 +++++++++----------
.../src/main/antlr4/imports/mysql/DALStatement.g4 | 12 +--
.../src/main/antlr4/imports/mysql/DCLStatement.g4 | 14 ++-
.../src/main/antlr4/imports/mysql/DDLStatement.g4 | 78 +++++++--------
.../src/main/antlr4/imports/mysql/DMLStatement.g4 | 52 +++++-----
.../src/main/antlr4/imports/mysql/Keyword.g4 | 8 ++
.../src/main/antlr4/imports/mysql/Literals.g4 | 12 ---
.../src/main/antlr4/imports/mysql/RLStatement.g4 | 42 ++++----
.../src/main/antlr4/imports/mysql/TCLStatement.g4 | 2 +-
.../sql/parser/autogen/MySQLStatement.g4 | 1 +
.../visitor/format/impl/MySQLFormatSQLVisitor.java | 30 +-----
.../statement/impl/MySQLStatementSQLVisitor.java | 109 +++++++++++++++------
.../src/main/resources/case/dml/select.xml | 13 +++
.../main/resources/sql/supported/ddl/create.xml | 2 +-
.../main/resources/sql/supported/dml/select.xml | 1 +
15 files changed, 255 insertions(+), 222 deletions(-)
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
index a202324..803fdaa 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
@@ -44,6 +44,8 @@ customKeyword
| COPY
| UL_BINARY
| AUTOCOMMIT
+ | INNODB
+ | REDO_LOG
;
literals
@@ -56,8 +58,12 @@ literals
| nullValueLiterals
;
+string_
+ : DOUBLE_QUOTED_TEXT | SINGLE_QUOTED_TEXT
+ ;
+
stringLiterals
- : (UNDERSCORE_CHARSET? STRING_ | NCHAR_TEXT) STRING_* collateClause?
+ : UNDERSCORE_CHARSET? string_ | NCHAR_TEXT
;
numberLiterals
@@ -89,7 +95,7 @@ collationName
;
identifier
- : IDENTIFIER_ | unreservedWord | customKeyword
+ : IDENTIFIER_ | unreservedWord | customKeyword | DOUBLE_QUOTED_TEXT
;
unreservedWord
@@ -145,7 +151,7 @@ unreservedWord
;
textOrIdentifier
- : identifier | STRING_
+ : identifier | string_
;
variable
@@ -199,8 +205,7 @@ tableName
;
columnName
- : (owner DOT_)? name
- | identifier DOT_ identifier DOT_ identifier
+ : identifier
;
indexName
@@ -216,19 +221,15 @@ userName
;
eventName
- : (STRING_ | IDENTIFIER_) AT_ (STRING_ IDENTIFIER_)
- | identifier
- | STRING_
+ : identifier (DOT_ identifier)?
;
serverName
- : identifier
- | STRING_
+ : textOrIdentifier
;
wrapperName
- : identifier
- | STRING_
+ : textOrIdentifier
;
functionName
@@ -246,7 +247,7 @@ owner
;
alias
- : identifier | STRING_
+ : textOrIdentifier
;
name
@@ -262,11 +263,11 @@ viewNames
;
columnNames
- : LP_? columnName (COMMA_ columnName)* RP_?
+ : columnName (COMMA_ columnName)*
;
groupName
- : IDENTIFIER_
+ : identifier
;
routineName
@@ -274,19 +275,19 @@ routineName
;
shardLibraryName
- : STRING_
+ : stringLiterals
;
componentName
- : STRING_
+ : string_
;
pluginName
- : IDENTIFIER_
+ : identifier
;
hostName
- : STRING_
+ : string_
;
port
@@ -298,27 +299,27 @@ cloneInstance
;
cloneDir
- : IDENTIFIER_
+ : string_
;
channelName
- : IDENTIFIER_
+ : identifier (DOT_ identifier)?
;
logName
- : identifier
+ : stringLiterals
;
roleName
- : (STRING_ | IDENTIFIER_) AT_ (STRING_ | IDENTIFIER_) | IDENTIFIER_
+ : (string_ | IDENTIFIER_) AT_ (string_ | IDENTIFIER_) | IDENTIFIER_
;
engineRef
- : STRING_ | identifier
+ : textOrIdentifier
;
triggerName
- : IDENTIFIER_
+ : identifier (DOT_ identifier)?
;
triggerTime
@@ -334,7 +335,7 @@ userOrRole
;
partitionName
- : IDENTIFIER_
+ : identifier
;
identifierList
@@ -412,20 +413,28 @@ simpleExpr
: functionCall
| parameterMarker
| literals
- | columnName
- | simpleExpr COLLATE (STRING_ | identifier)
+ | columnRef
+ | simpleExpr COLLATE textOrIdentifier
| variable
| simpleExpr OR_ simpleExpr
| (PLUS_ | MINUS_ | TILDE_ | notOperator | BINARY) simpleExpr
| ROW? LP_ expr (COMMA_ expr)* RP_
| EXISTS? subquery
| LBE_ identifier expr RBE_
- | identifier (JSON_SEPARATOR | JSON_UNQUOTED_SEPARATOR) STRING_
+ | identifier (JSON_SEPARATOR | JSON_UNQUOTED_SEPARATOR) string_
| matchExpression
| caseExpression
| intervalExpression
;
+columnRef
+ : identifier (DOT_ identifier)? (DOT_ identifier)?
+ ;
+
+columnRefList
+ : columnRef (COMMA_ columnRef)*
+ ;
+
functionCall
: aggregationFunction | specialFunction | regularFunction
;
@@ -550,15 +559,15 @@ extractFunction
;
charFunction
- : CHAR LP_ expr (COMMA_ expr)* (USING ignoredIdentifier)? RP_
+ : CHAR LP_ expr (COMMA_ expr)* (USING charsetName)? RP_
;
trimFunction
- : TRIM LP_ (LEADING | BOTH | TRAILING) STRING_ FROM STRING_ RP_
+ : TRIM LP_ (LEADING | BOTH | TRAILING) string_ FROM string_ RP_
;
valuesFunction
- : VALUES LP_ columnName RP_
+ : VALUES LP_ columnRefList RP_
;
weightStringFunction
@@ -594,7 +603,7 @@ regularFunctionName
;
matchExpression
- : MATCH columnNames AGAINST LP_ expr matchSearchModifier? RP_
+ : MATCH (columnRefList | LP_ columnRefList RP_ ) AGAINST LP_ expr
matchSearchModifier? RP_
;
matchSearchModifier
@@ -644,7 +653,7 @@ orderByClause
;
orderByItem
- : (columnName | numberLiterals | expr) direction?
+ : (numberLiterals | expr) direction?
;
dataType
@@ -683,13 +692,13 @@ stringList
;
textString
- : STRING_
+ : string_
| HEX_DIGIT_
| BIT_NUM_
;
textStringHash
- : STRING_ | HEX_DIGIT_
+ : string_ | HEX_DIGIT_
;
fieldOptions
@@ -732,7 +741,7 @@ defaultCollation
;
defaultEncryption
- : DEFAULT? ENCRYPTION EQ_? STRING_
+ : DEFAULT? ENCRYPTION EQ_? string_
;
defaultCharset
@@ -772,10 +781,6 @@ fieldLength
: LP_ length=NUMBER_ RP_
;
-collectionOptions
- : LP_ STRING_ (COMMA_ STRING_)* RP_
- ;
-
characterSet
: charset charsetName
;
@@ -784,14 +789,6 @@ collateClause
: COLLATE collationName
;
-ignoredIdentifier
- : identifier (DOT_ identifier)?
- ;
-
-ignoredIdentifiers
- : ignoredIdentifier (COMMA_ ignoredIdentifier)*
- ;
-
fieldOrVarSpec
: LP_ (identifier (COMMA_ identifier)*)? RP_
;
@@ -804,10 +801,6 @@ existClause
: IF EXISTS
;
-pattern
- : STRING_
- ;
-
connectionId
: NUMBER_
;
@@ -834,7 +827,7 @@ noWriteToBinLog
;
channelOption
- : FOR CHANNEL STRING_
+ : FOR CHANNEL string_
;
preparedStatement
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DALStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DALStatement.g4
index d6cc922..62506bc 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DALStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DALStatement.g4
@@ -24,12 +24,12 @@ use
;
help
- : HELP STRING_
+ : HELP string_
;
explain
: (DESC | DESCRIBE | EXPLAIN)
- (tableName (columnName | pattern)?
+ (tableName (columnRef | textString)?
| explainType? (explainableStatement | FOR CONNECTION connectionId)
| ANALYZE select)
;
@@ -163,7 +163,7 @@ showFunctionStatus
;
showGrant
- : SHOW GRANTS (FOR userOrRole (USING roleName (COMMA_ roleName)+)?)?
+ : SHOW GRANTS (FOR userOrRole (USING userName (COMMA_ userName)+)?)?
;
showMasterStatus
@@ -244,7 +244,7 @@ clone
cloneAction
: LOCAL DATA DIRECTORY EQ_? cloneDir
- | INSTANCE FROM cloneInstance IDENTIFIED BY STRING_ (DATA DIRECTORY EQ_?
cloneDir)? (REQUIRE NO? SSL)?
+ | INSTANCE FROM cloneInstance IDENTIFIED BY string_ (DATA DIRECTORY EQ_?
cloneDir)? (REQUIRE NO? SSL)?
;
createUdf
@@ -330,7 +330,7 @@ binlog
;
cacheIndex
- : CACHE INDEX (tableIndexList (COMMA_ tableIndexList)* | tableName
PARTITION LP_ partitionList RP_) IN IDENTIFIER_
+ : CACHE INDEX (tableIndexList (COMMA_ tableIndexList)* | tableName
PARTITION LP_ partitionList RP_) IN (identifier | DEFAULT)
;
tableIndexList
@@ -374,7 +374,7 @@ resetOption
;
resetPersist
- : RESET PERSIST (existClause? IDENTIFIER_)
+ : RESET PERSIST (existClause? identifier)?
;
restart
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
index 0538aea..a184a6f 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
@@ -44,7 +44,11 @@ allClause
;
privileges
- : privilegeType columnNames? (COMMA_ privilegeType columnNames?)*
+ : privilege (COMMA_ privilege)*
+ ;
+
+privilege
+ : privilegeType (LP_ columnNames RP_)?
;
privilegeType
@@ -164,7 +168,7 @@ setRole
;
setPassword
- : SET PASSWORD (FOR userName)? authOption (REPLACE STRING_)? (RETAIN
CURRENT PASSWORD)?
+ : SET PASSWORD (FOR userName)? authOption (REPLACE string_)? (RETAIN
CURRENT PASSWORD)?
;
authOption
@@ -194,12 +198,12 @@ userAuthOption
;
identifiedBy
- : IDENTIFIED BY (STRING_ | RANDOM PASSWORD) (REPLACE STRING_)? (RETAIN
CURRENT PASSWORD)?
+ : IDENTIFIED BY (string_ | RANDOM PASSWORD) (REPLACE string_)? (RETAIN
CURRENT PASSWORD)?
;
identifiedWith
: IDENTIFIED WITH pluginName
- | IDENTIFIED WITH pluginName BY (STRING_ | RANDOM PASSWORD) (REPLACE
stringLiterals)? (RETAIN CURRENT PASSWORD)?
+ | IDENTIFIED WITH pluginName BY (string_ | RANDOM PASSWORD) (REPLACE
stringLiterals)? (RETAIN CURRENT PASSWORD)?
| IDENTIFIED WITH pluginName AS textStringHash (RETAIN CURRENT PASSWORD)?
;
@@ -211,7 +215,7 @@ connectOption
;
tlsOption
- : SSL | X509 | CIPHER STRING_ | ISSUER STRING_ | SUBJECT STRING_
+ : SSL | X509 | CIPHER string_ | ISSUER string_ | SUBJECT string_
;
userFuncAuthOption
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
index c773ea6..9604130 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
@@ -42,13 +42,13 @@ partitionClause
;
partitionTypeDef
- : LINEAR? KEY partitionKeyAlgorithm? columnNames
+ : LINEAR? KEY partitionKeyAlgorithm? LP_ columnNames? RP_
| LINEAR? HASH LP_ bitExpr RP_
- | (RANGE | LIST) (LP_ bitExpr RP_ | COLUMNS columnNames )
+ | (RANGE | LIST) (LP_ bitExpr RP_ | COLUMNS LP_ columnNames RP_ )
;
subPartitions
- : SUBPARTITION BY LINEAR? ( HASH LP_ bitExpr RP_ | KEY
partitionKeyAlgorithm? columnNames ) (SUBPARTITIONS NUMBER_)?
+ : SUBPARTITION BY LINEAR? ( HASH LP_ bitExpr RP_ | KEY
partitionKeyAlgorithm? LP_ columnNames RP_ ) (SUBPARTITIONS NUMBER_)?
;
partitionKeyAlgorithm
@@ -221,7 +221,7 @@ alterDatabase
;
createDatabaseSpecification_
- : defaultCollation
+ : defaultCharset
| defaultCollation
| defaultEncryption
;
@@ -240,9 +240,9 @@ alterInstance
;
instanceAction
- : (ENABLE | DISABLE) INNODB_ REDO_LOG_
- | ROTATE INNODB_ MASTER KEY
- | ROTATE BINLOG MASTER KEY
+ : (ENABLE | DISABLE) INNODB REDO_LOG
+ | ROTATE INNODB MASTER KEY
+ | ROTATE BINLOG MASTER KEY
| RELOAD TLS (FOR CHANNEL channel)? (NO ROLLBACK ON ERROR)?
;
@@ -255,7 +255,7 @@ createEvent
ON SCHEDULE scheduleExpression
(ON COMPLETION NOT? PRESERVE)?
(ENABLE | DISABLE | DISABLE ON SLAVE)?
- (COMMENT STRING_)?
+ (COMMENT string_)?
DO routineBody
;
@@ -264,7 +264,7 @@ alterEvent
(ON SCHEDULE scheduleExpression)?
(ON COMPLETION NOT? PRESERVE)?
(RENAME TO eventName)? (ENABLE | DISABLE | DISABLE ON SLAVE)?
- (COMMENT STRING_)?
+ (COMMENT string_)?
(DO routineBody)?
;
@@ -343,15 +343,15 @@ dropView
createTablespaceInnodb
: CREATE (UNDO)? TABLESPACE identifier
- ADD DATAFILE STRING_
+ ADD DATAFILE string_
(FILE_BLOCK_SIZE EQ_ fileSizeLiteral)?
- (ENCRYPTION EQ_ y_or_n=STRING_)?
- (ENGINE EQ_? STRING_)?
+ (ENCRYPTION EQ_ y_or_n=string_)?
+ (ENGINE EQ_? string_)?
;
createTablespaceNdb
: CREATE ( UNDO )? TABLESPACE identifier
- ADD DATAFILE STRING_
+ ADD DATAFILE string_
USE LOGFILE GROUP identifier
(EXTENT_SIZE EQ_? fileSizeLiteral)?
(INITIAL_SIZE EQ_? fileSizeLiteral)?
@@ -359,13 +359,13 @@ createTablespaceNdb
(MAX_SIZE EQ_? fileSizeLiteral)?
(NODEGROUP EQ_? identifier)?
WAIT?
- (COMMENT EQ_? STRING_)?
+ (COMMENT EQ_? string_)?
(ENGINE EQ_? identifier)?
;
alterTablespaceNdb
: ALTER UNDO? TABLESPACE identifier
- (ADD | DROP) DATAFILE STRING_
+ (ADD | DROP) DATAFILE string_
(INITIAL_SIZE EQ_ fileSizeLiteral)?
WAIT? (RENAME TO identifier)?
(ENGINE EQ_? identifier)?
@@ -373,7 +373,7 @@ alterTablespaceNdb
alterTablespaceInnodb
: ALTER UNDO? TABLESPACE identifier
- (SET (ACTIVE | INACTIVE))? (ENCRYPTION EQ_? y_or_n=STRING_)
+ (SET (ACTIVE | INACTIVE))? (ENCRYPTION EQ_? y_or_n=string_)
(RENAME TO identifier)?
(ENGINE EQ_? identifier)?
;
@@ -384,19 +384,19 @@ dropTablespace
createLogfileGroup
: CREATE LOGFILE GROUP identifier
- ADD UNDOFILE STRING_
+ ADD UNDOFILE string_
(INITIAL_SIZE EQ_? fileSizeLiteral)?
(UNDO_BUFFER_SIZE EQ_? fileSizeLiteral)?
(REDO_BUFFER_SIZE EQ_? fileSizeLiteral)?
(NODEGROUP EQ_? identifier)?
WAIT?
- (COMMENT EQ_? STRING_)?
+ (COMMENT EQ_? string_)?
(ENGINE EQ_? identifier)?
;
alterLogfileGroup
: ALTER LOGFILE GROUP identifier
- ADD UNDOFILE STRING_
+ ADD UNDOFILE string_
(INITIAL_SIZE EQ_? fileSizeLiteral)?
WAIT?
(ENGINE EQ_? identifier)?
@@ -439,7 +439,7 @@ columnAttribute
| value = SERIAL DEFAULT VALUE
| PRIMARY? value = KEY
| value = UNIQUE KEY?
- | value = COMMENT STRING_
+ | value = COMMENT string_
| collateClause
| value = COLUMN_FORMAT columnFormat
| value = STORAGE storageMedia
@@ -529,12 +529,12 @@ createTableOptions
createTableOption
: option = ENGINE EQ_? engineRef
- | option = SECONDARY_ENGINE EQ_? (NULL | STRING_ | identifier)
+ | option = SECONDARY_ENGINE EQ_? (NULL | string_ | identifier)
| option = MAX_ROWS EQ_? NUMBER_
| option = MIN_ROWS EQ_? NUMBER_
| option = AVG_ROW_LENGTH EQ_? NUMBER_
- | option = PASSWORD EQ_? STRING_
- | option = COMMENT EQ_? STRING_
+ | option = PASSWORD EQ_? string_
+ | option = COMMENT EQ_? string_
| option = COMPRESSION EQ_? textString
| option = ENCRYPTION EQ_? textString
| option = AUTO_INCREMENT EQ_? NUMBER_
@@ -553,8 +553,8 @@ createTableOption
| option = STORAGE (DISK | MEMORY)
| option = CONNECTION EQ_? textString
| option = KEY_BLOCK_SIZE EQ_? NUMBER_
- | option = ENGINE_ATTRIBUTE EQ_? jsonAttribute = STRING_
- | option = SECONDARY_ENGINE_ATTRIBUTE EQ_ jsonAttribute = STRING_
+ | option = ENGINE_ATTRIBUTE EQ_? jsonAttribute = string_
+ | option = SECONDARY_ENGINE_ATTRIBUTE EQ_ jsonAttribute = string_
;
createSRSStatement
@@ -567,10 +567,10 @@ dropSRSStatement
;
srsAttribute
- : NAME STRING_
- | DEFINITION STRING_
- | ORGANIZATION STRING_ IDENTIFIED BY NUMBER_
- | DESCRIPTION STRING_
+ : NAME string_
+ | DEFINITION string_
+ | ORGANIZATION string_ IDENTIFIED BY NUMBER_
+ | DESCRIPTION string_
;
place
@@ -598,9 +598,9 @@ partitionValueList
partitionDefinitionOption
: STORAGE? ENGINE EQ_? identifier
- | COMMENT EQ_? STRING_
- | DATA DIRECTORY EQ_? STRING_
- | INDEX DIRECTORY EQ_? STRING_
+ | COMMENT EQ_? string_
+ | DATA DIRECTORY EQ_? string_
+ | INDEX DIRECTORY EQ_? string_
| MAX_ROWS EQ_? NUMBER_
| MIN_ROWS EQ_? NUMBER_
| TABLESPACE EQ_? identifier
@@ -630,17 +630,17 @@ routineBody
;
serverOption
- : HOST STRING_
- | DATABASE STRING_
- | USER STRING_
- | PASSWORD STRING_
- | SOCKET STRING_
- | OWNER STRING_
+ : HOST string_
+ | DATABASE string_
+ | USER string_
+ | PASSWORD string_
+ | SOCKET string_
+ | OWNER string_
| PORT numberLiterals
;
routineOption
- : COMMENT STRING_
+ : COMMENT string_
| LANGUAGE SQL
| NOT? DETERMINISTIC
| (CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA)
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index fa63608..41b51cd 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -28,11 +28,23 @@ insertSpecification
;
insertValuesClause
- : (LP_ RP_ | columnNames)? (VALUES | VALUE) (assignmentValues (COMMA_
assignmentValues)* | rowConstructorList) valueReference?
+ : (LP_ fields? RP_ )? (VALUES | VALUE) (assignmentValues (COMMA_
assignmentValues)* | rowConstructorList) valueReference?
+ ;
+
+fields
+ : insertIdentifier (COMMA_ insertIdentifier)*
+ ;
+
+insertIdentifier
+ : columnRef | tableWild
+ ;
+
+tableWild
+ : identifier DOT_ (identifier DOT_)? ASTERISK_
;
insertSelectClause
- : valueReference? columnNames? select
+ : valueReference? (LP_ fields? RP_)? select
;
onDuplicateKeyClause
@@ -56,11 +68,11 @@ replaceSpecification
;
replaceValuesClause
- : columnNames? (VALUES | VALUE) (assignmentValues (COMMA_
assignmentValues)* | rowConstructorList) valueReference?
+ : (LP_ fields? RP_)? (VALUES | VALUE) (assignmentValues (COMMA_
assignmentValues)* | rowConstructorList) valueReference?
;
replaceSelectClause
- : valueReference? columnNames? select
+ : valueReference? (LP_ fields? RP_)? select
;
update
@@ -72,7 +84,7 @@ updateSpecification_
;
assignment
- : columnName EQ_ assignmentValue
+ : columnRef EQ_ assignmentValue
;
setAssignmentsClause
@@ -89,7 +101,7 @@ assignmentValue
;
blobValue
- : UL_BINARY STRING_
+ : UL_BINARY string_
;
delete
@@ -175,7 +187,7 @@ handlerCloseStatement
;
importStatement
- : IMPORT TABLE FROM STRING_ (COMMA_ STRING_)?
+ : IMPORT TABLE FROM string_ (COMMA_ string_)?
;
loadStatement
@@ -185,7 +197,7 @@ loadStatement
loadDataStatement
: LOAD DATA
(LOW_PRIORITY | CONCURRENT)? LOCAL?
- INFILE STRING_
+ INFILE string_
(REPLACE | IGNORE)?
INTO TABLE tableName partitionNames?
(CHARACTER SET identifier)?
@@ -199,11 +211,11 @@ loadDataStatement
loadXmlStatement
: LOAD XML
(LOW_PRIORITY | CONCURRENT)? LOCAL?
- INFILE STRING_
+ INFILE string_
(REPLACE | IGNORE)?
INTO TABLE tableName
(CHARACTER SET identifier)?
- (ROWS IDENTIFIED BY LT_ STRING_ GT_)?
+ (ROWS IDENTIFIED BY LT_ string_ GT_)?
( IGNORE numberLiterals (LINES | ROWS) )?
fieldOrVarSpec?
(setAssignmentsClause)?
@@ -217,10 +229,6 @@ tableValueConstructor
: VALUES rowConstructorList
;
-columnDesignator
- : STRING_
- ;
-
rowConstructorList
: ROW assignmentValues (COMMA_ ROW assignmentValues)*
;
@@ -230,7 +238,7 @@ withClause
;
cteClause
- : ignoredIdentifier columnNames? AS subquery
+ : identifier (LP_ columnNames RP_)? AS subquery
;
selectSpecification
@@ -274,7 +282,7 @@ tableReference
;
tableFactor
- : tableName partitionNames? (AS? alias)? indexHintList? | subquery AS?
alias columnNames? | LP_ tableReferences RP_
+ : tableName partitionNames? (AS? alias)? indexHintList? | subquery AS?
alias (LP_ columnNames RP_)? | LP_ tableReferences RP_
;
partitionNames
@@ -310,7 +318,7 @@ naturalJoinType
;
joinSpecification
- : ON expr | USING columnNames
+ : ON expr | USING LP_ columnNames RP_
;
whereClause
@@ -342,7 +350,7 @@ windowClause
;
windowItem
- : ignoredIdentifier AS LP_ windowSpecification RP_
+ : identifier AS LP_ windowSpecification RP_
;
subquery
@@ -350,16 +358,16 @@ subquery
;
selectLinesInto
- : STARTING BY STRING_ | TERMINATED BY STRING_
+ : STARTING BY string_ | TERMINATED BY string_
;
selectFieldsInto
- : TERMINATED BY STRING_ | OPTIONALLY? ENCLOSED BY STRING_ | ESCAPED BY
STRING_
+ : TERMINATED BY string_ | OPTIONALLY? ENCLOSED BY string_ | ESCAPED BY
string_
;
selectIntoExpression
- : INTO variable (COMMA_ variable )* | INTO DUMPFILE STRING_
- | (INTO OUTFILE STRING_ (CHARACTER SET IDENTIFIER_)?((FIELDS | COLUMNS)
selectFieldsInto+)? (LINES selectLinesInto+)?)
+ : INTO variable (COMMA_ variable )* | INTO DUMPFILE string_
+ | (INTO OUTFILE string_ (CHARACTER SET charsetName)?((FIELDS | COLUMNS)
selectFieldsInto+)? (LINES selectLinesInto+)?)
;
lockClause
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Keyword.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Keyword.g4
index 13a273b..638c243 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Keyword.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Keyword.g4
@@ -107,3 +107,11 @@ UL_BINARY
AUTOCOMMIT
: A U T O C O M M I T
;
+
+INNODB
+ : 'INNODB'
+ ;
+
+REDO_LOG
+ : 'REDO_LOG'
+ ;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Literals.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Literals.g4
index d4e3e7e..f9aaf5a 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Literals.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/Literals.g4
@@ -19,14 +19,6 @@ lexer grammar Literals;
import Alphabet, Symbol;
-INNODB_
- : 'INNODB'
- ;
-
-REDO_LOG_
- : 'REDO_LOG'
- ;
-
FILESIZE_LITERAL
: INT_NUM_ ('K'|'M'|'G'|'T')
;
@@ -36,10 +28,6 @@ IDENTIFIER_
| BQ_ ~'`'+ BQ_
;
-STRING_
- : DOUBLE_QUOTED_TEXT | SINGLE_QUOTED_TEXT
- ;
-
SINGLE_QUOTED_TEXT
: SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_
;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
index a6167b2..454027b 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
@@ -65,13 +65,13 @@ threadType
utilOption
: UNTIL ((SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS) EQ_ identifier
- | MASTER_LOG_FILE EQ_ STRING_ COMMA_ MASTER_LOG_POS EQ_ NUMBER_
- | RELAY_LOG_FILE EQ_ STRING_ COMMA_ RELAY_LOG_POS EQ_ NUMBER_
+ | MASTER_LOG_FILE EQ_ string_ COMMA_ MASTER_LOG_POS EQ_ NUMBER_
+ | RELAY_LOG_FILE EQ_ string_ COMMA_ RELAY_LOG_POS EQ_ NUMBER_
| SQL_AFTER_MTS_GAPS)
;
connectionOptions
- : (USER EQ_ STRING_)? (PASSWORD EQ_ STRING_)? (DEFAULT_AUTH EQ_ STRING_)?
(PLUGIN_DIR EQ_ STRING_)?
+ : (USER EQ_ string_)? (PASSWORD EQ_ string_)? (DEFAULT_AUTH EQ_ string_)?
(PLUGIN_DIR EQ_ string_)?
;
masterDefs
@@ -79,10 +79,10 @@ masterDefs
;
masterDef
- : MASTER_BIND EQ_ STRING_
- | MASTER_HOST EQ_ STRING_
- | MASTER_USER EQ_ STRING_
- | MASTER_PASSWORD EQ_ STRING_
+ : MASTER_BIND EQ_ string_
+ | MASTER_HOST EQ_ string_
+ | MASTER_USER EQ_ string_
+ | MASTER_PASSWORD EQ_ string_
| MASTER_PORT EQ_ NUMBER_
| PRIVILEGE_CHECKS_USER EQ_ (ACCOUNT | NULL)
| REQUIRE_ROW_FORMAT EQ_ NUMBER_
@@ -90,25 +90,25 @@ masterDef
| MASTER_RETRY_COUNT EQ_ NUMBER_
| MASTER_DELAY EQ_ NUMBER_
| MASTER_HEARTBEAT_PERIOD EQ_ NUMBER_
- | MASTER_LOG_FILE EQ_ STRING_
+ | MASTER_LOG_FILE EQ_ string_
| MASTER_LOG_POS EQ_ NUMBER_
| MASTER_AUTO_POSITION EQ_ NUMBER_
- | RELAY_LOG_FILE EQ_ STRING_
+ | RELAY_LOG_FILE EQ_ string_
| RELAY_LOG_POS EQ_ NUMBER_
- | MASTER_COMPRESSION_ALGORITHMS EQ_ STRING_
+ | MASTER_COMPRESSION_ALGORITHMS EQ_ string_
| MASTER_ZSTD_COMPRESSION_LEVEL EQ_ NUMBER_
| MASTER_SSL EQ_ NUMBER_
- | MASTER_SSL_CA EQ_ STRING_
- | MASTER_SSL_CAPATH EQ_ STRING_
- | MASTER_SSL_CERT EQ_ STRING_
- | MASTER_SSL_CRL EQ_ STRING_
- | MASTER_SSL_CRLPATH EQ_ STRING_
- | MASTER_SSL_KEY EQ_ STRING_
- | MASTER_SSL_CIPHER EQ_ STRING_
+ | MASTER_SSL_CA EQ_ string_
+ | MASTER_SSL_CAPATH EQ_ string_
+ | MASTER_SSL_CERT EQ_ string_
+ | MASTER_SSL_CRL EQ_ string_
+ | MASTER_SSL_CRLPATH EQ_ string_
+ | MASTER_SSL_KEY EQ_ string_
+ | MASTER_SSL_CIPHER EQ_ string_
| MASTER_SSL_VERIFY_SERVER_CERT EQ_ NUMBER_
- | MASTER_TLS_VERSION EQ_ STRING_
- | MASTER_TLS_CIPHERSUITES EQ_ STRING_
- | MASTER_PUBLIC_KEY_PATH EQ_ STRING_
+ | MASTER_TLS_VERSION EQ_ string_
+ | MASTER_TLS_CIPHERSUITES EQ_ string_
+ | MASTER_PUBLIC_KEY_PATH EQ_ string_
| GET_MASTER_PUBLIC_KEY EQ_ NUMBER_
| IGNORE_SERVER_IDS EQ_ LP_ ignoreServerIds RP_
;
@@ -140,5 +140,5 @@ wildTables
;
wildTable
- : STRING_
+ : string_
;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
index 07a748e..7f5d767 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
@@ -102,5 +102,5 @@ lockOption
;
xid
- : STRING_ (COMMA_ STRING_)* numberLiterals?
+ : string_ (COMMA_ string_)* numberLiterals?
;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/MySQLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/MySQLStatement.g4
index 90a60ee..225361f 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/MySQLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/MySQLStatement.g4
@@ -25,6 +25,7 @@ execute
| update
| delete
| replace
+ | binlog
| createTable
| alterStatement
| repairTable
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/impl/MySQLFormatSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/impl/MySQLFormatSQLVisitor.java
index c6db404..c7c3cd8 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/impl/MySQLFormatSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/impl/MySQLFormatSQLVisitor.java
@@ -29,7 +29,6 @@ import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AlterLi
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AlterTableActionsContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AlterTableContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AssignmentValuesContext;
-import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnNamesContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateDefinitionClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTableOptionsSpaceSeparatedContext;
@@ -39,7 +38,6 @@ import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.Explici
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ExprContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FieldLengthContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IdentifierContext;
-import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IgnoredIdentifierContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LiteralsContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.NumberLiteralsContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.PrecisionContext;
@@ -547,7 +545,7 @@ public abstract class MySQLFormatSQLVisitor extends
MySQLStatementBaseVisitor<St
@Override
public String visitCteClause(final CteClauseContext ctx) {
- visit(ctx.ignoredIdentifier());
+ visit(ctx.identifier());
result.append(" ");
if (null != ctx.columnNames()) {
visit(ctx.columnNames());
@@ -559,20 +557,7 @@ public abstract class MySQLFormatSQLVisitor extends
MySQLStatementBaseVisitor<St
}
@Override
- public String visitIgnoredIdentifier(final IgnoredIdentifierContext ctx) {
- visit(ctx.identifier(0));
- if (null != ctx.DOT_()) {
- visit(ctx.DOT_());
- visit(ctx.identifier(1));
- }
- return result.toString();
- }
-
- @Override
public String visitColumnNames(final ColumnNamesContext ctx) {
- if (null != ctx.LP_()) {
- visit(ctx.LP_());
- }
int columnCount = ctx.columnName().size();
for (int i = 0; i < columnCount; i++) {
if (i != 0 && i < columnCount - 1) {
@@ -581,19 +566,6 @@ public abstract class MySQLFormatSQLVisitor extends
MySQLStatementBaseVisitor<St
visit(ctx.columnName(i));
}
}
- if (null != ctx.RP_()) {
- visit(ctx.RP_());
- }
- return result.toString();
- }
-
- @Override
- public String visitColumnName(final ColumnNameContext ctx) {
- if (null != ctx.owner()) {
- visit(ctx.owner());
- visit(ctx.DOT_(0));
- }
- visit(ctx.name());
return result.toString();
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index 4e51f2d..a44dcc6 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -28,13 +28,16 @@ import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.Assignm
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AssignmentValueContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AssignmentValuesContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BlobValueContext;
+import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnRefContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DeleteContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DuplicateSpecificationContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.EscapedTableReferenceContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FieldLengthContext;
+import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FieldsContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FromClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.GroupByClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.InsertContext;
+import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.InsertIdentifierContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.InsertSelectClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.InsertValuesClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.JoinSpecificationContext;
@@ -189,7 +192,7 @@ import java.util.List;
public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor<ASTNode> {
private int currentParameterIndex;
-
+
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
return new ParameterMarkerValue(currentParameterIndex++);
@@ -298,11 +301,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public final ASTNode visitColumnName(final ColumnNameContext ctx) {
- ColumnSegment result = new
ColumnSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
(IdentifierValue) visit(ctx.name()));
- OwnerContext owner = ctx.owner();
- if (null != owner) {
- result.setOwner(new OwnerSegment(owner.getStart().getStartIndex(),
owner.getStop().getStopIndex(), (IdentifierValue) visit(owner.identifier())));
- }
+ ColumnSegment result = new
ColumnSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
(IdentifierValue) visit(ctx.identifier()));
return result;
}
@@ -505,8 +504,8 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
if (null != ctx.functionCall()) {
return visit(ctx.functionCall());
}
- if (null != ctx.columnName()) {
- return visit(ctx.columnName());
+ if (null != ctx.columnRef()) {
+ return visit(ctx.columnRef());
}
if (null != ctx.matchExpression()) {
return visit(ctx.matchExpression());
@@ -524,7 +523,23 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
}
return visitRemainSimpleExpr(ctx);
}
-
+
+ @Override
+ public ASTNode visitColumnRef(final ColumnRefContext ctx) {
+ int idenCount = ctx.identifier().size();
+ ColumnSegment result;
+ if (1 == idenCount) {
+ result = new ColumnSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (IdentifierValue) visit(ctx.identifier(0)));
+ } else if (2 == idenCount) {
+ result = new ColumnSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (IdentifierValue) visit(ctx.identifier(1)));
+ result.setOwner(new
OwnerSegment(ctx.identifier(0).start.getStartIndex(),
ctx.identifier(0).stop.getStopIndex(), (IdentifierValue)
visit(ctx.identifier(0))));
+ } else {
+ result = new ColumnSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (IdentifierValue) visit(ctx.identifier(2)));
+ result.setOwner(new
OwnerSegment(ctx.identifier(1).start.getStartIndex(),
ctx.identifier(1).stop.getStopIndex(), (IdentifierValue)
visit(ctx.identifier(1))));
+ }
+ return result;
+ }
+
@Override
public ASTNode visitSubquery(final SubqueryContext ctx) {
return visit(ctx.queryExpressionParens());
@@ -845,15 +860,17 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
} else {
orderDirection = OrderDirection.ASC;
}
- if (null != ctx.columnName()) {
- ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
- return new ColumnOrderByItemSegment(column, orderDirection);
- }
if (null != ctx.numberLiterals()) {
return new
IndexOrderByItemSegment(ctx.numberLiterals().getStart().getStartIndex(),
ctx.numberLiterals().getStop().getStopIndex(),
SQLUtil.getExactlyNumber(ctx.numberLiterals().getText(),
10).intValue(), orderDirection);
+ } else {
+ ASTNode expr = visitExpr(ctx.expr());
+ if (expr instanceof ColumnSegment) {
+ return new ColumnOrderByItemSegment((ColumnSegment) expr,
orderDirection);
+ } else {
+ return new
ExpressionOrderByItemSegment(ctx.expr().getStart().getStartIndex(),
ctx.expr().getStop().getStopIndex(), ctx.expr().getText(), orderDirection);
+ }
}
- return new
ExpressionOrderByItemSegment(ctx.expr().getStart().getStartIndex(),
ctx.expr().getStop().getStopIndex(), ctx.expr().getText(), orderDirection);
}
@Override
@@ -879,7 +896,15 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitInsertSelectClause(final InsertSelectClauseContext
ctx) {
MySQLInsertStatement result = new MySQLInsertStatement();
- result.setInsertColumns(createInsertColumns(ctx.columnNames(),
ctx.start.getStartIndex()));
+ if (null != ctx.LP_()) {
+ if (null != ctx.fields()) {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), createInsertColumns(ctx.fields())));
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), Collections.emptyList()));
+ }
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.start.getStartIndex() - 1, ctx.start.getStartIndex() -
1, Collections.emptyList()));
+ }
result.setInsertSelect(createInsertSelectSegment(ctx));
return result;
}
@@ -892,7 +917,15 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitInsertValuesClause(final InsertValuesClauseContext
ctx) {
MySQLInsertStatement result = new MySQLInsertStatement();
- result.setInsertColumns(createInsertColumns(ctx.columnNames(),
ctx.start.getStartIndex()));
+ if (null != ctx.LP_()) {
+ if (null != ctx.fields()) {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), createInsertColumns(ctx.fields())));
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), Collections.emptyList()));
+ }
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.start.getStartIndex() - 1, ctx.start.getStartIndex() -
1, Collections.emptyList()));
+ }
result.getValues().addAll(createInsertValuesSegments(ctx.assignmentValues()));
return result;
}
@@ -930,11 +963,19 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
result.setParameterCount(getCurrentParameterIndex());
return result;
}
-
+
@Override
public ASTNode visitReplaceSelectClause(final ReplaceSelectClauseContext
ctx) {
MySQLInsertStatement result = new MySQLInsertStatement();
- result.setInsertColumns(createInsertColumns(ctx.columnNames(),
ctx.start.getStartIndex()));
+ if (null != ctx.LP_()) {
+ if (null != ctx.fields()) {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), createInsertColumns(ctx.fields())));
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), Collections.emptyList()));
+ }
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.start.getStartIndex() - 1, ctx.start.getStartIndex() -
1, Collections.emptyList()));
+ }
result.setInsertSelect(createReplaceSelectSegment(ctx));
return result;
}
@@ -947,21 +988,28 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitReplaceValuesClause(final ReplaceValuesClauseContext
ctx) {
MySQLInsertStatement result = new MySQLInsertStatement();
- result.setInsertColumns(createInsertColumns(ctx.columnNames(),
ctx.start.getStartIndex()));
+ if (null != ctx.LP_()) {
+ if (null != ctx.fields()) {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), createInsertColumns(ctx.fields())));
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.LP_().getSymbol().getStartIndex(),
ctx.RP_().getSymbol().getStopIndex(), Collections.emptyList()));
+ }
+ } else {
+ result.setInsertColumns(new
InsertColumnsSegment(ctx.start.getStartIndex() - 1, ctx.start.getStartIndex() -
1, Collections.emptyList()));
+ }
result.getValues().addAll(createReplaceValuesSegments(ctx.assignmentValues()));
return result;
}
@SuppressWarnings("unchecked")
- private InsertColumnsSegment createInsertColumns(final ColumnNamesContext
columnNames, final int startIndex) {
- if (null != columnNames) {
- CollectionValue<ColumnSegment> columnSegments =
(CollectionValue<ColumnSegment>) visit(columnNames);
- return new InsertColumnsSegment(columnNames.start.getStartIndex(),
columnNames.stop.getStopIndex(), columnSegments.getValue());
- } else {
- return new InsertColumnsSegment(startIndex - 1, startIndex - 1,
Collections.emptyList());
+ private List<ColumnSegment> createInsertColumns(final FieldsContext
fields) {
+ List<ColumnSegment> result = new LinkedList<>();
+ for (InsertIdentifierContext each : fields.insertIdentifier()) {
+ result.add((ColumnSegment) visit(each));
}
+ return result;
}
-
+
private Collection<InsertValuesSegment> createReplaceValuesSegments(final
Collection<MySQLStatementParser.AssignmentValuesContext>
assignmentValuesContexts) {
Collection<InsertValuesSegment> result = new LinkedList<>();
for (MySQLStatementParser.AssignmentValuesContext each :
assignmentValuesContexts) {
@@ -1009,7 +1057,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitAssignment(final AssignmentContext ctx) {
- ColumnSegment column = (ColumnSegment)
visitColumnName(ctx.columnName());
+ ColumnSegment column = (ColumnSegment) visit(ctx.columnRef());
ExpressionSegment value = (ExpressionSegment)
visit(ctx.assignmentValue());
return new AssignmentSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, value);
}
@@ -1030,7 +1078,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitBlobValue(final BlobValueContext ctx) {
- return new StringLiteralValue(ctx.STRING_().getText());
+ return new StringLiteralValue(ctx.string_().getText());
}
@Override
@@ -1165,10 +1213,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public ASTNode visitAlias(final AliasContext ctx) {
- if (null != ctx.identifier()) {
- return new AliasSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), (IdentifierValue) visit(ctx.identifier()));
- }
- return new AliasSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), new IdentifierValue(ctx.STRING_().getText()));
+ return new AliasSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), new IdentifierValue(ctx.textOrIdentifier().getText()));
}
private ASTNode createProjection(final ProjectionContext ctx, final
AliasSegment alias, final ASTNode projection) {
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
index 7bef203..4b809c7 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
@@ -23,6 +23,19 @@
</projections>
</select>
+ <select sql-case-id="select_sqlmode_ansi_quotes" >
+ <projections start-index="7" stop-index="10">
+ <expression-projection start-index="7" stop-index="10" />
+ </projections>
+ <from>
+ <simple-table name="t_order" start-delimiter='"' end-delimiter='"'
start-index="17" stop-index="25" />
+ </from>
+<!-- TODO support where-->
+ <where start-index="27" stop-index="49">
+
+ </where>
+ </select>
+
<select sql-case-id="select_with_union">
</select>
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/create.xml
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/create.xml
index 220c9c1..ba66527 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/create.xml
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/create.xml
@@ -37,7 +37,7 @@
column2 VARCHAR(10),
column3 VARCHAR(10)
)" db-types="MySQL,Oracle,SQLServer" />
- <sql-case id="create_table_with_back_quota" value="CREATE TABLE `t_order`
(`order_id` INT, `user_id` INT, `status` VARCHAR(10), `column1` VARCHAR(10),
`column2` VARCHAR(10), `column3` VARCHAR(10))" db-types="MySQL" />
+ <sql-case id="create_table_with_back_quota" value="CREATE TABLE `t_order`
(`order_id` INT, `user_id` INT, `status` VARCHAR(10), `column1` VARCHAR(10),
`column2` VARCHAR(10), `column3` VARCHAR(10)) ENGINE=INNODB" db-types="MySQL" />
<sql-case id="create_temporary_table" value="CREATE TEMPORARY TABLE
t_order (order_id INT, user_id INT, status VARCHAR(10), column1 VARCHAR(10),
column2 VARCHAR(10), column3 VARCHAR(10))" db-types="MySQL" />
<sql-case id="create_table_with_column_not_null" value="CREATE TABLE
t_order (order_id INT NOT NULL, user_id INT, status VARCHAR(10), column1
VARCHAR(10), column2 VARCHAR(10), column3 VARCHAR(10))"
db-types="MySQL,Oracle,PostgreSQL,SQLServer" />
<sql-case id="create_table_with_column_default" value="CREATE TABLE
t_order (order_id INT DEFAULT 0, user_id INT, status VARCHAR(10), column1
VARCHAR(10), column2 VARCHAR(10), column3 VARCHAR(10))"
db-types="MySQL,PostgreSQL,SQLServer" />
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/select.xml
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/select.xml
index e7001e1..c458684 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/select.xml
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/select.xml
@@ -18,6 +18,7 @@
<sql-cases>
<sql-case id="select_constant_without_table" value="SELECT 1 as a" />
+ <sql-case id="select_sqlmode_ansi_quotes" value='select "id" from
"t_order" where "t_order"."id"=10' db-types="MySQL" />
<sql-case id="select_with_union" value="SELECT * from table1 union select
* from table2" db-types="PostgreSQL"/>
<sql-case id="select_with_function_name" value="SELECT current_timestamp"
db-types="MySQL"/>
<sql-case id="select_with_same_table_name_and_alias" value="SELECT
t_order.* FROM t_order t_order WHERE user_id = ? AND order_id = ?" />