001package gudusoft.gsqlparser.stmt.bigquery; 002 003import gudusoft.gsqlparser.EDbVendor; 004import gudusoft.gsqlparser.ESqlStatementType; 005import gudusoft.gsqlparser.TCustomSqlStatement; 006import gudusoft.gsqlparser.nodes.TObjectName; 007import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 008import gudusoft.gsqlparser.nodes.bigquery.TCreateModelSqlNode; 009import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 010 011/** 012 * BigQuery CREATE MODEL statement for machine learning. 013 * <p> 014 * Syntax: 015 * CREATE [OR REPLACE] MODEL [IF NOT EXISTS] model_name 016 * [TRANSFORM (transform_clause)] 017 * OPTIONS(options_list) 018 * AS query_statement 019 */ 020public class TCreateModelSqlStatement extends TCustomSqlStatement { 021 022 public TCreateModelSqlStatement(EDbVendor dbvendor) { 023 super(dbvendor); 024 sqlstatementtype = ESqlStatementType.sstcreatemodel; 025 } 026 027 private TObjectName modelName; 028 029 /** 030 * Get the model name. 031 * @return the fully qualified model name 032 */ 033 public TObjectName getModelName() { 034 return modelName; 035 } 036 037 private TSelectSqlStatement subQuery; 038 039 /** 040 * Get the AS query statement that provides training data. 041 * @return the SELECT statement providing training data 042 */ 043 public TSelectSqlStatement getSubQuery() { 044 return subQuery; 045 } 046 047 public int doParseStatement(TCustomSqlStatement psql) { 048 if (rootNode == null) return -1; 049 super.doParseStatement(psql); 050 TCreateModelSqlNode createModelSqlNode = (TCreateModelSqlNode) rootNode; 051 this.modelName = createModelSqlNode.getModelName(); 052 053 if (createModelSqlNode.getSelectSqlNode() != null) { 054 subQuery = new TSelectSqlStatement(this.dbvendor); 055 subQuery.rootNode = createModelSqlNode.getSelectSqlNode(); 056 subQuery.doParseStatement(this); 057 } 058 059 return 0; 060 } 061 062 public void accept(TParseTreeVisitor v) { 063 v.preVisit(this); 064 v.postVisit(this); 065 } 066 067 public void acceptChildren(TParseTreeVisitor v) { 068 v.preVisit(this); 069 if (subQuery != null) { 070 subQuery.acceptChildren(v); 071 } 072 v.postVisit(this); 073 } 074}