Greenbone Vulnerability Manager
22.4.0~dev1
|
Generic SQL interface. More...
#include "sql.h"
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
Macros | |
#define | G_LOG_DOMAIN "md manage" |
GLib log domain. | |
#define | DEADLOCK_SLEEP 1000 |
amount of ms sql should wait before retrying when a deadlock occurred | |
#define | DEADLOCK_THRESHOLD 25 |
defines the amount of retries after a deadlock is considered a warning | |
Functions | |
int | sql_prepare_internal (int, int, const char *, va_list, sql_stmt_t **) |
Prepare a statement. More... | |
int | sql_exec_internal (int, sql_stmt_t *) |
Execute a statement. More... | |
void | sql_finalize (sql_stmt_t *) |
Free a statement. More... | |
double | sql_column_double (sql_stmt_t *, int) |
Return a column as a double from a statement. More... | |
const char * | sql_column_text (sql_stmt_t *, int) |
Return a column as text from a statement. More... | |
int | sql_column_int (sql_stmt_t *, int) |
Return a column as an integer from a statement. More... | |
long long int | sql_column_int64 (sql_stmt_t *, int) |
Return a column as an int64 from a statement. More... | |
gchar ** | sql_column_array (sql_stmt_t *, int) |
Return a column as text from a statement. More... | |
gchar * | sql_nquote (const char *string, size_t length) |
Quotes a string of a known length to be passed to sql statements. More... | |
gchar * | sql_quote (const char *string) |
Quotes a string to be passed to sql statements. More... | |
gchar * | sql_ascii_escape_and_quote (const char *string) |
Quotes a string for use in SQL statements, also ASCII escaping it if it is not valid UTF-8. More... | |
gchar * | sql_insert (const char *string) |
Get the SQL insert expression for a string. More... | |
int | sqlv (int retry, char *sql, va_list args) |
Perform an SQL statement. More... | |
void | sql (char *sql,...) |
Perform an SQL statement, retrying if database is busy or locked. More... | |
int | sql_error (char *sql,...) |
Perform an SQL statement, retrying if database is busy or locked. More... | |
int | sql_giveup (char *sql,...) |
Perform an SQL statement, giving up if database is busy or locked. More... | |
int | sql_x (char *sql, va_list args, sql_stmt_t **stmt_return) |
Get a particular cell from a SQL query. More... | |
double | sql_double (char *sql,...) |
Get the first value from a SQL query, as a double. More... | |
int | sql_int (char *sql,...) |
Get a particular cell from a SQL query, as an int. More... | |
char * | sql_string (char *sql,...) |
Get a particular cell from a SQL query, as an string. More... | |
int | sql_int64 (long long int *ret, char *sql,...) |
Get a particular cell from a SQL query, as an int64. More... | |
long long int | sql_int64_0 (char *sql,...) |
Get a first column of first row from a SQL query, as an int64. More... | |
void | init_iterator (iterator_t *iterator, const char *sql,...) |
Initialise an iterator. More... | |
double | iterator_double (iterator_t *iterator, int col) |
Get a double column from an iterator. More... | |
int | iterator_int (iterator_t *iterator, int col) |
Get a int column from an iterator. More... | |
long long int | iterator_int64 (iterator_t *iterator, int col) |
Get an integer column from an iterator. More... | |
const char * | iterator_string (iterator_t *iterator, int col) |
Get a string column from an iterator. More... | |
gchar ** | iterator_array (iterator_t *iterator, int col) |
Get a string column from an iterator. More... | |
void | cleanup_iterator (iterator_t *iterator) |
Cleanup an iterator. More... | |
gboolean | next (iterator_t *iterator) |
Increment an iterator. More... | |
Variables | |
int | log_errors = 1 |
Whether to log errors. More... | |
Generic SQL interface.
This is a small generic interface for SQL database access.
To add support for a specific database, like Postgres, a few functions (for example, sql_prepare_internal and sql_exec_internal) need to be implemented for that database.
void cleanup_iterator | ( | iterator_t * | iterator | ) |
Cleanup an iterator.
[in] | iterator | Iterator. |
void init_iterator | ( | iterator_t * | iterator, |
const char * | sql, | ||
... | |||
) |
Initialise an iterator.
[in] | iterator | Iterator. |
[in] | sql | Format string for SQL. |
gchar** iterator_array | ( | iterator_t * | iterator, |
int | col | ||
) |
Get a string column from an iterator.
Note that sql_column_array gets the array as text and parses that text into an array, but it does not consider escaping so it probably will not work with strings that can contain commas, '{'s or '}'s.
[in] | iterator | Iterator. |
[in] | col | Column offset. |
double iterator_double | ( | iterator_t * | iterator, |
int | col | ||
) |
Get a double column from an iterator.
[in] | iterator | Iterator. |
[in] | col | Column offset. |
int iterator_int | ( | iterator_t * | iterator, |
int | col | ||
) |
Get a int column from an iterator.
[in] | iterator | Iterator. |
[in] | col | Column offset. |
long long int iterator_int64 | ( | iterator_t * | iterator, |
int | col | ||
) |
Get an integer column from an iterator.
[in] | iterator | Iterator. |
[in] | col | Column offset. |
const char* iterator_string | ( | iterator_t * | iterator, |
int | col | ||
) |
Get a string column from an iterator.
[in] | iterator | Iterator. |
[in] | col | Column offset. |
gboolean next | ( | iterator_t * | iterator | ) |
Increment an iterator.
[in] | iterator | Iterator. |
void sql | ( | char * | sql, |
... | |||
) |
Perform an SQL statement, retrying if database is busy or locked.
[in] | sql | Format string for SQL statement. |
[in] | ... | Arguments for format string. |
gchar* sql_ascii_escape_and_quote | ( | const char * | string | ) |
Quotes a string for use in SQL statements, also ASCII escaping it if it is not valid UTF-8.
[in] | string | String to quote, has to be \0 terminated. |
gchar** sql_column_array | ( | sql_stmt_t * | stmt, |
int | position | ||
) |
Return a column as text from a statement.
It's up to the caller to ensure that there is a row available.
[in] | stmt | Statement. |
[in] | position | Column position. |
double sql_column_double | ( | sql_stmt_t * | stmt, |
int | position | ||
) |
Return a column as a double from a statement.
It's up to the caller to ensure that there is a row available.
[in] | stmt | Statement. |
[in] | position | Column position. |
int sql_column_int | ( | sql_stmt_t * | stmt, |
int | position | ||
) |
Return a column as an integer from a statement.
It's up to the caller to ensure that there is a row available.
[in] | stmt | Statement. |
[in] | position | Column position. |
long long int sql_column_int64 | ( | sql_stmt_t * | stmt, |
int | position | ||
) |
Return a column as an int64 from a statement.
It's up to the caller to ensure that there is a row available.
[in] | stmt | Statement. |
[in] | position | Column position. |
const char* sql_column_text | ( | sql_stmt_t * | stmt, |
int | position | ||
) |
Return a column as text from a statement.
It's up to the caller to ensure that there is a row available.
[in] | stmt | Statement. |
[in] | position | Column position. |
double sql_double | ( | char * | sql, |
... | |||
) |
Get the first value from a SQL query, as a double.
row
. The caller must ensure that the query will return sufficient rows.[in] | sql | Format string for SQL query. |
[in] | ... | Arguments for format string. |
int sql_error | ( | char * | sql, |
... | |||
) |
Perform an SQL statement, retrying if database is busy or locked.
Return on error, instead of aborting.
[in] | sql | Format string for SQL statement. |
[in] | ... | Arguments for format string. |
int sql_exec_internal | ( | int | retry, |
sql_stmt_t * | stmt | ||
) |
Execute a statement.
[in] | retry | Whether to keep retrying while database is busy or locked. |
[in] | stmt | Statement. |
void sql_finalize | ( | sql_stmt_t * | stmt | ) |
Free a statement.
[in] | stmt | Statement. |
int sql_giveup | ( | char * | sql, |
... | |||
) |
Perform an SQL statement, giving up if database is busy or locked.
[in] | sql | Format string for SQL statement. |
[in] | ... | Arguments for format string. |
gchar* sql_insert | ( | const char * | string | ) |
Get the SQL insert expression for a string.
[in] | string | The string, which may be NULL. |
int sql_int | ( | char * | sql, |
... | |||
) |
Get a particular cell from a SQL query, as an int.
row
. The caller must ensure that the query will return sufficient rows.[in] | sql | Format string for SQL query. |
[in] | ... | Arguments for format string. |
int sql_int64 | ( | long long int * | ret, |
char * | sql, | ||
... | |||
) |
Get a particular cell from a SQL query, as an int64.
[in] | ret | Return value. |
[in] | sql | Format string for SQL query. |
[in] | ... | Arguments for format string. |
long long int sql_int64_0 | ( | char * | sql, |
... | |||
) |
Get a first column of first row from a SQL query, as an int64.
Return 0 on error.
[in] | sql | Format string for SQL query. |
[in] | ... | Arguments for format string. |
gchar* sql_nquote | ( | const char * | string, |
size_t | length | ||
) |
Quotes a string of a known length to be passed to sql statements.
[in] | string | String to quote. |
[in] | length | Size of string . |
int sql_prepare_internal | ( | int | retry, |
int | log, | ||
const char * | sql, | ||
va_list | args, | ||
sql_stmt_t ** | stmt | ||
) |
Prepare a statement.
[in] | retry | Whether to keep retrying while database is busy or locked. |
[in] | log | Whether to keep retrying while database is busy or locked. |
[in] | sql | Format string for SQL statement. |
[in] | args | Arguments for format string. |
[out] | stmt | Statement return. |
gchar* sql_quote | ( | const char * | string | ) |
Quotes a string to be passed to sql statements.
[in] | string | String to quote, has to be \0 terminated. |
char* sql_string | ( | char * | sql, |
... | |||
) |
Get a particular cell from a SQL query, as an string.
[in] | sql | Format string for SQL query. |
[in] | ... | Arguments for format string. |
int sql_x | ( | char * | sql, |
va_list | args, | ||
sql_stmt_t ** | stmt_return | ||
) |
Get a particular cell from a SQL query.
[in] | sql | Format string for SQL query. |
[in] | args | Arguments for format string. |
[out] | stmt_return | Return from statement. |
int sqlv | ( | int | retry, |
char * | sql, | ||
va_list | args | ||
) |
Perform an SQL statement.
[in] | retry | Whether to keep retrying while database is busy or locked. |
[in] | sql | Format string for SQL statement. |
[in] | args | Arguments for format string. |
int log_errors = 1 |
Whether to log errors.
Used to turn off logging when cancelling statements on exit.