|
|
|
@ -284,7 +284,7 @@ log_vtab_impl::is_valid(log_cursor& lc, logfile_sub_source& lss)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct vtab {
|
|
|
|
|
struct log_vtab {
|
|
|
|
|
sqlite3_vtab base;
|
|
|
|
|
sqlite3* db;
|
|
|
|
|
textview_curses* tc{nullptr};
|
|
|
|
@ -321,7 +321,7 @@ vt_create(sqlite3* db,
|
|
|
|
|
auto* vm = (log_vtab_manager*) pAux;
|
|
|
|
|
int rc = SQLITE_OK;
|
|
|
|
|
/* Allocate the sqlite3_vtab/vtab structure itself */
|
|
|
|
|
auto p_vt = std::make_unique<vtab>();
|
|
|
|
|
auto p_vt = std::make_unique<log_vtab>();
|
|
|
|
|
|
|
|
|
|
p_vt->db = db;
|
|
|
|
|
|
|
|
|
@ -346,7 +346,7 @@ vt_create(sqlite3* db,
|
|
|
|
|
static int
|
|
|
|
|
vt_destructor(sqlite3_vtab* p_svt)
|
|
|
|
|
{
|
|
|
|
|
vtab* p_vt = (vtab*) p_svt;
|
|
|
|
|
log_vtab* p_vt = (log_vtab*) p_svt;
|
|
|
|
|
|
|
|
|
|
delete p_vt;
|
|
|
|
|
|
|
|
|
@ -381,7 +381,7 @@ static int vt_next(sqlite3_vtab_cursor* cur);
|
|
|
|
|
static int
|
|
|
|
|
vt_open(sqlite3_vtab* p_svt, sqlite3_vtab_cursor** pp_cursor)
|
|
|
|
|
{
|
|
|
|
|
vtab* p_vt = (vtab*) p_svt;
|
|
|
|
|
log_vtab* p_vt = (log_vtab*) p_svt;
|
|
|
|
|
|
|
|
|
|
p_vt->base.zErrMsg = nullptr;
|
|
|
|
|
|
|
|
|
@ -428,7 +428,7 @@ vt_eof(sqlite3_vtab_cursor* cur)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
populate_indexed_columns(vtab_cursor* vc, vtab* vt)
|
|
|
|
|
populate_indexed_columns(vtab_cursor* vc, log_vtab* vt)
|
|
|
|
|
{
|
|
|
|
|
if (vc->log_cursor.is_eof() || vc->log_cursor.lc_indexed_columns.empty()) {
|
|
|
|
|
return;
|
|
|
|
@ -487,7 +487,7 @@ static int
|
|
|
|
|
vt_next(sqlite3_vtab_cursor* cur)
|
|
|
|
|
{
|
|
|
|
|
auto* vc = (vtab_cursor*) cur;
|
|
|
|
|
auto* vt = (vtab*) cur->pVtab;
|
|
|
|
|
auto* vt = (log_vtab*) cur->pVtab;
|
|
|
|
|
auto done = false;
|
|
|
|
|
|
|
|
|
|
vc->line_values.clear();
|
|
|
|
@ -539,7 +539,7 @@ static int
|
|
|
|
|
vt_next_no_rowid(sqlite3_vtab_cursor* cur)
|
|
|
|
|
{
|
|
|
|
|
auto* vc = (vtab_cursor*) cur;
|
|
|
|
|
auto* vt = (vtab*) cur->pVtab;
|
|
|
|
|
auto* vt = (log_vtab*) cur->pVtab;
|
|
|
|
|
auto done = false;
|
|
|
|
|
|
|
|
|
|
vc->line_values.lvv_values.clear();
|
|
|
|
@ -595,7 +595,7 @@ static int
|
|
|
|
|
vt_column(sqlite3_vtab_cursor* cur, sqlite3_context* ctx, int col)
|
|
|
|
|
{
|
|
|
|
|
auto* vc = (vtab_cursor*) cur;
|
|
|
|
|
auto* vt = (vtab*) cur->pVtab;
|
|
|
|
|
auto* vt = (log_vtab*) cur->pVtab;
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_INDEXING
|
|
|
|
|
log_debug("vt_column(%s, %d:%d)",
|
|
|
|
@ -1271,7 +1271,7 @@ vt_filter(sqlite3_vtab_cursor* p_vtc,
|
|
|
|
|
sqlite3_value** argv)
|
|
|
|
|
{
|
|
|
|
|
auto* p_cur = (vtab_cursor*) p_vtc;
|
|
|
|
|
auto* vt = (vtab*) p_vtc->pVtab;
|
|
|
|
|
auto* vt = (log_vtab*) p_vtc->pVtab;
|
|
|
|
|
sqlite3_index_info::sqlite3_index_constraint* index = nullptr;
|
|
|
|
|
|
|
|
|
|
if (idxStr) {
|
|
|
|
@ -1707,7 +1707,7 @@ vt_best_index(sqlite3_vtab* tab, sqlite3_index_info* p_info)
|
|
|
|
|
std::vector<sqlite3_index_info::sqlite3_index_constraint> indexes;
|
|
|
|
|
std::vector<std::string> index_desc;
|
|
|
|
|
int argvInUse = 0;
|
|
|
|
|
auto* vt = (vtab*) tab;
|
|
|
|
|
auto* vt = (log_vtab*) tab;
|
|
|
|
|
|
|
|
|
|
log_info("vt_best_index(%s, nConstraint=%d)",
|
|
|
|
|
vt->vi->get_name().get(),
|
|
|
|
@ -1900,7 +1900,7 @@ vt_update(sqlite3_vtab* tab,
|
|
|
|
|
sqlite3_value** argv,
|
|
|
|
|
sqlite_int64* rowid_out)
|
|
|
|
|
{
|
|
|
|
|
vtab* vt = (vtab*) tab;
|
|
|
|
|
auto* vt = (log_vtab*) tab;
|
|
|
|
|
int retval = SQLITE_READONLY;
|
|
|
|
|
|
|
|
|
|
if (argc > 1 && sqlite3_value_type(argv[0]) != SQLITE_NULL
|
|
|
|
|