This commit is contained in:
温少
2012-03-18 22:07:04 +08:00
parent afdcf3570c
commit 9ffd91524e
8 changed files with 55 additions and 38 deletions
@@ -14,31 +14,39 @@ public class SQLServerObjectReferenceExpr extends SQLServerObjectImpl implements
private String server;
private String database;
private String schema;
private String object;
public SQLServerObjectReferenceExpr() {
public SQLServerObjectReferenceExpr(){
}
public SQLServerObjectReferenceExpr(SQLExpr owner, String name) {
public SQLServerObjectReferenceExpr(SQLExpr owner){
if (owner instanceof SQLIdentifierExpr) {
this.database = ((SQLIdentifierExpr) owner).getName();
this.object = name;
} else if (owner instanceof SQLPropertyExpr) {
SQLPropertyExpr propExpr = (SQLPropertyExpr) owner;
this.server = ((SQLIdentifierExpr) propExpr.getOwner()).getName();
this.database = propExpr.getName();
this.object = name;
} else {
throw new IllegalArgumentException(owner.toString());
}
}
public String getSimleName() {
if (schema != null) {
return schema;
}
if (database != null) {
return database;
}
return server;
}
@Override
public void accept0(SQLServerASTVisitor visitor) {
if (visitor.visit(this)) {
}
visitor.endVisit(this);
}
@@ -47,31 +55,25 @@ public class SQLServerObjectReferenceExpr extends SQLServerObjectImpl implements
boolean flag = false;
if (server != null) {
buf.append(server);
buf.append('.');
flag = true;
}
if (flag) {
buf.append('.');
}
if (database != null) {
buf.append(database);
buf.append('.');
flag = true;
} else {
if (flag) {
buf.append('.');
}
}
}
if (flag) {
buf.append('.');
}
if (schema != null) {
buf.append(schema);
buf.append('.');
flag = true;
} else {
if (flag) {
buf.append('.');
}
}
buf.append(object);
}
public String getServer() {
@@ -98,12 +100,4 @@ public class SQLServerObjectReferenceExpr extends SQLServerObjectImpl implements
this.schema = schema;
}
public String getObject() {
return object;
}
public void setObject(String object) {
this.object = object;
}
}
@@ -2,6 +2,7 @@ package com.alibaba.druid.sql.dialect.sqlserver.parser;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
import com.alibaba.druid.sql.dialect.sqlserver.ast.expr.SQLServerObjectReferenceExpr;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
@@ -27,15 +28,16 @@ public class SQLServerExprParser extends SQLExprParser {
return super.primaryRest(expr);
}
public SQLName nameRest(SQLName name) throws ParserException {
public SQLName nameRest(SQLName expr) throws ParserException {
if (lexer.token() == Token.DOTDOT) {
lexer.nextToken();
String text = lexer.stringVal();
lexer.nextToken();
name = new SQLServerObjectReferenceExpr(name, text);
SQLServerObjectReferenceExpr owner = new SQLServerObjectReferenceExpr(expr);
expr = new SQLPropertyExpr(owner, text);
}
return super.nameRest(name);
return super.nameRest(expr);
}
}