Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}