001package gudusoft.gsqlparser.stmt; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.*; 005 006 007public class TSetStmt extends TCustomSqlStatement { 008 private TObjectName variableName; 009 private TObjectNameList variableNameList; 010 private TExpression variableValue; 011 private TExpressionList variableValueList; 012 private ESetStatementType setStatementType; 013 014 private TObjectName characterSetName; 015 private TObjectName collationName; 016 private TObjectName userName; 017 private TObjectName password; 018 private ETransactionIsolationLevel isolationLevel; 019 020 public TObjectName getCharacterSetName() { 021 return characterSetName; 022 } 023 024 public TObjectName getCollationName() { 025 return collationName; 026 } 027 028 public TObjectName getUserName() { 029 return userName; 030 } 031 032 public TObjectName getPassword() { 033 return password; 034 } 035 036 public ETransactionIsolationLevel getIsolationLevel() { 037 return isolationLevel; 038 } 039 040 public ESetStatementType getSetStatementType() { 041 return setStatementType; 042 } 043 044 public TObjectName getVariableName() { 045 return variableName; 046 } 047 048 public TObjectNameList getVariableNameList() { 049 return variableNameList; 050 } 051 052 public TExpression getVariableValue() { 053 return variableValue; 054 } 055 056 public TExpressionList getVariableValueList() { 057 return variableValueList; 058 } 059 060 public TSetStmt(EDbVendor dbvendor) { 061 super(dbvendor); 062 sqlstatementtype = ESqlStatementType.sstset; 063 } 064 065 private TPTNodeList<TSetAssignment> assignments; 066 067 public TPTNodeList<TSetAssignment> getAssignments() { 068 return assignments; 069 } 070 071 public int doParseStatement(TCustomSqlStatement psql) { 072 if (rootNode == null) return -1; 073 super.doParseStatement(psql); 074 TSetSqlNode node = (TSetSqlNode)rootNode; 075 setStatementType = node.getSetStatementType(); 076 077 switch (dbvendor){ 078 case dbvmysql: 079 assignments = node.getAssignments(); 080 if (setStatementType == ESetStatementType.variable){ 081 for (int i=0;i<assignments.size();i++){ 082 assignments.getElement(i).getParameterValue().doParse(this,ESqlClause.setVariable); 083 } 084 } 085 086 087 characterSetName = node.getCharacterSetName(); 088 collationName = node.getCollationName(); 089 userName = node.getUserName(); 090 password = node.getPassword(); 091 isolationLevel = node.getIsolationLevel(); 092 093 break; 094 case dbvgreenplum: 095 case dbvpostgresql: 096 case dbvgaussdb: 097 switch (setStatementType){ 098 case variable: 099 variableName = node.getVariableName(); 100 variableNameList = node.getVariableNameList(); 101 variableValue = node.getVariableValue(); 102 variableValueList = node.getVariableValueList(); 103 if (variableName.toString().equalsIgnoreCase("search_path")){ 104 if (getSqlEnv() != null) { 105 getSqlEnv().setDefaultSchemaName(variableValueList.getExpression(0).toString()); 106 } 107 } 108 break; 109 case reset: 110 variableName = node.getVariableName(); 111 variableName.setDbObjectType(EDbObjectType.variable); 112 break; 113 default: 114 break; 115 } 116 117 break; 118 case dbvbigquery: 119 variableName = node.getVariableName(); 120 variableValue = node.getVariableValue(); 121 variableValue.doParse(this,ESqlClause.unknown); 122 123 variableNameList = node.getVariableNameList(); 124 variableValueList = node.getVariableValueList(); 125 if (variableValueList != null){ 126 variableValueList.doParse(this,ESqlClause.unknown); 127 } 128 129 break; 130 default: 131 variableName = node.getVariableName(); 132 variableNameList = node.getVariableNameList(); 133 variableValue = node.getVariableValue(); 134 variableValueList = node.getVariableValueList(); 135 break; 136 } 137 138 139 return 0; 140 } 141 public void accept(TParseTreeVisitor v){ 142 v.preVisit(this); 143 v.postVisit(this); 144 } 145 public void acceptChildren(TParseTreeVisitor v){ 146 v.preVisit(this); 147 v.postVisit(this); 148 } 149 150}