Commit b4176e9f authored by Tom Lane's avatar Tom Lane

Clean up bogus checking of date and numeric fields in DBF files,

per report from Boris van Schooten.
parent fbdb203a
...@@ -63,31 +63,8 @@ char *Escape_db(char *); ...@@ -63,31 +63,8 @@ char *Escape_db(char *);
char *convert_charset(char *string); char *convert_charset(char *string);
#endif #endif
void usage(void); void usage(void);
unsigned int isinteger(char *);
unsigned int
isinteger(char *buff)
{
char *i = buff;
while (*i != '\0')
{
if (i == buff)
if ((*i == '-') ||
(*i == '+'))
{
i++;
continue;
}
if (!isdigit((unsigned char) *i))
return 0;
i++;
}
return 1;
}
static inline void static inline void
strtoupper(char *string) strtoupper(char *string)
{ {
...@@ -471,8 +448,15 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh) ...@@ -471,8 +448,15 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh)
/* handle the date first - liuk */ /* handle the date first - liuk */
if (fields[h].db_type == 'D') if (fields[h].db_type == 'D')
{ {
if ((strlen(foo) == 8) && isinteger(foo)) if (strlen(foo) == 0)
{ {
/* assume empty string means a NULL */
strcat(query, "\\N");
}
else if (strlen(foo) == 8 &&
strspn(foo, "0123456789") == 8)
{
/* transform YYYYMMDD to Postgres style */
snprintf(pgdate, 11, "%c%c%c%c-%c%c-%c%c", snprintf(pgdate, 11, "%c%c%c%c-%c%c-%c%c",
foo[0], foo[1], foo[2], foo[3], foo[0], foo[1], foo[2], foo[3],
foo[4], foo[5], foo[6], foo[7]); foo[4], foo[5], foo[6], foo[7]);
...@@ -480,26 +464,19 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh) ...@@ -480,26 +464,19 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh)
} }
else else
{ {
/* /* try to insert it as-is */
* empty field must be inserted as NULL value in strcat(query, foo);
* this way
*/
strcat(query, "\\N");
} }
} }
else if ((fields[h].db_type == 'N') && else if (fields[h].db_type == 'N')
(fields[h].db_dec == 0))
{ {
if (isinteger(foo)) if (strlen(foo) == 0)
strcat(query, foo);
else
{ {
/* assume empty string means a NULL */
strcat(query, "\\N"); strcat(query, "\\N");
if (verbose)
fprintf(stderr, "Illegal numeric value found "
"in record %d, field \"%s\"\n",
i, fields[h].db_name);
} }
else
strcat(query, foo);
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment