1 package com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.constraintsystem.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 11 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 12 import com.daffodilwoods.daffodildb.server.sql99.utils.parser.*; 13 import com.daffodilwoods.daffodildb.utils.*; 14 import com.daffodilwoods.database.general.*; 15 import com.daffodilwoods.database.resource.*; 16 17 public class ViewDescriptor extends Descriptor { 18 20 public String table_catalog; 21 23 public String table_schema; 24 26 public String table_name; 27 29 public String view_definition; 30 31 public String check_option = SqlKeywords.NONE; 32 public String is_updatable = SqlSchemaConstants.NO; 33 public String is_insertable_into = SqlSchemaConstants.NO; 34 public String materialized_table_name; 35 37 public ArrayList tablesUsed; 38 40 public ArrayList columnsUsed; 41 42 public TableDescriptor tableDescriptor; 43 44 47 private static String viewQuery = "select * from " + 48 SqlSchemaConstants.views_TableName + 49 " where table_catalog = ? and table_schema = ? and table_name = ? "; 50 51 53 private static String selectViewTableUsageQuery = 54 "Select table_catalog,table_schema,table_name from " + 55 SystemTables.view_table_usage_TableName + 56 " where view_catalog = ? and view_schema = ? and view_name = ? "; 57 58 60 private static String selcetViewColumnUsageQuery = 61 "select table_catalog,table_schema,table_name ,column_name from " + 62 SqlSchemaConstants.view_colum_usage_TableName + 63 " where view_catalog = ? and view_schema = ? and view_name = ? "; 64 public ViewDescriptor() throws DException { 65 } 66 67 70 public void load(_ServerSession serverSession) throws DException { 71 initTableDescriptor(); 72 tableDescriptor.load(serverSession); 74 _SelectQueryIterator viewIterator = SqlSchemaConstants.getIterator(serverSession, 75 viewQuery, new Object [] {table_catalog, table_schema, table_name}); 76 if (!viewIterator.first()) { 77 throw new DException("DSE1067", null); 78 } 79 loadDataFromRecord(viewIterator); 80 loadTableUsage(serverSession); 81 loadColumnUsage(serverSession); 82 } 83 84 86 public void loadDataFromRecord(_SelectQueryIterator iter) throws DException { 87 Object [] values = (Object []) iter.getObject(); 88 loadDataFromRecord(values); 89 } 90 91 93 public void loadDataFromRecord(_SelectQueryIterator iter, _ServerSession serverSession) throws 94 DException { 95 Object [] values = (Object []) iter.getObject(); 96 loadDataFromRecord(values); 97 initTableDescriptor(); 98 tableDescriptor.load(serverSession); loadTableUsage(serverSession); 100 loadColumnUsage(serverSession); 101 } 102 103 106 private void loadDataFromRecord(Object [] values) throws DException { 107 table_catalog = (String ) values[SystemTablesFields.view_table_catalog]; 108 table_schema = (String ) values[SystemTablesFields.view_table_schema]; 109 table_name = (String ) values[SystemTablesFields.view_table_name]; 110 view_definition = (String ) values[SystemTablesFields.view_view_definition]; 111 check_option = (String ) values[SystemTablesFields.view_check_option]; 112 is_updatable = (String ) values[SystemTablesFields.view_is_updatable]; 113 is_insertable_into = (String ) values[SystemTablesFields. 114 view_is_insertable_into]; 115 materialized_table_name = (String ) values[SystemTablesFields. 116 view_materialized_table_name]; 117 } 118 119 120 125 126 130 public void save(_ServerSession serverSession) throws DException { 131 view_definition = removeSpaces(view_definition); 132 Object [] tableData = new Object [] { 133 table_catalog, table_schema, table_name, 134 view_definition, check_option, is_updatable, is_insertable_into, 135 materialized_table_name}; 136 137 tableDescriptor.save(serverSession); 138 tableDescriptor.saveColumns(serverSession); 139 try { 140 SqlSchemaConstants.insert(serverSession, 141 SqlSchemaConstants.views_TableName, null, 142 tableData); 143 } catch (PrimaryConstraintException de) { 144 DException tde = new DException("DSE1137", new Object [] {getViewName()}); 145 throw tde; 146 } catch (SizeMisMatchException de) { 147 if (de.getDseCode().equals("DSE773")) { 148 if (view_definition.length() > 4192) 149 throw new DException("DSE8162", new Object [] {new Integer (view_definition.length()), getViewName()}); 150 DException tde = new DException("DSE8103", null); 151 throw tde; 152 } 153 } catch (DException de) { 154 if (de.getDseCode().equals("DSE1255")) { 155 DException tde = new DException("DSE1137", new Object [] {getViewName()}); 156 throw tde; 157 } 158 if (de.getDseCode().equals("DSE773")) { 159 DException tde = new DException("DSE8103", null); 160 throw tde; 161 } 162 throw de; 163 } 164 saveTablesUsed(serverSession); 165 saveColumnsUsed(serverSession); 166 } 167 168 171 private void saveTablesUsed(_ServerSession serverSession) throws DException { 172 Object [] columnValues = new Object [6]; 173 columnValues[0] = table_catalog; 174 columnValues[1] = table_schema; 175 columnValues[2] = table_name; 176 for (int i = 0, tableCount = tablesUsed.size(); i < tableCount; i++) { 177 String [] tableName = (String []) tablesUsed.get(i); 178 columnValues[3] = tableName[0]; columnValues[4] = tableName[1]; columnValues[5] = tableName[2]; SqlSchemaConstants.insert(serverSession, 182 SqlSchemaConstants.view_table_usage_TableName, null, columnValues); 183 } 184 } 185 186 189 private void saveColumnsUsed(_ServerSession serverSession) throws DException { 190 Object [] columnValues = new Object [7]; 191 columnValues[0] = table_catalog; 192 columnValues[1] = table_schema; 193 columnValues[2] = table_name; 194 for (int i = 0, columnCount = columnsUsed.size(); i < columnCount; i++) { 195 String [] columnName = (String []) columnsUsed.get(i); 196 columnValues[3] = columnName[0]; columnValues[4] = columnName[1]; columnValues[5] = columnName[2]; columnValues[6] = columnName[3]; SqlSchemaConstants.insert(serverSession, 201 SqlSchemaConstants.view_colum_usage_TableName, null, columnValues); 202 } 203 } 204 205 209 210 212 public void delete(_ServerSession serverSession) throws DException { 213 deleteViewTableUsage(serverSession); 214 deleteViewColumnUsage(serverSession); 215 tableDescriptor.delete(serverSession); 216 217 String bve = "TABLE_CATALOG=? and TABLE_SCHEMA=? and TABLE_NAME=?"; 218 _ServerSession globalSession = serverSession.getGlobalSession(); 219 booleanvalueexpression condition = ConditionParser.parseCondition(bve, 220 globalSession, SqlSchemaConstants.views_TableName); 221 super.delete(serverSession, SqlSchemaConstants.views_TableName, condition, 222 new Object [] {table_catalog, table_schema, table_name}); 223 } 224 225 227 private void deleteViewTableUsage(_ServerSession serverSession) throws DException { 228 TableDetails tableDetail = new TableDetails(); 229 tableDetail.setTableName(SqlSchemaConstants.view_table_usage_TableName. 230 getTableName()); 231 String bve = "VIEW_CATALOG=? and VIEW_SCHEMA=? and VIEW_NAME=?"; 232 _ServerSession globalSession = serverSession.getGlobalSession(); 233 booleanvalueexpression condition = ConditionParser.parseCondition(bve, 234 globalSession, SqlSchemaConstants.view_table_usage_TableName); 235 ConditionSingleTableExecuter conSingTE = new ConditionSingleTableExecuter(null, 236 tableDetail, globalSession, condition, null); 237 _Iterator iter = globalSession.getInternalIterator(SqlSchemaConstants. 238 view_table_usage_TableName, 239 conSingTE); 240 iter.setConditionVariableValue(condition.getReferences(new TableDetails[] { 241 tableDetail}), FieldUtility.getFields(new Object [] {table_catalog, table_schema, table_name}) 242 , 1); 243 SqlSchemaConstants.deleteAll(serverSession.getSystemServerSession(), 244 SqlSchemaConstants.view_table_usage_TableName, 245 iter); 246 } 247 248 250 private void deleteViewColumnUsage(_ServerSession serverSession) throws DException { 251 TableDetails tableDetail = new TableDetails(); 252 tableDetail.setTableName(SqlSchemaConstants.view_colum_usage_TableName. 253 getTableName()); 254 String bve = "VIEW_CATALOG=? and VIEW_SCHEMA=? and VIEW_NAME=?"; 255 _ServerSession globalSession = serverSession.getGlobalSession(); 256 booleanvalueexpression condition = ConditionParser.parseCondition(bve, 257 globalSession, SqlSchemaConstants.view_colum_usage_TableName); 258 ConditionSingleTableExecuter conSingTE = new ConditionSingleTableExecuter(null, 259 tableDetail, globalSession, condition, null); 260 _Iterator iter = globalSession.getInternalIterator(SqlSchemaConstants. 261 view_colum_usage_TableName, 262 conSingTE); 263 iter.setConditionVariableValue(condition.getReferences(new TableDetails[] { 264 tableDetail}), FieldUtility.getFields(new Object [] {table_catalog, table_schema, table_name}) 265 , 1); 266 SqlSchemaConstants.deleteAll(serverSession.getSystemServerSession(), 267 SqlSchemaConstants.view_colum_usage_TableName, 268 iter); 269 } 270 271 273 public void setViewName() throws DException { 274 table_catalog = tableDescriptor.table_catalog; 275 table_schema = tableDescriptor.table_schema; 276 table_name = tableDescriptor.table_name; 277 } 278 279 287 288 290 private void initTableDescriptor() throws DException { 291 if (tableDescriptor == null) { 292 tableDescriptor = new TableDescriptor(); 293 } 294 tableDescriptor.table_catalog = table_catalog; 295 tableDescriptor.table_schema = table_schema; 296 tableDescriptor.table_name = table_name; 297 } 298 299 301 304 305 307 public String getViewName() { 308 StringBuffer viewName = new StringBuffer (); 309 viewName.append(table_catalog).append(".").append(table_schema).append("."). 310 append(table_name); 311 return viewName.toString(); 312 } 313 314 317 private void loadTableUsage(_ServerSession serverSession) throws DException { 318 loadTableUsed(SqlSchemaConstants.getIterator(serverSession, 319 selectViewTableUsageQuery, 320 new Object [] {table_catalog, 321 table_schema, table_name})); 322 } 323 324 327 private void loadTableUsed(_SelectQueryIterator viewTableUsageIterator) throws 328 DException { 329 tablesUsed = new ArrayList(); 330 if (viewTableUsageIterator.first()) { 331 do { 332 Object [] values = (Object []) viewTableUsageIterator.getObject(); 333 tablesUsed.add(new String [] { (String ) values[0], (String ) values[1], 334 (String ) values[2]}); 335 } while (viewTableUsageIterator.next()); 336 } 337 } 338 339 342 private void loadColumnUsage(_ServerSession serverSession) throws DException { 343 loadColumnUsed(SqlSchemaConstants.getIterator(serverSession, 344 selcetViewColumnUsageQuery, 345 new Object [] {table_catalog, 346 table_schema, table_name})); 347 } 348 349 352 private void loadColumnUsed(_SelectQueryIterator viewColumnUsageIterator) throws 353 DException { 354 columnsUsed = new ArrayList(); 355 if (viewColumnUsageIterator.first()) { 356 do { 357 Object [] values = (Object []) viewColumnUsageIterator.getObject(); 358 columnsUsed.add(new String [] { (String ) values[0], (String ) values[1], 359 (String ) values[2], (String ) values[3]}); 360 } while (viewColumnUsageIterator.next()); 361 } 362 } 363 364 366 public boolean equals(Object parm1) { 367 if (! (parm1 instanceof ViewDescriptor)) { 368 return false; 369 } 370 ViewDescriptor des = (ViewDescriptor) parm1; 371 return table_catalog.equalsIgnoreCase(des.table_catalog) 372 && table_schema.equalsIgnoreCase(des.table_schema) 373 && table_name.equalsIgnoreCase(des.table_name); 374 } 375 376 378 public int getDescriptorType() { 379 return VIEW_DESCRIPTOR; 380 } 381 382 383 private String removeSpaces(String query) { 384 String query1 = query; 385 while( query.length() > 4096 ){ 386 String newQuery = query.replaceAll(" "," "); 387 if( newQuery.length() == query.length() ) 388 break; 389 else 390 query = newQuery; 391 } 392 393 if( query1.length() > 4096 ){ 394 query = query.replaceAll(" ,",","); 395 query = query.replaceAll(", ",","); 396 if(query.length() > 4096 ) 397 ; } 399 return query; 400 } 401 } 402 | Popular Tags |