Esempio n. 1
0
  /**
   * 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);
  }
Esempio n. 2
0
  /** 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;
  }
Esempio n. 3
0
  /// 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);
  }
Esempio n. 9
0
  // 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;
  }
Esempio n. 10
0
  /// 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;
  }
Esempio n. 11
0
  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;
  }
Esempio n. 12
0
  /** 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;
  }