docs: protected DataType parseCharStringType( DdlTokenStream tokens ) throws ParsingException {
          DataType dataType = null;
          String typeName = null;
  
          if (tokens.matches(DataTypes.DTYPE_VARCHAR)) {
              typeName = getStatementTypeName(DataTypes.DTYPE_VARCHAR);
              dataType = new DataType(typeName);
              consume(tokens, dataType, false, DataTypes.DTYPE_VARCHAR);
              long length = parseBracketedLong(tokens, dataType);
              dataType.setLength(length);
          } else if (tokens.matches(DataTypes.DTYPE_CHAR_VARYING)) {
              typeName = getStatementTypeName(DataTypes.DTYPE_CHAR_VARYING);
              dataType = new DataType(typeName);
              consume(tokens, dataType, false, DataTypes.DTYPE_CHAR_VARYING);
              long length = parseBracketedLong(tokens, dataType);
              dataType.setLength(length);
          } else if (tokens.matches(DataTypes.DTYPE_CHARACTER_VARYING)) {
              typeName = getStatementTypeName(DataTypes.DTYPE_CHARACTER_VARYING);
              dataType = new DataType(typeName);
              consume(tokens, dataType, false, DataTypes.DTYPE_CHARACTER_VARYING);
              long length = parseBracketedLong(tokens, dataType);
              dataType.setLength(length);
          } else if (tokens.matches(DataTypes.DTYPE_CHAR) || tokens.matches(DataTypes.DTYPE_CHARACTER)) {
              dataType = new DataType();
              typeName = consume(tokens, dataType, false); // "CHARACTER", "CHAR",
              dataType.setName(typeName);
              long length = getDefaultLength();
              if (tokens.matches(L_PAREN)) {
                  length = parseBracketedLong(tokens, dataType);
              }
              dataType.setLength(length);
          }
  
          return dataType;
      }