001package gudusoft.gsqlparser.stmt.sqlite;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.TVisitorAbs;
007import gudusoft.gsqlparser.nodes.*;
008
009/**
010 * SQLite ATTACH DATABASE statement.
011 *
012 * <p>Two forms:</p>
013 * <ul>
014 *   <li>ATTACH DATABASE expr AS schema_name</li>
015 *   <li>ATTACH expr AS schema_name (DATABASE keyword is optional)</li>
016 * </ul>
017 */
018public class TAttachStmt extends TCustomSqlStatement {
019
020    public TAttachStmt(EDbVendor dbvendor) {
021        super(dbvendor);
022        sqlstatementtype = ESqlStatementType.sstSqliteAttach;
023    }
024
025    void buildsql() {
026    }
027
028    void clear() {
029    }
030
031    String getasprettytext() {
032        return "";
033    }
034
035    void iterate(TVisitorAbs pvisitor) {
036    }
037
038    private TExpression databaseExpr = null;
039
040    /**
041     * Returns the database file expression (e.g., 'file.db').
042     */
043    public TExpression getDatabaseExpr() {
044        return databaseExpr;
045    }
046
047    private TObjectName schemaName = null;
048
049    /**
050     * Returns the schema name used with AS clause.
051     */
052    public TObjectName getSchemaName() {
053        return schemaName;
054    }
055
056    public int doParseStatement(TCustomSqlStatement psql) {
057        if (rootNode == null) return -1;
058        super.doParseStatement(psql);
059
060        TDummy dummySqlNode = (TDummy) rootNode;
061        if (dummySqlNode.node1 != null) {
062            databaseExpr = (TExpression) dummySqlNode.node1;
063        }
064        if (dummySqlNode.node2 != null) {
065            schemaName = (TObjectName) dummySqlNode.node2;
066        }
067
068        return 0;
069    }
070
071    public void accept(TParseTreeVisitor v) {
072        v.preVisit(this);
073        v.postVisit(this);
074    }
075
076    public void acceptChildren(TParseTreeVisitor v) {
077        v.preVisit(this);
078        v.postVisit(this);
079    }
080}