📄 mysqlparser.jj
字号:
"\u0bb7" - "\u0bb9",
"\u0c05" - "\u0c0c",
"\u0c0e" - "\u0c10",
"\u0c12" - "\u0c28",
"\u0c2a" - "\u0c33",
"\u0c35" - "\u0c39",
"\u0c60" - "\u0c61",
"\u0c85" - "\u0c8c",
"\u0c8e" - "\u0c90",
"\u0c92" - "\u0ca8",
"\u0caa" - "\u0cb3",
"\u0cb5" - "\u0cb9",
"\u0cde",
"\u0ce0" - "\u0ce1",
"\u0d05" - "\u0d0c",
"\u0d0e" - "\u0d10",
"\u0d12" - "\u0d28",
"\u0d2a" - "\u0d39",
"\u0d60" - "\u0d61",
"\u0e01" - "\u0e2e",
"\u0e30",
"\u0e32" - "\u0e33",
"\u0e40" - "\u0e46",
"\u0e81" - "\u0e82",
"\u0e84",
"\u0e87" - "\u0e88",
"\u0e8a",
"\u0e8d",
"\u0e94" - "\u0e97",
"\u0e99" - "\u0e9f",
"\u0ea1" - "\u0ea3",
"\u0ea5",
"\u0ea7",
"\u0eaa" - "\u0eab",
"\u0ead" - "\u0eae",
"\u0eb0",
"\u0eb2" - "\u0eb3",
"\u0ebd",
"\u0ec0" - "\u0ec4",
"\u0ec6",
"\u0edc" - "\u0edd",
"\u0f40" - "\u0f47",
"\u0f49" - "\u0f69",
"\u10a0" - "\u10c5",
"\u10d0" - "\u10f6",
"\u1100" - "\u1159",
"\u115f" - "\u11a2",
"\u11a8" - "\u11f9",
"\u1e00" - "\u1e9b",
"\u1ea0" - "\u1ef9",
"\u1f00" - "\u1f15",
"\u1f18" - "\u1f1d",
"\u1f20" - "\u1f45",
"\u1f48" - "\u1f4d",
"\u1f50" - "\u1f57",
"\u1f59",
"\u1f5b",
"\u1f5d",
"\u1f5f" - "\u1f7d",
"\u1f80" - "\u1fb4",
"\u1fb6" - "\u1fbc",
"\u1fbe",
"\u1fc2" - "\u1fc4",
"\u1fc6" - "\u1fcc",
"\u1fd0" - "\u1fd3",
"\u1fd6" - "\u1fdb",
"\u1fe0" - "\u1fec",
"\u1ff2" - "\u1ff4",
"\u1ff6" - "\u1ffc",
"\u207f",
"\u2102",
"\u2107",
"\u210a" - "\u2113",
"\u2115",
"\u2118" - "\u211d",
"\u2124",
"\u2126",
"\u2128",
"\u212a" - "\u2131",
"\u2133" - "\u2138",
"\u3005",
"\u3031" - "\u3035",
"\u3041" - "\u3094",
"\u309b" - "\u309e",
"\u30a1" - "\u30fa",
"\u30fc" - "\u30fe",
"\u3105" - "\u312c",
"\u3131" - "\u318e",
"\u4e00" - "\u9fa5",
"\uac00" - "\ud7a3",
"\uf900" - "\ufa2d",
"\ufb00" - "\ufb06",
"\ufb13" - "\ufb17",
"\ufb1f" - "\ufb28",
"\ufb2a" - "\ufb36",
"\ufb38" - "\ufb3c",
"\ufb3e",
"\ufb40" - "\ufb41",
"\ufb43" - "\ufb44",
"\ufb46" - "\ufbb1",
"\ufbd3" - "\ufd3d",
"\ufd50" - "\ufd8f",
"\ufd92" - "\ufdc7",
"\ufdf0" - "\ufdfb",
"\ufe70" - "\ufe72",
"\ufe74",
"\ufe76" - "\ufefc",
"\uff21" - "\uff3a",
"\uff41" - "\uff5a",
"\uff66" - "\uffbe",
"\uffc2" - "\uffc7",
"\uffca" - "\uffcf",
"\uffd2" - "\uffd7",
"\uffda" - "\uffdc"
]>
| < #SPECIAL_CHARS: "$" | "_">
| < STRING_LITERAL: "'" (~["'"])* "'" ("'" (~["'"])* "'")*>
| < S_QUOTED_IDENTIFIER: "\"" (~["\n","\r","\""])* "\"" >
| < S_COMMA_IDENTIFIER: "`" ((["@"])*( <LETTER> )+ ( <DIGIT> | "-"|<LETTER> |<SPECIAL_CHARS>)*) "`">
| < S_PARAMETER_MARKER: "?">
}
Statment parse() :
{
Expression expression = null;
Statment statment = null;
}
{
(
statment = DeleteQuery()
|
statment = InsertQuery()
|
statment= SelectQuery()
|
statment = UpdateQuery()
|
"SET" statment = PropertySetQuery(new PropertyStatment())
|
statment = SelectSchema()
|(<K_COMMIT> /*[<K_WORK>] [<K_AND> [<K_NO>] <K_CHAIN>] [[<K_NO>] <K_RELEASE>]*/){statment = new CommitStatment();}
|(<K_ROLLBACK>/*[<K_WORK>] [<K_AND> [<K_NO>] <K_CHAIN>] [[<K_NO>] <K_RELEASE>]*/){statment = new RollbackStatment();}
|(<K_START_TRANSACTION>){statment = new StartTansactionStatment();}
)(";"|<EOF>)
{
if(statment instanceof DMLStatment){
List<Table> list = new ArrayList<Table>();
for(Map.Entry<String,Table> entry : tableAliasMap.entrySet()){
if(!list.contains(entry.getValue())){
list.add(entry.getValue());
}
}
Table[] tables = new Table[list.size()];
list.toArray(tables);
((DMLStatment)statment).setTables(tables);
}
return statment;
}
}
Statment SelectSchema() :{
Token t = null;
String schema = null;
}{
<K_USE> (token=<STRING_LITERAL>{schema = (t.image).substring(1,t.image.length()-1);}
|t=<S_QUOTED_IDENTIFIER>{schema = (t.image).substring(1,t.image.length()-1);}
|t=<S_COMMA_IDENTIFIER>{schema = (t.image).substring(1,t.image.length()-1);}
|t=<IDENTIFIER>{schema = t.image;}){
PropertyStatment statment = new PropertyStatment();
statment.addProperty("schema",new ConstantExpression(schema));
return statment;
}
}
/*
Statment ShowQuery() :{
Expression expression = null;
Column column = null;
Table table = null;
}{
"SHOW"{return ShowStatment.STATMENT;}//[(<K_CREATE> [<K_TABLE>|<IDENTIFIER>])|<K_FULL>] column = ColumnName() [<K_FROM> table = TableReference()]{
ColumnExpression columnExpression = new ColumnExpression();
columnExpression.setColumn(column);
ShowStatment show = new ShowStatment();
show.setExpression(columnExpression);
return show;
}
}
*/
Statment PropertySetQuery(PropertyStatment statment) :{
Expression expression = null;
Token name = null;
Token valueToken = null;
Comparable value = null;
String propertyName = null;
}{
([<K_SESSION> | <K_OPTION>] ((<K_TRANSACTION_ISOLATION_LEVEL>(
<K_TRANSACTION_READ_COMMITTED>{value=Connection.TRANSACTION_READ_COMMITTED;}
|<K_TRANSACTION_READ_UNCOMMITTED>{value=Connection.TRANSACTION_READ_UNCOMMITTED;}
|<K_TRANSACTION_SERIALIZABLE>{value=Connection.TRANSACTION_SERIALIZABLE;}
|<K_TRANSACTION_REPEATABLE_READ>{value=Connection.TRANSACTION_REPEATABLE_READ;}
)){propertyName = "TRANSACTIONISOLATION";}
|
(<K_CLIENT_CHARSET>{propertyName = "charset";}
(valueToken = <IDENTIFIER> {value = valueToken.image;}
| valueToken = <STRING_LITERAL>{value = valueToken.image;}
|valueToken = <S_QUOTED_IDENTIFIER>{value = valueToken.image;}
))
|
(name = <IDENTIFIER>{propertyName = name.image;}["." name=<IDENTIFIER>{propertyName = propertyName+"."+name.image;}] ["="] (
valueToken= <K_NULL>{ value = "null";}
| valueToken= <K_TRUE> {value = Boolean.TRUE;}
| valueToken= <K_FALSE> {value = Boolean.FALSE;}
| valueToken = <IDENTIFIER> {value = valueToken.image;}
| valueToken = <INTEGER_LITERAL>{value = Long.valueOf(valueToken.image);}
| valueToken = <STRING_LITERAL>{value = valueToken.image;} //{value = valueToken.image.substring(1,token.image.length()-1);}
| valueToken = <S_QUOTED_IDENTIFIER>{value = valueToken.image;}
))
))["," PropertySetQuery(statment)]{
if(value != null){
ConstantExpression consExp= new ConstantExpression(value);
statment.addProperty(propertyName,consExp);
}
return statment;
}
}
Statment UpdateQuery():
{
Expression expression = null;
Table table = null;
DMLStatment statment = null;
}
{
(table = UpdateStatement()
[expression= WhereClause() ]){
statment = new UpdateStatment();
statment.setExpression(expression);
return statment;
}
}
Table UpdateStatement():
{
Table table = null;
}
{
("UPDATE"
table = TableReference()["," TableReference()]
"SET" AssignmentClause()){
return table;
}
}
Expression AssignmentClause():
{
Expression expression = null;
}
{
(expression= ColumnValues(){
}
| ( "(" UpdateColumn() ("," UpdateColumn())* ")" "=" "(" ( LOOKAHEAD(2) UpdateValues() | FullSelectStatement() ) ")" )
){
return expression;
}
}
void UpdateColumn():
{}
{
ColumnName()
}
List<Expression> UpdateValues():
{
Expression expression = null;
List<Expression> list = new ArrayList<Expression>();
}
{
expression= UpdateValue(){list.add(expression);} ("," expression=UpdateValue(){list.add(expression);})*{
return list;
}
}
Expression UpdateValue():
{
Expression expression = null;
}
{
expression = SQLSimpleExpression(){
return expression;
}
}
Statment DeleteQuery():
{
Expression expression = null;
Table table = null;
DMLStatment statment = null;
}
{
(table = DeleteStatement()
[expression = WhereClause()]){
statment = new DeleteStatment();
statment.setExpression(expression);
return statment;
}
}
Table DeleteStatement():
{
Table table = null;
}
{
"DELETE" ["FROM"] table = TableReference(){
return table;
}
}
Statment InsertQuery():
{
Table table = null;
DMLStatment statment = new InsertStatment();
Expression expression = null;
List<Column> insertColumns = null;
List<Expression> insertValues = null;
}
{
(<K_INSERT>|<K_REPLACE>) ["INTO"] table = TableName() ([LOOKAHEAD(4) "(" insertColumns = InsertColumns() ")"]
( insertValues = InsertValues() | expression = FullSelectStatement())
{
if(insertValues == null){
statment.setExpression(expression);
}else{
if(insertColumns != null){
AndExpression andExpression = new AndExpression();
int index = 0;
for(Column column:insertColumns){
ColumnExpression colExpression = new ColumnExpression();
colExpression.setColumn(column);
ComparisonExpression compExp = new ComparisonExpression();
compExp.setComparison(Comparative.Equivalent);
compExp.setExpression(insertValues.get(index));
colExpression.setExpression(compExp);
andExpression.addExpression(colExpression);
index ++;
}
statment.setExpression(andExpression);
}
}
} | "SET" expression = AssignmentClause(){statment.setExpression(expression);}){
return statment;
}
}
List<Column> InsertColumns() :
{
List<Column> insertColumns = new ArrayList<Column>();
Column column = null;
}
{
(column = InsertColumn(){insertColumns.add(column);} ("," column = InsertColumn(){insertColumns.add(column);})*){
return insertColumns;
}
}
//This is just a wrapper to provide different formatting in case of Insert
Column InsertColumn():
{
Column column = null;
}
{
column = ColumnName(){
return column;
}
}
List<Expression> InsertValues():
{
List<Expression> insertValues = new ArrayList<Expression>();
Expression expression = null;
}
{
("VALUES" "(" expression = InsertValue(){insertValues.add(expression);} ("," expression = InsertValue(){insertValues.add(expression);})* ")"){
return insertValues;
}
}
//This is just a wrapper to provide different formatting in case of Insert
Expression InsertValue():
{
Expression expression = null;
}
{
expression = SQLSimpleExpression(){
return expression;
}
}
Statment SelectQuery():
{
Expression expression = null;
DMLStatment statment = null;
}
{
(expression = FullSelectStatement()
(ExtraClauses())*)
{
statment = new SelectStatment();
statment.setExpression(expression);
return statment;
}
}
Expression ColumnValues() :
{
Expression expression = null;
AndExpression andExpression = new AndExpression();
}
{
(expression= ColumnValue(){if(expression != null) andExpression.addExpression(expression);} ("," expression = ColumnValue(){if(expression != null) andExpression.addExpression(expression);})*){
return andExpression;
}
}
Expression ColumnValue() :
{
ColumnExpression colExpression = new ColumnExpression();
Expression expression = null;
Column column = null;
}
{
(column= ColumnName() "=" expression = UpdatedValue()){
if(expression == null) return null;
colExpression.setColumn(column);
ComparisonExpression compExp = new ComparisonExpression();
compExp.setComparison(Comparative.Equivalent);
compExp.setExpression(expression);
colExpression.setExpression(compExp);
return colExpression;
}
}
Expression UpdatedValue() : // Can be a subquery or a expression
{
Expression expression = null;
}
{
(LOOKAHEAD(("(")+ "SELECT")
"(" expression = SubSelectStatement() ")"
|
expression= SQLSimpleExpression()){
return expression;
}
}
ComparisonExpression IsNullClause() :
{
int comparison = Comparative.Equivalent;
}
{
(<K_IS> [<K_NOT>{comparison = Comparative.NotEquivalent;}] <K_NULL>)
{
ComparisonExpression comparativeExpression = new ComparisonExpression();
comparativeExpression.setComparison(comparison);
comparativeExpression.setExpression(new ConstantExpression(null));
return comparativeExpression;
}
}
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -