DBD-PgAsync
view release on metacpan or search on metacpan
(3 == len && 0 == strncasecmp(value, "0e0", 3))
||
(10 == len && 0 == strncasecmp(value, "0 but true", 10))
) {
New(0, result, 5, char);
strncpy(result,"TRUE\0",5);
*retlen = 4;
return result;
}
/* Things that are false: f, F, 0, false, FALSE, 0, zero-length string */
if (
(1 == len && (0 == strncasecmp(value, "f", 1) || '0' == *value))
||
(5 == len && 0 == strncasecmp(value, "false", 5))
||
(0 == len)
) {
New(0, result, 6, char);
strncpy(result,"FALSE\0",6);
*retlen = 5;
return result;
}
croak("Invalid boolean value");
}
char * quote_int(pTHX_ const char *string, STRLEN len, STRLEN *retlen, int estring)
{
char * result;
New(0, result, len+1, char);
strcpy(result,string);
*retlen = len;
while (len > 0 && *string != '\0') {
len--;
if (isdigit(*string) || ' ' == *string || '+' == *string || '-' == *string) {
string++;
continue;
}
croak("Invalid integer");
}
return result;
}
char * quote_float(pTHX_ const char *string, STRLEN len, STRLEN *retlen, int estring)
{
char * result;
/* Empty string is always an error. Here for dumb compilers. */
if (len<1)
croak("Invalid float");
result = (char*)string;
*retlen = len;
/* Allow some standard strings in */
if (0 != strncasecmp(string, "NaN", 4)
&& 0 != strncasecmp(string, "Infinity", 9)
&& 0 != strncasecmp(string, "-Infinity", 10)) {
while (len > 0 && *string != '\0') {
len--;
if (isdigit(*string)
|| '.' == *string
|| ' ' == *string
|| '+' == *string
|| '-' == *string
|| 'e' == *string
|| 'E' == *string) {
string++;
continue;
}
croak("Invalid float");
}
}
string = result;
New(0, result, 1+(*retlen), char);
strcpy(result,string);
return result;
}
char * quote_name(pTHX_ const char *string, STRLEN len, STRLEN *retlen, int estring)
{
char * result;
const char *ptr;
int nquotes = 0;
int x;
bool safe;
/* We throw double quotes around the whole thing, if:
1. It starts with anything other than [a-z_]
OR
2. It has characters other than [a-z_0-9]
OR
3. It is a reserved word (e.g. `user`)
*/
/* 1. It starts with anything other than [a-z_] */
safe = ((string[0] >= 'a' && string[0] <= 'z') || '_' == string[0]);
/* 2. It has characters other than [a-z_0-9] (also count number of quotes) */
for (ptr = string; *ptr; ptr++) {
char ch = *ptr;
if (
(ch < 'a' || ch > 'z')
&&
(ch < '0' || ch > '9')
&&
ch != '_') {
safe = DBDPG_FALSE;
if (ch == '"')
nquotes++;
}
}
( run in 1.587 second using v1.01-cache-2.11-cpan-39bf76dae61 )