Github user SuJinpei commented on a diff in the pull request:

    https://github.com/apache/trafodion/pull/1747#discussion_r234884122
  
    --- Diff: core/conn/odb/src/odb.c ---
    @@ -14685,6 +14743,56 @@ static void addGlobalPointer(void *ptr)
         globalPointers[nGlobalPointers++] = ptr;
     }
     
    +/* is_valid_numeric:
    +*      check if the string is valid numeric
    +*
    +*      Input: str: string to be validate.
    +*      Input: n: length of str
    +*
    +*      return: if str is valid numeric return 1 else return 0
    +*/
    +static int is_valid_numeric(const char* str, size_t n) {
    +    int s = 1;
    +    for (size_t i = 0; i < n; ++i) {
    +        switch (s) {
    +        case 1:
    +            if (str[i] == '+' || str[i] == '-') s = 2;
    +            else if (isdigit(str[i])) s = 3;
    +            else return 0;
    +            break;
    +        case 2:
    +            if (!isdigit(str[i])) return 0;
    +            s = 3;
    +            break;
    +        case 3:
    +            if (str[i] == '.') s = 4;
    +            else if (str[i] == 'e') s = 6;
    +            else if (!isdigit(str[i])) return 0;
    +            break;
    +        case 4:
    +            if (!isdigit(str[i])) return 0;
    +            s = 5;
    +            break;
    +        case 5:
    +            if (str[i] == 'e') s = 6;
    +            else if (!isdigit(str[i])) return 0;
    +            break;
    +        case 6:
    +            if (str[i] == '+' || str[i] == '-') s = 7;
    +            else if (isdigit(str[i])) s = 7;
    +            else return 0;
    +            break;
    +        case 7:
    +            if (!isdigit(str[i])) return 0;
    +            break;
    +        default:
    +            return 0;
    +        }
    +    }
    +    if (s == 3 || s == 7 || s == 5) return 1;
    --- End diff --
    
    Yes, this is also a valid numeric value.


---

Reply via email to