public static PropertyList parseOneColumnSpec(Stella_Object columnspec) {
    { PropertyList parsedcolumn = PropertyList.newPropertyList();
      Symbol var = null;
      Stella_Object name = null;
      Cons options = Stella.NIL;
      PropertyList optionsplist = null;
      Stella_Object type = null;

      { Surrogate testValue000 = Stella_Object.safePrimaryType(columnspec);

        if (testValue000 == RDBMS.SGT_STELLA_CONS) {
          { Cons columnspec000 = ((Cons)(columnspec));

            name = columnspec000.value;
            if ((columnspec000.rest.value != null) &&
                (!Stella_Object.keywordP(columnspec000.rest.value))) {
              {
                type = columnspec000.rest.value;
                options = columnspec000.rest.rest;
              }
            }
            else {
              options = columnspec000.rest;
            }
          }
        }
        else if (Surrogate.subtypeOfSymbolP(testValue000)) {
          { Symbol columnspec000 = ((Symbol)(columnspec));

            name = columnspec000;
          }
        }
        else {
          { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

            { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

              try {
                Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
                stream000.nativeStream.println("PARSING ERROR: Illegal table column specification: `" + columnspec + "'.");
                Logic.helpSignalPropositionError(stream000, RDBMS.KWD_ERROR);

              } finally {
                Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
              }
            }
            throw ((ParsingError)(ParsingError.newParsingError(stream000.theStringReader()).fillInStackTrace()));
          }
        }
      }
      if (!((name != null) &&
          Stella_Object.symbolP(name))) {
        { OutputStringStream stream001 = OutputStringStream.newOutputStringStream();

          { Object old$PrintreadablyP$001 = Stella.$PRINTREADABLYp$.get();

            try {
              Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
              stream001.nativeStream.println("PARSING ERROR: Illegal table column name: `" + name + "'.");
              Logic.helpSignalPropositionError(stream001, RDBMS.KWD_ERROR);

            } finally {
              Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
            }
          }
          throw ((ParsingError)(ParsingError.newParsingError(stream001.theStringReader()).fillInStackTrace()));
        }
      }
      if (!((type == null) ||
          Stella_Object.symbolP(type))) {
        { OutputStringStream stream002 = OutputStringStream.newOutputStringStream();

          { Object old$PrintreadablyP$002 = Stella.$PRINTREADABLYp$.get();

            try {
              Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
              stream002.nativeStream.println("PARSING ERROR: Illegal table column type: `" + type + "'.");
              Logic.helpSignalPropositionError(stream002, RDBMS.KWD_ERROR);

            } finally {
              Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$002);
            }
          }
          throw ((ParsingError)(ParsingError.newParsingError(stream002.theStringReader()).fillInStackTrace()));
        }
      }
      optionsplist = Stella_Object.vetOptions(options, Stella.getQuotedTree("((:MODULE-NAME :MODULE-REFERENCE) \"/RDBMS\")", "/RDBMS"));
      var = ((Symbol)(name));
      if (Logic.questionMarkSymbolP(name)) {
        name = StringWrapper.wrapString(Native.string_subsequence(var.symbolName, 1, Stella.NULL_INTEGER));
      }
      else {
        name = StringWrapper.wrapString(var.symbolName);
        var = Symbol.internDerivedSymbol(var, "?" + ((StringWrapper)(name)).wrapperValue);
      }
      parsedcolumn.insertAt(RDBMS.KWD_NAME, name);
      parsedcolumn.insertAt(RDBMS.KWD_VARIABLE, var);
      if (type != null) {
        parsedcolumn.insertAt(RDBMS.KWD_TYPE, type);
      }
      { Stella_Object key = null;
        Stella_Object val = null;
        Cons iter000 = optionsplist.thePlist;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest.rest) {
          key = iter000.value;
          val = iter000.rest.value;
          parsedcolumn.insertAt(key, val);
        }
      }
      return (parsedcolumn);
    }
  }