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.
---