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 CREATE VIRTUAL TABLE statement.
011 *
012 * <p>Syntax:</p>
013 * <pre>
014 * CREATE VIRTUAL TABLE [IF NOT EXISTS] [schema.]table_name
015 *   USING module_name [(module_arguments)]
016 * </pre>
017 *
018 * <p>Module arguments are opaque text, not parsed as SQL.</p>
019 */
020public class TSqliteCreateVirtualTableStmt extends TCustomSqlStatement {
021
022    public TSqliteCreateVirtualTableStmt(EDbVendor dbvendor) {
023        super(dbvendor);
024        sqlstatementtype = ESqlStatementType.sstSqliteCreateVirtualTable;
025    }
026
027    void buildsql() {
028    }
029
030    void clear() {
031    }
032
033    String getasprettytext() {
034        return "";
035    }
036
037    void iterate(TVisitorAbs pvisitor) {
038    }
039
040    private TObjectName tableName = null;
041
042    /**
043     * Returns the virtual table name (may be schema-qualified).
044     */
045    public TObjectName getTableName() {
046        return tableName;
047    }
048
049    private TObjectName moduleName = null;
050
051    /**
052     * Returns the module name (e.g., fts5, rtree).
053     */
054    public TObjectName getModuleName() {
055        return moduleName;
056    }
057
058    public int doParseStatement(TCustomSqlStatement psql) {
059        if (rootNode == null) return -1;
060        super.doParseStatement(psql);
061
062        TDummy dummySqlNode = (TDummy) rootNode;
063        tableName = (TObjectName) dummySqlNode.node1;
064        if (dummySqlNode.node2 != null) {
065            moduleName = (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}