docs: Table SYSTEM_PROCEDURES() {
  
          Table t = sysTables[SYSTEM_PROCEDURES];
  
          if (t == null) {
              t = createBlankTable(sysTableHsqlNames[SYSTEM_PROCEDURES]);
  
              // ----------------------------------------------------------------
              // required
              // ----------------------------------------------------------------
              addColumn(t, "PROCEDURE_CAT", SQL_IDENTIFIER);          // 0
              addColumn(t, "PROCEDURE_SCHEM", SQL_IDENTIFIER);        // 1
              addColumn(t, "PROCEDURE_NAME", SQL_IDENTIFIER);         // not null
              addColumn(t, "NUM_INPUT_PARAMS", Type.SQL_INTEGER);     // 3
              addColumn(t, "NUM_OUTPUT_PARAMS", Type.SQL_INTEGER);    // 4
              addColumn(t, "NUM_RESULT_SETS", Type.SQL_INTEGER);      // 5
              addColumn(t, "REMARKS", CHARACTER_DATA);                // 6
  
              // basically: function (returns result), procedure (no return value)
              // or unknown (say, a trigger callout routine)
              addColumn(t, "PROCEDURE_TYPE", Type.SQL_SMALLINT);      // not null
  
              // ----------------------------------------------------------------
              // JDBC 4.0
              // ----------------------------------------------------------------
              addColumn(t, "SPECIFIC_NAME", SQL_IDENTIFIER);          // not null
  
              // ----------------------------------------------------------------
              // extended
              // ----------------------------------------------------------------
              addColumn(t, "ORIGIN", CHARACTER_DATA);                 // not null
  
              // ----------------------------------------------------------------
              // order: PROCEDURE_SCHEM, PROCEDURE_NAME, SPECIFIC_NAME
              // added for uniqe: PROCEDURE_CAT
              // false PK, as PROCEDURE_SCHEM and/or PROCEDURE_CAT may be null
              HsqlName name = HsqlNameManager.newInfoSchemaObjectName(
                  sysTableHsqlNames[SYSTEM_PROCEDURES].name, false,
                  SchemaObject.INDEX);
  
              t.createPrimaryKey(name, new int[] {
                  1, 2, 8, 0
              }, false);
  
              return t;
          }
  
          // calculated column values
          // ------------------------
          // required
          // ------------------------
          String  catalog;
          String  schema;
          String  procName;
          Integer numInputParams;
          Integer numOutputParams;
          Integer numResultSets;
          String  remarks;
          Integer procRType;
  
          // -------------------
          // extended
          // -------------------
          String procOrigin;
          String specificName;
  
          // intermediate holders
          String        alias;
          HsqlArrayList aliasList;
          Iterator      methods;
          Object[]      methodInfo;
          Method        method;
          String        methodOrigin;
          Object[]      row;
  
          // Initialization
          methods = ns.iterateAllAccessibleMethods(session, true);    //and aliases
          catalog = database.getCatalogName().name;
          schema  = database.schemaManager.getDefaultSchemaHsqlName().name;
  
          // Do it.
          while (methods.hasNext()) {
              methodInfo   = (Object[]) methods.next();
              method       = (Method) methodInfo[0];
              aliasList    = (HsqlArrayList) methodInfo[1];
              methodOrigin = (String) methodInfo[2];
  
              pi.setMethod(method);
  
              procName        = pi.getFQN();
              numInputParams  = pi.getInputParmCount();
              numOutputParams = pi.getOutputParmCount();
              numResultSets   = pi.getResultSetCount();
              remarks         = pi.getRemark();
              procRType       = pi.getResultType(methodOrigin);
              specificName    = pi.getSpecificName();
              procOrigin      = pi.getOrigin(methodOrigin);
  
              addProcRows(t, aliasList, catalog, schema, procName,
                          numInputParams, numOutputParams, numResultSets,
                          remarks, procRType, specificName, procOrigin);
          }
  
          return t;
      }