Обсуждение: pg_atoi()

Поиск
Список
Период
Сортировка

pg_atoi()

От
Richard Harvey Chapman
Дата:
Is there a reason why pg_atoi() was programmed to fail if the entire
input string is not valid?
i.e. "109" yields 109, but "109 apples" yields an error.

Snippet from pg_atoi() in src/backend/utils/adt/numutils.c:

        l = strtol(s, &badp, 10);

        if (errno)                       /* strtol must set ERANGE */
                elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
        if (badp && *badp && (*badp != c))
                elog(ERROR, "pg_atoi: error in \"%s\": can\'t parse
\"%s\"", s, badp);


Thanks,

R.



Re: pg_atoi()

От
Tom Lane
Дата:
Richard Harvey Chapman <hchapman@3gfp.com> writes:
> Is there a reason why pg_atoi() was programmed to fail if the entire
> input string is not valid?
> i.e. "109" yields 109, but "109 apples" yields an error.

Because that's what it ought to do, if you ask me ;-).
"109 foo" is not a valid integer value.  If you want your app to
accept such things, do your own input parsing and filtering.
A database server should not be lax about what it considers valid
data.

            regards, tom lane