| 1 package com.daffodilwoods.daffodildb.server.datadictionarysystem.information; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.*; 8 import com.daffodilwoods.daffodildb.server.sql99.*; 9 import com.daffodilwoods.daffodildb.server.sql99.common.*; 10 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 12 import com.daffodilwoods.database.general.*; 13 import com.daffodilwoods.database.resource.*; 14 15 public class DatabaseInformation implements _DatabaseInformation, Datatype { 16 _User user; 17 String databaseName; 18 _DataDictionary dataDictionary; 19 _ServerSession connection; 20 ArrayList tablesList; 21 ArrayList proceduresList; 22 ArrayList rolesList; 23 ArrayList viewsList; 24 ArrayList sessionNamesList; 25 ArrayList usersList; 26 27 62 63 public DataTypeProperties getTypeInfo(String key) { 64 return (DataTypeProperties) DatatypeInfoMap.getDataTypeInfoMap().get(key); 65 } 66 67 static Object [][] typeInfo = new Object [][] { 68 {"character", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 69 , {"char", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 70 , {"character varying", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 71 , {"char varying", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 72 , {"varchar", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 73 , 74 75 {"character large object", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 76 , {"char large object", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 77 , {"clob", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 78 , 79 80 {"blob", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 81 , {"binary large object", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 82 , 83 84 {"bit", null, null, null, new Integer (1073741823), new Integer (0), Boolean.TRUE} 85 , {"bit varying", null, null, null, new Integer (4192), new Integer (0), Boolean.TRUE} 86 , 87 88 {"numeric", null, null, null, new Integer (28), new Integer (0), Boolean.TRUE} 89 , {"decimal", null, null, null, new Integer (28), new Integer (0), Boolean.TRUE} 90 , {"dec", null, null, null, new Integer (28), new Integer (0), Boolean.TRUE} 91 , 92 93 {"int", new Integer (Integer.MIN_VALUE), new Integer (Integer.MAX_VALUE), null, new Integer (10), new Integer (0), Boolean.TRUE} 94 , {"integer", new Integer (Integer.MIN_VALUE), new Integer (Integer.MAX_VALUE), null, new Integer (10), new Integer (0), Boolean.TRUE} 95 , 97 {"smallint", new Short (Short.MIN_VALUE), new Short (Short.MAX_VALUE), null, new Integer (5), new Integer (0), Boolean.TRUE} 98 , 99 100 {"float", new Double (Double.MIN_VALUE), new Double (Double.MAX_VALUE), null, new Integer (15), new Integer (0), Boolean.TRUE} 101 , {"real", new Float (Float.MIN_VALUE), new Float (Float.MAX_VALUE), null, new Integer (7), new Integer (0), Boolean.TRUE} 102 , {"double precision", new Double (Double.MIN_VALUE), new Double (Double.MAX_VALUE), null, new Integer (15), new Integer (0), Boolean.TRUE} 103 , 104 105 {"boolean", null, null, Boolean.FALSE, null, null, Boolean.TRUE} 106 , 107 108 {"date", null, null, null, new Integer (19), new Integer (0), Boolean.TRUE} 109 , {"time", null, null, null, new Integer (19), new Integer (0), Boolean.TRUE} 110 , {"timeStamp", null, null, null, new Integer (23), new Integer (0), Boolean.TRUE} 111 , 112 }; 113 114 public DatabaseInformation(_User user, String databaseName, _DataDictionary dataDictionary) { 115 this.user = user; 116 this.databaseName = databaseName; 117 this.dataDictionary = dataDictionary; 118 123 try { 124 Properties prop = new Properties(); 125 prop.setProperty("isvisible", "false"); 126 prop.setProperty(_Server.USER, user.getUserName()); 127 this.connection = ( (Connection) user.getConnection(databaseName, prop)).getServerSession(); 128 } catch (DException ex) { 129 } 130 } 131 132 138 139 public ArrayList getAllTables() { 140 if (tablesList == null) { 141 _SelectQueryIterator iterator = null; 142 try { 143 String query = "select table_catalog,table_schema,table_name from " + SystemTables.tables_TableName 144 + " where table_type = '" + SqlSchemaConstants.baseTableType + "' or table_type = '" + SqlKeywords.TABLE + "' "; 145 iterator = getIterator(query, (Object [])null); 146 tablesList = new ArrayList(); 147 Object [] record = null; 148 if (iterator.first()) { 149 _PrivilegeCharacteristics privilegeCharacteristics = dataDictionary.getPrivilegeCharacteristics(user.getUserName(), _PrivilegeCharacteristics.AUTHORIZATION_ROLE); 150 do { 151 try { 152 record = (Object []) iterator.getObject(); 153 QualifiedIdentifier identifier = new QualifiedIdentifier( (String ) record[0], (String ) record[1], (String ) record[2]); 154 _PrivilegeTable privilageTable = privilegeCharacteristics.getPrivilegeTable(identifier); 155 if (privilageTable.hasTablePrivileges(privilageTable.SELECT) || 156 privilageTable.hasTablePrivileges(privilageTable.DELETE) || 157 privilageTable.hasTablePrivileges(privilageTable.INSERT) || 158 privilageTable.hasTablePrivileges(privilageTable.UPDATE) || 159 privilageTable.hasTablePrivileges(privilageTable.TRIGGER) || 160 privilageTable.hasTablePrivileges(privilageTable.REFERENCES)) 161 tablesList.add(identifier); 162 } catch (DatabaseException e) { 163 e.printStackTrace(); 164 } 165 } while (iterator.next()); 166 } 167 } catch (DException ex) { 168 throw new RuntimeException (ex.getMessage()); 169 } 170 } 171 return tablesList; 172 } 173 174 179 public ArrayList getAllViews() { 180 try { 181 if (viewsList == null) { 182 String selectQuery = "Select table_catalog,table_schema,table_name from " + SystemTables.views_TableName; 183 _SelectQueryIterator iterator = getIterator(selectQuery, (Object [])null); 184 viewsList = getIdentifierListForThreeColumnRetriever(iterator, true); 185 } 186 return viewsList; 187 } catch (DException ex) { 188 throw new RuntimeException (ex.getMessage()); 189 } 190 } 191 192 196 public ArrayList getAllRoles() { 197 try { 198 if (rolesList != null) 199 return rolesList; 200 String selectQuery = "Select role_name from " + SystemTables.roles_TableName; 201 _SelectQueryIterator iterator = getIterator(selectQuery, (Object [])null); 202 rolesList = getIdentifierListForOneColumnRetriever(iterator); 203 return rolesList; 204 } catch (DException ex) { 205 throw new RuntimeException (ex.getMessage()); 206 } 207 } 208 209 public ArrayList getAllUsers() { 210 try { 211 if (usersList != null) 212 return usersList; 213 String selectQuery = "Select user_Name,User_password from " + SystemTables.users_TableName; 214 _SelectQueryIterator iterator = getIterator(selectQuery, (Object [])null); 215 usersList = new ArrayList(5); 216 if (iterator.first()) { 217 do { 218 Object [] obj = (Object []) iterator.getObject(); 219 usersList.add(new UserInformation( (String ) obj[0], (String ) obj[1])); 220 } while (iterator.next()); 221 } 222 return usersList; 223 } catch (DException ex) { 224 throw new RuntimeException (ex.getMessage()); 225 } 226 } 227 228 232 public ArrayList getAllProcedures() { 233 try { 234 if (proceduresList != null) 235 return proceduresList; 236 String selectQuery = "Select specific_catalog,specific_schema,specific_name from " + SystemTables.routines_TableName; 237 _SelectQueryIterator iterator = getIterator(selectQuery, (Object [])null); 238 proceduresList = getIdentifierListForThreeColumnRetriever(iterator, false); 239 return proceduresList; 240 } catch (DException ex) { 241 throw new RuntimeException (ex.getMessage()); 242 } 243 } 244 245 249 public ArrayList getAllSessions() { 250 try { 251 if (sessionNamesList == null) { 252 ArrayList sessionsList = user.getAllSessions(databaseName); 253 if (sessionsList == null) 254 return null; 255 int len = sessionsList.size(); 256 sessionNamesList = new ArrayList(); 257 for (int i = 0; i < len; i++) 258 sessionNamesList.add( ( (_ServerSession) sessionsList.get(i)).getSessionConstant()); 259 } 260 return sessionNamesList; 261 } catch (DException ex) { 262 throw new RuntimeException (ex.getMessage()); 263 } 264 } 265 266 public _TableInformation getTableInformation(QualifiedIdentifier tableName) { 267 return (_TableInformation)new TableInformation(dataDictionary, tableName); 268 } 269 270 public _RoleInformation getRoleInformation(String roleName) { 271 try { 272 _SelectQueryIterator iterator = null; 273 RoleInformation roleInformation = new RoleInformation(); 274 ArrayList objectsAndRights = new ArrayList(); 275 try { 276 String query = "select table_catalog,table_schema,table_name from " + SystemTables.tables_TableName; 277 iterator = getIterator(query, (Object [])null); 278 Object [] record = null; 279 if (iterator.first()) { 280 _PrivilegeCharacteristics privilegeCharacteristics = dataDictionary.getPrivilegeCharacteristics(user.getUserName(), _PrivilegeCharacteristics.AUTHORIZATION_ROLE); 281 do { 282 try { 283 record = (Object []) iterator.getObject(); 284 QualifiedIdentifier identifier = new QualifiedIdentifier( (String ) record[0], (String ) record[1], (String ) record[2]); 285 _PrivilegeTable privilageTable = privilegeCharacteristics.getPrivilegeTable(identifier); 286 boolean[] privileges = new boolean[] { 287 privilageTable.hasTablePrivileges(privilageTable.SELECT), 288 privilageTable.hasTablePrivileges(privilageTable.INSERT), 289 privilageTable.hasTablePrivileges(privilageTable.UPDATE), 290 privilageTable.hasTablePrivileges(privilageTable.DELETE), 291 privilageTable.hasTablePrivileges(privilageTable.EXECUTE), 292 privilageTable.hasTablePrivileges(privilageTable.TRIGGER), 293 privilageTable.hasTablePrivileges(privilageTable.REFERENCES) 294 }; 295 objectsAndRights.add(new Object [] {identifier.getName(), privileges}); 296 } catch (DException ex) { 297 throw new RuntimeException (ex.getMessage()); 298 } 299 300 } while (iterator.next()); 301 } 302 roleInformation.grantor = getGrantor(roleName); 303 } catch (RetrievalException e) {} 304 roleInformation.objectsAndRights = objectsAndRights; 305 roleInformation.name = roleName; 306 return roleInformation; 307 } catch (DException ex) { 308 throw new RuntimeException (ex.getMessage()); 309 } 310 } 311 312 public _UserInformation getUsersInformation(String userName) { 313 try { 314 String query = "select user_password from " + SystemTables.users_TableName + " where user_Name = '" + userName + "'"; 315 _SelectQueryIterator iterator = getIterator(query, (Object [])null); 316 if (iterator.first()) { 317 String password = (String ) ( (Object []) iterator.getObject())[0]; 318 return new UserInformation(userName, password); 319 } 320 throw new RuntimeException ("Invalid user name " + userName); 321 } catch (DException ex) { 322 throw new RuntimeException (ex.getMessage()); 323 } 324 } 325 326 private String getGrantor(String roleName) { 327 try { 328 String roleAuthorizationQuery = "select grantor from " + SystemTables.role_authorization_TableName + " where role_name = ? "; 329 _SelectQueryIterator iterator = getIterator(roleAuthorizationQuery, new Object [] {roleName}); 330 Object [] record = null; 331 iterator.first(); 332 record = (Object []) iterator.getObject(); 333 return (String ) record[0]; 334 } catch (DException ex) { 335 throw new RuntimeException (ex.getMessage()); 336 } 337 } 338 339 public _ViewInformation getViewInformation(QualifiedIdentifier viewName) { 340 try { 341 _ViewCharacteristics viewCharacteristics = dataDictionary.getViewCharacteristics(viewName); 342 ViewInformation viewInformation = new ViewInformation(); 343 viewInformation.catalog = viewName.catalog; 344 viewInformation.schema = viewName.schema; 345 viewInformation.name = viewName.name; 346 viewInformation.viewQuery = viewCharacteristics.getViewQuery(); 347 viewInformation.is_updatable = viewCharacteristics.isUpdatable(); 348 viewInformation.is_insertable_into = viewCharacteristics.isInsertableInto(); 349 String [] viewColumns = viewCharacteristics.getViewColumns(); 350 ArrayList columns = new ArrayList(); 351 for (int i = 0; i < viewColumns.length; i++) 352 columns.add(viewColumns[i]); 353 viewInformation.columns = columns; 354 return viewInformation; 355 } catch (DException ex) { 356 throw new RuntimeException (ex.getMessage()); 357 } 358 } 359 360 public _SessionInformation getSessionInformation(Object sessionName) { 361 try { 362 ArrayList allSessions = user.getAllSessions(databaseName); 363 if (allSessions == null) 364 return null; 365 for (int i = 0, size = allSessions.size(); i < size; i++) { 366 _ServerSession serverSession = (_ServerSession) allSessions.get(i); 367 Object session = serverSession.getSessionConstant(); 368 369 if (session.equals(sessionName)) 370 return new SessionInformation(sessionName.toString(), serverSession.getCurrentUser(), serverSession.getIsolationLevel()); 371 } 372 return null; 373 } catch (DException ex) { 374 throw new RuntimeException (ex.getMessage()); 375 } 376 } 377 378 public _ProcedureInformation getProcedureInformation(QualifiedIdentifier procedureName) { 379 return new ProcedureInformation(connection, procedureName); 380 } 381 382 385 public ArrayList getAllDatabaseTypes() { 386 ArrayList typesList = new ArrayList(); 387 int len = typeInfo.length; 388 for (int i = 0; i < len; i++) 389 typesList.add(typeInfo[i]); 390 return typesList; 391 } 392 393 private ArrayList getIdentifierListForOneColumnRetriever(_SelectQueryIterator iterator) { 394 ArrayList identifierList = new ArrayList(); 395 try { 396 Object [] record = null; 397 if (iterator.first()) { 398 do { 399 record = (Object []) iterator.getObject(); 400 identifierList.add(new QualifiedIdentifier(null, null, (String ) record[0])); 401 } while (iterator.next()); 402 } 403 } catch (DException ex) { 404 throw new RuntimeException (ex.getMessage()); 405 } 406 return identifierList; 407 } 408 409 private ArrayList getIdentifierListForThreeColumnRetriever(_SelectQueryIterator iterator, boolean flag) { 410 ArrayList identifierList = new ArrayList(); 411 try { 412 Object [] record = null; 413 _PrivilegeCharacteristics privilegeCharacteristics = dataDictionary.getPrivilegeCharacteristics(user.getUserName(), _PrivilegeCharacteristics.AUTHORIZATION_ROLE); 414 if (iterator.first()) { 415 do { 416 try { 417 record = (Object []) iterator.getObject(); 418 QualifiedIdentifier identifier = new QualifiedIdentifier( (String ) record[0], (String ) record[1], (String ) record[2]); 419 if (flag) { 420 _PrivilegeTable privilageTable = privilegeCharacteristics.getPrivilegeTable(identifier); 421 if (privilageTable.hasTablePrivileges(privilageTable.SELECT) || 422 privilageTable.hasTablePrivileges(privilageTable.DELETE) || 423 privilageTable.hasTablePrivileges(privilageTable.INSERT) || 424 privilageTable.hasTablePrivileges(privilageTable.UPDATE) || 425 privilageTable.hasTablePrivileges(privilageTable.TRIGGER) || 426 privilageTable.hasTablePrivileges(privilageTable.REFERENCES)) { 427 identifierList.add(identifier); 428 } 429 } else { 430 _PrivilegeTable privilageTable = privilegeCharacteristics.getRoutinePrivilegeTable(); 431 if (privilageTable.hasExecutionRights(identifier.catalog, identifier.schema, identifier.name)) 432 identifierList.add(identifier); 433 } 434 } catch (DatabaseException e) { 435 e.printStackTrace(); 436 } 437 } while (iterator.next()); 438 } 439 } catch (DException ex) { 440 throw new RuntimeException (ex.getMessage()); 441 } 442 return identifierList; 443 } 444 445 private String [] breakTable(String identifier) { 446 String [] breakedTable = new String [3]; 447 int table_name_index = identifier.lastIndexOf('.'); 448 if (table_name_index == -1) { 449 breakedTable[2] = identifier; 450 } else { 451 breakedTable[2] = identifier.substring(table_name_index + 1); 452 int catalog_index = identifier.indexOf('.'); 453 breakedTable[0] = identifier.substring(0, catalog_index); 454 breakedTable[1] = identifier.substring(catalog_index + 1, table_name_index); 455 } 456 return breakedTable; 457 } 458 459 public void refresh() { 460 tablesList = null; 461 viewsList = null; 462 rolesList = null; 463 proceduresList = null; 464 sessionNamesList = null; 465 usersList = null; 466 } 467 468 public void close() throws DException { 469 tablesList = null; 470 viewsList = null; 471 rolesList = null; 472 proceduresList = null; 473 sessionNamesList = null; 474 usersList = null; 475 connection.close(); 476 } 477 478 public void refresh(int property) { 479 switch (property) { 480 case TABLES: 481 tablesList = null; 482 break; 483 case PROCEDURES: 484 proceduresList = null; 485 break; 486 case VIEWS: 487 viewsList = null; 488 break; 489 case ROLES: 490 rolesList = null; 491 break; 492 case SESSIONS: 493 sessionNamesList = null; 494 break; 495 case USERS: 496 usersList = null; 497 } 498 } 499 500 private _SelectQueryIterator getIterator(String query, Object [] parameters) throws DException { 501 if (parameters == null) 502 return (_SelectQueryIterator) connection.getGlobalSession().executeQuery(query, 0); 503 _Executer executer = (_Executer) connection.getGlobalSession().executeQueryParameterised(query, 0); 504 return (_SelectQueryIterator) executer.execute(parameters); 505 } 506 } 507 | Popular Tags |