|
HSQLDB example source code file (DatabaseInformation.java)
The HSQLDB DatabaseInformation.java source code/* Copyright (c) 2001-2008, The HSQL Development Group * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the HSQL Development Group nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.hsqldb; import java.lang.reflect.Constructor; import org.hsqldb.lib.IntValueHashMap; // fredt@users - 1.7.2 - structural modifications to allow inheritance // boucherB@users 20020305 - completed inheritance work, including final access // boucherB@users 20020305 - javadoc updates/corrections // boucherB@users 20020305 - SYSTEM_VIEWS brought in line with SQL 200n // boucherb@users 20050514 - further SQL 200n metdata support /** * Base class for system tables. Includes a factory method which returns the * most complete implementation available in the jar. This base implementation * knows the names of all system tables but returns null for any system table. * <p> * This class has been developed from scratch to replace the previous * DatabaseInformation implementations. <p> * * @author boucherb@users * @version 1.8.0 * @since 1.7.2 */ class DatabaseInformation { // ids for system table names strictly in order of sysTableNames[] protected static final int SYSTEM_BESTROWIDENTIFIER = 0; protected static final int SYSTEM_CATALOGS = 1; protected static final int SYSTEM_COLUMNPRIVILEGES = 2; protected static final int SYSTEM_COLUMNS = 3; protected static final int SYSTEM_CROSSREFERENCE = 4; protected static final int SYSTEM_INDEXINFO = 5; protected static final int SYSTEM_PRIMARYKEYS = 6; protected static final int SYSTEM_PROCEDURECOLUMNS = 7; protected static final int SYSTEM_PROCEDURES = 8; protected static final int SYSTEM_SCHEMAS = 9; protected static final int SYSTEM_SUPERTABLES = 10; protected static final int SYSTEM_SUPERTYPES = 11; protected static final int SYSTEM_TABLEPRIVILEGES = 12; protected static final int SYSTEM_TABLES = 13; protected static final int SYSTEM_TABLETYPES = 14; protected static final int SYSTEM_TYPEINFO = 15; protected static final int SYSTEM_UDTATTRIBUTES = 16; protected static final int SYSTEM_UDTS = 17; protected static final int SYSTEM_USERS = 18; protected static final int SYSTEM_VERSIONCOLUMNS = 19; // HSQLDB-specific protected static final int SYSTEM_ALIASES = 20; protected static final int SYSTEM_BYTECODE = 21; protected static final int SYSTEM_CACHEINFO = 22; protected static final int SYSTEM_CLASSPRIVILEGES = 23; protected static final int SYSTEM_SESSIONINFO = 24; protected static final int SYSTEM_PROPERTIES = 25; protected static final int SYSTEM_SESSIONS = 26; protected static final int SYSTEM_TRIGGERCOLUMNS = 27; protected static final int SYSTEM_TRIGGERS = 28; protected static final int SYSTEM_ALLTYPEINFO = 29; // boucherb@users 20030305 - brought in line with SQL 200n protected static final int SYSTEM_VIEWS = 30; // boucherb@users 20030403 - isolated and improved text table reporting protected static final int SYSTEM_TEXTTABLES = 31; // boucherb@users 20040107 - metadata support for sequences protected static final int SYSTEM_SEQUENCES = 32; protected static final int SYSTEM_USAGE_PRIVILEGES = 33; // boucherb@users 20040107 - metadata support for constraints protected static final int SYSTEM_CHECK_CONSTRAINTS = 34; protected static final int SYSTEM_TABLE_CONSTRAINTS = 35; // boucherb@users 20040107 - metadata support for view usage breakdown- SQL 200n protected static final int SYSTEM_CHECK_COLUMN_USAGE = 36; protected static final int SYSTEM_CHECK_ROUTINE_USAGE = 37; protected static final int SYSTEM_CHECK_TABLE_USAGE = 38; protected static final int SYSTEM_VIEW_COLUMN_USAGE = 39; protected static final int SYSTEM_VIEW_TABLE_USAGE = 40; protected static final int SYSTEM_VIEW_ROUTINE_USAGE = 41; // boucherb@users 20050514 - further SQL 200n metdata support protected static final int SYSTEM_AUTHORIZATIONS = 42; protected static final int SYSTEM_COLLATIONS = 43; protected static final int SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS = 44; protected static final int SYSTEM_SCHEMATA = 45; /** system table names strictly in order of their ids */ protected static final String[] sysTableNames = { "SYSTEM_BESTROWIDENTIFIER", // "SYSTEM_CATALOGS", // "SYSTEM_COLUMNPRIVILEGES", // "SYSTEM_COLUMNS", // "SYSTEM_CROSSREFERENCE", // "SYSTEM_INDEXINFO", // "SYSTEM_PRIMARYKEYS", // "SYSTEM_PROCEDURECOLUMNS", // "SYSTEM_PROCEDURES", // "SYSTEM_SCHEMAS", // "SYSTEM_SUPERTABLES", // "SYSTEM_SUPERTYPES", // "SYSTEM_TABLEPRIVILEGES", // "SYSTEM_TABLES", // "SYSTEM_TABLETYPES", // "SYSTEM_TYPEINFO", // "SYSTEM_UDTATTRIBUTES", // "SYSTEM_UDTS", // "SYSTEM_USERS", // "SYSTEM_VERSIONCOLUMNS", // // HSQLDB-specific "SYSTEM_ALIASES", // "SYSTEM_BYTECODE", // "SYSTEM_CACHEINFO", // "SYSTEM_CLASSPRIVILEGES", // "SYSTEM_SESSIONINFO", // "SYSTEM_PROPERTIES", // "SYSTEM_SESSIONS", // "SYSTEM_TRIGGERCOLUMNS", // "SYSTEM_TRIGGERS", // "SYSTEM_ALLTYPEINFO", // // boucherb@users 20030305 - brought in line with SQL 200n "SYSTEM_VIEWS", // boucherb@users 20030403 - isolated and improved text table reporting "SYSTEM_TEXTTABLES", // boucherb@users 20040107 - metadata support for sequences - SQL 200n "SYSTEM_SEQUENCES", // "SYSTEM_USAGE_PRIVILEGES", // boucherb@users 20040107 - metadata support for constraints - SQL 200n "SYSTEM_CHECK_CONSTRAINTS", // "SYSTEM_TABLE_CONSTRAINTS", // // boucherb@users 20040107 - metadata support for usage - SQL 200n "SYSTEM_CHECK_COLUMN_USAGE", // "SYSTEM_CHECK_ROUTINE_USAGE", // "SYSTEM_CHECK_TABLE_USAGE", // "SYSTEM_VIEW_COLUMN_USAGE", // "SYSTEM_VIEW_TABLE_USAGE", // "SYSTEM_VIEW_ROUTINE_USAGE", // // boucherb@users 20050514 - further SQL 200n metadata support "SYSTEM_AUTHORIZATIONS", // "SYSTEM_COLLATIONS", // "SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS", // "SYSTEM_SCHEMATA" // // Future use // "SYSTEM_ASSERTIONS", // "SYSTEM_ATTRIBUTES", // "SYSTEM_AUTHORIZATIONS", // boucherb@users 20050514 - implemented // "SYSTEM_CHARACTER_ENCODING_FORMS", // "SYSTEM_CHARACTER_REPERTOIRES", // "SYSTEM_CHARACTER_SETS", // "SYSTEM_CHECK_COLUMN_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_CHECK_ROUTINE_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_CHECK_CONSTRAINTS", // boucherb@users 20040107 - implemented // "SYSTEM_CHECK_TABLE_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_COLLATION_CHARACTER_SET_APPLICABILITY", // "SYSTEM_COLLATIONS", // boucherb@users 20050514 - implemented // "SYSTEM_COLUMN_COLUMN_USAGE", // "SYSTEM_COLUMN_OPTIONS", // "SYSTEM_COLUMN_PRIVILEGES", // "SYSTEM_COLUMNS", // "SYSTEM_DATA_TYPE_DESCRIPTOR", // "SYSTEM_DIRECT_SUPERTABLES", // "SYSTEM_DIRECT_SUPERTYPES", // "SYSTEM_DOMAIN_CONSTRAINTS", // "SYSTEM_DOMAINS", // "SYSTEM_ELEMENT_TYPES", // "SYSTEM_FIELDS", // "SYSTEM_FOREIGN_DATA_WRAPPER_OPTIONS", // "SYSTEM_FOREIGN_DATA_WRAPPERS", // "SYSTEM_FOREIGN_SERVER_OPTIONS", // "SYSTEM_FOREIGN_SERVERS", // "SYSTEM_FOREIGN_TABLE_OPTIONS", // "SYSTEM_FOREIGN_TABLES", // "SYSTEM_JAR_JAR_USAGE", // "SYSTEM_JARS", // "SYSTEM_KEY_COLUMN_USAGE", // "SYSTEM_METHOD_SPECIFICATION_PARAMETERS", // "SYSTEM_METHOD_SPECIFICATIONS", // "SYSTEM_MODULE_COLUMN_USAGE", // "SYSTEM_MODULE_PRIVILEGES", // "SYSTEM_MODULE_TABLE_USAGE", // "SYSTEM_MODULES", // "SYSTEM_PARAMETERS", // "SYSTEM_REFERENCED_TYPES", // "SYSTEM_REFERENTIAL_CONSTRAINTS", // "SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS", // boucherb@users 20050514 - implemented // "SYSTEM_ROLES", // "SYSTEM_ROUTINE_COLUMN_USAGE", // "SYSTEM_ROUTINE_JAR_USAGE", // "SYSTEM_ROUTINE_MAPPING_OPTIONS", // "SYSTEM_ROUTINE_MAPPINGS", // "SYSTEM_ROUTINE_PRIVILEGES", // "SYSTEM_ROUTINE_ROUTINE_USAGE", // "SYSTEM_ROUTINE_SEQUENCE_USAGE", // "SYSTEM_ROUTINE_TABLE_USAGE", // "SYSTEM_ROUTINES", // "SYSTEM_SCHEMATA", // boucherb@users 20050514 - implemented // "SYSTEM_SEQUENCES", // boucherb@users 20040107 - implemented // "SYSTEM_SQL_FEATURES", // "SYSTEM_SQL_IMPLEMENTATION_INFO", // "SYSTEM_SQL_LANGUAGES", // "SYSTEM_SQL_SIZING", // "SYSTEM_SQL_SIZING_PROFILES", // "SYSTEM_TABLE_CONSTRAINTS", // boucherb@users 20040107 - implemented // "SYSTEM_TABLE_METHOD_PRIVILEGES", // "SYSTEM_TABLE_PRIVILEGES", // "SYSTEM_TABLES", // "SYSTEM_TRANSFORMS", // "SYSTEM_TRANSLATIONS", // "SYSTEM_TRIGGER_COLUMN_USAGE", // "SYSTEM_TRIGGER_ROUTINE_USAGE", // "SYSTEM_TRIGGER_SEQUENCE_USAGE", // "SYSTEM_TRIGGER_TABLE_USAGE", // "SYSTEM_TRIGGERED_UPDATE_COLUMNS", // "SYSTEM_TRIGGERS", // "SYSTEM_TYPE_JAR_USAGE", // "SYSTEM_USAGE_PRIVILEGES", // boucherb@users 20040107 - implemented // "SYSTEM_USER_DEFINED_TYPE_PRIVILEGES", // "SYSTEM_USER_DEFINED_TYPES", // "SYSTEM_USER_MAPPING_OPTIONS", // "SYSTEM_USER_MAPPINGS", // "SYSTEM_USERS", // "SYSTEM_VIEW_COLUMN_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_VIEW_ROUTINE_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_VIEW_TABLE_USAGE", // boucherb@users 20040107 - implemented // "SYSTEM_VIEWS", // boucherb@users 20030305 - implemented }; /** Map: table name => table id */ protected static final IntValueHashMap sysTableNamesMap; static { synchronized (DatabaseInformation.class) { sysTableNamesMap = new IntValueHashMap(47); for (int i = 0; i < sysTableNames.length; i++) { sysTableNamesMap.put(sysTableNames[i], i); } } } static int getSysTableID(String token) { return sysTableNamesMap.get(token, -1); } /** Database for which to produce tables */ protected final Database database; /** * Simple object-wide flag indicating that all of this object's cached * data is dirty. */ protected boolean isDirty = true; /** * state flag -- if true, contentful tables are to be produced, else * empty (surrogate) tables are to be produced. This allows faster * database startup where user views reference system tables and faster * system table structural reflection for table metadata. */ protected boolean withContent = false; /** * Factory method retuns the fullest system table producer * implementation available. This instantiates implementations beginning * with the most complete, finally choosing an empty table producer * implemenation (this class) if no better instance can be constructed. * @param db The Database object for which to produce system tables * @return the fullest system table producer * implementation available * @throws HsqlException never - required by constructor */ static final DatabaseInformation newDatabaseInformation(Database db) throws HsqlException { Class c = null; try { c = Class.forName("org.hsqldb.DatabaseInformationFull"); } catch (Exception e) { try { c = Class.forName("org.hsqldb.DatabaseInformationMain"); } catch (Exception e2) { c = DatabaseInformation.class; } } try { Class[] ctorParmTypes = new Class[]{ Database.class }; Object[] ctorParms = new Object[]{ db }; Constructor ctor = c.getDeclaredConstructor(ctorParmTypes); return (DatabaseInformation) ctor.newInstance(ctorParms); } catch (Exception e) { e.printStackTrace(); } return new DatabaseInformation(db); } /** * Constructs a new DatabaseInformation instance which knows the names of * all system tables (isSystemTable()) but simpy returns null for all * getSystemTable() requests. <p> * * @param db The Database object for which to produce system tables * @throws HsqlException never (required for descendents) */ DatabaseInformation(Database db) throws HsqlException { database = db; } /** * Tests if the specified name is that of a system table. <p> * * @param name the name to test * @return true if the specified name is that of a system table */ final boolean isSystemTable(String name) { return sysTableNamesMap.containsKey(name); } /** * Retrieves a table with the specified name whose content may depend on * the execution context indicated by the session argument as well as the * current value of <code>withContent. Other HSQLDB examples (source code examples)Here is a short list of links related to this HSQLDB DatabaseInformation.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.