37 #define G_LOG_DOMAIN "md manage" 78 gchar *
new, *new_start;
79 const gchar *start, *end;
87 while ((start = strchr (start,
'\''))) start++, count++;
91 new = new_start = g_malloc0 (length + count + 1);
96 end =
string + length;
97 for (; start < end; start++,
new++)
140 gchar *quoted_value =
sql_quote (
string);
141 gchar *insert = g_strdup_printf (
"'%s'", quoted_value);
142 g_free (quoted_value);
145 return g_strdup (
"NULL");
169 va_copy (args_copy, args);
173 g_warning (
"%s: sql_prepare_internal failed\n", __FUNCTION__);
181 g_warning (
"%s: sql_exec_internal failed\n", __FUNCTION__);
187 assert (ret == -1 || ret == 0);
206 va_start (args, sql);
207 ret =
sqlv (1, sql, args);
236 va_start (args, sql);
237 ret =
sqlv (1, sql, args);
262 va_start (args, sql);
263 ret =
sqlv (0, sql, args);
285 va_start (args, sql);
290 g_warning (
"%s: sql_prepare failed\n", __FUNCTION__);
300 g_warning (
"%s: sql_exec_internal failed\n", __FUNCTION__);
303 if (ret == -2 || ret == 2)
325 sql_x_internal (
int log,
char*
sql, va_list args,
sql_stmt_t** stmt_return)
329 assert (stmt_return);
337 va_copy (args_copy, args);
343 g_warning (
"%s: sql_prepare failed\n", __FUNCTION__);
353 g_warning (
"%s: sql_exec_internal failed\n", __FUNCTION__);
359 if (ret == -2 || ret == 2)
369 g_debug (
" sql_x end (%s)\n",
sql);
387 return sql_x_internal (1, sql, args, stmt_return);
411 va_start (args, sql);
412 sql_x_ret =
sql_x (sql, args, &stmt);
445 va_start (args, sql);
446 sql_x_ret =
sql_x (sql, args, &stmt);
477 va_start (args, sql);
478 sql_x_ret =
sql_x (sql, args, &stmt);
486 ret = g_strdup (ret2);
507 va_start (args, sql);
508 sql_x_ret =
sql_x (sql, args, &stmt);
544 va_start (args, sql);
563 iterator->
done = FALSE;
564 iterator->
stmt = stmt;
567 g_debug (
" sql: init prepared %p\n", stmt);
583 iterator->
done = FALSE;
587 va_start (args, sql);
592 g_warning (
"%s: sql_prepare failed\n", __FUNCTION__);
595 iterator->
stmt = stmt;
609 if (iterator->
done) abort ();
624 if (iterator->
done) abort ();
639 if (iterator->
done) abort ();
654 if (iterator->
done) abort ();
666 if (iterator == NULL)
668 g_warning (
"%s: null iterator pointer.\n", __FUNCTION__);
693 if (iterator->
done)
return FALSE;
701 iterator->
done = TRUE;
707 g_warning (
"%s: sql_exec_internal failed\n", __FUNCTION__);
716 g_warning (
"%s: stepping after reset\n", __FUNCTION__);
728 g_warning (
"%s: schema error.\n" 729 " This is possibly due to running VACUUM while Manager\n" 730 " is running. Restart Manager. In future use\n" 731 " --optimize=vacuum instead of running VACUUM" 759 va_start (args, sql);
double iterator_double(iterator_t *iterator, int col)
Get a double column from an iterator.
int sql_prepare_internal(int, int, const char *, va_list, sql_stmt_t **)
Prepare a statement.
int sql_int(char *sql,...)
Get a particular cell from a SQL query, as an int.
double sql_column_double(sql_stmt_t *, int)
Return a column as a double from a prepared statement.
int iterator_int(iterator_t *iterator, int col)
Get a int column from an iterator.
int sql_explain_internal(const char *, va_list)
Write debug messages with the query plan for an SQL query to the log.
int sql_giveup(char *sql,...)
Perform an SQL statement, giving up if database is busy or locked.
void sql_quiet(char *sql,...)
Perform an SQL statement, without logging.
int log_errors
Whether to log errors.
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
lsc_crypt_ctx_t crypt_ctx
Encryption context.
int sql_int64(long long int *ret, char *sql,...)
Get a particular cell from a SQL query, as an int64.
int sql_exec(sql_stmt_t *stmt)
Execute a prepared statement.
long long int sql_column_int64(sql_stmt_t *, int)
Return a column as an int64 from a prepared statement.
int sql_column_int(sql_stmt_t *, int)
Return a column as an integer from a prepared statement.
gchar * sql_quote(const char *string)
Quotes a string to be passed to sql statements.
int sql_exec_internal(int, sql_stmt_t *)
Execute a prepared statement.
double sql_double(char *sql,...)
Get the first value from a SQL query, as a double.
int sqlv(int retry, char *sql, va_list args)
Perform an SQL statement.
void lsc_crypt_flush(lsc_crypt_ctx_t ctx)
Flush an LSC encryption context.
const char * sql_column_text(sql_stmt_t *, int)
Return a column as text from a prepared statement.
sql_stmt_t * stmt
SQL statement.
void init_prepared_iterator(iterator_t *iterator, sql_stmt_t *stmt)
Initialise an iterator.
int prepared
Prepared flag.
int sql_error(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
const char * iterator_string(iterator_t *iterator, int col)
Get a string column from an iterator.
sql_stmt_t * sql_prepare(const char *sql,...)
Prepare a statement.
void cleanup_iterator(iterator_t *iterator)
Cleanup an iterator.
char * sql_string(char *sql,...)
Get a particular cell from a SQL query, as an string.
gboolean next(iterator_t *iterator)
Increment an iterator.
gchar * sql_insert(const char *string)
Get the SQL insert expression for a string.
int sql_explain(const char *,...)
Write debug messages with the query plan for an SQL query to the log.
void lsc_crypt_release(lsc_crypt_ctx_t ctx)
Release an LSC encryption context.
void init_iterator(iterator_t *iterator, const char *sql,...)
Initialise an iterator.
int sql_x(char *sql, va_list args, sql_stmt_t **stmt_return)
Get a particular cell from a SQL query.
gchar * sql_nquote(const char *string, size_t length)
Quotes a string of a known length to be passed to sql statements.
long long int iterator_int64(iterator_t *iterator, int col)
Get an integer column from an iterator.
void sql_finalize(sql_stmt_t *)
Free a prepared statement.