mirror of
https://github.com/tstack/lnav
synced 2024-11-03 23:15:38 +00:00
[sql] fix spurious loading bar flash while searching
This commit is contained in:
parent
399c78d86d
commit
3c0d78d28e
@ -38,6 +38,32 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
static int sql_progress(const struct log_cursor &lc)
|
||||
{
|
||||
static sig_atomic_t sql_counter = 0;
|
||||
|
||||
size_t total = lnav_data.ld_log_source.text_line_count();
|
||||
off_t off = lc.lc_curr_line;
|
||||
|
||||
if (lnav_data.ld_window == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!lnav_data.ld_looping) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ui_periodic_timer::singleton().time_to_update(sql_counter)) {
|
||||
lnav_data.ld_bottom_source.update_loading(off, total);
|
||||
lnav_data.ld_top_source.update_time();
|
||||
lnav_data.ld_status[LNS_TOP].do_update();
|
||||
lnav_data.ld_status[LNS_BOTTOM].do_update();
|
||||
refresh();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
string execute_from_file(const string &path, int line_number, char mode, const string &cmdline);
|
||||
|
||||
string execute_command(string cmdline)
|
||||
@ -94,6 +120,7 @@ string execute_sql(string sql, string &alt_msg)
|
||||
hs.get_displayed_buckets().clear();
|
||||
dls.clear();
|
||||
dls.dls_stmt_str = stmt_str;
|
||||
sql_progress_guard progress_guard(sql_progress);
|
||||
retcode = sqlite3_prepare_v2(lnav_data.ld_db.in(),
|
||||
stmt_str.c_str(),
|
||||
-1,
|
||||
|
29
src/lnav.cc
29
src/lnav.cc
@ -2202,32 +2202,6 @@ static void setup_highlights(textview_curses::highlight_map_t &hm)
|
||||
false, view_colors::VCR_VARIABLE);
|
||||
}
|
||||
|
||||
int sql_progress(const struct log_cursor &lc)
|
||||
{
|
||||
static sig_atomic_t sql_counter = 0;
|
||||
|
||||
size_t total = lnav_data.ld_log_source.text_line_count();
|
||||
off_t off = lc.lc_curr_line;
|
||||
|
||||
if (lnav_data.ld_window == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!lnav_data.ld_looping) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ui_periodic_timer::singleton().time_to_update(sql_counter)) {
|
||||
lnav_data.ld_bottom_source.update_loading(off, total);
|
||||
lnav_data.ld_top_source.update_time();
|
||||
lnav_data.ld_status[LNS_TOP].do_update();
|
||||
lnav_data.ld_status[LNS_BOTTOM].do_update();
|
||||
refresh();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void print_errors(vector<string> error_list)
|
||||
{
|
||||
for (std::vector<std::string>::iterator iter = error_list.begin();
|
||||
@ -2496,8 +2470,7 @@ int main(int argc, char *argv[])
|
||||
lnav_data.ld_vtab_manager =
|
||||
new log_vtab_manager(lnav_data.ld_db,
|
||||
lnav_data.ld_views[LNV_LOG],
|
||||
lnav_data.ld_log_source,
|
||||
sql_progress);
|
||||
lnav_data.ld_log_source);
|
||||
|
||||
{
|
||||
auto_mem<char, sqlite3_free> errmsg;
|
||||
|
@ -39,7 +39,7 @@ using namespace std;
|
||||
|
||||
static struct log_cursor log_cursor_latest;
|
||||
|
||||
static sql_progress_callback_t vtab_progress_callback;
|
||||
sql_progress_callback_t log_vtab_progress_callback;
|
||||
|
||||
static const char *type_to_string(int type)
|
||||
{
|
||||
@ -224,7 +224,7 @@ static int vt_next(sqlite3_vtab_cursor *cur)
|
||||
do {
|
||||
log_cursor_latest = vc->log_cursor;
|
||||
if (((log_cursor_latest.lc_curr_line % 1024) == 0) &&
|
||||
vtab_progress_callback(log_cursor_latest)) {
|
||||
log_vtab_progress_callback(log_cursor_latest)) {
|
||||
break;
|
||||
}
|
||||
done = vt->vi->next(vc->log_cursor, *vt->lss);
|
||||
@ -645,8 +645,8 @@ static int progress_callback(void *ptr)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
if (vtab_progress_callback != NULL) {
|
||||
retval = vtab_progress_callback(log_cursor_latest);
|
||||
if (log_vtab_progress_callback != NULL) {
|
||||
retval = log_vtab_progress_callback(log_cursor_latest);
|
||||
}
|
||||
|
||||
return retval;
|
||||
@ -654,12 +654,10 @@ static int progress_callback(void *ptr)
|
||||
|
||||
log_vtab_manager::log_vtab_manager(sqlite3 *memdb,
|
||||
textview_curses &tc,
|
||||
logfile_sub_source &lss,
|
||||
sql_progress_callback_t pc)
|
||||
logfile_sub_source &lss)
|
||||
: vm_db(memdb), vm_textview(tc), vm_source(lss)
|
||||
{
|
||||
sqlite3_create_module(this->vm_db, "log_vtab_impl", &vtab_module, this);
|
||||
vtab_progress_callback = pc;
|
||||
sqlite3_progress_handler(memdb, 32, progress_callback, NULL);
|
||||
}
|
||||
|
||||
|
@ -164,14 +164,26 @@ protected:
|
||||
|
||||
typedef int (*sql_progress_callback_t)(const log_cursor &lc);
|
||||
|
||||
extern sql_progress_callback_t log_vtab_progress_callback;
|
||||
|
||||
class sql_progress_guard {
|
||||
public:
|
||||
sql_progress_guard(sql_progress_callback_t cb) {
|
||||
log_vtab_progress_callback = cb;
|
||||
};
|
||||
|
||||
~sql_progress_guard() {
|
||||
log_vtab_progress_callback = NULL;
|
||||
};
|
||||
};
|
||||
|
||||
class log_vtab_manager {
|
||||
public:
|
||||
typedef std::map<intern_string_t, log_vtab_impl *>::const_iterator iterator;
|
||||
|
||||
log_vtab_manager(sqlite3 *db,
|
||||
textview_curses &tc,
|
||||
logfile_sub_source &lss,
|
||||
sql_progress_callback_t);
|
||||
logfile_sub_source &lss);
|
||||
|
||||
textview_curses *get_view() const { return &this->vm_textview; };
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user