package com.meidusa.amoeba.mysql.test.parser; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.StringReader; import java.util.HashMap; import java.util.List; import java.util.Map; import com.meidusa.amoeba.parser.Parser; import com.meidusa.amoeba.parser.dbobject.Column; import com.meidusa.amoeba.parser.statement.DMLStatement; import com.meidusa.amoeba.parser.statement.PropertyStatement; import com.meidusa.amoeba.parser.statement.ShowStatement; import com.meidusa.amoeba.parser.statement.Statement; import com.meidusa.amoeba.parser.expression.Expression; import com.meidusa.amoeba.parser.function.*; import com.meidusa.amoeba.mysql.parser.sql.MysqlParser; import com.meidusa.amoeba.route.AbstractQueryRouter; import com.meidusa.amoeba.sqljep.function.Comparative; import com.meidusa.amoeba.util.StringUtil; public class MysqlParserTest { static Map<Column,Comparative> columnMap = new HashMap<Column,Comparative>(); public static void main(String[] args) throws Exception{ Map<String,Function> funMap = AbstractQueryRouter.loadFunctionMap("./build/build-mysql/conf/functionMap.xml"); if(args.length == 0){ List<String> sqlList = XmlToSqlList.executeXml2List(XmlToSqlList.class.getResourceAsStream("sql.xml")); for(String sql:sqlList){ if(sql != null){ String s = new String(new char[]{(char)0x5c,(char)0x5c}); sql = StringUtil.replace(sql,s,""); s = new String(new char[]{(char)0x5c,(char)0x27}); sql = StringUtil.replace(sql,s,""); } parser(funMap,sql); } }else{ BufferedReader reader = new BufferedReader(new FileReader(new File(args[0]))); StringBuffer buffer = new StringBuffer(); String line = null; while((line = reader.readLine()) != null){ if(line.trim().startsWith("#")){ continue; }else{ buffer.append(line).append("\n"); } } String sql = buffer.toString(); parser(funMap,sql); } } private static void parser(Map<String,Function> funMap,String sql){ Parser parser = new MysqlParser(new StringReader(sql)); parser.setFunctionMap(funMap); try { Statement statment = parser.doParse(); if(statment instanceof DMLStatement){ DMLStatement dmlStatment = (DMLStatement)statment; Expression expression = dmlStatment.getExpression(); System.out.println(sql+" =[ "+ expression+"], evaluated = {"+dmlStatment.evaluate(null)+"} ,parameterCount="+dmlStatment.getParameterCount()); }else if(statment instanceof PropertyStatement ){ PropertyStatement proStatment = (PropertyStatement)statment; System.out.println(proStatment.getProperties()); }else if(statment instanceof ShowStatement){ ShowStatement proStatment = (ShowStatement)statment; System.out.println(proStatment.getExpression()); } } catch (Exception e) { System.out.println("---------------------------------"); System.out.println("error sql:"+ sql); e.printStackTrace(); System.out.println("--------------------------"); } } }