OpenVAS Manager  7.0.3~git
sql_sqlite3.c File Reference
#include "sql.h"
#include "utils.h"
#include <assert.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>
Include dependency graph for sql_sqlite3.c:

Go to the source code of this file.

Data Structures

struct  sql_stmt
 

Macros

#define DB_CHUNK_SIZE   1 * 1024 * 1024
 Chunk size for SQLite memory allocation. More...
 
#define G_LOG_DOMAIN   "md manage"
 GLib log domain. More...
 
#define BUSY_TIMEOUT   1000
 Busy timeout, in milliseconds. More...
 

Functions

int sqlv (int, char *, va_list)
 Perform an SQL statement. More...
 
int sql_is_sqlite3 ()
 Get whether backend is SQLite3. More...
 
const char * sql_schema ()
 Get main schema name. More...
 
const char * sql_greatest ()
 Get keyword for "greatest" SQL function. More...
 
const char * sql_select_limit (int max)
 Setup a LIMIT argument. More...
 
const char * sql_ilike_op ()
 Get case insensitive LIKE operator. More...
 
const char * sql_regexp_op ()
 Get regular expression operator. More...
 
int sql_is_open ()
 Check whether the database is open. More...
 
const char * sql_database ()
 Return file name of current database. More...
 
const char * sql_default_database ()
 Return name of default database file. More...
 
int sql_open (const char *database)
 Open the database. More...
 
void sql_close ()
 Close the database. More...
 
void sql_close_fork ()
 Close the database in a forked process. More...
 
int sql_changes ()
 Get the number of rows changed or inserted in last statement. More...
 
resource_t sql_last_insert_id ()
 Get the ID of the last inserted row. More...
 
void sqli (resource_t *resource, char *sql,...)
 Perform an SQL statement, retrying if database is busy or locked. More...
 
int sql_prepare_internal (int retry, int log, const char *sql, va_list args, sql_stmt_t **stmt)
 Prepare a statement. More...
 
int sql_exec_internal (int retry, sql_stmt_t *stmt)
 Execute a prepared statement. More...
 
int sql_explain_internal (const char *sql, va_list args)
 Write debug messages with the query plan for an SQL query to the log. More...
 
void sql_begin_exclusive ()
 Begin an exclusive transaction. More...
 
int sql_begin_exclusive_giveup ()
 Begin an exclusive transaction, giving up on failure. More...
 
void sql_begin_immediate ()
 Begin an exclusive transaction. More...
 
int sql_begin_immediate_giveup ()
 Begin an exclusive transaction. More...
 
void sql_commit ()
 Commit a transaction. More...
 
void sql_rollback ()
 Roll a transaction back. More...
 
int iterator_null (iterator_t *iterator, int col)
 Get whether a column is NULL. More...
 
const char * iterator_column_name (iterator_t *iterator, int col)
 Get a column name from an iterator. More...
 
int iterator_column_count (iterator_t *iterator)
 Get number of columns from an iterator. More...
 
int sql_bind_blob (sql_stmt_t *stmt, int position, const void *value, int value_size)
 Bind a blob to a statement. More...
 
int sql_bind_int64 (sql_stmt_t *stmt, int position, long long int *value)
 Bind an int64 value to a statement. More...
 
int sql_bind_double (sql_stmt_t *stmt, int position, double *value)
 Bind a double value to a statement. More...
 
int sql_bind_text (sql_stmt_t *stmt, int position, const gchar *value, gsize value_size)
 Bind a text value to a statement. More...
 
void sql_finalize (sql_stmt_t *stmt)
 Free a prepared statement. More...
 
int sql_reset (sql_stmt_t *stmt)
 Reset a prepared statement. More...
 
double sql_column_double (sql_stmt_t *stmt, int position)
 Return a column as a double from a prepared statement. More...
 
const char * sql_column_text (sql_stmt_t *stmt, int position)
 Return a column as text from a prepared statement. More...
 
int sql_column_int (sql_stmt_t *stmt, int position)
 Return a column as an integer from a prepared statement. More...
 
long long int sql_column_int64 (sql_stmt_t *stmt, int position)
 Return a column as an int64 from a prepared statement. More...
 
int sql_cancel_internal ()
 Cancels the current SQL statement. More...
 

Variables

sqlite3 * task_db = NULL
 Handle on the database. More...
 

Macro Definition Documentation

◆ BUSY_TIMEOUT

#define BUSY_TIMEOUT   1000

Busy timeout, in milliseconds.

Definition at line 51 of file sql_sqlite3.c.

Referenced by sql_exec_internal(), and sql_prepare_internal().

◆ DB_CHUNK_SIZE

#define DB_CHUNK_SIZE   1 * 1024 * 1024

Chunk size for SQLite memory allocation.

Definition at line 40 of file sql_sqlite3.c.

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "md manage"

GLib log domain.

Definition at line 46 of file sql_sqlite3.c.

Function Documentation

◆ iterator_column_count()

int iterator_column_count ( iterator_t iterator)

Get number of columns from an iterator.

Parameters
[in]iteratorIterator.
Returns
Number of columns.

Definition at line 623 of file sql_sqlite3.c.

References iterator::done, iterator::stmt, and sql_stmt::stmt.

Referenced by sql_rename_column().

