【Java开源代码栏目提醒】:网学会员为需要Java开源代码的朋友们搜集整理了TranslatorUtils.java相关资料,希望对各位网友有所帮助!
package com.cownew.CowNewSQL.common;
import java.io.StringReader;
import antlr.RecognitionException;
import antlr.TokenStreamException;
import antlr.collections.AST;
import com.cownew.SQLParser.ast.grammar.SQLLexer;
import com.cownew.SQLParser.ast.grammar.SQLParser;
import com.cownew.SQLParser.ast.grammar.SQLTreeParser;
import com.cownew.SQLParser.ast.node.stmt.SqlDeleteStmtAST;
import com.cownew.SQLParser.ast.node.stmt.SqlInsertBodyAST;
import com.cownew.SQLParser.ast.node.stmt.SqlSelectStmtAST;
import com.cownew.SQLParser.ast.node.stmt.SqlUpdateBodyAST;
public class TranslatorUtils
{
public static String translateSQL(String stdSQL, DataBaseTypeEnum dbType)
throws TranslateException
{
try
{
return doTranslateSQL(stdSQL, dbType);
} catch (RecognitionException e)
{
throw new TranslateException(e.getMessage(), e);
} catch (TokenStreamException e)
{
throw new TranslateException(e.getMessage(), e);
}
}
private static String doTranslateSQL(String stdSQL, DataBaseTypeEnum dbType)
throws RecognitionException, TokenStreamException,
TranslateException
{
SQLLexer lexer = new SQLLexer(new StringReader(stdSQL));
SQLParser parser = new SQLParser(lexer);
parser.getASTFactory().setASTNodeClass(
"com.cownew.SQLParser.ast.node.SQLBaseAST");
parser.startRule();
AST p = parser.getAST();
SQLTreeParser walker = new SQLTreeParser();
walker.getASTFactory().setASTNodeClass(
"com.cownew.SQLParser.ast.node.SQLBaseAST");
AST p2 = null;
StringBuffer vendorSQL = new StringBuffer();
do
{
walker.startRule(p);
p2 = walker.getAST();
vendorSQL.append(translate(p2, dbType).trim()).append("\n");
} while ((p = p.getNextSibling()) != null);
return vendorSQL.toString();
}
private static String translate(AST p2, DataBaseTypeEnum dbType)
throws TranslateException
{
String text = null;
if (p2 instanceof SqlSelectStmtAST)
text = ASTSQLParser.translateSelectAST((SqlSelectStmtAST) p2,
dbType);
else if (p2 instanceof SqlDeleteStmtAST)
text = ASTSQLParser.translateDeleteStmt((SqlDeleteStmtAST) p2,
dbType);
else if (p2 instanceof SqlInsertBodyAST)
text = ASTSQLParser.translateInsertStmt((SqlInsertBodyAST) p2,
dbType);
else if (p2 instanceof SqlUpdateBodyAST)
text = ASTSQLParser.translateUpdateStmt((SqlUpdateBodyAST) p2,
dbType);
return text;
}
public static void main(String[] args)
{
try
{
System.out.println(translateSQL("select * from(select top 20 * from T1)",
DataBaseTypeEnum.MYSQL));
System.out.println(translateSQL("select now(),trim(F1) from T1",
DataBaseTypeEnum.MSSQLServer));
}catch (TranslateException e)
{
e.printStackTrace();
}
}
}