docs: void readColumnConstraints(Table table, ColumnSchema column,
                                 HsqlArrayList constraintList) {
  
          boolean end = false;
          boolean isAutogeneratedName = true;
  
          while (true) {
              HsqlName constName = null;
  
              if (token.tokenType == Tokens.CONSTRAINT) {
                  read();
  
                  constName = readNewDependentSchemaObjectName(table.getName(),
                          SchemaObject.CONSTRAINT);
                  isAutogeneratedName = false;
              }
  
              // A VoltDB extension to support indexed expressions and the assume unique attribute
              boolean assumeUnique = false; // For VoltDB
              // End of VoltDB extension
              switch (token.tokenType) {
  
                  case Tokens.PRIMARY : {
                      read();
                      readThis(Tokens.KEY);
  
                      Constraint existingConst =
                          (Constraint) constraintList.get(0);
  
                      if (existingConst.constType == Constraint.PRIMARY_KEY) {
                          throw Error.error(ErrorCode.X_42532);
                      }
  
                      OrderedHashSet set = new OrderedHashSet();
  
                      set.add(column.getName().name);
  
                      if (constName == null) {
                          constName = database.nameManager.newAutoName("PK",
                                  table.getSchemaName(), table.getName(),
                                  SchemaObject.CONSTRAINT);
                      }
  
                      Constraint c = new Constraint(constName, isAutogeneratedName, set,
                                                    Constraint.PRIMARY_KEY);
  
                      constraintList.set(0, c);
                      column.setPrimaryKey(true);
  
                      break;
                  }
                  // A VoltDB extension to support indexed expressions and the assume unique attribute
                  case Tokens.ASSUMEUNIQUE :
                      assumeUnique = true;
                      // $FALL-THROUGH$
                  // End of VoltDB extension
                  case Tokens.UNIQUE : {
                      read();
  
                      OrderedHashSet set = new OrderedHashSet();
  
                      set.add(column.getName().name);
  
                      if (constName == null) {
                          constName = database.nameManager.newAutoName("CT",
                                  table.getSchemaName(), table.getName(),
                                  SchemaObject.CONSTRAINT);
                      }
  
                      Constraint c = new Constraint(constName, isAutogeneratedName, set,
                                                    Constraint.UNIQUE);
                      // A VoltDB extension to support indexed expressions and the assume unique attribute
                      c.setAssumeUnique(assumeUnique);
                      // End of VoltDB extension
  
                      constraintList.add(c);
  
                      break;
                  }
                  case Tokens.FOREIGN : {
                      read();
                      readThis(Tokens.KEY);
                  }
  
                  // $FALL-THROUGH$
                  case Tokens.REFERENCES : {
                      OrderedHashSet set = new OrderedHashSet();
  
                      set.add(column.getName().name);
  
                      Constraint c = readFKReferences(table, constName, set);
  
                      constraintList.add(c);
  
                      break;
                  }
                  case Tokens.CHECK : {
                      read();
  
                      if (constName == null) {
                          constName = database.nameManager.newAutoName("CT",
                                  table.getSchemaName(), table.getName(),
                                  SchemaObject.CONSTRAINT);
                      }
  
                      Constraint c = new Constraint(constName, isAutogeneratedName, null,
                                                    Constraint.CHECK);
  
                      readCheckConstraintCondition(c);
  
                      OrderedHashSet set = c.getCheckColumnExpressions();
  
                      for (int i = 0; i < set.size(); i++) {
                          ExpressionColumn e = (ExpressionColumn) set.get(i);
  
                          if (column.getName().name.equals(e.getColumnName())) {
                              if (e.getSchemaName() != null
                                      && e.getSchemaName()
                                         != table.getSchemaName().name) {
                                  throw Error.error(ErrorCode.X_42505);
                              }
                          } else {
                              throw Error.error(ErrorCode.X_42501);
                          }
                      }
  
                      constraintList.add(c);
  
                      break;
                  }
                  case Tokens.NOT : {
                      read();
                      readThis(Tokens.NULL);
  
                      if (constName == null) {
                          constName = database.nameManager.newAutoName("CT",
                                  table.getSchemaName(), table.getName(),
                                  SchemaObject.CONSTRAINT);
                      }
  
                      Constraint c = new Constraint(constName, isAutogeneratedName, null,
                                                    Constraint.CHECK);
  
                      c.check = new ExpressionLogical(column);
  
                      constraintList.add(c);
  
                      break;
                  }
                  default :
                      end = true;
                      break;
              }
  
              if (end) {
                  break;
              }
          }
      }