docs: protected boolean parseDefaultClause( DdlTokenStream tokens,
                                            AstNode columnNode ) throws ParsingException {
  
          assert tokens != null;
          assert columnNode != null;
  
          // defaultClause
          // : defaultOption
          // ;
          // defaultOption : <literal> | datetimeValueFunction
          // | USER | CURRENT_USER | SESSION_USER | SYSTEM_USER | NULL;
          //
          // <datetime value function> ::=
          // <current date value function>
          // | <current time value function>
          // | <current timestamp value function>
          //
          // <current date value function> ::= CURRENT_DATE
          //
          // <current time value function> ::=
          // CURRENT_TIME [ <left paren> <time precision> <right paren> ]
          //
          // <current timestamp value function> ::=
          // CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
  
          String defaultValue = "";
  
          if (tokens.canConsume("DEFAULT")) {
  
              String optionID;
              int precision = -1;
  
              if (tokens.canConsume("CURRENT_DATE") || tokens.canConsume("'CURRENT_DATE'")) {
                  optionID = DEFAULT_ID_DATETIME;
                  defaultValue = "CURRENT_DATE";
              } else if (tokens.canConsume("CURRENT_TIME") || tokens.canConsume("'CURRENT_TIME'")) {
                  optionID = DEFAULT_ID_DATETIME;
                  defaultValue = "CURRENT_TIME";
                  if (tokens.canConsume(L_PAREN)) {
                      // EXPECT INTEGER
                      precision = integer(tokens.consume());
                      tokens.canConsume(R_PAREN);
                  }
              } else if (tokens.canConsume("CURRENT_TIMESTAMP") || tokens.canConsume("'CURRENT_TIMESTAMP'")) {
                  optionID = DEFAULT_ID_DATETIME;
                  defaultValue = "CURRENT_TIMESTAMP";
                  if (tokens.canConsume(L_PAREN)) {
                      // EXPECT INTEGER
                      precision = integer(tokens.consume());
                      tokens.canConsume(R_PAREN);
                  }
              } else if (tokens.canConsume("USER") || tokens.canConsume("'USER'")) {
                  optionID = DEFAULT_ID_USER;
                  defaultValue = "USER";
              } else if (tokens.canConsume("CURRENT_USER") || tokens.canConsume("'CURRENT_USER'")) {
                  optionID = DEFAULT_ID_CURRENT_USER;
                  defaultValue = "CURRENT_USER";
              } else if (tokens.canConsume("SESSION_USER") || tokens.canConsume("'SESSION_USER'")) {
                  optionID = DEFAULT_ID_SESSION_USER;
                  defaultValue = "SESSION_USER";
              } else if (tokens.canConsume("SYSTEM_USER") || tokens.canConsume("'SYSTEM_USER'")) {
                  optionID = DEFAULT_ID_SYSTEM_USER;
                  defaultValue = "SYSTEM_USER";
              } else if (tokens.canConsume("NULL") || tokens.canConsume("NULL")) {
                  optionID = DEFAULT_ID_NULL;
                  defaultValue = "NULL";
              } else if (tokens.canConsume(L_PAREN)) {
                  optionID = DEFAULT_ID_LITERAL;
                  while (!tokens.canConsume(R_PAREN)) {
                      defaultValue = defaultValue + tokens.consume();
                  }
              } else {
                  optionID = DEFAULT_ID_LITERAL;
                  // Assume default was EMPTY or ''
                  defaultValue = tokens.consume();
  
                  // strip quotes if necessary
                  if (defaultValue.startsWith("'") && defaultValue.endsWith("'")) {
                      if (defaultValue.length() > 2) {
                          defaultValue = defaultValue.substring(1, defaultValue.lastIndexOf('\''));
                      } else {
                          defaultValue = "";
                      }
                  }
  
                  // NOTE: default value could be a Real number as well as an integer, so
                  // 1000.00 is valid
                  if (tokens.canConsume(".")) {
                      defaultValue = defaultValue + '.' + tokens.consume();
                  }
              }
  
              columnNode.setProperty(DEFAULT_OPTION, optionID);
              columnNode.setProperty(DEFAULT_VALUE, defaultValue);
              if (precision > -1) {
                  columnNode.setProperty(DEFAULT_PRECISION, precision);
              }
              return true;
          }
  
          return false;
      }