624 {
625  if (iterator->done) abort ();
626  return sqlite3_column_count (iterator->stmt->stmt);
627 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
A generic SQL iterator.
Definition: iterator.h:52
gboolean done
End flag.
Definition: iterator.h:55
sql_stmt_t * stmt
SQL statement.
Definition: iterator.h:54
Here is the caller graph for this function:

◆ iterator_column_name()

const char* iterator_column_name ( iterator_t iterator,
int  col 
)

Get a column name from an iterator.

Parameters
[in]iteratorIterator.
[in]colColumn offset.
Returns
Name of given column.

Definition at line 609 of file sql_sqlite3.c.

References iterator::done, iterator::stmt, and sql_stmt::stmt.

Referenced by sql_rename_column().

610 {
611  if (iterator->done) abort ();
612  return (const char*) sqlite3_column_name (iterator->stmt->stmt, col);
613 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
A generic SQL iterator.
Definition: iterator.h:52
gboolean done
End flag.
Definition: iterator.h:55
sql_stmt_t * stmt
SQL statement.
Definition: iterator.h:54
Here is the caller graph for this function:

◆ iterator_null()

int iterator_null ( iterator_t iterator,
int  col 
)

Get whether a column is NULL.

Parameters
[in]iteratorIterator.
[in]colColumn offset.
Returns
1 if NULL, else 0.

Definition at line 594 of file sql_sqlite3.c.

References iterator::done, iterator::stmt, and sql_stmt::stmt.

595 {
596  if (iterator->done) abort ();
597  return sqlite3_column_type (iterator->stmt->stmt, col) == SQLITE_NULL;
598 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
A generic SQL iterator.
Definition: iterator.h:52
gboolean done
End flag.
Definition: iterator.h:55
sql_stmt_t * stmt
SQL statement.
Definition: iterator.h:54

◆ sql_begin_exclusive()

void sql_begin_exclusive ( )

Begin an exclusive transaction.

Definition at line 528 of file sql_sqlite3.c.

References sql().

Referenced by migrate_0_to_1(), migrate_100_to_101(), migrate_101_to_102(), migrate_102_to_103(), migrate_103_to_104(), migrate_104_to_105(), migrate_105_to_106(), migrate_106_to_107(), migrate_107_to_108(), migrate_108_to_109(), migrate_109_to_110(), migrate_10_to_11(), migrate_110_to_111(), migrate_111_to_112(), migrate_112_to_113(), migrate_113_to_114(), migrate_114_to_115(), migrate_115_to_116(), migrate_116_to_117(), migrate_117_to_118(), migrate_118_to_119(), migrate_119_to_120(), migrate_11_to_12(), migrate_120_to_121(), migrate_121_to_122(), migrate_122_to_123(), migrate_123_to_124(), migrate_124_to_125(), migrate_125_to_126(), migrate_126_to_127(), migrate_127_to_128(), migrate_128_to_129(), migrate_129_to_130(), migrate_12_to_13(), migrate_130_to_131(), migrate_131_to_132(), migrate_132_to_133(), migrate_133_to_134(), migrate_134_to_135(), migrate_135_to_136(), migrate_136_to_137(), migrate_137_to_138(), migrate_138_to_139(), migrate_139_to_140(), migrate_13_to_14(), migrate_140_to_141(), migrate_141_to_142(), migrate_142_to_143(), migrate_143_to_144(), migrate_144_to_145(), migrate_145_to_146(), migrate_146_to_147(), migrate_147_to_148(), migrate_148_to_149(), migrate_149_to_150(), migrate_14_to_15(), migrate_150_to_151(), migrate_151_to_152(), migrate_152_to_153(), migrate_153_to_154(), migrate_154_to_155(), migrate_155_to_156(), migrate_156_to_157(), migrate_157_to_158(), migrate_158_to_159(), migrate_159_to_160(), migrate_15_to_16(), migrate_160_to_161(), migrate_161_to_162(), migrate_162_to_163(), migrate_163_to_164(), migrate_164_to_165(), migrate_165_to_166(), migrate_166_to_167(), migrate_167_to_168(), migrate_168_to_169(), migrate_169_to_170(), migrate_16_to_17(), migrate_170_to_171(), migrate_171_to_172(), migrate_172_to_173(), migrate_173_to_174(), migrate_174_to_175(), migrate_175_to_176(), migrate_176_to_177(), migrate_177_to_178(), migrate_178_to_179(), migrate_179_to_180(), migrate_17_to_18(), migrate_180_to_181(), migrate_181_to_182(), migrate_182_to_183(), migrate_183_to_184(), migrate_18_to_19(), migrate_19_to_20(), migrate_1_to_2(), migrate_20_to_21(), migrate_21_to_22(), migrate_22_to_23(), migrate_23_to_24(), migrate_24_to_25(), migrate_25_to_26(), migrate_26_to_27(), migrate_27_to_28(), migrate_28_to_29(), migrate_29_to_30(), migrate_2_to_3(), migrate_30_to_31(), migrate_31_to_32(), migrate_32_to_33(), migrate_33_to_34(), migrate_34_to_35(), migrate_35_to_36(), migrate_36_to_37(), migrate_37_to_38(), migrate_38_to_39(), migrate_39_to_40(), migrate_3_to_4(), migrate_40_to_41(), migrate_41_to_42(), migrate_42_to_43(), migrate_43_to_44(), migrate_44_to_45(), migrate_45_to_46(), migrate_46_to_47(), migrate_47_to_48(), migrate_48_to_49(), migrate_49_to_50(), migrate_4_to_5(), migrate_50_to_51(), migrate_51_to_52(), migrate_52_to_53(), migrate_53_to_54(), migrate_54_to_55(), migrate_55_to_56(), migrate_56_to_57(), migrate_57_to_58(), migrate_58_to_59(), migrate_59_to_60(), migrate_5_to_6(), migrate_60_to_61(), migrate_61_to_62(), migrate_62_to_63(), migrate_63_to_64(), migrate_64_to_65(), migrate_65_to_66(), migrate_66_to_67(), migrate_67_to_68(), migrate_68_to_69(), migrate_69_to_70(), migrate_6_to_7(), migrate_70_to_71(), migrate_71_to_72(), migrate_72_to_73(), migrate_73_to_74(), migrate_74_to_75(), migrate_75_to_76(), migrate_76_to_77(), migrate_77_to_78(), migrate_78_to_79(), migrate_7_to_8(), migrate_80_to_81(), migrate_81_to_82(), migrate_82_to_83(), migrate_83_to_84(), migrate_84_to_85(), migrate_85_to_86(), migrate_86_to_87(), migrate_87_to_88(), migrate_88_to_89(), migrate_89_to_90(), migrate_8_to_9(), migrate_90_to_91(), migrate_91_to_92(), migrate_92_to_93(), migrate_93_to_94(), migrate_94_to_95(), migrate_95_to_96(), migrate_96_to_97(), migrate_97_to_98(), migrate_98_to_99(), migrate_99_to_100(), migrate_9_to_10(), and set_task_requested().

529 {
530  sql ("BEGIN EXCLUSIVE;");
531 }
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
Here is the call graph for this function:

◆ sql_begin_exclusive_giveup()

int sql_begin_exclusive_giveup ( )

Begin an exclusive transaction, giving up on failure.

Returns
0 got lock, 1 gave up, -1 error.

Definition at line 539 of file sql_sqlite3.c.

References sql_giveup().

540 {
541  return sql_giveup ("BEGIN EXCLUSIVE;");
542 }
int sql_giveup(char *sql,...)
Perform an SQL statement, giving up if database is busy or locked.
Definition: sql.c:257
Here is the call graph for this function:

◆ sql_begin_immediate()

void sql_begin_immediate ( )

Begin an exclusive transaction.

Begin an immediate transaction.

Definition at line 548 of file sql_sqlite3.c.

References sql().

Referenced by copy_alert(), copy_resource(), delete_alert(), set_task_alerts(), set_task_groups(), and set_task_observers().

549 {
550  sql ("BEGIN IMMEDIATE;");
551 }
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_begin_immediate_giveup()

int sql_begin_immediate_giveup ( )

Begin an exclusive transaction.

Begin an immediate transaction.

Returns
0 got lock, 1 gave up, -1 error.

Definition at line 559 of file sql_sqlite3.c.

References sql_giveup().

Referenced by manage_update_nvti_cache().

560 {
561  return sql_giveup ("BEGIN IMMEDIATE;");
562 }
int sql_giveup(char *sql,...)
Perform an SQL statement, giving up if database is busy or locked.
Definition: sql.c:257
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_bind_blob()

int sql_bind_blob ( sql_stmt_t stmt,
int  position,
const void *  value,
int  value_size 
)

Bind a blob to a statement.

Parameters
[in]stmtStatement.
[in]positionPosition in statement.
[in]valueBlob.
[in]value_sizeBlob size.
Returns
0 success, -1 error.

Definition at line 643 of file sql_sqlite3.c.

References openvas_usleep(), sql_stmt::stmt, and task_db.

645 {
646  unsigned int retries;
647  retries = 0;
648  while (1)
649  {
650  int ret;
651  ret = sqlite3_bind_blob (stmt->stmt,
652  position,
653  value,
654  value_size,
655  SQLITE_TRANSIENT);
656  if (ret == SQLITE_BUSY)
657  {
658  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
659  openvas_usleep (MIN ((retries - 10) * 10000,
660  OPENVAS_SQLITE_SLEEP_MAX));
661  retries++;
662  continue;
663  }
664  if (ret == SQLITE_OK) break;
665  g_warning ("%s: sqlite3_bind_blob failed: %s\n",
666  __FUNCTION__,
667  sqlite3_errmsg (task_db));
668  return -1;
669  }
670  return 0;
671 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:

◆ sql_bind_double()

int sql_bind_double ( sql_stmt_t stmt,
int  position,
double *  value 
)

Bind a double value to a statement.

Parameters
[in]stmtStatement.
[in]positionPosition in statement.
[in]valueValue.
Returns
0 success, -1 error.

Definition at line 718 of file sql_sqlite3.c.

References openvas_usleep(), sql_stmt::stmt, and task_db.

719 {
720  unsigned int retries;
721  retries = 0;
722  while (1)
723  {
724  int ret;
725  ret = sqlite3_bind_double (stmt->stmt, position, *value);
726  if (ret == SQLITE_BUSY)
727  {
728  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
729  openvas_usleep (MIN ((retries - 10) * 10000,
730  OPENVAS_SQLITE_SLEEP_MAX));
731  retries++;
732  continue;
733  }
734  if (ret == SQLITE_OK) break;
735  g_warning ("%s: sqlite3_bind_double failed: %s\n",
736  __FUNCTION__,
737  sqlite3_errmsg (task_db));
738  return -1;
739  }
740  return 0;
741 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:

◆ sql_bind_int64()

int sql_bind_int64 ( sql_stmt_t stmt,
int  position,
long long int *  value 
)

Bind an int64 value to a statement.

Parameters
[in]stmtStatement.
[in]positionPosition in statement.
[in]valueValue.
Returns
0 success, -1 error.

Definition at line 683 of file sql_sqlite3.c.

References openvas_usleep(), sql_stmt::stmt, and task_db.

684 {
685  unsigned int retries;
686  retries = 0;
687  while (1)
688  {
689  int ret;
690  ret = sqlite3_bind_int64 (stmt->stmt, position, *value);
691  if (ret == SQLITE_BUSY)
692  {
693  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
694  openvas_usleep (MIN ((retries - 10) * 10000,
695  OPENVAS_SQLITE_SLEEP_MAX));
696  retries++;
697  continue;
698  }
699  if (ret == SQLITE_OK) break;
700  g_warning ("%s: sqlite3_bind_int64 failed: %s\n",
701  __FUNCTION__,
702  sqlite3_errmsg (task_db));
703  return -1;
704  }
705  return 0;
706 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:

◆ sql_bind_text()

int sql_bind_text ( sql_stmt_t stmt,
int  position,
const gchar *  value,
gsize  value_size 
)

Bind a text value to a statement.

Parameters
[in]stmtStatement.
[in]positionPosition in statement.
[in]valueValue.
[in]value_sizeValue size, or -1 to use strlen of value.
Returns
0 success, -1 error.

Definition at line 754 of file sql_sqlite3.c.

References openvas_usleep(), sql_stmt::stmt, and task_db.

Referenced by migrate_19_to_20().

756 {
757  unsigned int retries;
758  retries = 0;
759  while (1)
760  {
761  int ret;
762  ret = sqlite3_bind_text (stmt->stmt,
763  position,
764  value,
765  value_size,
766  SQLITE_TRANSIENT);
767  if (ret == SQLITE_BUSY)
768  {
769  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
770  openvas_usleep (MIN ((retries - 10) * 10000,
771  OPENVAS_SQLITE_SLEEP_MAX));
772  retries++;
773  continue;
774  }
775  if (ret == SQLITE_OK) break;
776  g_warning ("%s: sqlite3_bind_text failed: %s\n",
777  __FUNCTION__,
778  sqlite3_errmsg (task_db));
779  return -1;
780  }
781  return 0;
782 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_cancel_internal()

int sql_cancel_internal ( )

Cancels the current SQL statement.

Returns
0 on success, -1 on error.

Definition at line 896 of file sql_sqlite3.c.

References task_db.

897 {
898  if (task_db)
899  {
900  sqlite3_interrupt (task_db);
901  return 0;
902  }
903  else
904  {
905  return -1;
906  }
907 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73

◆ sql_changes()

int sql_changes ( )

Get the number of rows changed or inserted in last statement.

Return 0.

Definition at line 305 of file sql_sqlite3.c.

References task_db.

Referenced by migrate_118_to_119().

306 {
307  return sqlite3_changes (task_db);
308 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
Here is the caller graph for this function:

◆ sql_close()

void sql_close ( )

Close the database.

Definition at line 277 of file sql_sqlite3.c.

References task_db.

Referenced by manage_cleanup_process_error().

278 {
279  if (sqlite3_close (task_db) == SQLITE_BUSY)
280  /* Richard Hipp on how to find the open statements:
281  *
282  * There is no published way to do this. If you run in a debugger,
283  * you can look at the linked list of "struct Vdbe" objects that
284  * sqlite3.pVdbe points to. This is the list of open statements
285  * in the current implementation (and subject to change without
286  * notice). */
287  g_warning ("%s: attempt to close db with open statement(s)\n",
288  __FUNCTION__);
289  task_db = NULL;
290 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
Here is the caller graph for this function:

◆ sql_close_fork()

void sql_close_fork ( )

Close the database in a forked process.

Definition at line 296 of file sql_sqlite3.c.

References task_db.

297 {
298  task_db = NULL;
299 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73

◆ sql_column_double()

double sql_column_double ( sql_stmt_t stmt,
int  position 
)

Return a column as a double from a prepared statement.

Parameters
[in]stmtStatement.
[in]positionColumn position.
Returns
0 success, -1 error.

Definition at line 843 of file sql_sqlite3.c.

References sql_stmt::stmt.

Referenced by aggregate_iterator_max(), aggregate_iterator_mean(), aggregate_iterator_min(), aggregate_iterator_sum(), iterator_double(), and sql_double().

844 {
845  return sqlite3_column_double (stmt->stmt, position);
846 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
Here is the caller graph for this function:

◆ sql_column_int()

int sql_column_int ( sql_stmt_t stmt,
int  position 
)

Return a column as an integer from a prepared statement.

Parameters
[in]stmtStatement.
[in]positionColumn position.
Returns
0 success, -1 error.

Definition at line 871 of file sql_sqlite3.c.

References sql_stmt::stmt.

Referenced by aggregate_iterator_count(), iterator_int(), and sql_int().

872 {
873  return sqlite3_column_int (stmt->stmt, position);
874 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
Here is the caller graph for this function:

◆ sql_column_int64()

long long int sql_column_int64 ( sql_stmt_t stmt,
int  position 
)

Return a column as an int64 from a prepared statement.

Parameters
[in]stmtStatement.
[in]positionColumn position.
Returns
0 success, -1 error.

Definition at line 885 of file sql_sqlite3.c.

References sql_stmt::stmt.

Referenced by iterator_int64(), and sql_int64().

886 {
887  return sqlite3_column_int64 (stmt->stmt, position);
888 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
Here is the caller graph for this function:

◆ sql_column_text()

const char* sql_column_text ( sql_stmt_t stmt,
int  position 
)

Return a column as text from a prepared statement.

Parameters
[in]stmtStatement.
[in]positionColumn position.
Returns
0 success, -1 error.

Definition at line 857 of file sql_sqlite3.c.

References sql_stmt::stmt.

Referenced by aggregate_iterator_subgroup_value(), aggregate_iterator_text(), aggregate_iterator_value(), iterator_string(), and sql_string().

858 {
859  return (const char*) sqlite3_column_text (stmt->stmt, position);
860 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
Here is the caller graph for this function:

◆ sql_commit()

void sql_commit ( )

Commit a transaction.

Definition at line 568 of file sql_sqlite3.c.

References sql().

Referenced by migrate_0_to_1(), migrate_100_to_101(), migrate_101_to_102(), migrate_102_to_103(), migrate_103_to_104(), migrate_104_to_105(), migrate_105_to_106(), migrate_106_to_107(), migrate_107_to_108(), migrate_108_to_109(), migrate_109_to_110(), migrate_10_to_11(), migrate_110_to_111(), migrate_111_to_112(), migrate_112_to_113(), migrate_113_to_114(), migrate_114_to_115(), migrate_115_to_116(), migrate_116_to_117(), migrate_117_to_118(), migrate_118_to_119(), migrate_119_to_120(), migrate_11_to_12(), migrate_120_to_121(), migrate_121_to_122(), migrate_122_to_123(), migrate_123_to_124(), migrate_124_to_125(), migrate_125_to_126(), migrate_126_to_127(), migrate_127_to_128(), migrate_128_to_129(), migrate_129_to_130(), migrate_12_to_13(), migrate_130_to_131(), migrate_131_to_132(), migrate_132_to_133(), migrate_133_to_134(), migrate_134_to_135(), migrate_135_to_136(), migrate_136_to_137(), migrate_137_to_138(), migrate_138_to_139(), migrate_139_to_140(), migrate_13_to_14(), migrate_140_to_141(), migrate_141_to_142(), migrate_142_to_143(), migrate_143_to_144(), migrate_144_to_145(), migrate_145_to_146(), migrate_146_to_147(), migrate_147_to_148(), migrate_148_to_149(), migrate_149_to_150(), migrate_14_to_15(), migrate_150_to_151(), migrate_151_to_152(), migrate_152_to_153(), migrate_153_to_154(), migrate_154_to_155(), migrate_155_to_156(), migrate_156_to_157(), migrate_157_to_158(), migrate_158_to_159(), migrate_159_to_160(), migrate_15_to_16(), migrate_160_to_161(), migrate_161_to_162(), migrate_162_to_163(), migrate_163_to_164(), migrate_164_to_165(), migrate_165_to_166(), migrate_167_to_168(), migrate_16_to_17(), migrate_170_to_171(), migrate_171_to_172(), migrate_172_to_173(), migrate_173_to_174(), migrate_174_to_175(), migrate_175_to_176(), migrate_176_to_177(), migrate_177_to_178(), migrate_178_to_179(), migrate_179_to_180(), migrate_17_to_18(), migrate_180_to_181(), migrate_181_to_182(), migrate_182_to_183(), migrate_183_to_184(), migrate_18_to_19(), migrate_19_to_20(), migrate_1_to_2(), migrate_20_to_21(), migrate_21_to_22(), migrate_22_to_23(), migrate_23_to_24(), migrate_25_to_26(), migrate_26_to_27(), migrate_27_to_28(), migrate_28_to_29(), migrate_29_to_30(), migrate_2_to_3(), migrate_30_to_31(), migrate_31_to_32(), migrate_32_to_33(), migrate_33_to_34(), migrate_34_to_35(), migrate_35_to_36(), migrate_36_to_37(), migrate_37_to_38(), migrate_38_to_39(), migrate_39_to_40(), migrate_3_to_4(), migrate_40_to_41(), migrate_41_to_42(), migrate_42_to_43(), migrate_43_to_44(), migrate_44_to_45(), migrate_45_to_46(), migrate_46_to_47(), migrate_47_to_48(), migrate_48_to_49(), migrate_49_to_50(), migrate_50_to_51(), migrate_51_to_52(), migrate_52_to_53(), migrate_53_to_54(), migrate_54_to_55(), migrate_55_to_56(), migrate_56_to_57(), migrate_57_to_58(), migrate_58_to_59(), migrate_59_to_60(), migrate_60_to_61(), migrate_61_to_62(), migrate_62_to_63(), migrate_63_to_64(), migrate_64_to_65(), migrate_65_to_66(), migrate_66_to_67(), migrate_67_to_68(), migrate_68_to_69(), migrate_69_to_70(), migrate_6_to_7(), migrate_70_to_71(), migrate_71_to_72(), migrate_72_to_73(), migrate_73_to_74(), migrate_74_to_75(), migrate_75_to_76(), migrate_76_to_77(), migrate_77_to_78(), migrate_78_to_79(), migrate_7_to_8(), migrate_80_to_81(), migrate_81_to_82(), migrate_82_to_83(), migrate_83_to_84(), migrate_84_to_85(), migrate_85_to_86(), migrate_86_to_87(), migrate_87_to_88(), migrate_88_to_89(), migrate_89_to_90(), migrate_8_to_9(), migrate_90_to_91(), migrate_91_to_92(), migrate_92_to_93(), migrate_93_to_94(), migrate_94_to_95(), migrate_95_to_96(), migrate_96_to_97(), migrate_97_to_98(), migrate_98_to_99(), migrate_99_to_100(), migrate_9_to_10(), set_task_alerts(), set_task_groups(), and set_task_requested().

569 {
570  sql ("COMMIT;");
571 }
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
Here is the call graph for this function:

◆ sql_database()

const char* sql_database ( )

Return file name of current database.

Return name of current database.

Returns
File name of database.

Definition at line 172 of file sql_sqlite3.c.

Referenced by manage_cert_loaded(), manage_create_sql_functions(), manage_db_empty(), and manage_scap_loaded().

173 {
174  /* This is currently only used by Postgres. */
175  return "TODO";
176 }
Here is the caller graph for this function:

◆ sql_default_database()

const char* sql_default_database ( )

Return name of default database file.

Return name of default database.

Returns
File name.

Definition at line 184 of file sql_sqlite3.c.

185 {
186  return OPENVAS_STATE_DIR "/mgr/tasks.db";
187 }

◆ sql_exec_internal()

int sql_exec_internal ( int  retry,
sql_stmt_t stmt 
)

Execute a prepared statement.

Parameters
[in]retryWhether to keep retrying while database is busy or locked.
[in]stmtStatement.
Returns
0 complete, 1 row available in results, 2 condition where caller must rerun prepare (for example schema changed internally after VACUUM), -1 error, -2 gave up.

Definition at line 433 of file sql_sqlite3.c.

References BUSY_TIMEOUT, openvas_usleep(), sql_stmt::stmt, and task_db.

Referenced by next(), sql_exec(), sql_explain_internal(), sql_quiet(), and sqlv().

434 {
435  unsigned int retries;
436 
437  if (retry == 0)
438  sqlite3_busy_timeout (task_db, 0);
439 
440  retries = 0;
441  while (1)
442  {
443  int ret;
444  ret = sqlite3_step (stmt->stmt);
445  if (ret == SQLITE_BUSY)
446  {
447  if (retry)
448  {
449  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
450  openvas_usleep (MIN ((retries - 10) * 10000,
451  OPENVAS_SQLITE_SLEEP_MAX));
452  retries++;
453  continue;
454  }
455  if (retries++ < 10)
456  continue;
457  return -2;
458  }
459  if (retry == 0)
460  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
461  if (ret == SQLITE_DONE)
462  return 0;
463  if (ret == SQLITE_ROW)
464  return 1;
465  g_warning ("%s: sqlite3_step failed: %s\n",
466  __FUNCTION__,
467  sqlite3_errmsg (task_db));
468  return -1;
469  }
470 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
#define BUSY_TIMEOUT
Busy timeout, in milliseconds.
Definition: sql_sqlite3.c:51
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_explain_internal()

int sql_explain_internal ( const char *  sql,
va_list  args 
)

Write debug messages with the query plan for an SQL query to the log.

Parameters
[in]sqlFormat string for the SQL query.
[in]argsFormat string arguments in a va_list.
Returns
0 success, -1 error.

Definition at line 481 of file sql_sqlite3.c.

References sql(), sql_exec_internal(), sql_finalize(), sql_prepare_internal(), and sql_stmt::stmt.

Referenced by sql_explain().

482 {
483  char *explain_sql;
484  sql_stmt_t *explain_stmt;
485  int explain_ret;
486 
487  explain_sql = g_strconcat ("EXPLAIN QUERY PLAN ", sql, NULL);
488  if (sql_prepare_internal (1, 1, explain_sql, args, &explain_stmt))
489  {
490  g_warning ("%s : Failed to prepare EXPLAIN statement", __FUNCTION__);
491  g_free (explain_sql);
492  return -1;
493  }
494 
495  while (1)
496  {
497  explain_ret = sql_exec_internal (1, explain_stmt);
498  if (explain_ret == 1)
499  g_debug ("%s : %s|%s|%s|%s",
500  __FUNCTION__,
501  sqlite3_column_text (explain_stmt->stmt, 0),
502  sqlite3_column_text (explain_stmt->stmt, 1),
503  sqlite3_column_text (explain_stmt->stmt, 2),
504  sqlite3_column_text (explain_stmt->stmt, 3));
505  else if (explain_ret == 0)
506  break;
507  else
508  {
509  g_warning ("%s : Failed to get EXPLAIN row", __FUNCTION__);
510  sql_finalize (explain_stmt);
511  g_free (explain_sql);
512  return -1;
513  }
514  }
515 
516  sql_finalize (explain_stmt);
517  g_free (explain_sql);
518  return 0;
519 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int sql_prepare_internal(int retry, int log, const char *sql, va_list args, sql_stmt_t **stmt)
Prepare a statement.
Definition: sql_sqlite3.c:351
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
int sql_exec_internal(int retry, sql_stmt_t *stmt)
Execute a prepared statement.
Definition: sql_sqlite3.c:433
void sql_finalize(sql_stmt_t *stmt)
Free a prepared statement.
Definition: sql_sqlite3.c:790
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_finalize()

void sql_finalize ( sql_stmt_t stmt)

Free a prepared statement.

Parameters
[in]stmtStatement.

Definition at line 790 of file sql_sqlite3.c.

References sql_stmt::stmt.

Referenced by cleanup_iterator(), migrate_19_to_20(), sql_double(), sql_explain_internal(), sql_int(), sql_int64(), sql_quiet(), sql_string(), and sqlv().

791 {
792  if (stmt->stmt)
793  sqlite3_finalize (stmt->stmt);
794  g_free (stmt);
795 }
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
Here is the caller graph for this function:

◆ sql_greatest()

const char* sql_greatest ( )

Get keyword for "greatest" SQL function.

Returns
Keyword.

Definition at line 106 of file sql_sqlite3.c.

107 {
108  return "max";
109 }

◆ sql_ilike_op()

const char* sql_ilike_op ( )

Get case insensitive LIKE operator.

Returns
Like operator.

Definition at line 139 of file sql_sqlite3.c.

140 {
141  return "LIKE";
142 }

◆ sql_is_open()

int sql_is_open ( )

Check whether the database is open.

Returns
1 if open, else 0.

Definition at line 161 of file sql_sqlite3.c.

References task_db.

Referenced by manage_cleanup_process_error().

162 {
163  return task_db ? 1 : 0;
164 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
Here is the caller graph for this function:

◆ sql_is_sqlite3()

int sql_is_sqlite3 ( )

Get whether backend is SQLite3.

Returns
1.

Definition at line 84 of file sql_sqlite3.c.

Referenced by migrate_131_to_132(), migrate_132_to_133(), migrate_133_to_134(), migrate_153_to_154(), migrate_155_to_156(), migrate_156_to_157(), migrate_157_to_158(), migrate_158_to_159(), migrate_166_to_167(), migrate_172_to_173(), migrate_180_to_181(), migrate_182_to_183(), and refresh_nvt_cves().

85 {
86  return 1;
87 }
Here is the caller graph for this function:

◆ sql_last_insert_id()

resource_t sql_last_insert_id ( )

Get the ID of the last inserted row.

Definition at line 314 of file sql_sqlite3.c.

References task_db.

Referenced by make_config_host_discovery(), make_config_system_discovery(), migrate_156_to_157(), migrate_158_to_159(), migrate_160_to_161(), migrate_165_to_166(), migrate_35_to_36_duplicate_target(), migrate_55_to_56(), migrate_55_to_56_ensure_predefined_port_lists_exist(), migrate_5_to_6_move_other_config(), and sqli().

315 {
316  return sqlite3_last_insert_rowid (task_db);
317 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
Here is the caller graph for this function:

◆ sql_open()

int sql_open ( const char *  database)

Open the database.

Parameters
[in]databaseDatabase, or NULL for default.
Returns
0 success, -1 error.

Definition at line 197 of file sql_sqlite3.c.

198 {
199  int chunk_size = DB_CHUNK_SIZE;
200  struct stat state;
201  int err, ret;
202  gchar *mgr_dir;
203 
204  /* Ensure the mgr directory exists. */
205 
206  mgr_dir = g_build_filename (OPENVAS_STATE_DIR, "mgr", NULL);
207  ret = g_mkdir_with_parents (mgr_dir, 0755 /* "rwxr-xr-x" */);
208  g_free (mgr_dir);
209  if (ret == -1)
210  {
211  g_warning ("%s: failed to create mgr directory: %s\n",
212  __FUNCTION__,
213  strerror (errno));
214  abort ();
215  }
216 
217  err = stat (database ? database : sql_default_database (),
218  &state);
219  if (err)
220  switch (errno)
221  {
222  case ENOENT:
223  break;
224  default:
225  g_warning ("%s: failed to stat database: %s\n",
226  __FUNCTION__,
227  strerror (errno));
228  abort ();
229  }
230  else if (state.st_mode & (S_IXUSR | S_IRWXG | S_IRWXO))
231  {
232  g_warning ("%s: database permissions are too loose, repairing\n",
233  __FUNCTION__);
234  if (chmod (database ? database : sql_default_database (),
235  S_IRUSR | S_IWUSR))
236  {
237  g_warning ("%s: chmod failed: %s\n",
238  __FUNCTION__,
239  strerror (errno));
240  abort ();
241  }
242  }
243 
244  /* Workaround for SQLite temp file name conflicts that can occur if
245  * concurrent forked processes have the same PRNG state. */
246 #if SQLITE_VERSION_NUMBER < 3008003
247  sqlite3_test_control (SQLITE_TESTCTRL_PRNG_RESET);
248 #endif
249 
250  if (sqlite3_open (database ? database : sql_default_database (),
251  &task_db))
252  {
253  g_warning ("%s: sqlite3_open failed: %s\n",
254  __FUNCTION__,
255  sqlite3_errmsg (task_db));
256  return -1;
257  }
258 
259  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
260 
261  g_debug (" %s: db open, max retry sleep time is %i\n",
262  __FUNCTION__,
263  OPENVAS_SQLITE_SLEEP_MAX);
264 
265  sqlite3_file_control (task_db, NULL, SQLITE_FCNTL_CHUNK_SIZE, &chunk_size);
266 
267  sql ("PRAGMA journal_mode=WAL;");
268  sql ("PRAGMA journal_size_limit=134217728;"); /* 128 MB. */
269 
270  return 0;
271 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
#define BUSY_TIMEOUT
Busy timeout, in milliseconds.
Definition: sql_sqlite3.c:51
#define DB_CHUNK_SIZE
Chunk size for SQLite memory allocation.
Definition: sql_sqlite3.c:40
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
const char * sql_default_database()
Return name of default database file.
Definition: sql_sqlite3.c:184

◆ sql_prepare_internal()

int sql_prepare_internal ( int  retry,
int  log,
const char *  sql,
va_list  args,
sql_stmt_t **  stmt 
)

Prepare a statement.

Parameters
[in]retryWhether to keep retrying while database is busy or locked.
[in]logWhether to keep retrying while database is busy or locked.
[in]sqlFormat string for SQL statement.
[in]argsArguments for format string.
[out]stmtStatement return.
Returns
0 success, 1 gave up, -1 error.

Definition at line 351 of file sql_sqlite3.c.

References BUSY_TIMEOUT, openvas_usleep(), sql(), and task_db.

Referenced by init_iterator(), sql_explain_internal(), sql_prepare(), sql_quiet(), and sqlv().

353 {
354  const char* tail;
355  int ret;
356  unsigned int retries;
357  gchar* formatted;
358  sqlite3_stmt *sqlite_stmt;
359 
360  assert (stmt);
361 
362  formatted = g_strdup_vprintf (sql, args);
363 
364  if (log)
365  g_debug (" sql: %s\n", formatted);
366 
367  if (retry == 0)
368  sqlite3_busy_timeout (task_db, 0);
369 
370  retries = 0;
371  *stmt = (sql_stmt_t*) g_malloc0 (sizeof (sql_stmt_t));
372  sqlite_stmt = NULL;
373  while (1)
374  {
375  ret = sqlite3_prepare_v2 (task_db, (char*) formatted, -1, &sqlite_stmt,
376  &tail);
377  if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED)
378  {
379  if (retry)
380  {
381  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
382  openvas_usleep (MIN ((retries - 10) * 10000,
383  OPENVAS_SQLITE_SLEEP_MAX));
384  retries++;
385  continue;
386  }
387  if (retries++ < 10)
388  continue;
389  g_free (formatted);
390  if (retry == 0)
391  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
392  return 1;
393  }
394  g_free (formatted);
395  (*stmt)->stmt = sqlite_stmt;
396  if (ret == SQLITE_OK)
397  {
398  if (sqlite_stmt == NULL)
399  {
400  g_warning ("%s: sqlite3_prepare failed with NULL stmt: %s\n",
401  __FUNCTION__,
402  sqlite3_errmsg (task_db));
403  if (retry == 0)
404  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
405  return -1;
406  }
407  break;
408  }
409  g_warning ("%s: sqlite3_prepare failed: %s\n",
410  __FUNCTION__,
411  sqlite3_errmsg (task_db));
412  if (retry == 0)
413  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
414  return -1;
415  }
416 
417  if (retry == 0)
418  sqlite3_busy_timeout (task_db, BUSY_TIMEOUT);
419  return 0;
420 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
#define BUSY_TIMEOUT
Busy timeout, in milliseconds.
Definition: sql_sqlite3.c:51
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sql_regexp_op()

const char* sql_regexp_op ( )

Get regular expression operator.

Returns
Regexp operator.

Definition at line 150 of file sql_sqlite3.c.

151 {
152  return "REGEXP";
153 }

◆ sql_reset()

int sql_reset ( sql_stmt_t stmt)

Reset a prepared statement.

Parameters
[in]stmtStatement.
Returns
0 success, -1 error.

Definition at line 805 of file sql_sqlite3.c.

References openvas_usleep(), sql_stmt::stmt, and task_db.

806 {
807  unsigned int retries;
808  sqlite3_clear_bindings (stmt->stmt);
809  retries = 0;
810  while (1)
811  {
812  int ret;
813  ret = sqlite3_reset (stmt->stmt);
814  if (ret == SQLITE_BUSY)
815  {
816  if ((retries > 10) && (OPENVAS_SQLITE_SLEEP_MAX > 0))
817  openvas_usleep (MIN ((retries - 10) * 10000,
818  OPENVAS_SQLITE_SLEEP_MAX));
819  retries++;
820  continue;
821  }
822  if (ret == SQLITE_DONE || ret == SQLITE_OK) break;
823  if (ret == SQLITE_ERROR || ret == SQLITE_MISUSE)
824  {
825  g_warning ("%s: sqlite3_reset failed: %s\n",
826  __FUNCTION__,
827  sqlite3_errmsg (task_db));
828  return -1;
829  }
830  }
831  return 0;
832 }
sqlite3 * task_db
Handle on the database.
Definition: sql_sqlite3.c:73
sqlite3_stmt * stmt
Definition: sql_sqlite3.c:64
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
Definition: utils.c:39
Here is the call graph for this function:

◆ sql_rollback()

void sql_rollback ( )

Roll a transaction back.

Definition at line 577 of file sql_sqlite3.c.

References sql().

Referenced by delete_alert(), migrate_0_to_1(), migrate_100_to_101(), migrate_101_to_102(), migrate_102_to_103(), migrate_103_to_104(), migrate_104_to_105(), migrate_105_to_106(), migrate_106_to_107(), migrate_107_to_108(), migrate_108_to_109(), migrate_109_to_110(), migrate_10_to_11(), migrate_110_to_111(), migrate_111_to_112(), migrate_112_to_113(), migrate_113_to_114(), migrate_114_to_115(), migrate_115_to_116(), migrate_116_to_117(), migrate_117_to_118(), migrate_118_to_119(), migrate_119_to_120(), migrate_11_to_12(), migrate_120_to_121(), migrate_121_to_122(), migrate_122_to_123(), migrate_123_to_124(), migrate_124_to_125(), migrate_125_to_126(), migrate_126_to_127(), migrate_127_to_128(), migrate_128_to_129(), migrate_129_to_130(), migrate_12_to_13(), migrate_130_to_131(), migrate_131_to_132(), migrate_132_to_133(), migrate_133_to_134(), migrate_134_to_135(), migrate_135_to_136(), migrate_136_to_137(), migrate_137_to_138(), migrate_138_to_139(), migrate_139_to_140(), migrate_13_to_14(), migrate_140_to_141(), migrate_141_to_142(), migrate_142_to_143(), migrate_143_to_144(), migrate_144_to_145(), migrate_145_to_146(), migrate_146_to_147(), migrate_147_to_148(), migrate_148_to_149(), migrate_149_to_150(), migrate_14_to_15(), migrate_150_to_151(), migrate_151_to_152(), migrate_152_to_153(), migrate_153_to_154(), migrate_154_to_155(), migrate_155_to_156(), migrate_156_to_157(), migrate_157_to_158(), migrate_158_to_159(), migrate_159_to_160(), migrate_15_to_16(), migrate_160_to_161(), migrate_161_to_162(), migrate_162_to_163(), migrate_163_to_164(), migrate_164_to_165(), migrate_165_to_166(), migrate_166_to_167(), migrate_167_to_168(), migrate_168_to_169(), migrate_169_to_170(), migrate_16_to_17(), migrate_170_to_171(), migrate_171_to_172(), migrate_172_to_173(), migrate_173_to_174(), migrate_174_to_175(), migrate_175_to_176(), migrate_176_to_177(), migrate_177_to_178(), migrate_178_to_179(), migrate_179_to_180(), migrate_17_to_18(), migrate_180_to_181(), migrate_181_to_182(), migrate_182_to_183(), migrate_183_to_184(), migrate_18_to_19(), migrate_19_to_20(), migrate_1_to_2(), migrate_20_to_21(), migrate_21_to_22(), migrate_22_to_23(), migrate_23_to_24(), migrate_24_to_25(), migrate_25_to_26(), migrate_26_to_27(), migrate_27_to_28(), migrate_28_to_29(), migrate_29_to_30(), migrate_2_to_3(), migrate_30_to_31(), migrate_31_to_32(), migrate_32_to_33(), migrate_33_to_34(), migrate_34_to_35(), migrate_35_to_36(), migrate_36_to_37(), migrate_37_to_38(), migrate_38_to_39(), migrate_39_to_40(), migrate_3_to_4(), migrate_40_to_41(), migrate_41_to_42(), migrate_42_to_43(), migrate_43_to_44(), migrate_44_to_45(), migrate_45_to_46(), migrate_46_to_47(), migrate_47_to_48(), migrate_48_to_49(), migrate_49_to_50(), migrate_4_to_5(), migrate_50_to_51(), migrate_51_to_52(), migrate_52_to_53(), migrate_53_to_54(), migrate_54_to_55(), migrate_55_to_56(), migrate_56_to_57(), migrate_57_to_58(), migrate_58_to_59(), migrate_59_to_60(), migrate_5_to_6(), migrate_5_to_6_move_other_config(), migrate_60_to_61(), migrate_61_to_62(), migrate_62_to_63(), migrate_63_to_64(), migrate_64_to_65(), migrate_65_to_66(), migrate_66_to_67(), migrate_67_to_68(), migrate_68_to_69(), migrate_69_to_70(), migrate_6_to_7(), migrate_70_to_71(), migrate_71_to_72(), migrate_72_to_73(), migrate_73_to_74(), migrate_74_to_75(), migrate_75_to_76(), migrate_76_to_77(), migrate_77_to_78(), migrate_78_to_79(), migrate_7_to_8(), migrate_80_to_81(), migrate_81_to_82(), migrate_82_to_83(), migrate_83_to_84(), migrate_84_to_85(), migrate_85_to_86(), migrate_86_to_87(), migrate_87_to_88(), migrate_88_to_89(), migrate_89_to_90(), migrate_8_to_9(), migrate_90_to_91(), migrate_91_to_92(), migrate_92_to_93(), migrate_93_to_94(), migrate_94_to_95(), migrate_95_to_96(), migrate_96_to_97(), migrate_97_to_98(), migrate_98_to_99(), migrate_99_to_100(), migrate_9_to_10(), set_task_alerts(), set_task_groups(), and set_task_observers().

578 {
579  sql ("ROLLBACK;");
580 }
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
Here is the call graph for this function:

◆ sql_schema()

const char* sql_schema ( )

Get main schema name.

Returns
Schema name.

Definition at line 95 of file sql_sqlite3.c.

Referenced by check_db_versions(), manage_db_version(), manage_update_nvti_cache(), migrate_75_to_76(), and set_db_version().

96 {
97  return "main";
98 }
Here is the caller graph for this function:

◆ sql_select_limit()

const char* sql_select_limit ( int  max)

Setup a LIMIT argument.

Parameters
[in]maxMax.
Returns
Argument for LIMIT as a static string.

Definition at line 119 of file sql_sqlite3.c.

Referenced by init_aggregate_iterator().

120 {
121  static char string[20];
122  if (max < 0)
123  return "-1";
124  if (snprintf (string, 19, "%i", max) < 0)
125  {
126  g_warning ("%s: snprintf failed\n", __FUNCTION__);
127  abort ();
128  }
129  string[19] = '\0';
130  return string;
131 }
Here is the caller graph for this function:

◆ sqli()

void sqli ( resource_t resource,
char *  sql,
  ... 
)

Perform an SQL statement, retrying if database is busy or locked.

Parameters
[out]resourceLast inserted resource.
[in]sqlFormat string for SQL statement.
[in]...Arguments for format string.

Definition at line 327 of file sql_sqlite3.c.

References sql(), sql_last_insert_id(), and sqlv().

328 {
329  va_list args;
330 
331  va_start (args, sql);
332  if (sqlv (1, sql, args) == -1)
333  abort ();
334  va_end (args);
335  if (resource)
336  *resource = sql_last_insert_id ();
337 }
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
resource_t sql_last_insert_id()
Get the ID of the last inserted row.
Definition: sql_sqlite3.c:314
int sqlv(int, char *, va_list)
Perform an SQL statement.
Definition: sql.c:158
Here is the call graph for this function:

◆ sqlv()

int sqlv ( int  retry,
char *  sql,
va_list  args 
)

Perform an SQL statement.

Parameters
[in]retryWhether to keep retrying while database is busy or locked.
[in]sqlFormat string for SQL statement.
[in]argsArguments for format string.
Returns
0 success, 1 gave up (even when retry given), -1 error.

Definition at line 158 of file sql.c.

References log_errors, sql(), sql_exec_internal(), sql_finalize(), and sql_prepare_internal().

Referenced by sql(), sql_error(), sql_giveup(), and sqli().

159 {
160  while (1)
161  {
162  int ret;
163  sql_stmt_t* stmt;
164  va_list args_copy;
165 
166  /* Prepare statement.
167  * Copy args for this because a va_list can only be used once.
168  */
169  va_copy (args_copy, args);
170  ret = sql_prepare_internal (retry, 1, sql, args_copy, &stmt);
171  va_end (args_copy);
172  if (ret == -1)
173  g_warning ("%s: sql_prepare_internal failed\n", __FUNCTION__);
174  if (ret)
175  return ret;
176 
177  /* Run statement. */
178 
179  while ((ret = sql_exec_internal (retry, stmt)) == 1);
180  if ((ret == -1) && log_errors)
181  g_warning ("%s: sql_exec_internal failed\n", __FUNCTION__);
182  sql_finalize (stmt);
183  if (ret == 2)
184  continue;
185  if (ret == -2)
186  return 1;
187  assert (ret == -1 || ret == 0);
188  return ret;
189  }
190 }
int sql_prepare_internal(int, int, const char *, va_list, sql_stmt_t **)
Prepare a statement.
Definition: sql_pg.c:458
int log_errors
Whether to log errors.
Definition: sql.c:62
void sql(char *sql,...)
Perform an SQL statement, retrying if database is busy or locked.
Definition: sql.c:199
int sql_exec_internal(int, sql_stmt_t *)
Execute a prepared statement.
Definition: sql_pg.c:482
void sql_finalize(sql_stmt_t *)
Free a prepared statement.
Definition: sql_pg.c:824
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ task_db