001package gudusoft.gsqlparser.nodes.functions; 002 003import gudusoft.gsqlparser.nodes.TParseTreeNode; 004import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 005import gudusoft.gsqlparser.ESqlClause; 006import gudusoft.gsqlparser.TCustomSqlStatement; 007import gudusoft.gsqlparser.nodes.TExpression; 008import gudusoft.gsqlparser.nodes.TObjectName; 009import gudusoft.gsqlparser.nodes.TResultColumnList; 010import gudusoft.gsqlparser.nodes.TSelectSqlNode; 011import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 012 013 014public class TPredictArgument extends TParseTreeNode { 015 private TObjectName modelReference; // For RW_MODEL model_reference 016 017 private TResultColumnList structColumns; // For RW_STRUCT '(' target_list ')' 018 private EArgumentType argumentType; // To track which type of argument this is 019 private TObjectName tableReference; // For RW_TABLE qualified_name 020 private TSelectSqlNode selectSqlNode; // For select_with_parens 021 private TSelectSqlStatement selectSqlStatement; 022 private TExpression expression; // For generic func_arg_expr 023 024 public enum EArgumentType { 025 MODEL, // RW_MODEL model_reference 026 INPUT_DATA, // input_data 027 STRUCT // RW_STRUCT '(' target_list ')' 028 } 029 030 public TSelectSqlStatement getSelectSqlStatement() { 031 return selectSqlStatement; 032 } 033 034 public TObjectName getTableReference() { 035 return tableReference; 036 } 037 038 public void init(Object arg1, Object arg2){ 039 this.argumentType = (EArgumentType) arg1; 040 switch (this.argumentType) { 041 case MODEL: 042 this.modelReference = (TObjectName) arg2; 043 break; 044 case INPUT_DATA: 045 if (arg2 instanceof TObjectName) { 046 this.tableReference = (TObjectName) arg2; 047 } else if (arg2 instanceof TSelectSqlNode) { 048 this.selectSqlNode = (TSelectSqlNode) arg2; 049 } else if (arg2 instanceof TExpression) { 050 this.expression = (TExpression) arg2; 051 } 052 break; 053 case STRUCT: 054 this.structColumns = (TResultColumnList) arg2; 055 break; 056 } 057 } 058 059 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 060 if (this.argumentType == EArgumentType.INPUT_DATA) { 061 if (this.tableReference != null) { 062 this.tableReference.doParse(psql, plocation); 063 } else if (this.selectSqlNode != null) { 064 selectSqlStatement = new TSelectSqlStatement(this.dbvendor); 065 selectSqlStatement.rootNode = this.selectSqlNode; 066 selectSqlStatement.doParseStatement(psql); 067 } else if (this.expression != null) { 068 this.expression.doParse(psql, plocation); 069 } 070 } 071 } 072 // Getters and setters 073 public TObjectName getModelReference() { 074 return modelReference; 075 } 076 077 public void setModelReference(TObjectName modelReference) { 078 this.modelReference = modelReference; 079 this.argumentType = EArgumentType.MODEL; 080 } 081 082 083 public TResultColumnList getStructColumns() { 084 return structColumns; 085 } 086 087 public void setStructColumns(TResultColumnList structColumns) { 088 this.structColumns = structColumns; 089 this.argumentType = EArgumentType.STRUCT; 090 } 091 092 public EArgumentType getArgumentType() { 093 return argumentType; 094 } 095 096 public void accept(TParseTreeVisitor v){ 097 v.preVisit(this); 098 v.postVisit(this); 099 } 100 101 public void acceptChildren(TParseTreeVisitor v) { 102 v.preVisit(this); 103 v.postVisit(this); 104 } 105}