001package gudusoft.gsqlparser.stmt.snowflake;
002
003
004import gudusoft.gsqlparser.EDbVendor;
005import gudusoft.gsqlparser.ESqlClause;
006import gudusoft.gsqlparser.ESqlStatementType;
007import gudusoft.gsqlparser.ETableKind;
008import gudusoft.gsqlparser.TCustomSqlStatement;
009import gudusoft.gsqlparser.nodes.TCreateTableOption;
010import gudusoft.gsqlparser.nodes.TDummy;
011import gudusoft.gsqlparser.nodes.TObjectName;
012import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
013import gudusoft.gsqlparser.nodes.snowflake.TCreateStageSqlNode;
014
015import java.util.ArrayList;
016
017/**
018 * Snowflake create stage
019 */
020public class TCreateStageStmt extends TCustomSqlStatement {
021
022    private String fileFormatName = null;
023    private String fileFormatType = null;
024
025    public void setFileFormatName(String fileFormatName) {
026        this.fileFormatName = fileFormatName;
027    }
028
029    public void setFileFormatType(String fileFormatType) {
030        this.fileFormatType = fileFormatType;
031    }
032
033    public String getFileFormatName() {
034        return fileFormatName;
035    }
036
037    public String getFileFormatType() {
038        return fileFormatType;
039    }
040
041    public void setExternalStageURL(String externalStageURL) {
042        this.externalStageURL = externalStageURL;
043    }
044
045    private String externalStageURL = null;
046
047    public String getExternalStageURL() {
048        return externalStageURL;
049    }
050
051    private TObjectName stageName;
052
053    public void setStageName(TObjectName stageName) {
054        this.stageName = stageName;
055    }
056
057    public TObjectName getStageName() {
058        return stageName;
059    }
060
061    public String getStageNameOnly() {
062        return stageName.getObjectString();
063    }
064
065    private TObjectName nameSpace;
066
067    public TObjectName getNameSpace() {
068        return nameSpace;
069    }
070
071    /**
072     * Get the stage kind (TEMPORARY, TEMP, or unknown for permanent stages)
073     * @return The stage kind
074     */
075    public ETableKind getStageKind() {
076        if (rootNode == null) return ETableKind.etkBase;
077        TCreateStageSqlNode node = (TCreateStageSqlNode)rootNode;
078        return node.getStageKind();
079    }
080
081    /**
082     * Check if this is a temporary stage (TEMPORARY or TEMP keyword was used)
083     * @return true if the stage is temporary, false otherwise
084     */
085    public boolean isTemporary() {
086        ETableKind kind = getStageKind();
087        return kind == ETableKind.etkTemporary || kind == ETableKind.etkTemp;
088    }
089
090    public TCreateStageStmt(EDbVendor dbvendor) {
091        super(dbvendor);
092        sqlstatementtype = ESqlStatementType.sstCreateStage;
093    }
094
095    public int doParseStatement(TCustomSqlStatement psql) {
096        if (rootNode == null) return -1;
097        super.doParseStatement(psql);
098        TCreateStageSqlNode node = (TCreateStageSqlNode)rootNode;
099        stageName = node.getStageName();
100        nameSpace = node.getNameSpace();
101//        if (node.st1 != null){
102//            externalStageURL = node.st1.toString();
103//        }
104
105        ArrayList<TCreateTableOption> tableOptions = node.getTableOptions();
106        if (tableOptions != null){
107            for(int i=0;i<tableOptions.size();i++){
108                tableOptions.get(i).doParse(this, ESqlClause.unknown);
109            }
110        }
111
112        return 0;
113    }
114
115    public void accept(TParseTreeVisitor v){
116        v.preVisit(this);
117        v.postVisit(this);
118    }
119
120    public void acceptChildren(TParseTreeVisitor v){
121        v.preVisit(this);
122        v.postVisit(this);
123    }
124}