【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,BaseSQLTranslator.java,希望对大家有所帮助!
package com.cownew.CowNewSQL.dialect;
import java.util.List;
import com.cownew.CowNewSQL.IMethodTranslator;
import com.cownew.CowNewSQL.ISQLTranslator;
import com.cownew.CowNewSQL.common.TranslateException;
import com.cownew.SQLParser.ast.node.enumdef.BinaryOprtTypeEnum;
import com.cownew.SQLParser.ast.node.enumdef.JoinTypeEnum;
import com.cownew.SQLParser.ast.node.enumdef.OrderByTypeEnum;
import com.cownew.SQLParser.ast.node.enumdef.TriOprtTypeEnum;
import com.cownew.SQLParser.ast.node.enumdef.UnaryOprtTypeEnum;
import com.cownew.SQLParser.ast.node.expr.SqlBetweenExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlBinaryOpExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlCharExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlDateTimeExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlDoubleExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlIdentifierExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlInExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlIntExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlIsExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlLikeExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlListExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlMethodExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlNCharExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlNullExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlQueryExprAST;
import com.cownew.SQLParser.ast.node.expr.SqlUnaryOpExprAST;
import com.cownew.SQLParser.ast.node.item.IJoinedable;
import com.cownew.SQLParser.ast.node.item.SqlJoinTableItemAST;
import com.cownew.SQLParser.ast.node.item.SqlOrderByItemAST;
import com.cownew.SQLParser.ast.node.item.SqlQueryColumnItemAST;
import com.cownew.SQLParser.ast.node.item.SqlSubQueryTableItemAST;
import com.cownew.SQLParser.ast.node.item.SqlTableItemAST;
import com.cownew.SQLParser.ast.node.item.SqlTableSourceBaseAST;
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.SqlStmtBaseAST;
import com.cownew.SQLParser.ast.node.stmt.SqlUpdateBodyAST;
//SQL翻译中()只夹在必要的sql中
abstract public class BaseSQLTranslator implements ISQLTranslator {
private int upperLayerPriority = -1;
public final String translateStmt(SqlStmtBaseAST stmt)
throws TranslateException {
if (stmt instanceof SqlSelectStmtAST) {
return translateStmt((SqlSelectStmtAST) stmt);
} else if (stmt instanceof SqlInsertBodyAST) {
return translateStmt((SqlInsertBodyAST) stmt);
} else if (stmt instanceof SqlDeleteStmtAST) {
return translateStmt((SqlDeleteStmtAST) stmt);
} else if (stmt instanceof SqlUpdateBodyAST) {
return translateStmt((SqlUpdateBodyAST) stmt);
} else {
throw new TranslateException("unkown SqlStmtBaseAST type");
}
}
public String translateStmt(SqlUpdateBodyAST bodyAST)
throws TranslateException {
StringBuffer sql = new StringBuffer();
sql.append("UPDATE ");
sql.append(bodyAST.getTableName());
sql.append(" SET ");
List<SqlBinaryOpExprAST> updateList = bodyAST.getUpdateList();
for (int i = 0, n = updateList.size(); i < n; i++) {
if (i > 0) {
sql.append(", ");
}
sql.append(translateExpr(updateList.get(i)));
}
List<SqlTableSourceBaseAST> fromClauseList = bodyAST
.getTableSourceList();
if (fromClauseList != null) {
for (SqlTableSourceBaseAST fromClause : fromClauseList) {
// SqlTableSourceBaseAST fromClause = bodyAST.getTableSource();
if (fromClause != null) {
sql.append("\nFROM(");
if (fromClause instanceof SqlJoinTableItemAST) {
throw new TranslateException("JoinTable not allow here!");
} else if (fromClause instanceof SqlSubQueryTableItemAST) {
sql
.append(translateSubQueryTableItem((SqlSubQueryTableItemAST) fromClause));
} else if (fromClause instanceof SqlTableItemAST) {
sql
.append(translateTableItem((SqlTableItemAST) fromClause));
}
sql.append(")");
}
}
}
SqlExprAST whereClause =