diff --git a/contrib/dbase/dbf2pg.c b/contrib/dbase/dbf2pg.c index 52561cf247..ab0ae9a30a 100644 --- a/contrib/dbase/dbf2pg.c +++ b/contrib/dbase/dbf2pg.c @@ -63,31 +63,8 @@ char *Escape_db(char *); char *convert_charset(char *string); #endif 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 strtoupper(char *string) { @@ -471,8 +448,15 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh) /* handle the date first - liuk */ 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", foo[0], foo[1], foo[2], foo[3], foo[4], foo[5], foo[6], foo[7]); @@ -480,26 +464,19 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh) } else { - /* - * empty field must be inserted as NULL value in - * this way - */ - strcat(query, "\\N"); + /* try to insert it as-is */ + strcat(query, foo); } } - else if ((fields[h].db_type == 'N') && - (fields[h].db_dec == 0)) + else if (fields[h].db_type == 'N') { - if (isinteger(foo)) - strcat(query, foo); - else + if (strlen(foo) == 0) { + /* assume empty string means a NULL */ 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 {