diff --git a/sqlite3-dbf.c b/sqlite3-dbf.c index 448bf02..0bfe9b9 100644 --- a/sqlite3-dbf.c +++ b/sqlite3-dbf.c @@ -325,10 +325,7 @@ int main(int argc, char **argv) } break; case 'N': - /* Was a numeric at one point, but for our purposes a text field - * is better because there isn't a perfect overlap between - * FoxPro and PostgreSQL numeric types */ - printf("TEXT"); + printf("NUMERIC(%d, %d)", fields[fieldnum].length, fields[fieldnum].decimals); break; case 'T': printf("TIMESTAMP"); @@ -395,7 +392,7 @@ int main(int argc, char **argv) case 'D': /* Datestamps */ if(bufoffset[0] == ' ' || bufoffset[0] == '\0') { - printf("'\\N'"); + printf("NULL"); } else { s = outputbuffer; *s++ = bufoffset[0]; @@ -472,9 +469,9 @@ int main(int argc, char **argv) s++; } if(*s == '\0') { - printf("'\\N'"); + printf("NULL"); } else { - printf("'%s'", s); + printf("%s", s); } break; case 'T': @@ -482,7 +479,7 @@ int main(int argc, char **argv) juliandays = slittleint32_t(bufoffset); seconds = (slittleint32_t(bufoffset + 4) + 1) / 1000; if(!(juliandays || seconds)) { - printf("'\\N'"); + printf("NULL"); } else { hours = seconds / 3600; seconds -= hours * 3600; diff --git a/sqlite3-dbf.h b/sqlite3-dbf.h index 47fbe58..8057211 100644 --- a/sqlite3-dbf.h +++ b/sqlite3-dbf.h @@ -144,6 +144,10 @@ static void safeprintbuf(const char *buf, const size_t inputsize) t = targetbuf; for(s = buf; s <= lastchar; s++) { switch(*s) { + case '\'': + *t++ = '\''; + *t++ = '\''; + break; case '\\': *t++ = '\\'; *t++ = '\\';