001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.*;
005import gudusoft.gsqlparser.nodes.*;
006import gudusoft.gsqlparser.nodes.mssql.TMssqlStmtStubSqlNode;
007
008public class TCreateSchemaSqlStatement extends TBlockSqlStatement {
009
010   public enum  EFromSource {dataCatalog,hiveMetestore,postgres,mysql,kinesis,redshift,NA};
011
012   private EFromSource fromSource = EFromSource.NA;
013
014    private TObjectName sourceDatabase;
015    private TObjectName sourceSchema;
016
017    public TObjectName getSourceDatabase() {
018        return sourceDatabase;
019    }
020
021    public TObjectName getSourceSchema() {
022        return sourceSchema;
023    }
024
025    public EFromSource getFromSource() {
026        return fromSource;
027    }
028
029    public TCreateSchemaSqlStatement(EDbVendor dbvendor) {
030        super(dbvendor);
031        sqlstatementtype = ESqlStatementType.sstcreateschema;
032    }
033
034    void buildsql() {
035    }
036
037    void clear() {
038    }
039
040    String getasprettytext() {
041        return "";
042    }
043
044    void iterate(TVisitorAbs pvisitor) {
045    }
046
047    private boolean externalSchema;
048
049    public boolean isExternalSchema() {
050        return externalSchema;
051    }
052
053    private TObjectName schemaName = null;
054    private TObjectName ownerName;
055    private TObjectName cloneSourceSchema = null;
056
057    public TObjectName getCloneSourceSchema() {
058        return cloneSourceSchema;
059    }
060
061    public TObjectName getOwnerName() {
062        return ownerName;
063    }
064
065    public TObjectName getSchemaName() {
066        return schemaName;
067    }
068
069    public int doParseStatement(TCustomSqlStatement psql) {
070        if (rootNode == null) return -1;
071        super.doParseStatement(psql);
072        TDummy node;
073        TCreateSchemaSqlNode schemaNode;
074        switch (dbvendor){
075            case dbvmssql:
076            case dbvpostgresql:
077                schemaNode = (TCreateSchemaSqlNode) rootNode;
078                schemaName = schemaNode.getSchemaName();
079                ownerName = schemaNode.getOwnerName();
080
081                if (schemaNode.getStatementListSqlNode() != null){
082                    schemaNode.getStatementListSqlNode().doParse(this,ESqlClause.unknown);
083
084                    for(int i=0;i<schemaNode.getStatementListSqlNode().size();i++){
085                        this.getBodyStatements().add(schemaNode.getStatementListSqlNode().getStatementSqlNode(i).getStmt());
086                    }
087                }
088                break;
089            case dbvredshift:
090                schemaNode = (TCreateSchemaSqlNode) rootNode;
091                schemaName = schemaNode.getSchemaName();
092                ownerName = schemaNode.getOwnerName();
093                externalSchema = schemaNode.isExternalSchema();
094                fromSource = schemaNode.getFromSource();
095                sourceDatabase = schemaNode.getSourceDatabase();
096                sourceSchema = schemaNode.getSourceSchema();
097                break;
098            case dbvsnowflake:
099                node = (TDummy)rootNode;
100                schemaName = (TObjectName)node.node1;
101                cloneSourceSchema  = (TObjectName)node.node2;
102                break;
103            case dbvhana:
104                node = (TDummy)rootNode;
105                schemaName = (TObjectName)node.node1;
106                break;
107        }
108
109        if((getSqlEnv().getDefaultCatalogName() != null)&&(schemaName != null)){
110            if (schemaName.getDatabaseToken() == null){
111                schemaName.setDatabaseToken(new TSourceToken(getSqlEnv().getDefaultCatalogName()));
112            }
113        }
114
115        return 0;
116    }
117
118    public void accept(TParseTreeVisitor v) {
119        v.preVisit(this);
120        v.postVisit(this);
121    }
122
123
124    public void acceptChildren(TParseTreeVisitor v) {
125        v.preVisit(this);
126        v.postVisit(this);
127    }
128
129    public void setSchemaName(TObjectName schemaName) {
130        this.schemaName = schemaName;
131    }
132}