aladdinparser.jj
来自「mysql集群」· JJ 代码 · 共 2,052 行 · 第 1/4 页
JJ
2,052 行
"\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: "?"|":"(<DIGIT>)*>
}
Statment parse() :
{/*@bgen(jjtree) Statment */
SimpleNode jjtn000 = new SimpleNode(JJTSTATMENT);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);
/*@egen*/
Expression expression = null;
Statment statment = null;
}
{/*@bgen(jjtree) Statment */
try {
/*@egen*/
(((
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>))
|
(statment = ShowQuery()))/*@bgen(jjtree)*/
{
jjtree.closeNodeScope(jjtn000, true);
jjtc000 = false;
}
/*@egen*/
{
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;
}/*@bgen(jjtree)*/
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
jjtc000 = false;
} else {
jjtree.popNode();
}
if (jjte000 instanceof RuntimeException) {
throw (RuntimeException)jjte000;
}
if (jjte000 instanceof ParseException) {
throw (ParseException)jjte000;
}
throw (Error)jjte000;
} finally {
if (jjtc000) {
jjtree.closeNodeScope(jjtn000, true);
}
}
/*@egen*/
}
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();
if(expression != null){
if(expression instanceof BaseExpressionList){
if(((BaseExpressionList)expression).getSize()>0){
statment.setExpression(expression);
}
}else{
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();
if(expression != null){
if(expression instanceof BaseExpressionList){
if(((BaseExpressionList)expression).getSize()>0){
statment.setExpression(expression);
}
}else{
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){
if(expression != null){
if(expression instanceof BaseExpressionList){
if(((BaseExpressionList)expression).getSize()>0){
statment.setExpression(expression);
}
}else{
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 ++;
}
if(andExpression.getSize()>0){
statment.setExpression(andExpression);
}
}
}
} | "SET" expression = AssignmentClause(){
if(expression != null){
if(expression instanceof BaseExpressionList){
if(((BaseExpressionList)expression).getSize()>0){
statment.setExpression(expression);
}
}else{
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();
if(expression != null){
if(expression instanceof BaseExpressionList){
if(((BaseExpressionList)expression).getSize()>0){
statment.setExpression(expression);
}
}else{
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;
}
}
/*
* Tabel Column
*/
Column ColumnName() :
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?