sql server parser

This commit is contained in:
温少
2012-03-18 01:46:15 +08:00
parent cbaa488225
commit 09be39c326
10 changed files with 112 additions and 0 deletions
@@ -0,0 +1,7 @@
package com.alibaba.druid.sql.dialect.sqlserver.ast;
import com.alibaba.druid.sql.ast.SQLStatement;
public interface SQLServerStatement extends SQLStatement {
}
@@ -0,0 +1,27 @@
package com.alibaba.druid.sql.dialect.sqlserver.ast;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor;
public class SQLServerUseStatement extends SQLServerObjectImpl implements SQLServerStatement {
private static final long serialVersionUID = 1L;
private SQLName database;
public SQLName getDatabase() {
return database;
}
public void setDatabase(SQLName database) {
this.database = database;
}
@Override
public void accept0(SQLServerASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, database);
}
visitor.endVisit(this);
}
}
@@ -86,6 +86,7 @@ public class SQLServerLexer extends Lexer {
map.put("WITH", Token.WITH);
map.put("CURSOR", Token.CURSOR);
map.put("TOP", Token.TOP);
map.put("USE", Token.USE);
DEFAULT_SQL_SERVER_KEYWORDS = new Keywords(map);
}
@@ -1,6 +1,7 @@
package com.alibaba.druid.sql.dialect.sqlserver.visitor;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
@@ -13,4 +14,8 @@ public interface SQLServerASTVisitor extends SQLASTVisitor {
boolean visit(Top x);
void endVisit(Top x);
boolean visit(SQLServerUseStatement x);
void endVisit(SQLServerUseStatement x);
}
@@ -1,6 +1,7 @@
package com.alibaba.druid.sql.dialect.sqlserver.visitor;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;
@@ -26,4 +27,14 @@ public class SQLServerASTVisitorAdapter extends SQLASTVisitorAdapter implements
}
@Override
public boolean visit(SQLServerUseStatement x) {
return true;
}
@Override
public void endVisit(SQLServerUseStatement x) {
}
}
@@ -2,6 +2,7 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
@@ -67,4 +68,16 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
}
@Override
public boolean visit(SQLServerUseStatement x) {
print("USE ");
x.getDatabase().accept(this);
return false;
}
@Override
public void endVisit(SQLServerUseStatement x) {
}
}
@@ -2,6 +2,7 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -28,4 +29,14 @@ public class SQLServerSchemaStatVisitor extends SchemaStatVisitor implements SQL
}
@Override
public boolean visit(SQLServerUseStatement x) {
return false;
}
@Override
public void endVisit(SQLServerUseStatement x) {
}
}
@@ -134,6 +134,12 @@ public class SQLStatementParser extends SQLParser {
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.USE) {
SQLStatement stmt = parseUse();
statementList.add(stmt);
continue;
}
if (identifierEquals("CALL")) {
SQLCallStatement stmt = parseCall();
@@ -148,6 +154,10 @@ public class SQLStatementParser extends SQLParser {
throw new ParserException("TODO " + lexer.token());
}
}
public SQLStatement parseUse() {
throw new ParserException("TODO " + lexer.token());
}
protected SQLDropTableStatement parseDropTable(boolean acceptDrop) {
if (acceptDrop) {
@@ -70,6 +70,7 @@ public enum Token {
CAST("CAST"),
USER("USER"),
COLUMN("COLUMN"),
USE("USE"),
AND("AND"),
OR("OR"),