public static Object getTypeValue()

in core/src/main/java/com/jetbrains/youtrackdb/internal/core/serialization/serializer/record/string/RecordSerializerStringAbstract.java [333:455]


  public static Object getTypeValue(DatabaseSessionEmbedded db, final String iValue) {
    if (iValue == null || iValue.equalsIgnoreCase("NULL")) {
      return null;
    }

    if (iValue.length() == 0) {
      return "";
    }

    if (iValue.length() > 1) {
      if (iValue.charAt(0) == '"' && iValue.charAt(iValue.length() - 1) == '"')
      // STRING
      {
        return StringSerializerHelper.decode(iValue.substring(1, iValue.length() - 1));
      } else if (iValue.charAt(0) == StringSerializerHelper.BINARY_BEGINEND
          && iValue.charAt(iValue.length() - 1) == StringSerializerHelper.BINARY_BEGINEND)
      // STRING
      {
        return StringSerializerHelper.getBinaryContent(iValue);
      } else if (iValue.charAt(0) == StringSerializerHelper.LIST_BEGIN
          && iValue.charAt(iValue.length() - 1) == StringSerializerHelper.LIST_END) {
        // LIST
        final var coll = new ArrayList<String>();
        StringSerializerHelper.getCollection(
            iValue,
            0,
            coll,
            StringSerializerHelper.LIST_BEGIN,
            StringSerializerHelper.LIST_END,
            StringSerializerHelper.COLLECTION_SEPARATOR);
        return coll;
      } else if (iValue.charAt(0) == StringSerializerHelper.SET_BEGIN
          && iValue.charAt(iValue.length() - 1) == StringSerializerHelper.SET_END) {
        // SET
        final Set<String> coll = new HashSet<String>();
        StringSerializerHelper.getCollection(
            iValue,
            0,
            coll,
            StringSerializerHelper.SET_BEGIN,
            StringSerializerHelper.SET_END,
            StringSerializerHelper.COLLECTION_SEPARATOR);
        return coll;
      } else if (iValue.charAt(0) == StringSerializerHelper.MAP_BEGIN
          && iValue.charAt(iValue.length() - 1) == StringSerializerHelper.MAP_END) {
        // MAP
        return StringSerializerHelper.getMap(db, iValue);
      }
    }

    if (iValue.charAt(0) == RID.PREFIX)
    // RID
    {
      return RecordIdInternal.fromString(iValue, false);
    }

    var integer = true;
    char c;

    var stringStarBySign = false;

    for (var index = 0; index < iValue.length(); ++index) {
      c = iValue.charAt(index);
      if (c < '0' || c > '9') {
        if ((index == 0 && (c == '+' || c == '-'))) {
          stringStarBySign = true;
          continue;
        } else if (c == DECIMAL_SEPARATOR) {
          integer = false;
        } else {
          if (index > 0) {
            if (!integer && c == 'E') {
              // CHECK FOR SCIENTIFIC NOTATION
              if (index < iValue.length()) {
                index++;
              }
              if (iValue.charAt(index) == '-') {
                continue;
              }
            }

            final var v = iValue.substring(0, index);

            if (c == 'f') {
              return Float.valueOf(v);
            } else if (c == 'c') {
              return new BigDecimal(v);
            } else if (c == 'l') {
              return Long.valueOf(v);
            } else if (c == 'd') {
              return Double.valueOf(v);
            } else if (c == 'b') {
              return Byte.valueOf(v);
            } else if (c == 'a' || c == 't') {
              return new Date(Long.parseLong(v));
            } else if (c == 's') {
              return Short.valueOf(v);
            }
          }
          return iValue;
        }
      } else if (stringStarBySign) {
        stringStarBySign = false;
      }
    }
    if (stringStarBySign) {
      return iValue;
    }

    if (integer) {
      try {
        return Integer.valueOf(iValue);
      } catch (NumberFormatException ignore) {
        return Long.valueOf(iValue);
      }
    } else if ("NaN".equals(iValue) || "Infinity".equals(iValue))
    // NaN and Infinity CANNOT BE MANAGED BY BIG-DECIMAL TYPE
    {
      return Double.valueOf(iValue);
    } else {
      return new BigDecimal(iValue);
    }
  }