提交 0733f76c 编写于 作者: C codefairy08

add base dml and ddl .g4 files

上级 18fcde4c
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.sharding</groupId>
<artifactId>sharding-jdbc-ddl-parser</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sharding-jdbc-ddl-parser</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId>
<version>4.7.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
grammar DDLBase;
import SQLBase, Keyword, Symbol;
execute:
alterTable
;
alterTable:
ALTER TABLE prefixTableName tableName alterSpecifications? partitionOptions?
;
prefixTableName:
;
alterSpecifications:
;
partitionOptions:
;
grammar DMLBase;
import SQLBase, Keyword, Symbol;
execute:
select
|insert
|update
|delete
;
insert:
;
//define delete rule template
select:
withClause
|unionSelect
;
withClause:
WITH RECURSIVE? cteClause (COMMA cteClause)*
unionSelect
;
cteClause:
cteName itemList? AS subquery
;
cteName:
ID
;
unionSelect:
selectExpression (UNION ALL? selectExpression)*
;
selectExpression:
selectClause
fromClause?
whereClause?
groupByClause?
orderByClause?
limitClause?
;
selectClause:
SELECT selectSpec selectExprs
;
selectSpec:
;
fromClause:
FROM tableReferences
;
tableReferences:
;
whereClause:
WHERE expr
;
groupByClause:
GROUP BY groupByItem (COMMA groupByItem)*
(WITH ROLLUP)?
havingClause?
;
havingClause:
HAVING expr
;
orderByClause:
ORDER BY groupByItem (COMMA groupByItem)*
;
groupByItem:
(columnName | NUMBER |expr) (ASC|DESC)?
;
limitClause:
LIMIT rangeClause
;
rangeClause:
NUMBER (COMMA NUMBER)*
| NUMBER OFFSET NUMBER
;
subquery:
LEFT_PAREN unionSelect RIGHT_PAREN
;
selectExprs:
(ASTERISK (COMMA selectExpr)*)
|selectExpr (COMMA ASTERISK)? (COMMA selectExpr)*
;
selectExpr:
bitExpr AS? alias?
;
bitExpr:
;
alias:
ID
;
//define delete rule template
delete:
deleteClause
whereClause?
orderByClause?
limitClause?
;
deleteClause:
;
partitionClause:
PARTITION itemList
;
update:
updateClause
setClause
whereClause?
orderByClause?
limitClause?
;
updateClause:
;
updateSpec:
;
setClause:
SET assignmentList
;
assignmentList:
assignment (COMMA assignment)*
;
assignment:
columnName EQ_OR_ASSIGN value
;
value:
DEFAULT
|expr
;
expr:
;
lexer grammar Keyword;
import Symbol;
SELECT: S E L E C T;
ALL: A L L;
ANY: A N Y;
DISTINCT: D I S T I N C T;
FROM: F R O M;
PARTITION: P A R T I T I O N;
WHERE: W H E R E;
GROUP: G R O U P;
BY: B Y;
ASC: A S C;
DESC: D E S C;
WITH: W I T H;
RECURSIVE: R E C U R S I V E;
ROLLUP: R O L L U P;
HAVING: H A V I N G;
WINDOW: W I N D O W;
AS: A S;
ORDER: O R D E R;
LIMIT: L I M I T;
OFFSET: O F F S E T;
INTO: I N T O;
ALTER: A L T E R;
TABLE: T A B L E;
COLUMN: C O L U M N;
ADD: A D D;
DROP: D R O P;
ENABLE: E N A B L E;
DISABLE: D I S A B L E;
CONSTRAINT: C O N S T R A I N T;
UNIQUE: U N I Q U E;
FULLTEXT: F U L L T E X T;
FOREIGN: F O R E I G N;
NONE: N O N E;
MODIFY: M O D I F Y;
RENAME: R E N A M E;
VALIDATION: V A L I D A T I O N;
IMPORT_: I M P O R T;
TABLESPACE: T A B L E S P A C E;
TRUNCATE: T R U N C A T E;
ANALYZE: A N A L Y Z E;
CHECK: C H E C K;
OPTIMIZE: O P T I M I Z E;
REBUILD: R E B U I L D;
REPAIR: R E P A I R;
REMOVE: R E M O V E;
UPGRADE: U P G R A D E;
TO: T O;
COPY: C O P Y;
PRIMARY: P R I M A R Y;
KEYS: K E Y S;
WITHOUT: W I T H O U T;
COALESCE: C O A L E S C E;
SET: S E T;
FOR: F O R;
UPDATE: U P D A T E;
SHARE: S H A R E;
OF: O F;
NOWAIT: N O W A I T;
LOCKED: L O C K E D;
LOCK: L O C K;
IN: I N;
MODE: M O D E;
INNER: I N N E R;
CROSS: C R O S S;
JOIN: J O I N;
ON: O N;
LEFT: L E F T;
RIGHT: R I G H T;
OUTER: O U T E R;
NATURAL: N A T U R A L;
USING: U S I N G;
USE: U S E;
INDEX: I N D E X;
KEY: K E Y;
IGNORE: I G N O R E;
FORCE: F O R C E;
UNION: U N I O N;
DEFAULT: D E F A U L T;
DELETE: D E L E T E;
QUICK: Q U I C K;
INSERT: I N S E R T;
VALUES: V A L U E S;
VALUE: V A L U E;
DUPLICATE: D U P L I C A T E;
EXISTS: E X I S T S;
IS: I S;
AND: A N D;
OR: O R;
XOR: X O R;
NOT: N O T;
BETWEEN: B E T W E E N;
NULL: N U L L;
TRUE:T R U E;
FALSE : F A L S E;
UNKNOWN: U N K N O W N;
SOUNDS: S O U N D S;
LIKE: L I K E;
DIV: D I V;
MOD: M O D;
BINARY: B I N A R Y;
ROW: R O W;
ESCAPE: E S C A P E;
REGEXP: R E G E X P;
DATE: D A T E;
TIME: T I M E;
TIMESTAMP:TIME S T A M P;
CASE: C A S E;
WHEN: W H E N;
THEN: T H E N;
IF: I F;
ELSE: E L S E;
END: E N D;
ID:
(BACK_QUOTA?[a-zA-Z_$][a-zA-Z0-9_$]* BACK_QUOTA? DOT)?
(BACK_QUOTA?[a-zA-Z_$][a-zA-Z0-9_$]* BACK_QUOTA?)
|[a-zA-Z_$0-9]+ DOT ASTERISK
;
grammar MySQLBase;
import MySQLKeyword,SQLBase,Keyword,Symbol;
//https://dev.mysql.com/doc/refman/8.0/en/expressions.html
expr:
expr OR expr
| expr OR_SYM expr
| expr XOR expr
| expr AND expr
| expr AND_SYM expr
| LEFT_PAREN expr RIGHT_PAREN
| NOT expr
| NOT_SYM expr
| booleanPrimary
;
booleanPrimary:
booleanPrimary IS NOT? (TRUE | FALSE | UNKNOWN |NULL)
| booleanPrimary SAFE_EQ predicate
| booleanPrimary comparisonOperator predicate
| booleanPrimary comparisonOperator (ALL | ANY) subquery
| predicate
;
comparisonOperator:
EQ_OR_ASSIGN | GTE | GT | LTE | LT | NEQ_SYM | NEQ
;
predicate:
bitExpr NOT? IN subquery
| bitExpr NOT? IN LEFT_PAREN simpleExpr ( COMMA simpleExpr)* RIGHT_PAREN
| bitExpr NOT? BETWEEN simpleExpr AND predicate
| bitExpr SOUNDS LIKE simpleExpr
| bitExpr NOT? LIKE simpleExpr (ESCAPE simpleExpr)*
| bitExpr NOT? REGEXP simpleExpr
| bitExpr
;
bitExpr:
bitExpr BIT_INCLUSIVE_OR bitExpr
| bitExpr BIT_AND bitExpr
| bitExpr SIGNED_LEFT_SHIFT bitExpr
| bitExpr SIGNED_RIGHT_SHIFT bitExpr
| bitExpr PLUS bitExpr
| bitExpr MINUS bitExpr
| bitExpr ASTERISK bitExpr
| bitExpr SLASH bitExpr
| bitExpr DIV bitExpr
| bitExpr MOD bitExpr
| bitExpr MOD_SYM bitExpr
| bitExpr BIT_EXCLUSIVE_OR bitExpr
//| bitExpr '+' interval_expr
//| bitExpr '-' interval_expr
| simpleExpr
;
simpleExpr:
| functionCall
| liter
| ID
| simpleExpr collateClause
//| param_marker
//| variable
| simpleExpr AND_SYM simpleExpr
| PLUS simpleExpr
| MINUS simpleExpr
| UNARY_BIT_COMPLEMENT simpleExpr
| NOT_SYM simpleExpr
| BINARY simpleExpr
| LEFT_PAREN expr RIGHT_PAREN
| ROW LEFT_PAREN simpleExpr( COMMA simpleExpr)* RIGHT_PAREN
| subquery
| EXISTS subquery
// | (identifier expr)
//| match_expr
//| case_expr
// | interval_expr
;
liter:
QUESTION
|INT
|NUMBER
|TRUE
|FALSE
|NULL
|LEFT_BRACE ID STRING RIGHT_BRACE //
|HEX_DIGIT
|ID? STRING collateClause?
|(DATE | TIME |TIMESTAMP)STRING
|ID? BIT_NUM collateClause?
;
subquery:
;
collateClause:
COLLATE ID
;
functionCall:
ID LEFT_PAREN(|expr ( COMMA expr)*) RIGHT_PAREN
;
value:
DEFAULT|expr;
valueList:
value (COMMA value)*
;
valueListWithParen:
LEFT_PAREN valueList RIGHT_PAREN
;
columnList:
LEFT_PAREN columnName (COMMA columnName)* RIGHT_PAREN
;
\ No newline at end of file
lexer grammar MySQLKeyword;
import Symbol;
FIRST: F I R S T;
AFTER: A F T E R;
SPATIAL: S P A T I A L;
ALGORITHM: A L G O R I T H M;
CHANGE: C H A N G E;
DISCARD: D I S C A R D;
CHARACTER: C H A R A C T E R;
COLLATE: C O L L A T E;
CONVERT: C O N V E R T;
SHARED: S H A R E D;
EXCLUSIVE: E X C L U S I V E;
REORGANIZE: R E O R G A N I Z E;
EXCHANGE: E X C H A N G E;
BTREE: B T R E E;
HASH: H A S H;
KEY_BLOCK_SIZE: K E Y UL_ B L O C K UL_ S I Z E;
PARSER: P A R S E R;
COMMENT: C O M M E N T;
AUTO_INCREMENT: A U T O UL_ I N C R E M E N T;
AVG_ROW_LENGTH: A V G UL_ R O W UL_ L E N G T H;
CHECKSUM: C H E C K S U M;
COMPRESSION: C O M P R E S S I O N;
ZLIB: Z L I B;
LZ: L Z;
CONNECTION: C O N N E C T I O N;
DATA: D A T A;
DIRECTORY: D I R E C T O R Y;
DELAY_KEY_WRITE: D E L A Y UL_ K E Y UL_ W R I T E;
ENCRYPTION: E N C R Y P T I O N;
ENGINE: E N G I N E;
INSERT_METHOD: I N S E R T UL_ M E T H O D;
NO: N O;
LAST: L A S T;
MAX_ROWS: M A X UL_ R O W S;
MIN_ROWS: M I N UL_ R O W S;
PACK_KEYS: P A C K UL_ K E Y S;
PASSWORD: P A S S W O R D;
ROW_FORMAT: R O W UL_ F O R M A T;
DYNAMIC: D Y N A M I C;
FIXED: F I X E D;
COMPRESSED: C O M P R E S S E D;
REDUNDANT: R E D U N D A N T;
COMPACT: C O M P A C T;
STATS_AUTO_RECALC: S T A T S UL_ A U T O UL_ R E C A L C;
STATS_PERSISTENT: S T A T S UL_ P E R S I S T E N T;
STATS_SAMPLE_PAGES: S T A T S UL_ S A M P L E UL_ P A G E S;
STORAGE: S T O R A G E;
DISK: D I S K;
MEMORY: M E M O R Y;
PARTITIONING: P A R T I T I O N I N G;
GENERATED: G E N E R A T E D;
ALWAYS: A L W A Y S;
COLUMN_FORMAT: C O L U M N UL_ F O R M A T;
VIRTUAL: V I R T U A L;
STORED: S T O R E D;
INPLACE: I N P L A C E;
SUBPARTITION: S U B P A R T I T I O N;
MAXVALUE: M A X V A L U E;
LESS: L E S S;
THAN: T H A N;
DISTINCTROW: D I S T I N C T R O W;
HIGH_PRIORITY: H I G H UL_ P R I O R I T Y;
STRAIGHT_JOIN: S T R A I G H T UL_ J O I N;
SQL_SMALL_RESULT: S Q L UL_ S M A L L UL_ R E S U L T;
SQL_BIG_RESULT: S Q L UL_ B I G UL_ R E S U L T;
SQL_BUFFER_RESULT: S Q L UL_ B U F F E R UL_ R E S U L T;
SQL_CACHE: S Q L UL_ C A C H E;
SQL_NO_CACHE: S Q L UL_ N O UL_ C A C H E;
SQL_CALC_FOUND_ROWS: S Q L UL_ C A L C UL_ F O U N D UL_ R O W S;
REFERENCES: R E F E R E N C E S;
MATCH: M A T C H;
FULL: F U L L;
PARTIAL: P A R T I A L;
SIMPLE: S I M P L E;
RESTRICT: R E S T R I C T;
CASCADE: C A S C A D E ;
ACTION: A C T I O N;
LINEAR: L I N E A R;
COLUMNS: C O L U M N S;
RANGE: R A N G E;
LIST: L I S T;
PARTITIONS: P A R T I T I O N S;
SUBPARTITIONS: S U B P A R T I T I O N S;
OUTFILE: O U T F I L E;
DUMPFILE: D U M P F I L E;
SKIP_: S K I P;
OJ: O J;
LOW_PRIORITY: L O W UL_ P R I O R I T Y;
DELAYED: D E L A Y E D;
grammar SQLBase;
import Keyword,Symbol;
expr:
;
itemList:
LEFT_PAREN item (COMMA item)* RIGHT_PAREN
;
item:
;
schemaName: ID;
tableName: ID;
columnName: ID;
STRING:
DOUBLE_QUOTA ('\\"'|.)*? DOUBLE_QUOTA
|SINGLE_QUOTA (SINGLE_QUOTA |.)*? SINGLE_QUOTA
;
INT :
'0' | [1-9] [0-9]*
;
NUMBER:
MINUS? INT DOT [0-9]+ EXP?
|MINUS? INT | EXP
|MINUS? INT
;
EXP :
E [+\-]? INT
;
fragment HEX :
[0-9a-fA-F]
;
HEX_DIGIT:
'0x' HEX+
|'X' SINGLE_QUOTA HEX+ SINGLE_QUOTA
;
BIT_NUM:
('0b' ('0'|'1')+)
|
(B SINGLE_QUOTA ('0'|'1')+ SINGLE_QUOTA)
;
WS:
[ \t\r\n] + ->skip
;
lexer grammar Symbol;
AND_SYM: '&&';
OR_SYM: '||';
NOT_SYM: '!';
UNARY_BIT_COMPLEMENT: '~';
BIT_INCLUSIVE_OR: '|';
BIT_AND: '&';
SIGNED_LEFT_SHIFT: '<<';
SIGNED_RIGHT_SHIFT: '>>';
BIT_EXCLUSIVE_OR: '^';
MOD_SYM: '%';
PLUS: '+' ;
MINUS: '-' ;
ASTERISK: '*' ;
SLASH: '/' ;
DOT: '.';
SAFE_EQ: '<=>';
EQ: '==';
EQ_OR_ASSIGN: '=';
NEQ: '!=';
NEQ_SYM: '<>';
GT: '>';
GTE: '>=';
LT: '<' ;
LTE: '<=' ;
LEFT_PAREN: '(';
RIGHT_PAREN: ')';
LEFT_BRACE: '{';
RIGHT_BRACE: '}';
COMMA: ',';
DOUBLE_QUOTA: '"';
SINGLE_QUOTA: '\'';
BACK_QUOTA: '`';
UL_: '_';
QUESTION: '?' ;
fragment A: [Aa];
fragment B: [Bb];
fragment C: [Cc];
fragment D: [Dd];
fragment E: [Ee];
fragment F: [Ff];
fragment G: [Gg];
fragment H: [Hh];
fragment I: [Ii];
fragment J: [Jj];
fragment K: [Kk];
fragment L: [Ll];
fragment M: [Mm];
fragment N: [Nn];
fragment O: [Oo];
fragment P: [Pp];
fragment Q: [Qq];
fragment R: [Rr];
fragment S: [Ss];
fragment T: [Tt];
fragment U: [Uu];
fragment V: [Vv];
fragment W: [Ww];
fragment X: [Xx];
fragment Y: [Yy];
fragment Z: [Zz];
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册