This commit is contained in:
温少
2012-03-14 14:02:18 +08:00
parent 649e51505d
commit b266a9c820
7 changed files with 40 additions and 17 deletions
@@ -59,7 +59,7 @@ public class MySqlMappingProvider implements MappingProvider {
MySqlDeleteStatement stmt = parser.parseDeleteStatement();
if (stmt.getTableSource() == null) {
Entity entity = engine.getFirstEntity();
stmt.setTableName(new SQLIdentifierExpr(entity.getName()));
stmt.setTableSource(new SQLIdentifierExpr(entity.getName()));
}
return stmt;
@@ -67,7 +67,14 @@ public class MySqlMappingProvider implements MappingProvider {
public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql) {
MySqlStatementParser parser = new MySqlStatementParser(sql);
return parser.parseUpdateStatement();
SQLUpdateStatement stmt = parser.parseUpdateStatement();
if (stmt.getTableSource() == null) {
Entity entity = engine.getFirstEntity();
stmt.setTableSource(new SQLIdentifierExpr(entity.getName()));
}
return stmt;
}
public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql) {
@@ -35,6 +35,10 @@ public class SQLDeleteStatement extends SQLStatementImpl {
public SQLExprTableSource getTableSource() {
return tableSource;
}
public void setTableSource(SQLExpr expr) {
this.setTableSource(new SQLExprTableSource(expr));
}
public void setTableSource(SQLExprTableSource tableSource) {
this.tableSource = tableSource;
@@ -45,7 +49,7 @@ public class SQLDeleteStatement extends SQLStatementImpl {
}
public void setTableName(SQLName tableName) {
this.tableSource = new SQLExprTableSource(tableName);
this.setTableSource(new SQLExprTableSource(tableName));
}
public void setTableName(String name) {
@@ -39,6 +39,10 @@ public class SQLUpdateStatement extends SQLStatementImpl {
public SQLTableSource getTableSource() {
return tableSource;
}
public void setTableSource(SQLExpr expr) {
this.setTableSource(new SQLExprTableSource(expr));
}
public void setTableSource(SQLTableSource tableSource) {
this.tableSource = tableSource;
@@ -84,9 +84,8 @@ public class MySqlDeleteStatement extends SQLDeleteStatement {
}
return (SQLName) tableSources.get(0).getExpr();
}
public void setTableName(SQLName tableName) {
SQLExprTableSource tableSource = new SQLExprTableSource(tableName);
public void setTableSource(SQLExprTableSource tableSource) {
if (tableSources.size() == 0) {
tableSources.add(tableSource);
} else {
@@ -294,7 +294,7 @@ public class SQLStatementParser extends SQLParser {
public SQLStatement parseCreate() throws ParserException {
char mark_ch = lexer.current();
int mark_bp = lexer.bp();
accept(Token.CREATE);
Token token = lexer.token();
@@ -313,14 +313,14 @@ public class SQLStatementParser extends SQLParser {
lexer.reset(mark_bp, mark_ch, Token.CREATE);
return parseCreateProcedure();
}
//lexer.reset(mark_bp, mark_ch, Token.CREATE);
// lexer.reset(mark_bp, mark_ch, Token.CREATE);
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
throw new ParserException("TODO " + lexer.token());
}
public SQLStatement parseCreateProcedure() {
throw new ParserException("TODO " + lexer.token());
}
@@ -346,13 +346,15 @@ public class SQLStatementParser extends SQLParser {
}
public SQLUpdateStatement parseUpdateStatement() throws ParserException {
accept(Token.UPDATE);
SQLUpdateStatement udpateStatement = new SQLUpdateStatement();
if (lexer.token() == Token.UPDATE) {
lexer.nextToken();
SQLTableSource tableSource = this.exprParser.createSelectParser().parseTableSource();
udpateStatement.setTableSource(tableSource);
SQLTableSource tableSource = this.exprParser.createSelectParser().parseTableSource();
udpateStatement.setTableSource(tableSource);
}
accept(Token.SET);
for (;;) {
@@ -706,7 +706,8 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
x.getTableSource().accept(this);
print(" SET ");
println();
print("SET ");
for (int i = 0, size = x.getItems().size(); i < size; ++i) {
if (i != 0) {
print(", ");
@@ -715,7 +716,8 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
}
if (x.getWhere() != null) {
print(" WHERE ");
println();
print("WHERE ");
x.getWhere().setParent(x);
x.getWhere().accept(this);
}