/** * Opens this database. The database should be opened after construction. or reopened by the * close(int closemode) method during a "shutdown compact". Closes the log if there is an error. */ void reopen() { boolean isNew = false; setState(DATABASE_OPENING); try { nameManager = new HsqlNameManager(this); granteeManager = new GranteeManager(this); userManager = new UserManager(this); schemaManager = new SchemaManager(this); persistentStoreCollection = new PersistentStoreCollectionDatabase(this); isReferentialIntegrity = true; sessionManager = new SessionManager(this); collation = collation.newDatabaseInstance(); dbInfo = DatabaseInformation.newDatabaseInformation(this); txManager = new TransactionManager2PL(this); lobManager.createSchema(); sessionManager.getSysLobSession().setSchema(SqlInvariants.LOBS_SCHEMA); schemaManager.setSchemaChangeTimestamp(); schemaManager.createSystemTables(); // completed metadata logger.open(); isNew = logger.isNewDatabase; if (isNew) { String username = urlProperties.getProperty("user", "SA"); String password = urlProperties.getProperty("password", ""); userManager.createFirstUser(username, password); schemaManager.createPublicSchema(); logger.checkpoint(false); } lobManager.open(); dbInfo.setWithContent(true); checkpointRunner = new CheckpointRunner(); timeoutRunner = new TimeoutRunner(); } catch (Throwable e) { logger.close(Database.CLOSEMODE_IMMEDIATELY); logger.releaseLock(); setState(DATABASE_SHUTDOWN); clearStructures(); DatabaseManager.removeDatabase(this); if (!(e instanceof HsqlException)) { e = Error.error(ErrorCode.GENERAL_ERROR, e); } logger.logSevereEvent("could not reopen database", e); throw (HsqlException) e; } setState(DATABASE_ONLINE); }
/** Returns the schema and authorisation statements for the database. */ public Result getScript(boolean indexRoots) { Result r = Result.newSingleColumnResult("COMMAND"); // properties String[] list = logger.getPropertiesSQL(indexRoots); addRows(r, list); list = getSettingsSQL(); addRows(r, list); list = getGranteeManager().getSQL(); addRows(r, list); // schemas and schema objects such as tables, sequences, etc. list = schemaManager.getSQLArray(); addRows(r, list); // optional comments on tables etc. list = schemaManager.getCommentsArray(); addRows(r, list); list = schemaManager.getTableSpaceSQL(); addRows(r, list); // index roots if (indexRoots) { list = schemaManager.getIndexRootsSQL(); addRows(r, list); } // text headers - readonly - clustered list = schemaManager.getTablePropsSQL(!indexRoots); addRows(r, list); // password complexity list = getUserManager().getAuthenticationSQL(); addRows(r, list); // user session start schema names list = getUserManager().getInitialSchemaSQL(); addRows(r, list); // grantee rights list = getGranteeManager().getRightstSQL(); addRows(r, list); return r; }
/// full scan private ArrayList<JsonObject> FullScan(FilterExpression expression) { ArrayList<JsonObject> list = new ArrayList<JsonObject>(); String globalName = Utils.TableNameToGlobalsName( TableName + SchemaManager.Instance().GetProjectPrefix(ProjectId)); NodeReference node = ConnectionManager.Instance().getConnection().createNodeReference(globalName); Long key = (long) 0; while (true) { String strKey = node.nextSubscript(key); if (strKey.equals("")) break; key = Long.parseLong(strKey); String nodeValue = node.getObject(key, "JSON").toString(); JsonObject obj = new JsonParser().parse(nodeValue).getAsJsonObject(); if (expression == null) { list.add(obj); } else { if (expression.IsValid(obj)) { list.add(obj); } } } return list; }
public void createTables(DatabaseSession session) { dropTableConstraints(session); new InheritanceTableCreator().replaceTables(session); SchemaManager schemaManager = new SchemaManager(session); if (session.getLogin().getPlatform().isOracle()) { schemaManager.replaceObject(Computer.oracleView()); schemaManager.replaceObject(Vehicle.oracleView()); } else if (session.getLogin().getPlatform().isSybase()) { schemaManager.replaceObject(Computer.sybaseView()); schemaManager.replaceObject(Vehicle.sybaseView()); // CREATE VIEW statement was added in MySQL 5.0.1. Uncomment it when we support MySQL 5 // } else if (session.getLogin().getPlatform().isMySQL()) { // schemaManager.replaceObject(Computer.sybaseView()); // schemaManager.replaceObject(Vehicle.mySQLView()); } }
/** Returns the schema and authorisation statements for the database. */ public Result getScript(boolean indexRoots) { Result r = Result.newSingleColumnResult("COMMAND", Type.SQL_VARCHAR); // properties String[] list = logger.getPropertiesSQL(); addRows(r, list); list = getSettingsSQL(); addRows(r, list); list = getGranteeManager().getSQL(); addRows(r, list); // schemas and schema objects such as tables, sequences, etc. list = schemaManager.getSQLArray(); addRows(r, list); // user session start schema names list = getUserManager().getInitialSchemaSQL(); addRows(r, list); // grantee rights list = getGranteeManager().getRightstSQL(); addRows(r, list); // index roots if (indexRoots) { list = schemaManager.getIndexRootsSQL(); addRows(r, list); } // text headers list = schemaManager.getTextTableSQL(!indexRoots); addRows(r, list); return r; }
public void createTables(DatabaseSession session) { SchemaManager schemaManager = new SchemaManager(session); schemaManager.replaceObject(LockInCache.tableDefinition()); schemaManager.replaceObject(LockInObject.tableDefinition()); schemaManager.replaceObject(TimestampInObject.tableDefinition()); schemaManager.replaceObject(TimestampInAggregateObject.tableDefinition()); schemaManager.replaceObject(LockInAggregateObject.tableDefinition()); schemaManager.replaceObject(TimestampInCache.tableDefinition()); schemaManager.replaceObject(ChangedRow.tableDefinition()); schemaManager.createSequences(); new RockBandTableCreator().replaceTables(session); new AnimalTableCreator().replaceTables(session); }
/** Clears the data structuress, making them elligible for garbage collection. */ void clearStructures() { if (schemaManager != null) { schemaManager.clearStructures(); } granteeManager = null; userManager = null; nameManager = null; schemaManager = null; sessionManager = null; dbInfo = null; }
/** * Opens this database. The database should be opened after construction. or reopened by the * close(int closemode) method during a "shutdown compact". Closes the log if there is an error. */ void reopen() { boolean isNew = false; setState(DATABASE_OPENING); try { nameManager = new HsqlNameManager(this); granteeManager = new GranteeManager(this); userManager = new UserManager(this); schemaManager = new SchemaManager(this); persistentStoreCollection = new PersistentStoreCollectionDatabase(); isReferentialIntegrity = true; sessionManager = new SessionManager(this); collation = collation.getDefaultInstance(); dbInfo = DatabaseInformation.newDatabaseInformation(this); txManager = new TransactionManager2PL(this); lobManager.createSchema(); logger.openPersistence(); isNew = logger.isNewDatabase; if (isNew) { userManager.createSAUser(); schemaManager.createPublicSchema(); lobManager.initialiseLobSpace(); logger.checkpoint(false); } lobManager.open(); dbInfo.setWithContent(true); } catch (Throwable e) { logger.closePersistence(Database.CLOSEMODE_IMMEDIATELY); logger.releaseLock(); setState(DATABASE_SHUTDOWN); clearStructures(); DatabaseManager.removeDatabase(this); if (!(e instanceof HsqlException)) { e = Error.error(ErrorCode.GENERAL_ERROR, e); } logger.logSevereEvent("could not reopen database", e); throw (HsqlException) e; } setState(DATABASE_ONLINE); }
// Apply on indexed fields conditions private ArrayList<Long> ExtractSubSetByIndexedCondtions(FilterExpression expression) { ArrayList<Long> setToScan = null; String globalName = SchemaManager.GetGlobalIndexByTableNameAndProjectId(this.TableName, this.ProjectId); NodeReference node = ConnectionManager.Instance().getConnection().createNodeReference(globalName); for (Map.Entry<String, ArrayList<FilterCondition>> entry : expression.IndexedCondtionsByFieldName.entrySet()) { setToScan = ExtractFromIndex(node, setToScan, expression, entry.getValue(), entry.getKey()); // we supply a only AND filter at the moment, that's why if founded count = 0 - we can stop. if (setToScan.size() == 0) return setToScan; } return setToScan; }
/// filter sub set private ArrayList<JsonObject> ScanSet(FilterExpression expression, ArrayList<Long> setToScan) { ArrayList<JsonObject> list = new ArrayList<JsonObject>(); String globalName = Utils.TableNameToGlobalsName( TableName + SchemaManager.Instance().GetProjectPrefix(ProjectId)); NodeReference node = ConnectionManager.Instance().getConnection().createNodeReference(globalName); for (int i = 0; i < setToScan.size(); i++) { String nodeValue = node.getObject(setToScan.get(i), "JSON").toString(); JsonObject obj = new JsonParser().parse(nodeValue).getAsJsonObject(); if (expression == null) { list.add(obj); } else { if (expression.IsValid(obj)) { list.add(obj); } } } return list; }
public String[] getSettingsSQL() { HsqlArrayList list = new HsqlArrayList(); StringBuffer sb = new StringBuffer(); if (!getCatalogName().name.equals(HsqlNameManager.DEFAULT_CATALOG_NAME)) { String name = getCatalogName().statementName; sb.append("ALTER CATALOG PUBLIC RENAME TO ").append(name); list.add(sb.toString()); sb.setLength(0); } if (!collation.isDefaultCollation()) { list.add(collation.getDatabaseCollationSQL()); } HashMappedList lobTables = schemaManager.getTables(SqlInvariants.LOBS_SCHEMA); for (int i = 0; i < lobTables.size(); i++) { Table table = (Table) lobTables.get(i); if (table.isCached()) { sb.append(Tokens.T_SET).append(' ').append(Tokens.T_TABLE); sb.append(' '); sb.append(table.getName().getSchemaQualifiedStatementName()); sb.append(' ').append(Tokens.T_TYPE).append(' '); sb.append(Tokens.T_CACHED); list.add(sb.toString()); sb.setLength(0); } } String[] array = new String[list.size()]; list.toArray(array); return array; }
/** Clears the data structuress, making them elligible for garbage collection. */ void clearStructures() { if (schemaManager != null) { schemaManager.release(); } if (checkpointRunner != null) { checkpointRunner.stop(); } if (timeoutRunner != null) { timeoutRunner.stop(); } granteeManager = null; userManager = null; nameManager = null; schemaManager = null; sessionManager = null; dbInfo = null; checkpointRunner = null; timeoutRunner = null; }