1 30 31 32 package org.hsqldb; 33 34 import java.lang.reflect.Method ; 35 36 import org.hsqldb.lib.FileUtil; 37 import org.hsqldb.lib.HashMap; 38 import org.hsqldb.lib.HashSet; 39 import org.hsqldb.lib.HsqlArrayList; 40 import org.hsqldb.lib.Iterator; 41 import org.hsqldb.persist.DataFileCache; 42 import org.hsqldb.persist.HsqlDatabaseProperties; 43 import org.hsqldb.persist.HsqlProperties; 44 import org.hsqldb.persist.Log; 45 import org.hsqldb.persist.TextCache; 46 import org.hsqldb.scriptio.ScriptWriterBase; 47 import org.hsqldb.store.ValuePool; 48 49 57 65 final class DatabaseInformationFull 66 extends org.hsqldb.DatabaseInformationMain { 67 68 69 protected DIProcedureInfo pi; 70 71 77 DatabaseInformationFull(Database db) throws HsqlException { 78 79 super(db); 80 81 pi = new DIProcedureInfo(ns); 82 } 83 84 91 protected Table generateTable(int tableIndex) throws HsqlException { 92 93 switch (tableIndex) { 94 95 case SYSTEM_PROCEDURECOLUMNS : 96 return SYSTEM_PROCEDURECOLUMNS(); 97 98 case SYSTEM_PROCEDURES : 99 return SYSTEM_PROCEDURES(); 100 101 case SYSTEM_SUPERTABLES : 102 return SYSTEM_SUPERTABLES(); 103 104 case SYSTEM_SUPERTYPES : 105 return SYSTEM_SUPERTYPES(); 106 107 case SYSTEM_UDTATTRIBUTES : 108 return SYSTEM_UDTATTRIBUTES(); 109 110 case SYSTEM_UDTS : 111 return SYSTEM_UDTS(); 112 113 case SYSTEM_VERSIONCOLUMNS : 114 return SYSTEM_VERSIONCOLUMNS(); 115 116 case SYSTEM_ALIASES : 118 return SYSTEM_ALIASES(); 119 120 case SYSTEM_CACHEINFO : 121 return SYSTEM_CACHEINFO(); 122 123 case SYSTEM_CLASSPRIVILEGES : 124 return SYSTEM_CLASSPRIVILEGES(); 125 126 case SYSTEM_SESSIONINFO : 127 return SYSTEM_SESSIONINFO(); 128 129 case SYSTEM_PROPERTIES : 130 return SYSTEM_PROPERTIES(); 131 132 case SYSTEM_SESSIONS : 133 return SYSTEM_SESSIONS(); 134 135 case SYSTEM_TRIGGERCOLUMNS : 136 return SYSTEM_TRIGGERCOLUMNS(); 137 138 case SYSTEM_TRIGGERS : 139 return SYSTEM_TRIGGERS(); 140 141 case SYSTEM_VIEWS : 142 return SYSTEM_VIEWS(); 143 144 case SYSTEM_TEXTTABLES : 145 return SYSTEM_TEXTTABLES(); 146 147 case SYSTEM_USAGE_PRIVILEGES : 148 return SYSTEM_USAGE_PRIVILEGES(); 149 150 case SYSTEM_CHECK_COLUMN_USAGE : 151 return SYSTEM_CHECK_COLUMN_USAGE(); 152 153 case SYSTEM_CHECK_ROUTINE_USAGE : 154 return SYSTEM_CHECK_ROUTINE_USAGE(); 155 156 case SYSTEM_CHECK_TABLE_USAGE : 157 return SYSTEM_CHECK_TABLE_USAGE(); 158 159 case SYSTEM_TABLE_CONSTRAINTS : 160 return SYSTEM_TABLE_CONSTRAINTS(); 161 162 case SYSTEM_VIEW_TABLE_USAGE : 163 return SYSTEM_VIEW_TABLE_USAGE(); 164 165 case SYSTEM_VIEW_COLUMN_USAGE : 166 return SYSTEM_VIEW_COLUMN_USAGE(); 167 168 case SYSTEM_VIEW_ROUTINE_USAGE : 169 return SYSTEM_VIEW_ROUTINE_USAGE(); 170 171 case SYSTEM_AUTHORIZATIONS : { 172 return SYSTEM_AUTHORIZATIONS(); 173 } 174 case SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS : { 175 return SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS(); 176 } 177 case SYSTEM_SCHEMATA : { 178 return SYSTEM_SCHEMATA(); 179 } 180 case SYSTEM_COLLATIONS : { 181 return SYSTEM_COLLATIONS(); 182 } 183 default : 184 return super.generateTable(tableIndex); 185 } 186 } 187 188 218 Table SYSTEM_ALIASES() throws HsqlException { 219 220 Table t = sysTables[SYSTEM_ALIASES]; 221 222 if (t == null) { 223 t = createBlankTable(sysTableHsqlNames[SYSTEM_ALIASES]); 224 225 addColumn(t, "OBJECT_TYPE", Types.VARCHAR, 32, false); addColumn(t, "OBJECT_CAT", Types.VARCHAR); 227 addColumn(t, "OBJECT_SCHEM", Types.VARCHAR); 228 addColumn(t, "OBJECT_NAME", Types.VARCHAR, false); addColumn(t, "ALIAS_CAT", Types.VARCHAR); 230 addColumn(t, "ALIAS_SCHEM", Types.VARCHAR); 231 addColumn(t, "ALIAS", Types.VARCHAR, false); 233 t.createPrimaryKey(null, new int[] { 236 0, 3, 6 237 }, true); 238 239 return t; 240 } 241 242 String cat; 244 String schem; 245 String alias; 246 String objName; 247 String objType; 248 249 String className; 251 HashMap hAliases; 252 Iterator aliases; 253 Object [] row; 254 int pos; 255 256 final int ialias_object_type = 0; 258 final int ialias_object_cat = 1; 259 final int ialias_object_schem = 2; 260 final int ialias_object_name = 3; 261 final int ialias_cat = 4; 262 final int ialias_schem = 5; 263 final int ialias = 6; 264 265 hAliases = database.getAliasMap(); 267 aliases = hAliases.keySet().iterator(); 268 objType = "ROUTINE"; 269 270 while (aliases.hasNext()) { 272 row = t.getEmptyRowData(); 273 alias = (String ) aliases.next(); 274 objName = (String ) hAliases.get(alias); 275 276 pos = objName.lastIndexOf('.'); 278 279 if (pos <= 0) { 280 281 continue; 287 } 288 289 className = objName.substring(0, pos); 290 291 if (!session.isAccessible(className)) { 292 continue; 293 } 294 295 cat = ns.getCatalogName(objName); 296 schem = ns.getSchemaName(className); 297 row[ialias_object_type] = objType; 298 row[ialias_object_cat] = cat; 299 row[ialias_object_schem] = schem; 300 row[ialias_object_name] = objName; 301 row[ialias_cat] = cat; 302 row[ialias_schem] = schem; 303 row[ialias] = alias; 304 305 t.insertSys(row); 306 } 307 308 if (session.isAdmin()) { 310 Iterator typeAliases = Types.typeAliases.keySet().iterator(); 311 312 objType = "DOMAIN"; 313 314 while (typeAliases.hasNext()) { 315 row = t.getEmptyRowData(); 316 alias = (String ) typeAliases.next(); 317 318 int tn = Types.typeAliases.get(alias, Integer.MIN_VALUE); 319 320 objName = Types.getTypeString(tn); 321 322 if (alias.equals(objName)) { 323 continue; 324 } 325 326 cat = ns.getCatalogName(objName); 327 schem = ns.getSchemaName(objName); 328 row[ialias_object_type] = objType; 329 row[ialias_object_cat] = cat; 330 row[ialias_object_schem] = schem; 331 row[ialias_object_name] = objName; 332 row[ialias_cat] = cat; 333 row[ialias_schem] = schem; 334 row[ialias] = alias; 335 336 t.insertSys(row); 337 } 338 } 339 340 t.setDataReadOnly(true); 341 342 return t; 343 } 344 345 390 Table SYSTEM_CACHEINFO() throws HsqlException { 391 392 Table t = sysTables[SYSTEM_CACHEINFO]; 393 394 if (t == null) { 395 t = createBlankTable(sysTableHsqlNames[SYSTEM_CACHEINFO]); 396 397 addColumn(t, "CACHE_FILE", Types.VARCHAR, false); addColumn(t, "MAX_CACHE_COUNT", Types.INTEGER, false); addColumn(t, "MAX_CACHE_BYTES", Types.BIGINT, false); addColumn(t, "CACHE_SIZE", Types.INTEGER, false); addColumn(t, "CACHE_BYTES", Types.BIGINT, false); addColumn(t, "FILE_FREE_BYTES", Types.INTEGER, false); addColumn(t, "FILE_FREE_COUNT", Types.INTEGER, false); addColumn(t, "FILE_FREE_POS", Types.BIGINT, false); t.createPrimaryKey(null, new int[]{ 0 }, true); 406 407 return t; 408 } 409 410 DataFileCache cache; 411 Object [] row; 412 HashSet cacheSet; 413 Iterator caches; 414 Iterator tables; 415 Table table; 416 int iFreeBytes; 417 int iLargestFreeItem; 418 long lSmallestFreeItem; 419 420 final int icache_file = 0; 422 final int imax_cache_sz = 1; 423 final int imax_cache_bytes = 2; 424 final int icache_size = 3; 425 final int icache_length = 4; 426 final int ifree_bytes = 5; 427 final int ifree_count = 6; 428 final int ifree_pos = 7; 429 430 cacheSet = new HashSet(); 432 433 tables = database.schemaManager.allTablesIterator(); 435 436 while (tables.hasNext()) { 437 table = (Table) tables.next(); 438 439 if (table.isFileBased() && isAccessibleTable(table)) { 440 cache = table.getCache(); 441 442 if (cache != null) { 443 cacheSet.add(cache); 444 } 445 } 446 } 447 448 caches = cacheSet.iterator(); 449 450 while (caches.hasNext()) { 452 cache = (DataFileCache) caches.next(); 453 row = t.getEmptyRowData(); 454 row[icache_file] = 455 FileUtil.canonicalOrAbsolutePath(cache.getFileName()); 456 row[imax_cache_sz] = ValuePool.getInt(cache.capacity()); 457 row[imax_cache_bytes] = ValuePool.getLong(cache.bytesCapacity()); 458 row[icache_size] = ValuePool.getInt(cache.getCachedObjectCount()); 459 row[icache_length] = 460 ValuePool.getLong(cache.getTotalCachedBlockSize()); 461 row[ifree_bytes] = 462 ValuePool.getInt(cache.getTotalFreeBlockSize()); 463 row[ifree_count] = ValuePool.getInt(cache.getFreeBlockCount()); 464 row[ifree_pos] = ValuePool.getLong(cache.getFileFreePos()); 465 466 t.insertSys(row); 467 } 468 469 t.setDataReadOnly(true); 470 471 return t; 472 } 473 474 504 Table SYSTEM_CLASSPRIVILEGES() throws HsqlException { 505 506 Table t = sysTables[SYSTEM_CLASSPRIVILEGES]; 507 508 if (t == null) { 509 t = createBlankTable(sysTableHsqlNames[SYSTEM_CLASSPRIVILEGES]); 510 511 addColumn(t, "CLASS_CAT", Types.VARCHAR); 512 addColumn(t, "CLASS_SCHEM", Types.VARCHAR); 513 addColumn(t, "CLASS_NAME", Types.VARCHAR, false); addColumn(t, "GRANTOR", Types.VARCHAR, false); addColumn(t, "GRANTEE", Types.VARCHAR, false); addColumn(t, "PRIVILEGE", Types.VARCHAR, 7, false); addColumn(t, "IS_GRANTABLE", Types.VARCHAR, 3, false); t.createPrimaryKey(null, new int[] { 519 2, 4, 5 520 }, true); 521 522 return t; 523 } 524 525 String clsCat; 527 String clsSchem; 528 String clsName; 529 String grantorName; 530 String granteeName; 531 String privilege; 532 String isGrantable; 533 534 UserManager um; 536 HsqlArrayList users; 537 HashSet classNameSet; 538 Iterator classNames; 539 User granteeUser; 540 Object [] row; 541 542 final int icls_cat = 0; 544 final int icls_schem = 1; 545 final int icls_name = 2; 546 final int igrantor = 3; 547 final int igrantee = 4; 548 final int iprivilege = 5; 549 final int iis_grntbl = 6; 550 551 grantorName = GranteeManager.DBA_ADMIN_ROLE_NAME; 553 um = database.getUserManager(); 554 users = um.listVisibleUsers(session, true); 555 556 for (int i = 0; i < users.size(); i++) { 558 granteeUser = (User) users.get(i); 559 granteeName = granteeUser.getName(); 560 isGrantable = granteeUser.isAdmin() ? "YES" 561 : "NO"; 562 classNameSet = granteeUser.getGrantedClassNames(false); 563 564 if (granteeUser.isPublic()) { 565 ns.addBuiltinToSet(classNameSet); 566 } 567 568 classNames = classNameSet.iterator(); 569 570 privilege = "EXECUTE"; 574 575 while (classNames.hasNext()) { 576 clsName = (String ) classNames.next(); 577 clsCat = ns.getCatalogName(clsName); 578 clsSchem = ns.getSchemaName(clsName); 579 row = t.getEmptyRowData(); 580 row[icls_cat] = clsCat; 581 row[icls_schem] = clsSchem; 582 row[icls_name] = clsName; 583 row[igrantor] = grantorName; 584 row[igrantee] = granteeName; 585 row[iprivilege] = privilege; 586 row[iis_grntbl] = isGrantable; 587 588 t.insertSys(row); 589 } 590 591 classNames = ns.iterateAccessibleTriggerClassNames(granteeUser); 592 593 privilege = "TRIGGER"; 597 598 while (classNames.hasNext()) { 599 clsName = (String ) classNames.next(); 600 clsCat = ns.getCatalogName(clsName); 601 clsSchem = ns.getSchemaName(clsName); 602 row = t.getEmptyRowData(); 603 row[icls_cat] = clsCat; 604 row[icls_schem] = clsSchem; 605 row[icls_name] = clsName; 606 row[igrantor] = grantorName; 607 row[igrantee] = granteeName; 608 row[iprivilege] = privilege; 609 row[iis_grntbl] = isGrantable; 610 611 t.insertSys(row); 612 } 613 } 614 615 t.setDataReadOnly(true); 616 617 return t; 618 } 619 620 651 Table SYSTEM_SESSIONINFO() throws HsqlException { 652 653 Table t = sysTables[SYSTEM_SESSIONINFO]; 654 655 if (t == null) { 656 t = createBlankTable(sysTableHsqlNames[SYSTEM_SESSIONINFO]); 657 658 addColumn(t, "KEY", Types.VARCHAR, false); addColumn(t, "VALUE", Types.VARCHAR, false); t.createPrimaryKey(null); 661 662 return t; 663 } 664 665 Object [] row; 666 667 row = t.getEmptyRowData(); 668 row[0] = "SESSION_ID"; 669 row[1] = String.valueOf(session.getId()); 670 671 t.insertSys(row); 672 673 row = t.getEmptyRowData(); 674 row[0] = "AUTOCOMMIT"; 675 row[1] = session.isAutoCommit() ? "TRUE" 676 : "FALSE"; 677 678 t.insertSys(row); 679 680 row = t.getEmptyRowData(); 681 row[0] = "USER"; 682 row[1] = session.getUsername(); 683 684 t.insertSys(row); 685 686 row = t.getEmptyRowData(); 687 row[0] = "SESSION_READONLY"; 688 row[1] = session.isReadOnly() ? "TRUE" 689 : "FALSE"; 690 691 t.insertSys(row); 692 693 row = t.getEmptyRowData(); 694 row[0] = "DATABASE_READONLY"; 695 row[1] = database.databaseReadOnly ? "TRUE" 696 : "FALSE"; 697 698 t.insertSys(row); 699 700 row = t.getEmptyRowData(); 702 row[0] = "MAXROWS"; 703 row[1] = String.valueOf(session.getSQLMaxRows()); 704 705 t.insertSys(row); 706 707 row = t.getEmptyRowData(); 708 row[0] = "DATABASE"; 709 row[1] = database.getURI(); 710 711 t.insertSys(row); 712 713 row = t.getEmptyRowData(); 714 row[0] = "IDENTITY"; 715 row[1] = String.valueOf(session.getLastIdentity()); 716 717 t.insertSys(row); 718 719 row = t.getEmptyRowData(); 720 row[0] = "SCHEMA"; 721 row[1] = String.valueOf(session.getSchemaName(null)); 722 723 t.insertSys(row); 724 t.setDataReadOnly(true); 725 726 return t; 727 } 728 729 781 Table SYSTEM_PROPERTIES() throws HsqlException { 782 783 Table t = sysTables[SYSTEM_PROPERTIES]; 784 785 if (t == null) { 786 t = createBlankTable(sysTableHsqlNames[SYSTEM_PROPERTIES]); 787 788 addColumn(t, "PROPERTY_SCOPE", Types.VARCHAR, false); 789 addColumn(t, "PROPERTY_NAMESPACE", Types.VARCHAR, false); 790 addColumn(t, "PROPERTY_NAME", Types.VARCHAR, false); 791 addColumn(t, "PROPERTY_VALUE", Types.VARCHAR); 792 addColumn(t, "PROPERTY_CLASS", Types.VARCHAR, false); 793 794 t.createPrimaryKey(null, new int[] { 797 0, 1, 2 798 }, true); 799 800 return t; 801 } 802 803 String scope; 805 String nameSpace; 806 807 Object [] row; 809 HsqlDatabaseProperties props; 810 811 final int iscope = 0; 813 final int ins = 1; 814 final int iname = 2; 815 final int ivalue = 3; 816 final int iclass = 4; 817 818 scope = "SESSION"; 821 props = database.getProperties(); 822 nameSpace = "database.properties"; 823 824 Iterator it = props.getUserDefinedPropertyData().iterator(); 826 827 while (it.hasNext()) { 828 Object [] metaData = (Object []) it.next(); 829 830 row = t.getEmptyRowData(); 831 row[iscope] = scope; 832 row[ins] = nameSpace; 833 row[iname] = metaData[HsqlDatabaseProperties.indexName]; 834 row[ivalue] = props.getProperty((String ) row[iname]); 835 row[iclass] = metaData[HsqlDatabaseProperties.indexClass]; 836 837 t.insertSys(row); 838 } 839 row = t.getEmptyRowData(); 840 row[iscope] = scope; 841 row[ins] = nameSpace; 842 row[iname] = "SCRIPTFORMAT"; 843 844 try { 845 row[ivalue] = 846 ScriptWriterBase 847 .LIST_SCRIPT_FORMATS[database.logger.getScriptType()]; 848 } catch (Exception e) {} 849 850 row[iclass] = "java.lang.String"; 851 852 t.insertSys(row); 853 854 row = t.getEmptyRowData(); 856 row[iscope] = scope; 857 row[ins] = nameSpace; 858 row[iname] = "WRITE_DELAY"; 859 row[ivalue] = "" + database.logger.getWriteDelay(); 860 row[iclass] = "int"; 861 862 t.insertSys(row); 863 864 row = t.getEmptyRowData(); 866 row[iscope] = scope; 867 row[ins] = nameSpace; 868 row[iname] = "IGNORECASE"; 869 row[ivalue] = database.isIgnoreCase() ? "true" 870 : "false"; 871 row[iclass] = "boolean"; 872 873 t.insertSys(row); 874 875 row = t.getEmptyRowData(); 877 row[iscope] = scope; 878 row[ins] = nameSpace; 879 row[iname] = "REFERENTIAL_INTEGRITY"; 880 row[ivalue] = database.isReferentialIntegrity() ? "true" 881 : "false"; 882 row[iclass] = "boolean"; 883 884 t.insertSys(row); 885 t.setDataReadOnly(true); 886 887 return t; 888 } 889 890 914 Table SYSTEM_SESSIONS() throws HsqlException { 915 916 Table t = sysTables[SYSTEM_SESSIONS]; 917 918 if (t == null) { 919 t = createBlankTable(sysTableHsqlNames[SYSTEM_SESSIONS]); 920 921 addColumn(t, "SESSION_ID", Types.INTEGER, false); 922 addColumn(t, "CONNECTED", Types.TIMESTAMP, false); 923 addColumn(t, "USER_NAME", Types.VARCHAR, false); 924 addColumn(t, "IS_ADMIN", Types.BOOLEAN, false); 925 addColumn(t, "AUTOCOMMIT", Types.BOOLEAN, false); 926 addColumn(t, "READONLY", Types.BOOLEAN, false); 927 addColumn(t, "MAXROWS", Types.INTEGER, false); 928 929 addColumn(t, "LAST_IDENTITY", Types.BIGINT); 931 addColumn(t, "TRANSACTION_SIZE", Types.INTEGER, false); 932 addColumn(t, "SCHEMA", Types.VARCHAR, false); 933 934 t.createPrimaryKey(null, new int[]{ 0 }, true); 937 938 return t; 939 } 940 941 Session[] sessions; 943 Session s; 944 Object [] row; 945 946 final int isid = 0; 948 final int ict = 1; 949 final int iuname = 2; 950 final int iis_admin = 3; 951 final int iautocmt = 4; 952 final int ireadonly = 5; 953 final int imaxrows = 6; 954 final int ilast_id = 7; 955 final int it_size = 8; 956 final int it_schema = 9; 957 958 sessions = ns.listVisibleSessions(session); 960 961 for (int i = 0; i < sessions.length; i++) { 963 s = sessions[i]; 964 row = t.getEmptyRowData(); 965 row[isid] = ValuePool.getInt(s.getId()); 966 row[ict] = HsqlDateTime.getTimestamp(s.getConnectTime()); 967 row[iuname] = s.getUsername(); 968 row[iis_admin] = ValuePool.getBoolean(s.isAdmin()); 969 row[iautocmt] = ValuePool.getBoolean(s.isAutoCommit()); 970 row[ireadonly] = ValuePool.getBoolean(s.isReadOnly()); 971 row[imaxrows] = ValuePool.getInt(s.getSQLMaxRows()); 972 row[ilast_id] = 973 ValuePool.getLong(s.getLastIdentity().longValue()); 974 row[it_size] = ValuePool.getInt(s.getTransactionSize()); 975 row[it_schema] = s.getSchemaName(null); 976 977 t.insertSys(row); 978 } 979 980 t.setDataReadOnly(true); 981 982 return t; 983 } 984 985 1003 Table SYSTEM_SUPERTABLES() throws HsqlException { 1004 1005 Table t = sysTables[SYSTEM_SUPERTABLES]; 1006 1007 if (t == null) { 1008 t = createBlankTable(sysTableHsqlNames[SYSTEM_SUPERTABLES]); 1009 1010 addColumn(t, "TABLE_CAT", Types.VARCHAR); 1011 addColumn(t, "TABLE_SCHEM", Types.VARCHAR); 1012 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); addColumn(t, "SUPERTABLE_NAME", Types.VARCHAR, false); t.createPrimaryKey(null); 1015 1016 return t; 1017 } 1018 1019 t.setDataReadOnly(true); 1020 1021 return t; 1022 } 1023 1024 1044 Table SYSTEM_SUPERTYPES() throws HsqlException { 1045 1046 Table t = sysTables[SYSTEM_SUPERTYPES]; 1047 1048 if (t == null) { 1049 t = createBlankTable(sysTableHsqlNames[SYSTEM_SUPERTYPES]); 1050 1051 addColumn(t, "TYPE_CAT", Types.VARCHAR); 1052 addColumn(t, "TYPE_SCHEM", Types.VARCHAR); 1053 addColumn(t, "TYPE_NAME", Types.VARCHAR, false); addColumn(t, "SUPERTYPE_CAT", Types.VARCHAR); 1055 addColumn(t, "SUPERTYPE_SCHEM", Types.VARCHAR); 1056 addColumn(t, "SUPERTYPE_NAME", Types.VARCHAR, false); t.createPrimaryKey(null); 1058 1059 return t; 1060 } 1061 1062 t.setDataReadOnly(true); 1063 1064 return t; 1065 } 1066 1067 1097 Table SYSTEM_TEXTTABLES() throws HsqlException { 1098 1099 Table t = sysTables[SYSTEM_TEXTTABLES]; 1100 1101 if (t == null) { 1102 t = createBlankTable(sysTableHsqlNames[SYSTEM_TEXTTABLES]); 1103 1104 addColumn(t, "TABLE_CAT", Types.VARCHAR); 1105 addColumn(t, "TABLE_SCHEM", Types.VARCHAR); 1106 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); addColumn(t, "DATA_SOURCE_DEFINTION", Types.VARCHAR); 1108 addColumn(t, "FILE_PATH", Types.VARCHAR); 1109 addColumn(t, "FILE_ENCODING", Types.VARCHAR); 1110 addColumn(t, "FIELD_SEPARATOR", Types.VARCHAR); 1111 addColumn(t, "VARCHAR_SEPARATOR", Types.VARCHAR); 1112 addColumn(t, "LONGVARCHAR_SEPARATOR", Types.VARCHAR); 1113 addColumn(t, "IS_IGNORE_FIRST", Types.BOOLEAN); 1114 addColumn(t, "IS_ALL_QUOTED", Types.BOOLEAN); 1115 addColumn(t, "IS_QUOTED", Types.BOOLEAN); 1116 addColumn(t, "IS_DESC", Types.BOOLEAN); 1117 1118 t.createPrimaryKey(); 1120 1121 return t; 1122 } 1123 1124 Iterator tables; 1126 Table table; 1127 Object [] row; 1128 1129 TextCache tc; 1131 1132 final int itable_cat = 0; 1134 final int itable_schem = 1; 1135 final int itable_name = 2; 1136 final int idsd = 3; 1137 final int ifile_path = 4; 1138 final int ifile_enc = 5; 1139 final int ifs = 6; 1140 final int ivfs = 7; 1141 final int ilvfs = 8; 1142 final int iif = 9; 1143 final int iiq = 10; 1144 final int iiaq = 11; 1145 final int iid = 12; 1146 1147 tables = database.schemaManager.allTablesIterator(); 1149 1150 while (tables.hasNext()) { 1152 table = (Table) tables.next(); 1153 1154 if (!table.isText() ||!isAccessibleTable(table)) { 1155 continue; 1156 } 1157 1158 row = t.getEmptyRowData(); 1159 row[itable_cat] = ns.getCatalogName(table); 1160 row[itable_schem] = table.getSchemaName(); 1161 row[itable_name] = table.getName().name; 1162 1163 if (table.getCache() instanceof TextCache) { 1164 tc = (TextCache) table.getCache(); 1165 row[idsd] = table.getDataSource(); 1166 row[ifile_path] = 1167 FileUtil.canonicalOrAbsolutePath(tc.getFileName()); 1168 row[ifile_enc] = tc.stringEncoding; 1169 row[ifs] = tc.fs; 1170 row[ivfs] = tc.vs; 1171 row[ilvfs] = tc.lvs; 1172 row[iif] = ValuePool.getBoolean(tc.ignoreFirst); 1173 row[iiq] = ValuePool.getBoolean(tc.isQuoted); 1174 row[iiaq] = ValuePool.getBoolean(tc.isAllQuoted); 1175 row[iid] = ValuePool.getBoolean(table.isDescDataSource()); 1176 } 1177 1178 t.insertSys(row); 1179 } 1180 1181 t.setDataReadOnly(true); 1182 1183 return t; 1184 } 1185 1186 1209 Table SYSTEM_TRIGGERCOLUMNS() throws HsqlException { 1210 1211 Table t = sysTables[SYSTEM_TRIGGERCOLUMNS]; 1212 1213 if (t == null) { 1214 t = createBlankTable(sysTableHsqlNames[SYSTEM_TRIGGERCOLUMNS]); 1215 1216 addColumn(t, "TRIGGER_CAT", Types.VARCHAR); 1217 addColumn(t, "TRIGGER_SCHEM", Types.VARCHAR); 1218 addColumn(t, "TRIGGER_NAME", Types.VARCHAR); 1219 addColumn(t, "TABLE_CAT", Types.VARCHAR); 1220 addColumn(t, "TABLE_SCHEM", Types.VARCHAR); 1221 addColumn(t, "TABLE_NAME", Types.VARCHAR); 1222 addColumn(t, "COLUMN_NAME", Types.VARCHAR); 1223 addColumn(t, "COLUMN_LIST", Types.VARCHAR); 1224 addColumn(t, "COLUMN_USAGE", Types.VARCHAR); 1225 1226 t.createPrimaryKey(null, new int[] { 1231 0, 1, 2, 3, 4, 5, 6, 7, 8 1232 }, false); 1233 1234 return t; 1235 } 1236 1237 Result rs; 1238 1239 rs = session.sqlExecuteDirectNoPreChecks( 1242 "select a.TRIGGER_CAT,a.TRIGGER_SCHEM,a.TRIGGER_NAME, " 1243 + "a.TABLE_CAT,a.TABLE_SCHEM,a.TABLE_NAME,b.COLUMN_NAME,'Y'," 1244 + "'IN' from INFORMATION_SCHEMA.SYSTEM_TRIGGERS a, " 1245 + "INFORMATION_SCHEMA.SYSTEM_COLUMNS b where " 1246 + "a.TABLE_NAME=b.TABLE_NAME and a.TABLE_SCHEM=b.TABLE_SCHEM"); 1247 1248 1265 t.insertSys(rs); 1266 t.setDataReadOnly(true); 1267 1268 return t; 1269 } 1270 1271 1302 Table SYSTEM_TRIGGERS() throws HsqlException { 1303 1304 Table t = sysTables[SYSTEM_TRIGGERS]; 1305 1306 if (t == null) { 1307 t = createBlankTable(sysTableHsqlNames[SYSTEM_TRIGGERS]); 1308 1309 addColumn(t, "TRIGGER_CAT", Types.VARCHAR); 1310 addColumn(t, "TRIGGER_SCHEM", Types.VARCHAR); 1311 addColumn(t, "TRIGGER_NAME", Types.VARCHAR, false); 1312 addColumn(t, "TRIGGER_TYPE", Types.VARCHAR, 15, false); 1313 addColumn(t, "TRIGGERING_EVENT", Types.VARCHAR, 10, false); 1314 addColumn(t, "TABLE_CAT", Types.VARCHAR); 1315 addColumn(t, "TABLE_SCHEM", Types.VARCHAR); 1316 addColumn(t, "BASE_OBJECT_TYPE", Types.VARCHAR, 8, false); 1317 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); 1318 addColumn(t, "COLUMN_NAME", Types.VARCHAR); 1319 addColumn(t, "REFERENCING_NAMES", Types.VARCHAR, false); 1320 addColumn(t, "WHEN_CLAUSE", Types.VARCHAR); 1321 addColumn(t, "STATUS", Types.VARCHAR, 8, false); 1322 addColumn(t, "DESCRIPTION", Types.VARCHAR, false); 1323 addColumn(t, "ACTION_TYPE", Types.VARCHAR, false); 1324 addColumn(t, "TRIGGER_BODY", Types.VARCHAR, false); 1325 1326 t.createPrimaryKey(null, new int[] { 1330 3, 1, 2, 0 1331 }, false); 1332 1333 return t; 1334 } 1335 1336 String triggerCatalog; 1338 String triggerSchema; 1339 String triggerName; 1340 String triggerType; 1341 String triggeringEvent; 1342 String tableCatalog; 1343 String tableSchema; 1344 String baseObjectType; 1345 String tableName; 1346 String columnName; 1347 String referencingNames; 1348 String whenClause; 1349 String status; 1350 String description; 1351 String actionType; 1352 String triggerBody; 1353 1354 Iterator tables; 1356 Table table; 1357 HsqlArrayList[] vTrigs; 1358 HsqlArrayList triggerList; 1359 TriggerDef def; 1360 Object [] row; 1361 1362 final int itrigger_cat = 0; 1364 final int itrigger_schem = 1; 1365 final int itrigger_name = 2; 1366 final int itrigger_type = 3; 1367 final int itriggering_event = 4; 1368 final int itable_cat = 5; 1369 final int itable_schem = 6; 1370 final int ibase_object_type = 7; 1371 final int itable_name = 8; 1372 final int icolumn_name = 9; 1373 final int ireferencing_names = 10; 1374 final int iwhen_clause = 11; 1375 final int istatus = 12; 1376 final int idescription = 13; 1377 final int iaction_type = 14; 1378 final int itrigger_body = 15; 1379 1380 tables = database.schemaManager.allTablesIterator(); 1382 1383 actionType = "CALL"; 1385 baseObjectType = "TABLE"; 1386 columnName = null; 1387 referencingNames = "ROW"; 1388 whenClause = null; 1389 1390 while (tables.hasNext()) { 1392 table = (Table) tables.next(); 1393 vTrigs = table.triggerLists; 1394 1395 if (vTrigs == null) { 1397 continue; 1398 } 1399 1400 if (!isAccessibleTable(table)) { 1401 continue; 1402 } 1403 1404 tableCatalog = ns.getCatalogName(table); 1405 triggerCatalog = tableCatalog; 1406 tableSchema = table.getSchemaName(); 1407 triggerSchema = tableSchema; 1408 tableName = table.getName().name; 1409 1410 for (int i = 0; i < vTrigs.length; i++) { 1411 triggerList = vTrigs[i]; 1412 1413 if (triggerList == null) { 1414 continue; 1415 } 1416 1417 for (int j = 0; j < triggerList.size(); j++) { 1418 def = (TriggerDef) triggerList.get(j); 1419 1420 if (def == null) { 1421 continue; 1422 } 1423 1424 triggerName = def.name.name; 1425 description = def.getDDL().toString(); 1426 status = def.valid ? "ENABLED" 1427 : "DISABLED"; 1428 triggerBody = def.triggerClassName; 1429 triggerType = def.when; 1430 1431 if (def.forEachRow) { 1432 triggerType += " EACH ROW"; 1433 } 1434 1435 triggeringEvent = def.operation; 1436 row = t.getEmptyRowData(); 1437 row[itrigger_cat] = triggerCatalog; 1438 row[itrigger_schem] = triggerSchema; 1439 row[itrigger_name] = triggerName; 1440 row[itrigger_type] = triggerType; 1441 row[itriggering_event] = triggeringEvent; 1442 row[itable_cat] = tableCatalog; 1443 row[itable_schem] = tableSchema; 1444 row[ibase_object_type] = baseObjectType; 1445 row[itable_name] = tableName; 1446 row[icolumn_name] = columnName; 1447 row[ireferencing_names] = referencingNames; 1448 row[iwhen_clause] = whenClause; 1449 row[istatus] = status; 1450 row[idescription] = description; 1451 row[iaction_type] = actionType; 1452 row[itrigger_body] = triggerBody; 1453 1454 t.insertSys(row); 1455 } 1456 } 1457 } 1458 1459 t.setDataReadOnly(true); 1460 1461 return t; 1462 } 1463 1464 1513 Table SYSTEM_UDTATTRIBUTES() throws HsqlException { 1514 1515 Table t = sysTables[SYSTEM_UDTATTRIBUTES]; 1516 1517 if (t == null) { 1518 t = createBlankTable(sysTableHsqlNames[SYSTEM_UDTATTRIBUTES]); 1519 1520 addColumn(t, "TYPE_CAT", Types.VARCHAR); 1521 addColumn(t, "TYPE_SCHEM", Types.VARCHAR); 1522 addColumn(t, "TYPE_NAME", Types.VARCHAR, false); addColumn(t, "ATTR_NAME", Types.VARCHAR, false); addColumn(t, "DATA_TYPE", Types.SMALLINT, false); addColumn(t, "ATTR_TYPE_NAME", Types.VARCHAR, false); addColumn(t, "ATTR_SIZE", Types.INTEGER); 1527 addColumn(t, "DECIMAL_DIGITS", Types.INTEGER); 1528 addColumn(t, "NUM_PREC_RADIX", Types.INTEGER); 1529 addColumn(t, "NULLABLE", Types.INTEGER); 1530 addColumn(t, "REMARKS", Types.VARCHAR); 1531 addColumn(t, "ATTR_DEF", Types.VARCHAR); 1532 addColumn(t, "SQL_DATA_TYPE", Types.INTEGER); 1533 addColumn(t, "SQL_DATETIME_SUB", Types.INTEGER); 1534 addColumn(t, "CHAR_OCTET_LENGTH", Types.INTEGER); 1535 addColumn(t, "ORDINAL_POSITION", Types.INTEGER, false); addColumn(t, "IS_NULLABLE", Types.VARCHAR, false); addColumn(t, "SCOPE_CATALOG", Types.VARCHAR); 1538 addColumn(t, "SCOPE_SCHEMA", Types.VARCHAR); 1539 addColumn(t, "SCOPE_TABLE", Types.VARCHAR); 1540 addColumn(t, "SOURCE_DATA_TYPE", Types.SMALLINT); 1541 t.createPrimaryKey(null); 1542 1543 return t; 1544 } 1545 1546 t.setDataReadOnly(true); 1547 1548 return t; 1549 } 1550 1551 1585 Table SYSTEM_UDTS() throws HsqlException { 1586 1587 Table t = sysTables[SYSTEM_UDTS]; 1588 1589 if (t == null) { 1590 t = createBlankTable(sysTableHsqlNames[SYSTEM_UDTS]); 1591 1592 addColumn(t, "TYPE_CAT", Types.VARCHAR); 1593 addColumn(t, "TYPE_SCHEM", Types.VARCHAR); 1594 addColumn(t, "TYPE_NAME", Types.VARCHAR, false); addColumn(t, "CLASS_NAME", Types.VARCHAR, false); addColumn(t, "DATA_TYPE", Types.VARCHAR, false); addColumn(t, "REMARKS", Types.VARCHAR); 1598 addColumn(t, "BASE_TYPE", Types.SMALLINT); 1599 t.createPrimaryKey(null); 1600 1601 return t; 1602 } 1603 1604 t.setDataReadOnly(true); 1605 1606 return t; 1607 } 1608 1609 1646 Table SYSTEM_VERSIONCOLUMNS() throws HsqlException { 1647 1648 Table t = sysTables[SYSTEM_VERSIONCOLUMNS]; 1649 1650 if (t == null) { 1651 t = createBlankTable(sysTableHsqlNames[SYSTEM_VERSIONCOLUMNS]); 1652 1653 addColumn(t, "SCOPE", Types.INTEGER); 1657 addColumn(t, "COLUMN_NAME", Types.VARCHAR, false); addColumn(t, "DATA_TYPE", Types.SMALLINT, false); addColumn(t, "TYPE_NAME", Types.VARCHAR, false); addColumn(t, "COLUMN_SIZE", Types.SMALLINT); 1661 addColumn(t, "BUFFER_LENGTH", Types.INTEGER); 1662 addColumn(t, "DECIMAL_DIGITS", Types.SMALLINT); 1663 addColumn(t, "PSEUDO_COLUMN", Types.SMALLINT, false); 1665 addColumn(t, "TABLE_CAT", Types.VARCHAR); 1669 addColumn(t, "TABLE_SCHEM", Types.VARCHAR); 1670 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); 1672 t.createPrimaryKey(null); 1674 1675 return t; 1676 } 1677 1678 t.setDataReadOnly(true); 1679 1680 return t; 1681 } 1682 1683 1710 Table SYSTEM_VIEWS() throws HsqlException { 1711 1712 Table t = sysTables[SYSTEM_VIEWS]; 1713 1714 if (t == null) { 1715 t = createBlankTable(sysTableHsqlNames[SYSTEM_VIEWS]); 1716 1717 addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 1718 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 1719 addColumn(t, "TABLE_NAME", Types.VARCHAR, true); addColumn(t, "VIEW_DEFINITION", Types.VARCHAR, true); addColumn(t, "CHECK_OPTION", Types.VARCHAR, 8, true); addColumn(t, "IS_UPDATABLE", Types.VARCHAR, 3, true); addColumn(t, "VALID", Types.BOOLEAN, true); 1725 t.createPrimaryKey(null, new int[] { 1729 1, 2, 0 1730 }, false); 1731 1732 return t; 1733 } 1734 1735 String defn; 1736 Iterator tables; 1737 Table table; 1738 Object [] row; 1739 final int icat = 0; 1740 final int ischem = 1; 1741 final int iname = 2; 1742 final int idefn = 3; 1743 final int icopt = 4; 1744 final int iiupd = 5; 1745 final int ivalid = 6; 1746 1747 tables = database.schemaManager.allTablesIterator(); 1748 1749 while (tables.hasNext()) { 1750 table = (Table) tables.next(); 1751 1752 if (!table.isView() ||!isAccessibleTable(table)) { 1753 continue; 1754 } 1755 1756 row = t.getEmptyRowData(); 1757 defn = ((View) table).getStatement(); 1758 row[icat] = ns.getCatalogName(table); 1759 row[ischem] = table.getSchemaName(); 1760 row[iname] = table.getName().name; 1761 row[idefn] = defn; 1762 row[icopt] = "NONE"; 1763 row[iiupd] = "NO"; 1764 row[ivalid] = Boolean.TRUE; 1765 1766 t.insertSys(row); 1767 } 1768 1769 t.setDataReadOnly(true); 1770 1771 return t; 1772 } 1773 1774 1817 Table SYSTEM_PROCEDURECOLUMNS() throws HsqlException { 1818 1819 Table t = sysTables[SYSTEM_PROCEDURECOLUMNS]; 1820 1821 if (t == null) { 1822 return super.SYSTEM_PROCEDURECOLUMNS(); 1823 } 1824 1825 String procedureCatalog; 1827 String procedureSchema; 1828 String procedureName; 1829 String columnName; 1830 Integer columnType; 1831 Integer dataType; 1832 String dataTypeName; 1833 Integer precision; 1834 Integer length; 1835 Integer scale; 1836 Integer radix; 1837 Integer nullability; 1838 String remark; 1839 String specificName; 1840 int colSequence; 1841 int colCount; 1842 1843 HsqlArrayList aliasList; 1845 Object [] info; 1846 Method method; 1847 Iterator methods; 1848 Object [] row; 1849 DITypeInfo ti; 1850 1851 methods = ns.iterateAllAccessibleMethods(session, true); ti = new DITypeInfo(); 1854 1855 ti.setTypeSub(Types.TYPE_SUB_DEFAULT); 1859 1860 while (methods.hasNext()) { 1862 info = (Object []) methods.next(); 1863 method = (Method ) info[0]; 1864 aliasList = (HsqlArrayList) info[1]; 1865 procedureCatalog = ns.getCatalogName(method); 1866 procedureSchema = ns.getSchemaName(method); 1867 1868 pi.setMethod(method); 1869 1870 specificName = pi.getSpecificName(); 1871 procedureName = pi.getFQN(); 1872 colCount = pi.getColCount(); 1873 1874 for (int i = 0; i < colCount; i++) { 1875 ti.setTypeCode(pi.getColTypeCode(i)); 1876 1877 columnName = pi.getColName(i); 1878 columnType = pi.getColUsage(i); 1879 dataType = pi.getColDataType(i); 1880 dataTypeName = ti.getTypeName(); 1881 precision = ti.getPrecision(); 1882 length = pi.getColLen(i); 1883 scale = ti.getDefaultScale(); 1884 radix = ti.getNumPrecRadix(); 1885 nullability = pi.getColNullability(i); 1886 remark = pi.getColRemark(i); 1887 colSequence = pi.getColSequence(i); 1888 1889 addPColRows(t, aliasList, procedureCatalog, procedureSchema, 1890 procedureName, columnName, columnType, dataType, 1891 dataTypeName, precision, length, scale, radix, 1892 nullability, remark, specificName, colSequence); 1893 } 1894 } 1895 1896 t.setDataReadOnly(true); 1897 1898 return t; 1899 } 1900 1901 1930 Table SYSTEM_PROCEDURES() throws HsqlException { 1931 1932 Table t = sysTables[SYSTEM_PROCEDURES]; 1933 1934 if (t == null) { 1935 return super.SYSTEM_PROCEDURES(); 1936 } 1937 1938 String catalog; 1943 String schema; 1944 String procName; 1945 Integer numInputParams; 1946 Integer numOutputParams; 1947 Integer numResultSets; 1948 String remarks; 1949 Integer procRType; 1950 1951 String procOrigin; 1955 String specificName; 1956 1957 String alias; 1959 HsqlArrayList aliasList; 1960 Iterator methods; 1961 Object [] methodInfo; 1962 Method method; 1963 String methodOrigin; 1964 Object [] row; 1965 1966 methods = ns.iterateAllAccessibleMethods(session, true); 1969 while (methods.hasNext()) { 1971 methodInfo = (Object []) methods.next(); 1972 method = (Method ) methodInfo[0]; 1973 aliasList = (HsqlArrayList) methodInfo[1]; 1974 methodOrigin = (String ) methodInfo[2]; 1975 1976 pi.setMethod(method); 1977 1978 catalog = ns.getCatalogName(method); 1979 schema = ns.getSchemaName(method); 1980 procName = pi.getFQN(); 1981 numInputParams = pi.getInputParmCount(); 1982 numOutputParams = pi.getOutputParmCount(); 1983 numResultSets = pi.getResultSetCount(); 1984 remarks = pi.getRemark(); 1985 procRType = pi.getResultType(methodOrigin); 1986 procOrigin = pi.getOrigin(methodOrigin); 1987 specificName = pi.getSpecificName(); 1988 1989 addProcRows(t, aliasList, catalog, schema, procName, 1990 numInputParams, numOutputParams, numResultSets, 1991 remarks, procRType, procOrigin, specificName); 1992 } 1993 1994 t.setDataReadOnly(true); 1995 1996 return t; 1997 } 1998 1999 2096 Table SYSTEM_USAGE_PRIVILEGES() throws HsqlException { 2097 2098 Table t = sysTables[SYSTEM_USAGE_PRIVILEGES]; 2099 2100 if (t == null) { 2101 t = createBlankTable(sysTableHsqlNames[SYSTEM_USAGE_PRIVILEGES]); 2102 2103 addColumn(t, "GRANTOR", Types.VARCHAR, false); addColumn(t, "GRANTEE", Types.VARCHAR, false); addColumn(t, "OBJECT_CATALOG", Types.VARCHAR); 2106 addColumn(t, "OBJECT_SCHEMA", Types.VARCHAR); 2107 addColumn(t, "OBJECT_NAME", Types.VARCHAR, false); addColumn(t, "OBJECT_TYPE", Types.VARCHAR, 32, false); addColumn(t, "IS_GRANTABLE", Types.VARCHAR, 3, false); 2111 t.createPrimaryKey(null, new int[] { 2115 0, 1, 2, 3, 4, 5 2116 }, false); 2117 2118 return t; 2119 } 2120 2121 Result rs; 2122 2123 rs = session.sqlExecuteDirectNoPreChecks( 2124 "SELECT '" + GranteeManager.SYSTEM_AUTHORIZATION_NAME 2125 + "', 'PUBLIC', SEQUENCE_CATALOG, SEQUENCE_SCHEMA, " 2126 + "SEQUENCE_NAME, 'SEQUENCE', 'FALSE' FROM INFORMATION_SCHEMA.SYSTEM_SEQUENCES"); 2127 2128 t.insertSys(rs); 2129 2130 rs = session.sqlExecuteDirectNoPreChecks( 2131 "SELECT '" + GranteeManager.SYSTEM_AUTHORIZATION_NAME 2132 + "', 'PUBLIC', COLLATION_CATALOG, COLLATION_SCHEMA, " 2133 + "COLLATION_NAME, 'COLLATION', 'FALSE' FROM INFORMATION_SCHEMA.SYSTEM_COLLATIONS"); 2134 2135 t.insertSys(rs); 2136 t.setDataReadOnly(true); 2137 2138 return t; 2139 } 2140 2141 2178 Table SYSTEM_CHECK_COLUMN_USAGE() throws HsqlException { 2179 2180 Table t = sysTables[SYSTEM_CHECK_COLUMN_USAGE]; 2181 2182 if (t == null) { 2183 t = createBlankTable( 2184 sysTableHsqlNames[SYSTEM_CHECK_COLUMN_USAGE]); 2185 2186 addColumn(t, "CONSTRAINT_CATALOG", Types.VARCHAR); 2187 addColumn(t, "CONSTRAINT_SCHEMA", Types.VARCHAR); 2188 addColumn(t, "CONSTRAINT_NAME", Types.VARCHAR, false); addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 2190 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 2191 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); addColumn(t, "COLUMN_NAME", Types.VARCHAR, false); t.createPrimaryKey(null, new int[] { 2194 0, 1, 2, 3, 4, 5, 6 2195 }, false); 2196 2197 return t; 2198 } 2199 2200 String constraintCatalog; 2202 String constraintSchema; 2203 String constraintName; 2204 2205 Iterator tables; 2207 Table table; 2208 Constraint[] constraints; 2209 int constraintCount; 2210 Constraint constraint; 2211 Expression.Collector collector; 2212 Expression expression; 2213 TableFilter tableFilter; 2214 Table columnTable; 2215 Iterator iterator; 2216 Result result; 2217 Object [] resultRow; 2218 Object [] row; 2219 2220 final int icons_cat = 0; 2222 final int icons_schem = 1; 2223 final int icons_name = 2; 2224 final int itab_cat = 3; 2225 final int itab_schem = 4; 2226 final int itab_name = 5; 2227 final int itab_col = 6; 2228 2229 tables = database.schemaManager.allTablesIterator(); 2231 collector = new Expression.Collector(); 2232 result = new Result(ResultConstants.DATA, 4); 2233 result.metaData.colTypes[0] = result.metaData.colTypes[1] = 2234 result.metaData.colTypes[2] = result.metaData.colTypes[3] = 2235 Types.VARCHAR; 2236 2237 while (tables.hasNext()) { 2239 table = (Table) tables.next(); 2240 2241 if (!isAccessibleTable(table)) { 2242 continue; 2243 } 2244 2245 constraints = table.getConstraints(); 2246 constraintCount = constraints.length; 2247 constraintCatalog = ns.getCatalogName(table); 2248 constraintSchema = table.getSchemaName(); 2249 2250 for (int i = 0; i < constraintCount; i++) { 2252 constraint = (Constraint) constraints[i]; 2253 2254 if (constraint.getType() != Constraint.CHECK) { 2255 continue; 2256 } 2257 2258 constraintName = constraint.getName().name; 2259 2260 result.setRows(null); 2261 collector.clear(); 2262 collector.addAll(constraint.core.check, Expression.COLUMN); 2263 2264 iterator = collector.iterator(); 2265 2266 while (iterator.hasNext()) { 2268 expression = (Expression) iterator.next(); 2269 tableFilter = expression.getFilter(); 2270 columnTable = tableFilter.getTable(); 2271 2272 if (columnTable.getTableType() == Table.SYSTEM_SUBQUERY 2273 ||!isAccessibleTable(columnTable)) { 2274 continue; 2275 } 2276 2277 result.add(new Object [] { 2278 ns.getCatalogName(columnTable), 2279 columnTable.getSchemaName(), 2280 columnTable.getName().name, expression.getColumnName() 2281 }); 2282 } 2283 2284 2289 result.removeDuplicates(session); 2290 2291 iterator = result.iterator(); 2292 2293 while (iterator.hasNext()) { 2294 row = t.getEmptyRowData(); 2295 resultRow = (Object []) iterator.next(); 2296 row[icons_cat] = constraintCatalog; 2297 row[icons_schem] = constraintSchema; 2298 row[icons_name] = constraintName; 2299 row[itab_cat] = resultRow[0]; 2300 row[itab_schem] = resultRow[1]; 2301 row[itab_name] = resultRow[2]; 2302 row[itab_col] = resultRow[3]; 2303 2304 t.insertSys(row); 2305 } 2306 } 2307 } 2308 2309 t.setDataReadOnly(true); 2310 2311 return t; 2312 } 2313 2314 2359 Table SYSTEM_CHECK_ROUTINE_USAGE() throws HsqlException { 2360 2361 Table t = sysTables[SYSTEM_CHECK_ROUTINE_USAGE]; 2362 2363 if (t == null) { 2364 t = createBlankTable( 2365 sysTableHsqlNames[SYSTEM_CHECK_ROUTINE_USAGE]); 2366 2367 addColumn(t, "CONSTRAINT_CATALOG", Types.VARCHAR); 2368 addColumn(t, "CONSTRAINT_SCHEMA", Types.VARCHAR); 2369 addColumn(t, "CONSTRAINT_NAME", Types.VARCHAR, false); addColumn(t, "SPECIFIC_CATALOG", Types.VARCHAR); 2371 addColumn(t, "SPECIFIC_SCHEMA", Types.VARCHAR); 2372 addColumn(t, "SPECIFIC_NAME", Types.VARCHAR, false); t.createPrimaryKey(null, new int[] { 2374 0, 1, 2, 3, 4, 5 2375 }, false); 2376 2377 return t; 2378 } 2379 2380 String constraintCatalog; 2382 String constraintSchema; 2383 String constraintName; 2384 2385 Iterator tables; 2387 Table table; 2388 Constraint[] constraints; 2389 int constraintCount; 2390 Constraint constraint; 2391 Expression.Collector collector; 2392 Expression expression; 2393 Function function; 2394 Iterator iterator; 2395 HashSet methodSet; 2396 Method method; 2397 Object [] row; 2398 2399 final int icons_cat = 0; 2401 final int icons_schem = 1; 2402 final int icons_name = 2; 2403 final int ir_cat = 3; 2404 final int ir_schem = 4; 2405 final int ir_name = 5; 2406 2407 tables = database.schemaManager.allTablesIterator(); 2408 collector = new Expression.Collector(); 2409 2410 while (tables.hasNext()) { 2411 collector.clear(); 2412 2413 table = (Table) tables.next(); 2414 2415 if (!isAccessibleTable(table)) { 2416 continue; 2417 } 2418 2419 constraints = table.getConstraints(); 2420 constraintCount = constraints.length; 2421 constraintCatalog = ns.getCatalogName(table); 2422 constraintSchema = table.getSchemaName(); 2423 2424 for (int i = 0; i < constraintCount; i++) { 2425 constraint = (Constraint) constraints[i]; 2426 2427 if (constraint.getType() != Constraint.CHECK) { 2428 continue; 2429 } 2430 2431 constraintName = constraint.getName().name; 2432 2433 collector.addAll(constraint.core.check, Expression.FUNCTION); 2434 2435 methodSet = new HashSet(); 2436 iterator = collector.iterator(); 2437 2438 while (iterator.hasNext()) { 2439 expression = (Expression) iterator.next(); 2440 function = expression.function; 2441 2442 if (!session 2443 .isAccessible(function.getMethod() 2444 .getDeclaringClass().getName())) { 2445 continue; 2446 } 2447 2448 methodSet.add(function.getMethod()); 2449 } 2450 2451 iterator = methodSet.iterator(); 2452 2453 while (iterator.hasNext()) { 2454 method = (Method ) iterator.next(); 2455 row = t.getEmptyRowData(); 2456 row[icons_cat] = constraintCatalog; 2457 row[icons_schem] = constraintSchema; 2458 row[icons_name] = constraintName; 2459 row[ir_cat] = ns.getCatalogName(method); 2460 row[ir_schem] = ns.getSchemaName(method); 2461 row[ir_name] = DINameSpace.getMethodSpecificName(method); 2462 2463 t.insertSys(row); 2464 } 2465 } 2466 } 2467 2468 t.setDataReadOnly(true); 2469 2470 return t; 2471 } 2472 2473 2509 Table SYSTEM_CHECK_TABLE_USAGE() throws HsqlException { 2510 2511 Table t = sysTables[SYSTEM_CHECK_TABLE_USAGE]; 2512 2513 if (t == null) { 2514 t = createBlankTable(sysTableHsqlNames[SYSTEM_CHECK_TABLE_USAGE]); 2515 2516 addColumn(t, "CONSTRAINT_CATALOG", Types.VARCHAR); 2517 addColumn(t, "CONSTRAINT_SCHEMA", Types.VARCHAR); 2518 addColumn(t, "CONSTRAINT_NAME", Types.VARCHAR, false); addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 2520 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 2521 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); t.createPrimaryKey(null, new int[] { 2523 0, 1, 2, 3, 4, 5 2524 }, false); 2525 2526 return t; 2527 } 2528 2529 Result rs = session.sqlExecuteDirectNoPreChecks( 2531 "select DISTINCT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, " 2532 + "CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME " 2533 + "from INFORMATION_SCHEMA.SYSTEM_CHECK_COLUMN_USAGE"); 2534 2535 t.insertSys(rs); 2536 t.setDataReadOnly(true); 2537 2538 return t; 2539 } 2540 2541 2642 Table SYSTEM_TABLE_CONSTRAINTS() throws HsqlException { 2643 2644 Table t = sysTables[SYSTEM_TABLE_CONSTRAINTS]; 2645 2646 if (t == null) { 2647 t = createBlankTable(sysTableHsqlNames[SYSTEM_TABLE_CONSTRAINTS]); 2648 2649 addColumn(t, "CONSTRAINT_CATALOG", Types.VARCHAR); 2650 addColumn(t, "CONSTRAINT_SCHEMA", Types.VARCHAR); 2651 addColumn(t, "CONSTRAINT_NAME", Types.VARCHAR, false); addColumn(t, "CONSTRAINT_TYPE", Types.VARCHAR, 11, false); addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 2654 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 2655 addColumn(t, "TABLE_NAME", Types.VARCHAR, false); addColumn(t, "IS_DEFERRABLE", Types.VARCHAR, 3, false); addColumn(t, "INITIALLY_DEFERRED", Types.VARCHAR, 3, false); 2659 t.createPrimaryKey(null, new int[] { 2662 0, 1, 2, 4, 5, 6 2663 }, false); 2664 2665 return t; 2666 } 2667 2668 Iterator tables; 2670 Table table; 2671 Index index; 2672 Constraint[] constraints; 2673 int constraintCount; 2674 Constraint constraint; 2675 String cat; 2676 String schem; 2677 HashSet constraintSet; 2678 Object [] row; 2679 2680 final int icons_cat = 0; 2682 final int icons_schem = 1; 2683 final int icons_name = 2; 2684 final int icons_type = 3; 2685 final int itab_cat = 4; 2686 final int itab_schem = 5; 2687 final int itab_name = 6; 2688 final int iis_defr = 7; 2689 final int iinit_defr = 8; 2690 2691 tables = database.schemaManager.allTablesIterator(); 2693 constraintSet = new HashSet(); 2694 table = null; 2696 while (tables.hasNext()) { 2698 table = (Table) tables.next(); 2699 2700 if (table.isView() ||!isAccessibleTable(table)) { 2701 continue; 2702 } 2703 2704 index = table.getPrimaryIndex(); 2705 2706 if (table.hasPrimaryKey()) { 2707 row = t.getEmptyRowData(); 2708 cat = ns.getCatalogName(table); 2709 schem = table.getSchemaName(); 2710 row[icons_cat] = cat; 2711 row[icons_schem] = schem; 2712 row[icons_name] = index.getName().name; 2713 row[icons_type] = "PRIMARY KEY"; 2714 row[itab_cat] = cat; 2715 row[itab_schem] = schem; 2716 row[itab_name] = table.getName().name; 2717 row[iis_defr] = "NO"; 2718 row[iinit_defr] = "NO"; 2719 2720 t.insertSys(row); 2721 } 2722 2723 constraints = table.getConstraints(); 2724 constraintCount = constraints.length; 2725 2726 for (int i = 0; i < constraintCount; i++) { 2727 constraint = constraints[i]; 2728 2729 if (constraint.getType() == Constraint.FOREIGN_KEY 2730 &&!isAccessibleTable(constraint.getRef())) { 2731 continue; 2732 } 2733 2734 constraintSet.add(constraint); 2735 } 2736 } 2737 2738 for (Iterator it = constraintSet.iterator(); it.hasNext(); ) { 2739 row = t.getEmptyRowData(); 2740 constraint = (Constraint) it.next(); 2741 2742 switch (constraint.getType()) { 2743 2744 case Constraint.CHECK : { 2745 row[icons_type] = "CHECK"; 2746 table = constraint.getMain(); 2747 2748 break; 2749 } 2750 case Constraint.UNIQUE : { 2751 row[icons_type] = "UNIQUE"; 2752 table = constraint.getMain(); 2753 2754 break; 2755 } 2756 case Constraint.FOREIGN_KEY : { 2757 row[icons_type] = "FOREIGN KEY"; 2758 table = constraint.getRef(); 2759 2760 break; 2761 } 2762 case Constraint.MAIN : 2763 default : { 2764 continue; 2765 } 2766 } 2767 2768 cat = ns.getCatalogName(table); 2769 schem = table.getSchemaName(); 2770 row[icons_cat] = cat; 2771 row[icons_schem] = schem; 2772 row[icons_name] = constraint.constName.name; 2773 row[itab_cat] = cat; 2774 row[itab_schem] = schem; 2775 row[itab_name] = table.getName().name; 2776 row[iis_defr] = "NO"; 2777 row[iinit_defr] = "NO"; 2778 2779 t.insertSys(row); 2780 } 2781 2782 t.setDataReadOnly(true); 2783 2784 return t; 2785 } 2786 2787 2821 Table SYSTEM_VIEW_TABLE_USAGE() throws HsqlException { 2822 2823 Table t = sysTables[SYSTEM_VIEW_TABLE_USAGE]; 2824 2825 if (t == null) { 2826 t = createBlankTable(sysTableHsqlNames[SYSTEM_VIEW_TABLE_USAGE]); 2827 2828 addColumn(t, "VIEW_CATALOG", Types.VARCHAR); 2829 addColumn(t, "VIEW_SCHEMA", Types.VARCHAR); 2830 addColumn(t, "VIEW_NAME", Types.VARCHAR, true); addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 2832 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 2833 addColumn(t, "TABLE_NAME", Types.VARCHAR, true); 2835 t.createPrimaryKey(null, new int[] { 2838 0, 1, 2, 3, 4, 5 2839 }, false); 2840 2841 return t; 2842 } 2843 2844 Result rs = session.sqlExecuteDirectNoPreChecks( 2846 "select DISTINCT VIEW_CATALOG, VIEW_SCHEMA, " 2847 + "VIEW_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME " 2848 + "from INFORMATION_SCHEMA.SYSTEM_VIEW_COLUMN_USAGE"); 2849 2850 t.insertSys(rs); 2851 t.setDataReadOnly(true); 2852 2853 return t; 2854 } 2855 2856 2892 Table SYSTEM_VIEW_COLUMN_USAGE() throws HsqlException { 2893 2894 Table t = sysTables[SYSTEM_VIEW_COLUMN_USAGE]; 2895 2896 if (t == null) { 2897 t = createBlankTable(sysTableHsqlNames[SYSTEM_VIEW_COLUMN_USAGE]); 2898 2899 addColumn(t, "VIEW_CATALOG", Types.VARCHAR); 2900 addColumn(t, "VIEW_SCHEMA", Types.VARCHAR); 2901 addColumn(t, "VIEW_NAME", Types.VARCHAR, true); addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 2903 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 2904 addColumn(t, "TABLE_NAME", Types.VARCHAR, true); addColumn(t, "COLUMN_NAME", Types.VARCHAR, true); 2907 t.createPrimaryKey(null, new int[] { 2910 0, 1, 2, 3, 4, 5, 6 2911 }, false); 2912 2913 return t; 2914 } 2915 2916 String viewCatalog; 2918 String viewSchema; 2919 String viewName; 2920 2921 Iterator tables; 2923 View view; 2924 Table table; 2925 Object [] row; 2926 SubQuery[] subqueries; 2927 Select select; 2928 Expression expression; 2929 TableFilter tableFilter; 2930 Table columnTable; 2931 Result result; 2932 Object [] resultRow; 2933 Iterator iterator; 2934 Expression.Collector collector; 2935 2936 final int iv_cat = 0; 2938 final int iv_schem = 1; 2939 final int iv_name = 2; 2940 final int it_cat = 3; 2941 final int it_schem = 4; 2942 final int it_name = 5; 2943 final int it_cname = 6; 2944 2945 tables = database.schemaManager.allTablesIterator(); 2947 collector = new Expression.Collector(); 2948 result = new Result(ResultConstants.DATA, 4); 2949 result.metaData.colTypes[0] = result.metaData.colTypes[1] = 2950 result.metaData.colTypes[2] = result.metaData.colTypes[3] = 2951 Types.VARCHAR; 2952 2953 while (tables.hasNext()) { 2955 collector.clear(); 2956 result.setRows(null); 2957 2958 table = (Table) tables.next(); 2959 2960 if (table.isView() && isAccessibleTable(table)) { 2961 2962 } else { 2964 continue; 2965 } 2966 2967 viewCatalog = ns.getCatalogName(table); 2968 viewSchema = table.getSchemaName(); 2969 viewName = table.getName().name; 2970 view = (View) table; 2971 subqueries = view.viewSubqueries; 2972 2973 collector.addAll(view.viewSelect, Expression.COLUMN); 2974 2975 for (int i = 0; i < subqueries.length; i++) { 2976 collector.addAll(subqueries[i].select, Expression.COLUMN); 2977 } 2978 2979 iterator = collector.iterator(); 2980 2981 while (iterator.hasNext()) { 2982 expression = (Expression) iterator.next(); 2983 tableFilter = expression.getFilter(); 2984 columnTable = tableFilter.getTable(); 2985 2986 if (columnTable.getTableType() == Table.SYSTEM_SUBQUERY 2987 ||!isAccessibleTable(columnTable)) { 2988 continue; 2989 } 2990 2991 result.add(new Object [] { 2992 ns.getCatalogName(columnTable), 2993 columnTable.getSchemaName(), columnTable.getName().name, 2994 expression.getColumnName() 2995 }); 2996 } 2997 2998 3003 result.removeDuplicates(session); 3004 3005 iterator = result.iterator(); 3006 3007 while (iterator.hasNext()) { 3008 row = t.getEmptyRowData(); 3009 resultRow = (Object []) iterator.next(); 3010 row[iv_cat] = viewCatalog; 3011 row[iv_schem] = viewSchema; 3012 row[iv_name] = viewName; 3013 row[it_cat] = resultRow[0]; 3014 row[it_schem] = resultRow[1]; 3015 row[it_name] = resultRow[2]; 3016 row[it_cname] = resultRow[3]; 3017 3018 t.insertSys(row); 3019 } 3020 } 3021 3022 t.setDataReadOnly(true); 3023 3024 return t; 3025 } 3026 3027 3062 Table SYSTEM_VIEW_ROUTINE_USAGE() throws HsqlException { 3063 3064 Table t = sysTables[SYSTEM_VIEW_ROUTINE_USAGE]; 3065 3066 if (t == null) { 3067 t = createBlankTable( 3068 sysTableHsqlNames[SYSTEM_VIEW_ROUTINE_USAGE]); 3069 3070 addColumn(t, "TABLE_CATALOG", Types.VARCHAR); 3071 addColumn(t, "TABLE_SCHEMA", Types.VARCHAR); 3072 addColumn(t, "TABLE_NAME", Types.VARCHAR, true); addColumn(t, "SPECIFIC_CATALOG", Types.VARCHAR); 3074 addColumn(t, "SPECIFIC_SCHEMA", Types.VARCHAR); 3075 addColumn(t, "SPECIFIC_NAME", Types.VARCHAR, true); 3077 t.createPrimaryKey(null, new int[] { 3080 0, 1, 2, 3, 4, 5 3081 }, false); 3082 3083 return t; 3084 } 3085 3086 String viewCat; 3088 String viewSchem; 3089 String viewName; 3090 3091 Iterator tables; 3093 View view; 3094 Table table; 3095 Object [] row; 3096 SubQuery[] subqueries; 3097 Select select; 3098 Expression expression; 3099 Function function; 3100 Expression.Collector collector; 3101 Method method; 3102 HashSet methodSet; 3103 Iterator iterator; 3104 3105 final int iv_cat = 0; 3107 final int iv_schem = 1; 3108 final int iv_name = 2; 3109 final int ir_cat = 3; 3110 final int ir_schem = 4; 3111 final int ir_name = 5; 3112 final int ir_sig = 6; 3113 3114 tables = database.schemaManager.allTablesIterator(); 3116 collector = new Expression.Collector(); 3117 3118 while (tables.hasNext()) { 3120 collector.clear(); 3121 3122 table = (Table) tables.next(); 3123 3124 if (table.isView() && isAccessibleTable(table)) { 3125 3126 } else { 3128 continue; 3129 } 3130 3131 viewCat = ns.getCatalogName(table); 3132 viewSchem = table.getSchemaName(); 3133 viewName = table.getName().name; 3134 view = (View) table; 3135 subqueries = view.viewSubqueries; 3136 3137 collector.addAll(view.viewSelect, Expression.FUNCTION); 3138 3139 for (int i = 0; i < subqueries.length; i++) { 3140 collector.addAll(subqueries[i].select, Expression.FUNCTION); 3141 } 3142 3143 methodSet = new HashSet(); 3144 iterator = collector.iterator(); 3145 3146 while (iterator.hasNext()) { 3147 expression = (Expression) iterator.next(); 3148 function = expression.function; 3149 3150 if (session.isAccessible( 3151 function.getMethod().getDeclaringClass().getName())) { 3152 methodSet.add(function.getMethod()); 3153 } 3154 } 3155 3156 iterator = methodSet.iterator(); 3157 3158 while (iterator.hasNext()) { 3159 method = (Method ) iterator.next(); 3160 row = t.getEmptyRowData(); 3161 row[iv_cat] = viewCat; 3162 row[iv_schem] = viewSchem; 3163 row[iv_name] = viewName; 3164 row[ir_cat] = ns.getCatalogName(method); 3165 row[ir_schem] = ns.getSchemaName(method); 3166 row[ir_name] = DINameSpace.getMethodSpecificName(method); 3167 3168 t.insertSys(row); 3169 } 3170 } 3171 3172 t.setDataReadOnly(true); 3173 3174 return t; 3175 } 3176 3177 3206 protected void addPColRows(Table t, HsqlArrayList l, String cat, 3207 String schem, String pName, String cName, 3208 Integer cType, Integer dType, String tName, 3209 Integer prec, Integer len, Integer scale, 3210 Integer radix, Integer nullability, 3211 String remark, String specificName, 3212 int seq) throws HsqlException { 3213 3214 final int icat = 0; 3216 final int ischem = 1; 3217 final int iname = 2; 3218 final int icol_name = 3; 3219 final int icol_type = 4; 3220 final int idata_type = 5; 3221 final int itype_name = 6; 3222 final int iprec = 7; 3223 final int ilength = 8; 3224 final int iscale = 9; 3225 final int iradix = 10; 3226 final int inullable = 11; 3227 final int iremark = 12; 3228 final int isn = 13; 3229 final int iseq = 14; 3230 Object [] row = t.getEmptyRowData(); 3231 Integer sequence = ValuePool.getInt(seq); 3232 3233 row[icat] = cat; 3234 row[ischem] = schem; 3235 row[iname] = pName; 3236 row[icol_name] = cName; 3237 row[icol_type] = cType; 3238 row[idata_type] = dType; 3239 row[itype_name] = tName; 3240 row[iprec] = prec; 3241 row[ilength] = len; 3242 row[iscale] = scale; 3243 row[iradix] = radix; 3244 row[inullable] = nullability; 3245 row[iremark] = remark; 3246 row[isn] = specificName; 3247 row[iseq] = sequence; 3248 3249 t.insertSys(row); 3250 3251 if (l != null) { 3252 int size = l.size(); 3253 3254 for (int i = 0; i < size; i++) { 3255 row = t.getEmptyRowData(); 3256 pName = (String ) l.get(i); 3257 row[icat] = cat; 3258 row[ischem] = schem; 3259 row[iname] = pName; 3260 row[icol_name] = cName; 3261 row[icol_type] = cType; 3262 row[idata_type] = dType; 3263 row[itype_name] = tName; 3264 row[iprec] = prec; 3265 row[ilength] = len; 3266 row[iscale] = scale; 3267 row[iradix] = radix; 3268 row[inullable] = nullability; 3269 row[iremark] = remark; 3270 row[isn] = specificName; 3271 row[iseq] = sequence; 3272 3273 t.insertSys(row); 3274 } 3275 } 3276 } 3277 3278 3306 protected void addProcRows(Table t, HsqlArrayList l, String cat, 3307 String schem, String pName, Integer ip, 3308 Integer op, Integer rs, String remark, 3309 Integer pType, String origin, 3310 String specificName) throws HsqlException { 3311 3312 final int icat = 0; 3314 final int ischem = 1; 3315 final int ipname = 2; 3316 final int iinput_parms = 3; 3317 final int ioutput_parms = 4; 3318 final int iresult_sets = 5; 3319 final int iremark = 6; 3320 final int iptype = 7; 3321 final int iporigin = 8; 3322 final int isn = 9; 3323 Object [] row = t.getEmptyRowData(); 3324 3325 row[icat] = cat; 3326 row[ischem] = schem; 3327 row[ipname] = pName; 3328 row[iinput_parms] = ip; 3329 row[ioutput_parms] = op; 3330 row[iresult_sets] = rs; 3331 row[iremark] = remark; 3332 row[iptype] = pType; 3333 row[iporigin] = origin; 3334 row[isn] = specificName; 3335 3336 t.insertSys(row); 3337 3338 if (l != null) { 3339 int size = l.size(); 3340 3341 for (int i = 0; i < size; i++) { 3342 row = t.getEmptyRowData(); 3343 pName = (String ) l.get(i); 3344 row[icat] = cat; 3345 row[ischem] = schem; 3346 row[ipname] = pName; 3347 row[iinput_parms] = ip; 3348 row[ioutput_parms] = op; 3349 row[iresult_sets] = rs; 3350 row[iremark] = remark; 3351 row[iptype] = pType; 3352 row[iporigin] = "ALIAS"; 3353 row[isn] = specificName; 3354 3355 t.insertSys(row); 3356 } 3357 } 3358 } 3359 3360 3363 3409 Table SYSTEM_AUTHORIZATIONS() throws HsqlException { 3410 3411 Table t = sysTables[SYSTEM_AUTHORIZATIONS]; 3412 3413 if (t == null) { 3414 t = createBlankTable(sysTableHsqlNames[SYSTEM_AUTHORIZATIONS]); 3415 3416 addColumn(t, "AUTHORIZATION_NAME", Types.VARCHAR, true); addColumn(t, "AUTHORIZATION_TYPE", Types.VARCHAR, true); 3419 t.createPrimaryKey(null, new int[]{ 0 }, true); 3421 3422 return t; 3423 } 3424 3425 HsqlArrayList users; 3427 Iterator roles; 3428 User user; 3429 int userCount; 3430 Object [] row; 3431 3432 users = database.getUserManager().listVisibleUsers(session, false); 3434 userCount = users.size(); 3435 3436 for (int i = 0; i < users.size(); i++) { 3438 row = t.getEmptyRowData(); 3439 user = (User) users.get(i); 3440 row[0] = user.getName(); 3441 row[1] = "USER"; 3442 3443 t.insertSys(row); 3444 } 3445 3446 roles = database.getGranteeManager().getRoleNames().iterator(); 3447 3448 while (roles.hasNext()) { 3449 row = t.getEmptyRowData(); 3450 row[0] = roles.next().toString(); 3451 row[1] = "ROLE"; 3452 3453 t.insertSys(row); 3454 } 3455 3456 t.setDataReadOnly(true); 3457 3458 return t; 3459 } 3460 3461 3525 Table SYSTEM_COLLATIONS() throws HsqlException { 3526 3527 Table t = sysTables[SYSTEM_COLLATIONS]; 3528 3529 if (t == null) { 3530 t = createBlankTable(sysTableHsqlNames[SYSTEM_COLLATIONS]); 3531 3532 addColumn(t, "COLLATION_CATALOG", Types.VARCHAR); 3533 addColumn(t, "COLLATION_SCHEMA", Types.VARCHAR, true); 3534 addColumn(t, "COLLATION_NAME", Types.VARCHAR, true); 3535 addColumn(t, "PAD_ATTRIBUTE", Types.VARCHAR, 9, true); 3536 addColumn(t, "COLLATION_TYPE", Types.VARCHAR, true); 3537 addColumn(t, "COLLATION_DEFINITION", Types.VARCHAR); 3538 addColumn(t, "COLLATION_DICTIONARY", Types.VARCHAR); 3539 addColumn(t, "CHARACTER_REPERTOIRE_NAME", Types.VARCHAR, true); 3540 3541 t.createPrimaryKey(null, new int[] { 3543 0, 1, 2 3544 }, false); 3545 3546 return t; 3547 } 3548 3549 Iterator collations; 3550 String collation; 3551 String collationSchema = SchemaManager.PUBLIC_SCHEMA; 3552 String padAttribute = "NO PAD"; 3553 String characterRepertoireName = "UNICODE"; 3554 Object [] row; 3555 final int icolcat = 0; 3556 final int icolschem = 1; 3557 final int icolname = 2; 3558 final int ipadattr = 3; 3559 final int icoltype = 4; 3560 final int icoldef = 5; 3561 final int icoldict = 6; 3562 final int icharrep = 7; 3563 3564 collations = Collation.nameToJavaName.keySet().iterator(); 3565 3566 while (collations.hasNext()) { 3567 row = t.getEmptyRowData(); 3568 collation = (String ) collations.next(); 3569 row[icolcat] = ns.getCatalogName(collation); 3570 row[icolschem] = collationSchema; 3571 row[icolname] = collation; 3572 row[ipadattr] = padAttribute; 3573 row[icharrep] = characterRepertoireName; 3574 3575 t.insertSys(row); 3576 } 3577 3578 t.setDataReadOnly(true); 3579 3580 return t; 3581 } 3582 3583 3605 3606 3632 3633 3699 Table SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS() throws HsqlException { 3700 3701 Table t = sysTables[SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS]; 3702 3703 if (t == null) { 3704 t = createBlankTable( 3705 sysTableHsqlNames[SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS]); 3706 3707 addColumn(t, "ROLE_NAME", Types.VARCHAR, true); addColumn(t, "GRANTEE", Types.VARCHAR, true); addColumn(t, "GRANTOR", Types.VARCHAR, true); addColumn(t, "IS_GRANTABLE", Types.VARCHAR, true); 3712 t.createPrimaryKey(null, new int[] { 3714 0, 1 3715 }, true); 3716 3717 return t; 3718 } 3719 3720 String grantorName = GranteeManager.SYSTEM_AUTHORIZATION_NAME; 3722 Iterator grantees; 3723 Grantee grantee; 3724 String granteeName; 3725 Iterator roles; 3726 String roleName; 3727 String isGrantable; 3728 Object [] row; 3729 final int irole = 0; 3730 final int igrantee = 1; 3731 final int igrantor = 2; 3732 final int igrantable = 3; 3733 3734 grantees = database.getGranteeManager().getGrantees().iterator(); 3736 3737 while (grantees.hasNext()) { 3739 grantee = (Grantee) grantees.next(); 3740 granteeName = grantee.getName(); 3741 roles = grantee.getDirectRoles().iterator(); 3742 3743 while (roles.hasNext()) { 3744 row = t.getEmptyRowData(); 3745 roleName = (String ) roles.next(); 3746 isGrantable = 3747 grantee.hasRole(GranteeManager.DBA_ADMIN_ROLE_NAME) 3748 ? "YES" 3749 : "NO"; 3750 row[irole] = roleName; 3751 row[igrantee] = granteeName; 3752 row[igrantor] = grantorName; 3753 row[igrantable] = isGrantable; 3754 3755 t.insertSys(row); 3756 } 3757 } 3758 3759 t.setDataReadOnly(true); 3760 3761 return t; 3762 } 3763 3764 3833 Table SYSTEM_SCHEMATA() throws HsqlException { 3834 3835 Table t = sysTables[SYSTEM_SCHEMATA]; 3836 3837 if (t == null) { 3838 t = createBlankTable(sysTableHsqlNames[SYSTEM_SCHEMATA]); 3839 3840 addColumn(t, "CATALOG_NAME", Types.VARCHAR); 3841 addColumn(t, "SCHEMA_NAME", Types.VARCHAR, true); 3842 addColumn(t, "SCHEMA_OWNER", Types.VARCHAR, true); 3843 addColumn(t, "DEFAULT_CHARACTER_SET_CATALOG", Types.VARCHAR); 3844 addColumn(t, "DEFAULT_CHARACTER_SET_SCHEMA", Types.VARCHAR, true); 3845 addColumn(t, "DEFAULT_CHARACTER_SET_NAME", Types.VARCHAR); 3846 addColumn(t, "SQL_PATH", Types.VARCHAR); 3847 3848 t.createPrimaryKey(null, new int[] { 3851 0, 1 3852 }, false); 3853 3854 return t; 3855 } 3856 3857 Iterator schemas; 3858 String schema; 3859 String schemaOwner = GranteeManager.DBA_ADMIN_ROLE_NAME; 3860 String dcsSchema = SchemaManager.INFORMATION_SCHEMA; 3861 String dcsName = ValuePool.getString("UTF16"); 3862 String sqlPath = null; 3863 Object [] row; 3864 final int ischema_catalog = 0; 3865 final int ischema_name = 1; 3866 final int ischema_owner = 2; 3867 final int idef_charset_cat = 3; 3868 final int idef_charset_schem = 4; 3869 final int idef_charset_name = 5; 3870 final int isql_path = 6; 3871 3872 schemas = database.schemaManager.fullSchemaNamesIterator(); 3874 3875 while (schemas.hasNext()) { 3877 row = t.getEmptyRowData(); 3878 schema = (String ) schemas.next(); 3879 row[ischema_catalog] = ns.getCatalogName(schema); 3880 row[ischema_name] = schema; 3881 row[ischema_owner] = schemaOwner; 3882 row[idef_charset_cat] = ns.getCatalogName(dcsSchema); 3883 row[idef_charset_schem] = dcsSchema; 3884 row[idef_charset_name] = dcsName; 3885 row[isql_path] = sqlPath; 3886 3887 t.insertSys(row); 3888 } 3889 3890 t.setDataReadOnly(true); 3891 3892 return t; 3893 } 3894} 3895 | Popular Tags |