|
rpm
5.4.10
|
#include "system.h"#include <sqlite3.h>#include <rpmsql.h>#include <rpmlog.h>#include <rpmmacro.h>#include <rpmurl.h>#include <rpmtag.h>#include <rpmdb.h>#include "debug.h"
Go to the source code of this file.
Data Structures | |
| struct | key_s |
| struct | _sql_dbcursor_s |
Macros | |
| #define | _RPMSQL_INTERNAL |
| #define | _RPMDB_INTERNAL |
| #define | UINT32_T uint32_t |
| #define | SQLDBDEBUG(_dbi, _list) if (((_dbi) && (_dbi)->dbi_debug) || (_sqldb_debug)) fprintf _list |
| #define | _DBT_ENTRY(_v) { DB_DBT_##_v, #_v, } |
| #define | _KEYDATA(_K, _P, _D, _R) fmtKDR(_K, _P, _D, _R) |
| #define | cvtdberr(_dbi, _msg, _error) Xcvtdberr(_dbi, _msg, _error, _sqldb_debug, __FUNCTION__, __FILE__, __LINE__) |
| #define | SCPDEBUG(_dbi, _list) if (_scp_debug) fprintf _list |
| #define | scpUnlink(_scp) ((SCP_t)rpmioUnlinkPoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
| #define | scpLink(_scp) ((SCP_t)rpmioLinkPoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
| #define | scpFree(_scp) ((SCP_t)rpmioFreePoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
Typedefs | |
| typedef struct key_s | KEY |
| typedef struct _sql_dbcursor_s * | SCP_t |
Functions | |
| static const char * | tblName (uint32_t v, KEY *tbl, size_t ntbl) |
| static const char * | fmtBits (uint32_t flags, KEY tbl[], size_t ntbl, char *t) |
| static char * | fmtDBT (const DBT *K, char *te) |
| static const char * | fmtKDR (const DBT *K, const DBT *P, const DBT *D, const DBT *R) |
| static int | Xcvtdberr (dbiIndex dbi, const char *msg, int error, int printit, const char *func, const char *fn, unsigned ln) |
| SCP_t | scpUnlink (SCP_t scp) |
| Unreference a SCP wrapper instance. | |
| SCP_t | scpLink (SCP_t scp) |
| Reference a SCP wrapper instance. | |
| SCP_t | scpFree (SCP_t scp) |
| Destroy a SCP wrapper. | |
| static void | dbg_scp (void *ptr) |
| static void | dbg_keyval (const char *msg, dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, unsigned int flags) |
| static SCP_t | scpResetKeys (SCP_t scp) |
| static SCP_t | scpResetAv (SCP_t scp) |
| static SCP_t | scpReset (SCP_t scp) |
| static void | scpFini (void *_scp) |
| static SCP_t | scpGetPool (rpmioPool pool) |
| static SCP_t | scpNew (void *dbp) |
| static int | sql_step (dbiIndex dbi, SCP_t scp) |
| static int | sql_bind_key (dbiIndex dbi, SCP_t scp, int pos, DBT *key) |
| static int | sql_bind_data (dbiIndex dbi, SCP_t scp, int pos, DBT *data) |
| static int | sql_exec (dbiIndex dbi, const char *cmd, int(*callback)(void *, int, char **, char **), void *context) |
| static int | sql_busy_handler (void *_dbi, int time) |
| static int | sql_initDB_cb (void *_dbi, int argc, char **argv, char **cols) |
| static int | sql_initDB (dbiIndex dbi) |
| Verify the DB is setup. | |
| static int | sql_cclose (dbiIndex dbi, DBC *dbcursor, unsigned int flags) |
| Close database cursor. | |
| static int | sql_close (dbiIndex dbi, unsigned int flags) |
| Close index database, and destroy database handle. | |
| static int | sql_open (rpmdb rpmdb, rpmTag rpmtag, dbiIndex *dbip) |
| Return handle for an index database. | |
| static int | sql_sync (dbiIndex dbi, unsigned int flags) |
| Flush pending operations to disk. | |
| static int | sql_exists (dbiIndex dbi, DBT *key, unsigned int flags) |
| Return whether key exists in a database. | |
| static int | sql_seqno_cb (void *_dbi, int argc, char **argv, char **cols) |
| static int | sql_seqno (dbiIndex dbi, int64_t *seqnop, unsigned int flags) |
| Return next sequence number. | |
| static int | sql_copen (dbiIndex dbi, DB_TXN *txnid, DBC **dbcp, unsigned int flags) |
| Open database cursor. | |
| static int | sql_cdel (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, unsigned int flags) |
| Delete (key,data) pair(s) using db->del or dbcursor->c_del. | |
| static int | sql_cget (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, unsigned int flags) |
| Retrieve (key,data) pair using db->get or dbcursor->c_get. | |
| static int | sql_cput (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, unsigned int flags) |
| Store (key,data) pair using db->put or dbcursor->c_put. | |
| static int | sql_byteswapped (dbiIndex dbi) |
| Is database byte swapped? | |
| static int | sql_associate (dbiIndex dbi, dbiIndex dbisecondary, int(*callback)(DB *, const DBT *, const DBT *, DBT *), unsigned int flags) |
| Associate secondary database with primary. | |
| static int | sql_associate_foreign (dbiIndex dbi, dbiIndex dbisecondary, int(*callback)(DB *, const DBT *, DBT *, const DBT *, int *), unsigned int flags) |
| Associate secondary database with primary. | |
| static int | sql_join (dbiIndex dbi, DBC **curslist, DBC **dbcp, unsigned int flags) |
| Return join cursor for list of cursors. | |
| static int | sql_cdup (dbiIndex dbi, DBC *dbcursor, DBC **dbcp, unsigned int flags) |
| Duplicate a database cursor. | |
| static int | sql_cpget (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *pkey, DBT *data, unsigned int flags) |
| Retrieve (key,data) pair using dbcursor->c_pget. | |
| static int | sql_ccount (dbiIndex dbi, DBC *dbcursor, unsigned int *countp, unsigned int flags) |
| Retrieve count of (possible) duplicate items using dbcursor->c_count. | |
| static int | sql_stat_cb (void *_dbi, int argc, char **argv, char **cols) |
| static int | sql_stat (dbiIndex dbi, unsigned int flags) |
| Save statistics in database handle. | |
Variables | |
| int | _sqldb_debug = 0 |
| static KEY | DBTflags [] |
| static size_t | nDBTflags = sizeof(DBTflags) / sizeof(DBTflags[0]) |
| int | _scp_debug = 0 |
| rpmioPool | _scpPool = NULL |
| static const char | _Packages_sql_init [] |
| static const char * | tagTypes [] |
| static size_t | ntagTypes = sizeof(tagTypes) / sizeof(tagTypes[0]) |
| static const char | seqno_inc_cmd [] |
| struct _dbiVec | sqlitevec |
| #define _KEYDATA | ( | _K, | |
| _P, | |||
| _D, | |||
| _R | |||
| ) | fmtKDR(_K, _P, _D, _R) |
Definition at line 219 of file sqlite.c.
Referenced by sql_cdel(), sql_cget(), sql_cpget(), sql_cput(), and sql_exists().
| #define cvtdberr | ( | _dbi, | |
| _msg, | |||
| _error | |||
| ) | Xcvtdberr(_dbi, _msg, _error, _sqldb_debug, __FUNCTION__, __FILE__, __LINE__) |
Definition at line 247 of file sqlite.c.
Referenced by scpReset(), sql_bind_data(), sql_bind_key(), sql_cdel(), sql_cget(), sql_cput(), sql_exec(), sql_open(), and sql_step().
| #define SCPDEBUG | ( | _dbi, | |
| _list | |||
| ) | if (_scp_debug) fprintf _list |
Definition at line 295 of file sqlite.c.
Referenced by scpFini(), scpReset(), scpResetAv(), and scpResetKeys().
| #define scpFree | ( | _scp | ) | ((SCP_t)rpmioFreePoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
Definition at line 328 of file sqlite.c.
Referenced by sql_cclose(), sql_cdel(), and sql_cput().
| #define scpLink | ( | _scp | ) | ((SCP_t)rpmioLinkPoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
Definition at line 316 of file sqlite.c.
Referenced by scpNew(), sql_cdel(), and sql_cput().
| #define scpUnlink | ( | _scp | ) | ((SCP_t)rpmioUnlinkPoolItem((rpmioItem)(_scp), __FUNCTION__, __FILE__, __LINE__)) |
| #define SQLDBDEBUG | ( | _dbi, | |
| _list | |||
| ) | if (((_dbi) && (_dbi)->dbi_debug) || (_sqldb_debug)) fprintf _list |
Definition at line 70 of file sqlite.c.
Referenced by sql_associate(), sql_associate_foreign(), sql_busy_handler(), sql_byteswapped(), sql_cclose(), sql_ccount(), sql_cdel(), sql_cdup(), sql_cget(), sql_close(), sql_copen(), sql_cpget(), sql_cput(), sql_exec(), sql_exists(), sql_initDB(), sql_initDB_cb(), sql_join(), sql_open(), sql_seqno(), sql_seqno_cb(), sql_stat(), sql_stat_cb(), sql_step(), and sql_sync().
| #define UINT32_T uint32_t |
Definition at line 61 of file sqlite.c.
Referenced by sql_cget().
| typedef struct _sql_dbcursor_s* SCP_t |
|
static |
Definition at line 342 of file sqlite.c.
References __db_dbt::data, dbg_scp(), RPMTAG_NAME, and __db_dbt::size.
Referenced by sql_cdel(), sql_cget(), and sql_cput().
|
static |
Definition at line 331 of file sqlite.c.
References _sql_dbcursor_s::ac, _sql_dbcursor_s::all, _sql_dbcursor_s::av, _sql_dbcursor_s::avlen, _sql_dbcursor_s::nalloc, _sql_dbcursor_s::nc, _sql_dbcursor_s::nr, and _sql_dbcursor_s::rx.
Referenced by dbg_keyval(), scpReset(), scpResetAv(), and scpResetKeys().
|
static |
|
static |
Definition at line 146 of file sqlite.c.
References __db_dbt::data, DB_DBT_MULTIPLE, __db_dbt::flags, fmtBits(), nDBTflags, __db_dbt::size, and xisprint().
Referenced by fmtKDR().
|
static |
Definition at line 461 of file sqlite.c.
References _free(), _sql_dbcursor_s::av, _sql_dbcursor_s::avlen, SCPDEBUG, scpReset(), and scpResetKeys().
Referenced by scpGetPool().
Destroy a SCP wrapper.
| scp | SCP wrapper |
Definition at line 477 of file sqlite.c.
References _sql_dbcursor_s::_item, _scpPool, rpmioGetPool(), rpmioNewPool(), and scpFini().
Referenced by scpNew().
Reference a SCP wrapper instance.
| scp | SCP wrapper |
|
static |
Definition at line 493 of file sqlite.c.
References _sql_dbcursor_s::ldata, _sql_dbcursor_s::lkey, scpGetPool(), scpLink, and _sql_dbcursor_s::used.
Referenced by sql_copen().
Definition at line 428 of file sqlite.c.
References _free(), _sql_dbcursor_s::cmd, cvtdberr, dbg_scp(), _sql_dbcursor_s::pStmt, _sql_dbcursor_s::rx, SCPDEBUG, and scpResetAv().
Referenced by scpFini(), and sql_cget().
Definition at line 390 of file sqlite.c.
References _free(), _sql_dbcursor_s::ac, _sql_dbcursor_s::av, _sql_dbcursor_s::avlen, dbg_scp(), _sql_dbcursor_s::nalloc, _sql_dbcursor_s::nc, _sql_dbcursor_s::nr, and SCPDEBUG.
Referenced by scpReset(), and sql_cget().
Definition at line 367 of file sqlite.c.
References _free(), __db_dbt::data, dbg_scp(), _sql_dbcursor_s::keys, _sql_dbcursor_s::nkeys, and SCPDEBUG.
Referenced by scpFini(), and sql_cget().
Unreference a SCP wrapper instance.
| scp | SCP wrapper |
|
static |
Associate secondary database with primary.
| dbi | index database handle |
| dbisecondary | secondary index database handle |
| callback | create secondary key from primary (NULL if DB_RDONLY) |
| flags | DB_CREATE or 0 |
Definition at line 1628 of file sqlite.c.
References SQLDBDEBUG.
|
static |
Associate secondary database with primary.
| dbi | index database handle |
| dbisecondary | secondary index database handle |
| callback | create secondary key from primary (NULL if DB_RDONLY) |
| flags | DB_CREATE or 0 |
Definition at line 1647 of file sqlite.c.
References SQLDBDEBUG.
Definition at line 730 of file sqlite.c.
References cvtdberr, __db_dbt::data, _sql_dbcursor_s::pStmt, and __db_dbt::size.
Referenced by sql_cdel(), and sql_cput().
Definition at line 662 of file sqlite.c.
References cvtdberr, __db_dbt::data, _sql_dbcursor_s::pStmt, RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_MASK_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPM_UINT16_TYPE, RPM_UINT32_TYPE, RPM_UINT64_TYPE, RPM_UINT8_TYPE, RPMDBI_PACKAGES, __db_dbt::size, and tagType().
Referenced by sql_cdel(), sql_cget(), and sql_cput().
|
static |
Definition at line 760 of file sqlite.c.
References _, rpmlog(), RPMLOG_WARNING, and SQLDBDEBUG.
Referenced by sql_open().
|
static |
Is database byte swapped?
| dbi | index database handle |
Definition at line 1609 of file sqlite.c.
References SQLDBDEBUG.
Close database cursor.
| dbi | index database handle |
| dbcursor | database cursor |
| flags | (unused) |
Definition at line 1061 of file sqlite.c.
References _free(), _sql_dbcursor_s::ldata, _sql_dbcursor_s::lkey, scpFree, and SQLDBDEBUG.
Referenced by sql_copen().
|
static |
Retrieve count of (possible) duplicate items using dbcursor->c_count.
| dbi | index database handle |
| dbcursor | database cursor |
| countp | address of count |
| flags | (unused) |
Definition at line 1730 of file sqlite.c.
References SQLDBDEBUG.
|
static |
Delete (key,data) pair(s) using db->del or dbcursor->c_del.
| dbi | index database handle |
| dbcursor | database cursor (NULL will use db->del) |
| key | delete key value/length/flags |
| data | delete data value/length/flags |
| flags | (unused) |
Definition at line 1348 of file sqlite.c.
References _KEYDATA, _sql_dbcursor_s::cmd, cvtdberr, dbg_keyval(), _sql_dbcursor_s::pStmt, _sql_dbcursor_s::pzErrmsg, rpmlog(), RPMLOG_WARNING, scpFree, scpLink, sql_bind_data(), sql_bind_key(), sql_step(), and SQLDBDEBUG.
Duplicate a database cursor.
| dbi | index database handle |
| dbcursor | database cursor |
| dbcp | address of new database cursor |
| flags | DB_POSITION for same position, 0 for uninitialized |
Definition at line 1686 of file sqlite.c.
References SQLDBDEBUG.
|
static |
Retrieve (key,data) pair using db->get or dbcursor->c_get.
| dbi | index database handle |
| dbcursor | database cursor (NULL will use db->get) |
| key | retrieve key value/length/flags |
| data | retrieve data value/length/flags |
| flags | (unused) |
Definition at line 1394 of file sqlite.c.
References _free(), _KEYDATA, _sql_dbcursor_s::all, _sql_dbcursor_s::av, _sql_dbcursor_s::avlen, _sql_dbcursor_s::cmd, cvtdberr, __db_dbt::data, DB_DBT_MALLOC, DB_NOTFOUND, DB_SET, dbg_keyval(), __db_dbt::flags, _sql_dbcursor_s::keys, _sql_dbcursor_s::ldata, _sql_dbcursor_s::lkey, _sql_dbcursor_s::nkeys, _sql_dbcursor_s::nr, _sql_dbcursor_s::pStmt, _sql_dbcursor_s::pzErrmsg, RPMDBI_PACKAGES, rpmlog(), RPMLOG_WARNING, _sql_dbcursor_s::rx, scpReset(), scpResetAv(), scpResetKeys(), __db_dbt::size, sql_bind_key(), sql_step(), SQLDBDEBUG, UINT32_T, _sql_dbcursor_s::used, xcalloc(), and xmalloc.
|
static |
Close index database, and destroy database handle.
| dbi | index database handle |
| flags | (unused) |
Definition at line 1089 of file sqlite.c.
References _free(), D_, DB_PRIVATE, rpmGenPath(), rpmlog(), RPMLOG_DEBUG, rpmsqlFree(), SQLDBDEBUG, Unlink(), and urlPath().
Referenced by sql_open().
Open database cursor.
| dbi | index database handle |
| txnid | database transaction handle |
| dbcp | address of new database cursor |
| flags | DB_WRITECURSOR or 0 |
Definition at line 1317 of file sqlite.c.
References RPM_MASK_TYPE, scpNew(), sql_cclose(), SQLDBDEBUG, tagName(), and tagType().
|
static |
Retrieve (key,data) pair using dbcursor->c_pget.
| dbi | index database handle |
| dbcursor | database cursor |
| key | secondary retrieve key value/length/flags |
| pkey | primary retrieve key value/length/flags |
| data | primary retrieve data value/length/flags |
| flags | DB_NEXT, DB_SET, or 0 |
Definition at line 1708 of file sqlite.c.
References _KEYDATA, and SQLDBDEBUG.
|
static |
Store (key,data) pair using db->put or dbcursor->c_put.
| dbi | index database handle |
| dbcursor | database cursor (NULL will use db->put) |
| key | store key value/length/flags |
| data | store data value/length/flags |
| flags | (unused) |
Definition at line 1566 of file sqlite.c.
References _KEYDATA, _sql_dbcursor_s::cmd, cvtdberr, dbg_keyval(), _sql_dbcursor_s::pStmt, _sql_dbcursor_s::pzErrmsg, rpmlog(), RPMLOG_WARNING, scpFree, scpLink, sql_bind_data(), sql_bind_key(), sql_step(), and SQLDBDEBUG.
|
static |
Definition at line 745 of file sqlite.c.
References _free(), cvtdberr, and SQLDBDEBUG.
Referenced by sql_initDB(), sql_seqno(), and sql_stat().
|
static |
Verify the DB is setup.
. if not initialize it
Create the table.. create the db_info
Definition at line 912 of file sqlite.c.
References _free(), DB_EXCL, name, RPM_MASK_TYPE, RPMDBI_PACKAGES, RPMDBI_SEQNO, rpmGenPath(), rpmioMkpath(), RPMTAG_PUBKEYS, sql_exec(), sql_initDB_cb(), SQLDBDEBUG, and tagType().
Referenced by sql_open().
|
static |
Return join cursor for list of cursors.
| dbi | index database handle |
| curslist | NULL terminated list of database cursors |
| dbcp | address of join database cursor |
| flags | DB_JOIN_NOSORT or 0 |
Definition at line 1666 of file sqlite.c.
References SQLDBDEBUG.
Return handle for an index database.
| rpmdb | rpm database |
| rpmtag | rpm tag |
| *dbip | index database handle |
Definition at line 1131 of file sqlite.c.
References _free(), cvtdberr, D_, DB_PRIVATE, rpmGenPath(), rpmioMkpath(), rpmlog(), RPMLOG_DEBUG, rpmsqlNew(), sql_busy_handler(), sql_close(), sql_initDB(), SQLDBDEBUG, sqlitevec, tagName(), urlPath(), and xstrdup().
|
static |
|
static |
Definition at line 511 of file sqlite.c.
References _sql_dbcursor_s::ac, _sql_dbcursor_s::av, _sql_dbcursor_s::avlen, _sql_dbcursor_s::cmd, cvtdberr, _sql_dbcursor_s::nalloc, _sql_dbcursor_s::nc, _sql_dbcursor_s::nr, _sql_dbcursor_s::pStmt, SQLDBDEBUG, xmalloc, xrealloc, and xstrdup().
Referenced by sql_cdel(), sql_cget(), and sql_cput().
|
static |
Flush pending operations to disk.
| dbi | index database handle |
| flags | (unused) |
Definition at line 1237 of file sqlite.c.
References SQLDBDEBUG.
|
static |
Definition at line 83 of file sqlite.c.
References key_s::n, and snprintf().
Referenced by fmtBits().
|
static |
Definition at line 222 of file sqlite.c.
References rpmlog(), and RPMLOG_ERR.
| rpmioPool _scpPool = NULL |
Definition at line 475 of file sqlite.c.
Referenced by rpmcliFini(), and scpGetPool().
|
static |
|
static |
| struct _dbiVec sqlitevec |
Definition at line 1793 of file sqlite.c.
Referenced by sql_open().
1.8.1.2