summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2005-05-27 15:44:04 +0000
committerTom Lane2005-05-27 15:44:04 +0000
commitb4176e9f4cee1032bc8eb6266c45a8f8009f4147 (patch)
tree1e7fc513d5be21d22dc7587dabdd82d6d350a423
parentfbdb203a390de462fbf2fd0306ae5809d116b8d2 (diff)
Clean up bogus checking of date and numeric fields in DBF files,
per report from Boris van Schooten.
-rw-r--r--contrib/dbase/dbf2pg.c53
1 files changed, 15 insertions, 38 deletions
diff --git a/contrib/dbase/dbf2pg.c b/contrib/dbase/dbf2pg.c
index 52561cf247f..ab0ae9a30ac 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
{