]> granicus.if.org Git - postgresql/commitdiff
Clean up bogus checking of date and numeric fields in DBF files,
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 May 2005 15:44:04 +0000 (15:44 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 May 2005 15:44:04 +0000 (15:44 +0000)
per report from Boris van Schooten.

contrib/dbase/dbf2pg.c

index 52561cf247f3464c6c4414614f1e1e0f8703c66e..ab0ae9a30ac2bcb9e6befae9e42237dcb346c188 100644 (file)
@@ -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
                                {