/** Auto names are used for autogenerated indexes or anonymous constraints. */
  public HsqlName newAutoName(
      String prefix, String namepart, HsqlName schema, HsqlName parent, int type) {

    StringBuffer sb = new StringBuffer();

    if (prefix != null) {
      if (prefix.length() != 0) {
        sb.append("SYS_");
        sb.append(prefix);
        sb.append('_');

        if (namepart != null) {
          sb.append(namepart);
          sb.append('_');
        }

        sb.append(++sysNumber);
      }
    } else {
      sb.append(namepart);
    }

    HsqlName name = new HsqlName(this, sb.toString(), type, false);

    name.schema = schema;
    name.parent = parent;

    return name;
  }
  public HsqlName newHsqlName(HsqlName schema, String name, boolean isquoted, int type) {

    HsqlName hsqlName = new HsqlName(this, name, isquoted, type);

    hsqlName.schema = schema;

    return hsqlName;
  }
  public HsqlName newHsqlName(HsqlName schema, String name, int type) {

    HsqlName hsqlName = new HsqlName(this, name, type, false);

    hsqlName.schema = schema;

    return hsqlName;
  }
  public static HsqlName newInfoSchemaObjectName(String name, boolean isQuoted, int type) {

    HsqlName hsqlName = new HsqlName(staticManager, name, type, isQuoted);

    hsqlName.schema = SqlInvariants.INFORMATION_SCHEMA_HSQLNAME;

    return hsqlName;
  }
  public static HsqlName newInfoSchemaTableName(String name) {

    HsqlName hsqlName = new HsqlName(staticManager, name, SchemaObject.TABLE, false);

    hsqlName.schema = SqlInvariants.INFORMATION_SCHEMA_HSQLNAME;

    return hsqlName;
  }
  public HsqlName newColumnHsqlName(HsqlName table, String name, boolean isquoted) {

    HsqlName hsqlName = new HsqlName(this, name, isquoted, SchemaObject.COLUMN);

    hsqlName.schema = table.schema;
    hsqlName.parent = table;

    return hsqlName;
  }
  public static HsqlName newInfoSchemaColumnName(String name, HsqlName table) {

    HsqlName hsqlName = new HsqlName(staticManager, name, false, SchemaObject.COLUMN);

    hsqlName.schema = SqlInvariants.INFORMATION_SCHEMA_HSQLNAME;
    hsqlName.parent = table;

    return hsqlName;
  }
  public HsqlName newSpecificRoutineName(HsqlName name) {

    StringBuffer sb = new StringBuffer();

    sb.append(name.name).append('_').append(++sysNumber);

    HsqlName hsqlName =
        new HsqlName(this, sb.toString(), SchemaObject.SPECIFIC_ROUTINE, name.isNameQuoted);

    hsqlName.parent = name;
    hsqlName.schema = name.schema;

    return hsqlName;
  }
  public HsqlNameManager(Database database) {

    catalogName =
        new HsqlName(this, SqlInvariants.DEFAULT_CATALOG_NAME, SchemaObject.CATALOG, false);
    sqlRegularNames = database.sqlRegularNames;
    subqueryTableName =
        new HsqlName(this, SqlInvariants.SYSTEM_SUBQUERY, false, SchemaObject.TABLE);
    subqueryTableName.schema = SqlInvariants.SYSTEM_SCHEMA_HSQLNAME;
  }
    public String getSchemaQualifiedStatementName() {

      switch (type) {
        case SchemaObject.PARAMETER:
        case SchemaObject.VARIABLE:
          {
            return statementName;
          }
        case SchemaObject.COLUMN:
          {
            if (parent == null || SqlInvariants.SYSTEM_SUBQUERY.equals(parent.name)) {
              return statementName;
            }

            StringBuffer sb = new StringBuffer();

            if (schema != null) {
              sb.append(schema.getStatementName());
              sb.append('.');
            }

            sb.append(parent.getStatementName());
            sb.append('.');
            sb.append(statementName);

            return sb.toString();
          }
      }

      if (schema == null || SqlInvariants.SYSTEM_SCHEMA.equals(schema.name)) {
        return statementName;
      }

      StringBuffer sb = new StringBuffer();

      sb.append(schema.getStatementName());
      sb.append('.');
      sb.append(statementName);

      return sb.toString();
    }