#include #include #include #include #include #include #include #define _BSD_SOURCE #include static unsigned long line; static void parseerror(char* message) { char buf[FMT_ULONG]; buf[fmt_ulong(buf,line)]=0; die(1,"parse error in line ",buf,": ",message,"!\n"); } static void nomem() { die(1,"out of memory"); } int main() { static stralloc sa; static array fn; /* field names */ static char* table; int mode=0; int pkey=-1; while (buffer_getnewline_sa(buffer_0,&sa)==1) { ++line; if (!stralloc_0(&sa)) nomem(); if (stralloc_starts(&sa,"CREATE TABLE ")) { char* tmp=sa.s+14; unsigned int i; mode=1; for (i=0; isa.s+sa.len) parseerror("expected ' ' after table name"); tmp[i]=0; free(table); table=strdup(tmp); if (!table) nomem(); array_trunc(&fn); continue; } else if (mode==1 && stralloc_starts(&sa,") TYPE=")) { mode=2; continue; } if (mode==1) { /* parsing CREATE TABLE */ if (!stralloc_starts(&sa," ")) parseerror("expected two leading spaces"); if (stralloc_starts(&sa," PRIMARY KEY ")) { char* tmp=sa.s+14; int i; while (*tmp && *tmp!='(') ++tmp; if (*tmp != '(') parseerror("expected '('"); ++tmp; for (i=0; tmp[i] && tmp[i]!=')'; ++i) ; if (tmp[i]!=')') parseerror("expected ')'"); tmp[i]=0; pkey=-1; for (i=0; i