int main(int argc, char **argv) { sqlite3 *db; int res; int i; char *query; char *tmp; char *err = NULL; int maxretry = 10; int retry = 0; sqlite3_stmt *stmt; int ret; if (argc < 3) { usage(); return 0; } res = 0; for (i = 2; i < argc; i++) res += strlen(argv[i]) + 1; if (!res) return 1; if (SQLITE_OK != (res = sqlite3_open(argv[1], &db))) { printf("%s: Can't open database file: %s\n", nm(), argv[1]); return 1; } res = 0; for (i = 2; i < argc; i++) res += strlen(argv[i]) + 1; if (res) { query = (char *)sqlite3_malloc(res); tmp = query; for (i = 2; i < argc; i++) { strcpy(tmp, argv[i]); tmp += strlen(tmp); *tmp = ' '; tmp++; } tmp[-1] = 0; } ret = sqlite3_prepare_v2(db, query, strlen(query) + 1, &stmt, NULL); retry = 0; if (ret == SQLITE_OK) { while ((ret != SQLITE_DONE) && (retry < maxretry)) { ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { sqlCB(stmt); continue; } // else if (ret == SQLITE_BUSY) { sqlite3_sleep(5); retry++; // } } } sqlite3_finalize(stmt); sqlite3_free(query); sqlite3_close(db); //printf("ERR: %d(Q: %s)\n", ret, query); return 0; }
int sqlitecmd(int argc, char **argv) { sqlite3 *db; int res; int i; char *query; char *tmp; char *dbdir; char *dbfile; int ret = 0; sqlite3_stmt *stmt; char *cp; const char journal_mode_sql[] = "PRAGMA journal_mode = MEMORY;"; if ((cp = lookupvar("sqldelimer")) == NULL) delim = DEFSQLDELIMER; else delim = cp; if (argc < 3) { out1fmt("%s: format: %s <dbfile> <query>\n", nm(), nm()); return 0; } if ( argv[1][0]!='/' ) { //search file in dbdir dbdir = lookupvar("dbdir"); i = strlen(dbdir) + strlen(argv[1]); dbfile = calloc(strlen(dbdir) + strlen(argv[1]) + strlen(DBPOSTFIX) + 1, sizeof(char *)); if (dbfile == NULL) { error("Out of memory!\n"); return (1); } sprintf(dbfile, "%s/%s%s", dbdir, argv[1], DBPOSTFIX); } else { dbfile = calloc(strlen(argv[1]) + 1, sizeof(char *)); sprintf(dbfile,"%s",argv[1]); } if (SQLITE_OK != (res = sqlite3_open(dbfile, &db))) { out1fmt("%s: Can't open database file: %s\n", nm(), dbfile); free(dbfile); return 1; } free(dbfile); sqlite3_busy_timeout(db, SQLITE_BUSY_TIMEOUT); res = 0; for (i = 2; i < argc; i++) res += strlen(argv[i]) + 1; if (res) { query = (char *)sqlite3_malloc(res); tmp = query; for (i = 2; i < argc; i++) { strcpy(tmp, argv[i]); tmp += strlen(tmp); *tmp = ' '; tmp++; } tmp[-1] = 0; } sqlite3_prepare_v2(db, journal_mode_sql, -1, &stmt, NULL); ret = sqlite3_prepare_v2(db, query, -1, &stmt, NULL); if (ret == SQLITE_OK) { ret = sqlite3_step(stmt); while ( ret == SQLITE_ROW ) { sqlCB(stmt); ret = sqlite3_step(stmt); } } sqlite3_finalize(stmt); sqlite3_free(query); sqlite3_close(db); return 0; }