⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqlparser.jj

📁 mysql集群
💻 JJ
📖 第 1 页 / 共 4 页
字号:
				"\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 + -