001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.*;
005import gudusoft.gsqlparser.nodes.*;
006
007public class TSetDatabaseObjectStmt extends TCustomSqlStatement {
008    private TObjectName databaseObjectName;
009    private EDbObjectType objectType = EDbObjectType.table;
010
011    public TSetDatabaseObjectStmt(EDbVendor dbvendor) {
012        super(dbvendor);
013        sqlstatementtype = ESqlStatementType.sstSetDatabaseObject;
014    }
015
016    public TObjectName getDatabaseObjectName() {
017        return databaseObjectName;
018    }
019
020    public EDbObjectType getObjectType() {
021        return objectType;
022    }
023
024    private TPTNodeList<TSetAssignment> assignments;
025
026    public TPTNodeList<TSetAssignment> getAssignments() {
027        return assignments;
028    }
029
030    public int doParseStatement(TCustomSqlStatement psql) {
031        if (rootNode == null) return -1;
032        super.doParseStatement(psql);
033        if (rootNode instanceof TDummy){
034            databaseObjectName = (TObjectName)(((TDummy)rootNode).node1);
035            if (databaseObjectName != null){
036                databaseObjectName.setDbObjectType(EDbObjectType.schema);
037            }
038            objectType    = ((TDummy)rootNode).objectType;
039        }else if (rootNode instanceof  TSetSqlNode){
040            TSetSqlNode setSqlNode = (TSetSqlNode)rootNode;
041            assignments = setSqlNode.getAssignments();
042            if (assignments != null){
043                if (assignments.size() == 1){
044                    TSetAssignment setAssignment = assignments.getElement(0);
045                    if (setAssignment.getParameterValue().getExpressionType() == EExpressionType.simple_comparison_t){
046                        //SET CURRENT SCHEMA = "ALGODB5 ";
047                        TExpression left = setAssignment.getParameterValue().getLeftOperand();
048                        if (left.getExpressionType() == EExpressionType.simple_constant_t){
049                            TConstant constant = left.getConstantOperand();
050                            if (constant.getLiteralType() == ELiteralType.current_schema){
051                                objectType = EDbObjectType.schema;
052                                databaseObjectName = setAssignment.getParameterValue().getRightOperand().getObjectOperand();
053                                if (databaseObjectName != null) {
054                                    databaseObjectName.setDbObjectType(EDbObjectType.schema);
055                                }
056                            }
057                        }
058
059                    }
060                }
061            }
062
063        }
064        return 0;
065    }
066    public void accept(TParseTreeVisitor v){
067        v.preVisit(this);
068        v.postVisit(this);
069    }
070    public void acceptChildren(TParseTreeVisitor v){
071        v.preVisit(this);
072        v.postVisit(this);
073    }
074
075}