From 0ee6bdd5bfa61523d7870d99b3d2bd208cdbbbdc Mon Sep 17 00:00:00 2001 From: Timothy Stack Date: Sun, 22 Jul 2018 06:51:05 -0700 Subject: [PATCH] [sql] the log_part column was not correct in some cases --- src/log_vtab_impl.cc | 38 +++++++++++++++++++------------------- test/test_sql.sh | 18 +++++++++++------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/log_vtab_impl.cc b/src/log_vtab_impl.cc index e5cd5822..f1d75160 100644 --- a/src/log_vtab_impl.cc +++ b/src/log_vtab_impl.cc @@ -309,31 +309,31 @@ static int vt_column(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int col) { vis_bookmarks &vb = vt->tc->get_bookmarks(); bookmark_vector &bv = vb[&textview_curses::BM_META]; - bookmark_vector::iterator iter; - vis_line_t curr_line; - curr_line = vis_line_t(vc->log_cursor.lc_curr_line); - iter = lower_bound(bv.begin(), bv.end(), curr_line); - - if (bv.empty() || (iter != bv.end() && curr_line < *iter)) { + if (bv.empty()) { sqlite3_result_null(ctx); } else { - if (iter == bv.end() || *iter != curr_line) { + vis_line_t curr_line(vc->log_cursor.lc_curr_line); + auto iter = lower_bound(bv.begin(), bv.end(), curr_line + 1_vl); + + if (iter != bv.begin()) { --iter; - } - content_line_t part_line = vt->lss->at(*iter); - std::map &bm_meta = vt->lss->get_user_bookmark_metadata(); - std::map::iterator meta_iter; + content_line_t part_line = vt->lss->at(*iter); + std::map &bm_meta = vt->lss->get_user_bookmark_metadata(); + std::map::iterator meta_iter; - meta_iter = bm_meta.find(part_line); - if (meta_iter != bm_meta.end() && !meta_iter->second.bm_name.empty()) { - sqlite3_result_text(ctx, - meta_iter->second.bm_name.c_str(), - meta_iter->second.bm_name.size(), - SQLITE_TRANSIENT); - } - else { + meta_iter = bm_meta.find(part_line); + if (meta_iter != bm_meta.end() && + !meta_iter->second.bm_name.empty()) { + sqlite3_result_text(ctx, + meta_iter->second.bm_name.c_str(), + meta_iter->second.bm_name.size(), + SQLITE_TRANSIENT); + } else { + sqlite3_result_null(ctx); + } + } else { sqlite3_result_null(ctx); } } diff --git a/test/test_sql.sh b/test/test_sql.sh index f06533a0..00cf7dbb 100644 --- a/test/test_sql.sh +++ b/test/test_sql.sh @@ -649,18 +649,22 @@ EOF run_test ${lnav_test} -n \ -c ":goto 1" \ -c ":partition-name middle" \ - -c ";select * from access_log" \ + -c ":goto 21" \ + -c ":partition-name end" \ + -c ";select log_line,log_part,log_time from syslog_log" \ -c ":write-csv-to -" \ - ${test_dir}/logfile_access_log.0 + ${test_dir}/logfile_pretty.0 check_output "partition-name does not work" <,2009-07-20 22:59:26.000,0,info,0,,,192.168.202.254,GET,-,,/vmw/cgi/tramp,gPXE/0.9.7,-,HTTP/1.0,134,200 -1,middle,2009-07-20 22:59:29.000,3000,error,0,,,192.168.202.254,GET,-,,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404 -2,middle,2009-07-20 22:59:29.000,0,info,0,,,192.168.202.254,GET,-,,/vmw/vSphere/default/vmkernel.gz,gPXE/0.9.7,-,HTTP/1.0,78929,200 +log_line,log_part,log_time +0,,2015-04-07 00:49:42.000 +1,middle,2015-04-07 05:49:53.000 +18,middle,2015-04-07 07:31:56.000 +20,middle,2015-04-07 07:31:56.000 +21,end,2015-04-07 07:31:56.000 +22,end,2015-04-07 07:32:56.000 EOF - run_test ${lnav_test} -n \ -c ":goto 1" \ -c ":partition-name middle" \