1 package com.daffodilwoods.daffodildb.server.sql99.dcl.sqlcontrolstatement; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.serversystem.*; 6 import com.daffodilwoods.daffodildb.server.sql99.*; 7 import com.daffodilwoods.daffodildb.server.sql99.common.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dml.*; 10 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 11 import com.daffodilwoods.database.resource.*; 12 13 public class SQLstatementlist implements _Executer { 14 public terminatedSQLstatement[] _SQLstatementlist0; 15 16 private SQLcontrolstatement outerControlStatment; 17 private _Reference[][] referencesPerStatement; 18 private _Executer[] executers; 19 private _ServerSession serverSession; 20 public ColumnDetails[] sqlStatementListCD; 21 22 public Object run(Object object) throws DException { 23 executers = new _Executer[_SQLstatementlist0.length]; 24 for (int i = 0; i < _SQLstatementlist0.length; i++) { 25 executers[i] = _SQLstatementlist0[i].getExecuter(object); 26 } 27 return this; 28 } 29 30 public ArrayList getStatements() { 31 ArrayList list = new ArrayList(); 32 for (int i = 0, size = _SQLstatementlist0.length; i < size; i++) { 33 list.add(_SQLstatementlist0[i].getProcedureStatement()); 34 } 35 return list; 36 } 37 38 public boolean constainsLeaveStatement() throws DException { 39 ArrayList list = new ArrayList(); 40 for (int i = 0, size = _SQLstatementlist0.length; i < size; i++) { 41 if (_SQLstatementlist0[i]._SQLprocedurestatement1._SQLprocedurestatement0 instanceof 42 leavestatement) { 43 return true; 44 } 45 } 46 return false; 47 } 48 49 public void setOuterControlStatement(SQLcontrolstatement st) { 50 ArrayList statements = getStatements(); 51 for (int i = 0, size = statements.size(); i < size; i++) { 52 SQLprocedurestatement statement = (SQLprocedurestatement) statements.get( 53 i); 54 if (statement.getExecutableStatement() instanceof SQLcontrolstatement) { 55 ( (SQLcontrolstatement) statement._SQLprocedurestatement0). 56 setOuterControlStatement(st); 57 } 58 } 59 } 60 61 public Object [] getParameters(Object object) throws DException { 62 ArrayList list = new ArrayList(); 63 for (int i = 0; i < _SQLstatementlist0.length; i++) { 64 Object [] para = _SQLstatementlist0[i].getParameters(object); 65 if (para != null) { 66 list.addAll(Arrays.asList(para)); 67 } 68 } 69 return list.toArray(); 70 } 71 72 96 97 98 public Object execute(_VariableValues variableValues) throws DException { 99 SqlStatementListResult sqlStatementListResult = new SqlStatementListResult(executers.length); 100 for (int i = 0; i < executers.length; i++) { 101 Object result = executeSingleProcedureStatement( 102 _SQLstatementlist0[i].getProcedureStatement(), 103 executers[i], variableValues, referencesPerStatement[i]); 104 105 if (result instanceof SqlStatementListResult) { 106 SqlStatementListResult tt = (SqlStatementListResult) result; 107 if (tt.hasIterateLeaveResult()) { 108 sqlStatementListResult.setIterateLeaveResult(tt.getIterateLeaveResult()); 109 sqlStatementListResult.addResult(i, tt.getResult()); 110 return sqlStatementListResult; 111 } else { 112 sqlStatementListResult.addResult(i, tt.getResult()); 113 } 114 } else if (result instanceof IterateLeaveResult) { 115 sqlStatementListResult.addResult(i, "IteraeLeaveResult"); 116 sqlStatementListResult.setIterateLeaveResult( (IterateLeaveResult) 117 result); 118 return sqlStatementListResult; 119 } else if (result instanceof ReturnResult) { 120 return result; 121 } else { 122 sqlStatementListResult.addResult(i, result); 123 } 124 } 125 return sqlStatementListResult; 126 } 127 128 private Object executeSingleProcedureStatement(SQLprocedurestatement 129 statement, 130 _Executer sttExecuter, 131 _VariableValues variableValues, 132 _Reference[] refs) throws 133 DException { 134 Object returnValue = null; 135 SQLexecutablestatement sqlexe = statement.getExecutableStatement(); 136 if ( (sqlexe instanceof SQLdatastatement) || 137 (sqlexe instanceof SQLcontrolstatement)) { 138 if (refs != null) { 139 Object [] values = new Object [refs.length]; 140 Object [][] beforeExecuteRefValuePair = variableValues.getReferenceAndValuePair(); 141 if (beforeExecuteRefValuePair != null) { 142 for (int i = 0; i < beforeExecuteRefValuePair.length; i++) { 143 _Reference vvRef = (_Reference) beforeExecuteRefValuePair[i][0]; 144 for (int j = 0; j < refs.length; j++) { 145 if (vvRef.getQualifiedColumnName().equalsIgnoreCase(refs[j].getQualifiedColumnName())) { 146 refs[j].setDatatype(vvRef.getDatatype()); 147 refs[j].setSize(vvRef.getSize()); 148 values[j] = beforeExecuteRefValuePair[i][1]; 149 } 150 } 151 } 152 } 153 154 VariableValues vv = new VariableValues(serverSession); 155 vv.addColumnValues(refs, values, 1); 156 returnValue = sttExecuter.execute(vv); 157 158 160 Object [][] afterExecuteRefValuePair = vv.getReferenceAndValuePair(); 161 Object [][] valueToSetPair = variableValues.getReferenceAndValuePair(); 162 if (afterExecuteRefValuePair != null) { 163 for (int i = 0; i < afterExecuteRefValuePair.length; i++) { 164 _Reference vvRef = (_Reference) afterExecuteRefValuePair[i][0]; 165 boolean existingRef = false; 166 if (valueToSetPair != null) { 167 for (int j = 0; j < valueToSetPair.length; j++) { 168 _Reference toSetRef = (_Reference) valueToSetPair[j][0]; 169 if (vvRef.getQualifiedColumnName().equalsIgnoreCase(toSetRef.getQualifiedColumnName())) { 170 existingRef = true; 171 variableValues.setConditionVariableValue( 172 new _Reference[] {toSetRef} 173 , new Object [] {afterExecuteRefValuePair[i][1]} 174 , 1); 175 } 176 } 177 } 178 if (existingRef == false) { 179 variableValues.setConditionVariableValue(new _Reference[] {vvRef} 180 , new Object [] {afterExecuteRefValuePair[i][1]} 181 , 1); 182 } 183 } 184 } 185 } else { 186 VariableValues vv = new VariableValues(refs, serverSession); 187 returnValue = sttExecuter.execute(vv); 188 } 189 } else { 190 ; } 192 return returnValue; 193 } 194 195 public Object execute(Object [] values) throws DException { 196 throw new UnsupportedOperationException (); 197 } 198 199 public Object executeForFresh(Object [] values) throws DException { 200 throw new UnsupportedOperationException (); 201 } 202 203 public String toString() { 204 StringBuffer sb = new StringBuffer (); 205 sb.append(" "); 206 sb.append(" "); 207 for (int i = 0; i < _SQLstatementlist0.length; i++) { 208 sb.append(_SQLstatementlist0[i]); 209 } 210 return sb.toString().trim(); 211 } 212 213 public Object clone() throws CloneNotSupportedException { 214 return this; 215 } 216 217 public ColumnDetails[] getColumnDetails() throws DException { 218 if (sqlStatementListCD != null) 219 return sqlStatementListCD; 220 if (_SQLstatementlist0 != null) { 221 ArrayList listOfColumnDetails = new ArrayList(); 222 for (int i = 0; i < _SQLstatementlist0.length; i++) { 223 SQLprocedurestatement sqlp = _SQLstatementlist0[i].getProcedureStatement(); 224 SQLexecutablestatement sqlexe = sqlp.getExecutableStatement(); 225 if (sqlexe instanceof SQLcontrolstatement) { 226 SQLcontrolstatement contStt = (SQLcontrolstatement) sqlexe; 227 ColumnDetails[] cd = contStt.getColumnDetails(); 228 if (cd != null) 229 listOfColumnDetails.addAll(Arrays.asList(cd)); 230 } 231 } 232 sqlStatementListCD = (ColumnDetails[]) listOfColumnDetails.toArray(new ColumnDetails[0]); 233 return sqlStatementListCD; 234 } 235 return new ColumnDetails[0]; 236 } 237 238 public _Reference[] checkSemantic(_ServerSession object) throws DException { 239 serverSession = object; 240 referencesPerStatement = new _Reference[_SQLstatementlist0.length][]; 241 ArrayList newSet = new ArrayList(); 242 for (int i = 0; i < _SQLstatementlist0.length; i++) { 243 referencesPerStatement[i] = _SQLstatementlist0[i].checkSemantic(object); 244 Object refs[] = _SQLstatementlist0[i].getParameters(serverSession); 245 if (refs != null && refs.length != 0) { 246 throw new DException("DSE8164", null); 247 } 248 if (referencesPerStatement[i] != null) { 249 for (int j = 0; j < referencesPerStatement[i].length; j++) { 250 newSet.add(referencesPerStatement[i][j]); 251 } 252 } 253 } 254 return (_Reference[]) newSet.toArray(new _Reference[0]); 255 } 256 } 257 | Popular Tags |