static void process_input(sqlite3 * db, FILE *in, int * lineErr){ char *zLine; char *zSql = 0; char * zErrMsg = 0; int nSql = 0; int rc; while((zLine = sqlbrowser_getline(in))!=0 ){ if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue; (*lineErr)++; if( zSql==0 ){ int i; for(i=0; zLine[i] && isspace(zLine[i]); i++){} if( zLine[i]!=0 ){ nSql = strlen(zLine); zSql = malloc( nSql+1 ); strcpy(zSql, zLine); } }else{ int len = strlen(zLine); zSql = realloc( zSql, nSql + len + 2 ); /*if( zSql==0 ){ fprintf(stderr,"%s: out of memory!\n", Argv0); exit(1); }*/ strcpy(&zSql[nSql++], "\n"); strcpy(&zSql[nSql], zLine); nSql += len; } free(zLine); if( zSql && _ends_with_semicolon(zSql, nSql) && sqlite3_complete(zSql) ){ rc = sqlite3_exec(db, zSql, NULL, NULL, &zErrMsg);//&zErrMsg if( rc || zErrMsg ){ //if( in!=0 && !p->echoOn ) printf("%s\n",zSql); if( zErrMsg!=0 ){ /*printf("SQL error: %s\n", zErrMsg);*/ free(zErrMsg); zErrMsg = 0; if( zSql ){ free(zSql); } return; }/*else{ printf("SQL error: %s\n", sqlite3_error_string(rc)); }*/ } free(zSql); zSql = 0; nSql = 0; } } if( zSql ){ /*if( !_all_whitespace(zSql) ) printf("Incomplete SQL: %s\n", zSql);*/ free(zSql); } /*normal exit, clear err*/ *lineErr = 0; }
/* ** Read input from *in and process it. If *in==0 then input ** is interactive - the user is typing it it. Otherwise, input ** is coming from a file or device. A prompt is issued and history ** is saved only if input is interactive. An interrupt signal will ** cause this routine to exit immediately, unless input is interactive. */ static void process_input(struct callback_data *p, FILE *in){ char *zLine; char *zSql = 0; int nSql = 0; char *zErrMsg; int rc; while( fflush(p->out), (zLine = one_input_line(zSql, in))!=0 ){ if( seenInterrupt ){ if( in!=0 ) break; seenInterrupt = 0; } if( p->echoOn ) printf("%s\n", zLine); if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue; if( zLine && zLine[0]=='.' && nSql==0 ){ int rc = do_meta_command(zLine, p); free(zLine); if( rc ) break; continue; } if( _is_command_terminator(zLine) ){ strcpy(zLine,";"); } if( zSql==0 ){ int i; for(i=0; zLine[i] && isspace(zLine[i]); i++){} if( zLine[i]!=0 ){ nSql = strlen(zLine); zSql = malloc( nSql+1 ); strcpy(zSql, zLine); } }else{ int len = strlen(zLine); zSql = realloc( zSql, nSql + len + 2 ); if( zSql==0 ){ fprintf(stderr,"%s: out of memory!\n", Argv0); exit(1); } strcpy(&zSql[nSql++], "\n"); strcpy(&zSql[nSql], zLine); nSql += len; } free(zLine); if( zSql && _ends_with_semicolon(zSql, nSql) && sqlite_complete(zSql) ){ p->cnt = 0; open_db(p); rc = sqlite_exec(p->db, zSql, callback, p, &zErrMsg); if( rc || zErrMsg ){ if( in!=0 && !p->echoOn ) printf("%s\n",zSql); if( zErrMsg!=0 ){ printf("SQL error: %s\n", zErrMsg); sqlite_freemem(zErrMsg); zErrMsg = 0; }else{ printf("SQL error: %s\n", sqlite_error_string(rc)); } } free(zSql); zSql = 0; nSql = 0; } } if( zSql ){ if( !_all_whitespace(zSql) ) printf("Incomplete SQL: %s\n", zSql); free(zSql); } }