docs: final Table SYSTEM_TABLES() {
  
          Table t = sysTables[SYSTEM_TABLES];
  
          if (t == null) {
              t = createBlankTable(sysTableHsqlNames[SYSTEM_TABLES]);
  
              // -------------------------------------------------------------
              // required
              // -------------------------------------------------------------
              addColumn(t, "TABLE_CAT", SQL_IDENTIFIER);
              addColumn(t, "TABLE_SCHEM", SQL_IDENTIFIER);
              addColumn(t, "TABLE_NAME", SQL_IDENTIFIER);       // not null
              addColumn(t, "TABLE_TYPE", CHARACTER_DATA);       // not null
              addColumn(t, "REMARKS", CHARACTER_DATA);
  
              // -------------------------------------------------------------
              // JDBC 3.0
              // -------------------------------------------------------------
              addColumn(t, "TYPE_CAT", SQL_IDENTIFIER);
              addColumn(t, "TYPE_SCHEM", SQL_IDENTIFIER);
              addColumn(t, "TYPE_NAME", SQL_IDENTIFIER);
              addColumn(t, "SELF_REFERENCING_COL_NAME", SQL_IDENTIFIER);
              addColumn(t, "REF_GENERATION", CHARACTER_DATA);
  
              // -------------------------------------------------------------
              // extended
              // ------------------------------------------------------------
              addColumn(t, "HSQLDB_TYPE", SQL_IDENTIFIER);
              addColumn(t, "READ_ONLY", Type.SQL_BOOLEAN);      // not null
              addColumn(t, "COMMIT_ACTION", CHARACTER_DATA);    // not null
  
              // ------------------------------------------------------------
              // order TABLE_TYPE, TABLE_SCHEM and TABLE_NAME
              // added for unique: TABLE_CAT
              // false PK, as TABLE_SCHEM and/or TABLE_CAT may be null
              HsqlName name = HsqlNameManager.newInfoSchemaObjectName(
                  sysTableHsqlNames[SYSTEM_TABLES].name, false,
                  SchemaObject.INDEX);
  
              t.createPrimaryKey(name, new int[] {
                  3, 1, 2, 0
              }, false);
  
              return t;
          }
  
          PersistentStore store = database.persistentStoreCollection.getStore(t);
  
          // intermediate holders
          Iterator    tables;
          Table       table;
          Object[]    row;
          HsqlName    accessKey;
          DITableInfo ti;
  
          // column number mappings
          // JDBC 1
          final int itable_cat   = 0;
          final int itable_schem = 1;
          final int itable_name  = 2;
          final int itable_type  = 3;
          final int iremark      = 4;
  
          // JDBC 3.0
          final int itype_cat   = 5;
          final int itype_schem = 6;
          final int itype_name  = 7;
          final int isref_cname = 8;
          final int iref_gen    = 9;
  
          // hsqldb ext
          final int ihsqldb_type   = 10;
          final int iread_only     = 11;
          final int icommit_action = 12;
  
          // Initialization
          tables = allTables();
          ti     = new DITableInfo();
  
          // Do it.
          while (tables.hasNext()) {
              table = (Table) tables.next();
  
              if (!isAccessibleTable(table)) {
                  continue;
              }
  
              ti.setTable(table);
  
              row               = t.getEmptyRowData();
              row[itable_cat]   = database.getCatalogName().name;
              row[itable_schem] = table.getSchemaName().name;
              row[itable_name]  = ti.getName();
              row[itable_type]  = ti.getJDBCStandardType();
              row[iremark]      = ti.getRemark();
              row[ihsqldb_type] = ti.getHsqlType();
              row[iread_only]   = ti.isReadOnly();
              row[icommit_action] = table.isTemp()
                                    ? (table.onCommitPreserve() ? "PRESERVE"
                                                                : "DELETE")
                                    : null;
  
              t.insertSys(store, row);
          }
  
          return t;
      }