1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import java.text.*; 4 import java.util.*; 5 6 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.*; 8 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 9 import com.daffodilwoods.daffodildb.server.sql99.*; 10 import com.daffodilwoods.daffodildb.server.sql99.common.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*; 12 import com.daffodilwoods.daffodildb.server.sql99.token.*; 13 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 14 import com.daffodilwoods.daffodildb.utils.*; 15 import com.daffodilwoods.database.general.*; 16 import com.daffodilwoods.database.resource.*; 17 18 public class insertstatement implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLdatachangestatement, Parameters { 19 public insertcolumnsandsource _insertcolumnsandsource0; 20 public insertiontarget _insertiontarget1; 21 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 22 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 23 private TableDetails tableDetails; 24 private _Reference[] questionMarks; 25 private boolean checkingPerformed; 26 27 private int[] columnsType; 28 private int[] size; 29 private int[] columnIndexes; 30 private int[] scale; 31 private Collator collator; 32 33 public _Reference[] checkSemantic(_ServerSession serverSession) throws DException { 34 tableDetails = (TableDetails) _insertiontarget1.run(serverSession); 35 SemanticChecker.initializeCatalogNameAndSchemaNameOfTable(tableDetails, serverSession); 36 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier()); 37 tableDetails.cc = cc; 38 tableDetails.setTableType(cc.getTableType()); 39 40 if (tableDetails.getTableType() == TypeConstants.VIEW) { 41 throw new DmlStatementException("DSE1275", new Object [] {tableDetails.getQualifiedTableName()} 42 , new DException("DSE1267", null)); 43 } 44 ColumnDetails[] columnDetails = _insertcolumnsandsource0.getColumnDetails(); 45 checkColumn(serverSession, columnDetails, tableDetails); 46 _Reference[] referencesToReturn = _insertcolumnsandsource0.checkSemantic(serverSession); 47 _insertcolumnsandsource0.checkcolumnsValidity(columnDetails == null ? cc.getColumnCount() - TypeConstants.SYSTEMCOLUMNSLENGTH : columnDetails.length); 48 checkingPerformed = true; 49 50 _PrivilegeTable privilegeTable = serverSession.getUserSession().getPrivilegeCharacteristics().getPrivilegeTable(tableDetails.getQualifiedIdentifier()); 51 if (! (_insertcolumnsandsource0 instanceof fromdefault)) { 52 if (columnDetails == null && !privilegeTable.hasTablePrivileges(PrivilegeTable.INSERT)) 53 throw new PrivilegeException("DSE340", new Object [] {"INSERT", tableDetails.getQualifiedIdentifier()}); 54 columnIndexes = columnDetails == null ? getIndexes(cc) : getIntColumnsArray(cc, columnDetails); 55 columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 56 size = ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc); 57 scale = ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc); 58 collator = cc.getCollator(); 59 if (!privilegeTable.hasColumnPrivileges(_PrivilegeTable.INSERT, columnIndexes)) { 60 throw new PrivilegeException("DSE340", new Object [] {"INSERT", tableDetails.getQualifiedIdentifier()}); 61 } 62 } 63 64 if (referencesToReturn != null) { 65 ArrayList list = new ArrayList(); 66 for (int i = 0; i < referencesToReturn.length; i++) { 67 if (referencesToReturn[i].getReferenceType() != SimpleConstants.SEQUENCE) { 68 list.add(referencesToReturn[i]); 69 } 70 } 71 return list.size() == 0 ? null : (_Reference[]) list.toArray(new _Reference[0]); 72 } 73 return referencesToReturn; 74 } 75 76 private int[] getIndexes(_ColumnCharacteristics cc) throws DException { 77 int length = cc.getColumnCount(); 78 int[] clm = new int[length - TypeConstants.SYSTEMCOLUMNSLENGTH]; 79 for (int i = TypeConstants.SYSTEMCOLUMNSLENGTH, j = 0; i < length; i++, j++) { 80 clm[j] = i; 81 } 82 return clm; 83 } 84 85 private int[] getIntColumnsArray(_ColumnCharacteristics cc, ColumnDetails[] columnDetails) throws DException { 86 int length = columnDetails.length; 87 int[] columns = new int[length]; 88 for (int i = 0; i < length; i++) { 89 try { 90 columns[i] = columnDetails[i].getIndex(); 91 } catch (DException e) { 92 int tt = cc.getColumnIndex(columnDetails[i].getColumn()); 93 columnDetails[i].setIndex(tt); 94 columns[i] = tt; 95 } 96 } 97 return columns; 98 } 99 100 public Object run(Object object) throws com.daffodilwoods.database.resource.DException { 101 _StatementExecutionContext sec = (_StatementExecutionContext) object; 102 _ServerSession serverSession = sec.getServerSession(); 103 tableDetails = (TableDetails) _insertiontarget1.run(serverSession); 104 if (!checkingPerformed) { 105 performChecking(serverSession); 106 } 107 108 if (_insertcolumnsandsource0 instanceof fromdefault) { 109 return new InsertExecuterDefault(tableDetails, sec); 110 } 111 ColumnDetails[] columns = _insertcolumnsandsource0.getColumnDetails(); 112 113 if (_insertcolumnsandsource0 instanceof fromsubquery) { 114 QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier(); 115 InsertExecuterSubquery ies = new InsertExecuterSubquery( (TableDetails) _insertiontarget1.run(null), columns, sec, (_Executer) _insertcolumnsandsource0.run(serverSession), questionMarks, (fromsubquery) _insertcolumnsandsource0, tableName); 116 ies.setInitialParameters(columnsType, size, columnIndexes, scale, collator); 117 return ies; 118 } 119 InsertExecuterSimple ies = new InsertExecuterSimple( (TableDetails) _insertiontarget1.run(null), columns, sec, (fromconstructor) _insertcolumnsandsource0, questionMarks); 120 ies.setInitialParameters(columnsType, size, columnIndexes, scale, collator); 121 return ies; 122 } 123 124 public Object [] getParameters(Object object) throws DException { 125 return _insertcolumnsandsource0.getParameters(object); 126 } 127 128 public ParameterInfo[] getParameterInfo() throws DException { 129 ParameterInfo[] temp = _insertcolumnsandsource0.getParameterInfo(); 130 if (temp == null) 131 return new ParameterInfo[] {}; 132 ArrayList list = new ArrayList(); 133 _ColumnCharacteristics cc = tableDetails.getColumnCharacteristics(); 134 if (_insertcolumnsandsource0 instanceof fromconstructor) { 135 for (int i = 0; i < temp.length; i++) { 136 if (temp[i].getQuestionMark()) { 137 String columnName = temp[i].getName(); 138 if (columnName != null) { 139 if (temp[i].getDataType() == -1) { 140 int index = cc.getColumnIndex(columnName); 141 temp[i].setDataType(cc.getColumnType(index)); 142 } 143 } else { 144 try { 145 int ordinalPosition=temp[i].getOridinalPosition(); 146 temp[i].setName(cc.getColumnName(columnIndexes[ordinalPosition])); 147 if (temp[i].getDataType() == -1) { 148 temp[i].setDataType(cc.getColumnType(columnIndexes[ordinalPosition])); 149 } 150 } catch (IllegalColumnException ex) { 151 if (ex.getDseCode().equalsIgnoreCase("DSE3514")) { 152 if (cc.getColumnCount() < (i + 6)) 153 throw new DmlStatementException("DSE8141", null); 154 } 155 throw ex; 156 } 157 158 } 159 list.add(temp[i]); 160 } else if (temp[i].getSubQuery()) { 161 ParameterInfo[] pp = temp[i].getParameterInfoArray(); 162 if (pp != null) { 163 list.addAll(Arrays.asList(pp)); 164 } 165 } 166 } 167 ParameterInfo[] param = new ParameterInfo[list.size()]; 168 list.toArray(param); 169 return param; 170 } 171 return temp; 172 } 173 174 private void performChecking(_ServerSession serverSession) throws DException { 175 _Reference[] refToCheck = checkSemantic(serverSession); 176 if (refToCheck != null) { 177 for (int i = 0; i < refToCheck.length; i++) { 178 if (refToCheck[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) { 179 throw new DmlStatementException("DSE1257", new Object [] {refToCheck[i].getColumn()}); 180 } 181 } 182 } 183 questionMarks = refToCheck; 184 } 185 186 private void checkColumnsValidity(ColumnDetails[] columns, TableDetails tableDetails) throws DException { 187 throw new UnsupportedOperationException (" METHOD NOT IMPLEMENTED "); 188 } 189 190 private boolean check(TableDetails tableDetails, String [] columnName) throws DException { 191 throw new UnsupportedOperationException (" METHOD NOT IMPLEMENTED "); 192 } 193 194 private void checkColumn(_ServerSession serverSession, ColumnDetails[] columnDetails, TableDetails tableDetails) throws DException { 195 if (columnDetails == null) { 196 return; 197 } 198 ArrayList list = new ArrayList(); 199 DmlStaticFunctionality.setTableNamesAndDatatypesOfAllColumns(serverSession, columnDetails, new TableDetails[] {tableDetails} 200 , list, null); 201 if (list.size() > 0) { 202 String s = ( (ColumnDetails) list.get(0)).getQualifiedColumnName(); 203 throw new DException("DSE508", new Object [] {s}); 204 } 205 DmlStaticFunctionality.checkColumnUniqueness(columnDetails); 206 } 207 208 public _Reference[] getReferences() throws com.daffodilwoods.database.resource.DException { 209 return _insertcolumnsandsource0.getReferences(new TableDetails[] {tableDetails}); 210 } 211 212 public Object clone() throws CloneNotSupportedException { 213 return this; 214 } 215 216 public String toString() { 217 StringBuffer sb = new StringBuffer (); 218 sb.append(" "); 219 sb.append(_SRESERVEDWORD12065439223); 220 sb.append(" "); 221 sb.append(_SRESERVEDWORD12065439222); 222 sb.append(" "); 223 sb.append(_insertiontarget1); 224 sb.append(" "); 225 sb.append(_insertcolumnsandsource0); 226 return sb.toString(); 227 } 228 } 229 | Popular Tags |