Skip to content

Commit e939f86

Browse files
committed
[prql] fix multi-line completion and add completion for "let"
Compile PRQL before trying to tack on `take 5` to make sure it's valid in the first place. Related to #1677
1 parent 56c9aff commit e939f86

12 files changed

Lines changed: 186 additions & 82 deletions

src/bottom_status_source.hh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ public:
6565
this->bss_error.set_value(msg);
6666
}
6767

68+
void set_error(const attr_line_t& msg)
69+
{
70+
this->bss_error.set_value(msg);
71+
}
72+
6873
size_t statusview_fields() override;
6974

7075
status_field& statusview_value_for_field(int field) override;

src/command_executor.cc

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,13 @@
5454
#include "lnav_util.hh"
5555
#include "log_format_loader.hh"
5656
#include "log_vtab_impl.hh"
57-
#include "prql-modules.h"
5857
#include "readline_highlighters.hh"
5958
#include "service_tags.hh"
6059
#include "shlex.hh"
6160
#include "sql_help.hh"
6261
#include "sql_util.hh"
6362
#include "vtab_module.hh"
6463

65-
#ifdef HAVE_RUST_DEPS
66-
# include "lnav_rs_ext.cxx.hh"
67-
#endif
68-
6964
using namespace std::literals::chrono_literals;
7065
using namespace lnav::roles::literals;
7166

@@ -330,53 +325,11 @@ execute_sql(exec_context& ec, const std::string& sql, std::string& alt_msg)
330325
if (lnav::sql::is_prql(stmt_str)) {
331326
log_info("compiling PRQL: %s", stmt_str.c_str());
332327

333-
#if HAVE_RUST_DEPS
334-
extern rust::Vec<lnav_rs_ext::SourceTreeElement> sqlite_extension_prql;
335-
auto opts = lnav_rs_ext::Options{true, "sql.sqlite", true};
336-
337-
auto tree = sqlite_extension_prql;
338-
for (const auto& mod : lnav_prql_modules) {
339-
auto name = mod.get_name().to_string();
340-
log_debug("lnav_rs_ext adding mod %s", name.c_str());
341-
tree.emplace_back(lnav_rs_ext::SourceTreeElement{
342-
name.c_str(),
343-
mod.to_string_fragment_producer()->to_string(),
344-
});
345-
}
346-
tree.emplace_back(lnav_rs_ext::SourceTreeElement{"", stmt_str});
347-
log_debug("BEGIN compiling tree");
348-
auto cr = lnav_rs_ext::compile_tree(tree, opts);
349-
log_debug("END compiling tree");
350-
351-
for (const auto& msg : cr.messages) {
352-
if (msg.kind != lnav_rs_ext::MessageKind::Error) {
353-
continue;
354-
}
355-
356-
auto stmt_al = attr_line_t(stmt_str);
357-
readline_sql_highlighter(stmt_al, lnav::sql::dialect::prql, 0);
358-
auto um
359-
= lnav::console::user_message::error(
360-
attr_line_t("unable to compile PRQL: ").append(stmt_al))
361-
.with_reason(
362-
attr_line_t::from_ansi_str((std::string) msg.reason));
363-
if (!msg.display.empty()) {
364-
um.with_note(
365-
attr_line_t::from_ansi_str((std::string) msg.display));
366-
}
367-
for (const auto& hint : msg.hints) {
368-
um.with_help(attr_line_t::from_ansi_str((std::string) hint));
369-
break;
370-
}
371-
return Err(um);
328+
auto compile_res = lnav::prql::compile(stmt_str);
329+
if (compile_res.isErr()) {
330+
return Err(compile_res.unwrapErr());
372331
}
373-
log_debug("done!");
374-
stmt_str = (std::string) cr.output;
375-
#else
376-
auto um = lnav::console::user_message::error(
377-
attr_line_t("PRQL is not supported in this build"));
378-
return Err(um);
379-
#endif
332+
stmt_str = compile_res.unwrap();
380333
}
381334

382335
log_info("Executing SQL: %s", stmt_str.c_str());

src/field_overlay_source.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,19 @@ field_overlay_source::build_field_lines(const listview_curses& lv,
324324
this->fos_lines.emplace_back(permalink);
325325
}
326326

327+
{
328+
const auto& filename
329+
= this->fos_log_helper.ldh_file->get_filename_as_string();
330+
auto file_al = attr_line_t(" ")
331+
.append("File:"_h2)
332+
.pad_to(15)
333+
.append(lnav::roles::file(filename));
334+
335+
this->fos_row_to_field_meta.emplace(this->fos_lines.size(),
336+
row_info{std::nullopt, filename});
337+
this->fos_lines.emplace_back(file_al);
338+
}
339+
327340
this->fos_known_key_size = LOG_BODY.length();
328341
if (!this->fos_contexts.empty()) {
329342
this->fos_known_key_size += this->fos_contexts.top().c_prefix.length();
@@ -385,6 +398,8 @@ field_overlay_source::build_field_lines(const listview_curses& lv,
385398
pattern_al.length(),
386399
line_range{skip, (int) pattern_al.length()});
387400
for (const auto& pattern_line_al : pattern_al.split_lines()) {
401+
this->fos_row_to_field_meta.emplace(
402+
this->fos_lines.size(), row_info{std::nullopt, pattern_str});
388403
this->fos_lines.emplace_back(pattern_line_al);
389404
}
390405
}

src/internals/sql-ref.rst

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4894,7 +4894,7 @@ aggregate *expr*
48944894
[1,2]
48954895

48964896
**See Also**
4897-
:ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
4897+
:ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
48984898

48994899
----
49004900

@@ -4910,7 +4910,7 @@ append *table*
49104910
* **table\*** --- The table to use as a source
49114911

49124912
**See Also**
4913-
:ref:`prql_aggregate`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
4913+
:ref:`prql_aggregate`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
49144914

49154915
----
49164916

@@ -4936,7 +4936,7 @@ derive *column*
49364936
2 4
49374937

49384938
**See Also**
4939-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
4939+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
49404940

49414941
----
49424942

@@ -4960,7 +4960,7 @@ filter *expr*
49604960
2
49614961

49624962
**See Also**
4963-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
4963+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
49644964

49654965
----
49664966

@@ -4996,7 +4996,7 @@ from *table*
49964996
2 def
49974997

49984998
**See Also**
4999-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
4999+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
50005000

50015001
----
50025002

@@ -5025,7 +5025,7 @@ group *key_columns* *pipeline*
50255025
error 1
50265026

50275027
**See Also**
5028-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5028+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
50295029

50305030
----
50315031

@@ -5043,7 +5043,33 @@ join *\[side:inner\]* *table* *condition*
50435043
* **condition\*** --- The condition used to join rows
50445044

50455045
**See Also**
5046-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5046+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5047+
5048+
----
5049+
5050+
5051+
.. _prql_let:
5052+
5053+
let *name*
5054+
^^^^^^^^^^
5055+
5056+
Define a variable
5057+
5058+
**Parameters**
5059+
* **name\*** --- The name for the variable
5060+
5061+
**Examples**
5062+
To set 'x' to 5:
5063+
5064+
.. code-block:: custsqlite
5065+
5066+
;let x = 5
5067+
error: unable to compile PRQL: let x = 5
5068+
reason: PRQL queries must begin with 'from'
5069+
= help: A query must start with a 'from' statement to define the main pipeline
5070+
5071+
**See Also**
5072+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
50475073

50485074
----
50495075

@@ -5078,7 +5104,7 @@ select *expr*
50785104
4
50795105

50805106
**See Also**
5081-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5107+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
50825108

50835109
----
50845110

@@ -5104,7 +5130,7 @@ sort *expr*
51045130
1
51055131

51065132
**See Also**
5107-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5133+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
51085134

51095135
----
51105136

@@ -5128,7 +5154,7 @@ stats.average_of *col*
51285154
1.3333333333333333
51295155

51305156
**See Also**
5131-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5157+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
51325158

51335159
----
51345160

@@ -5155,7 +5181,7 @@ stats.by *col* *values*
51555181
2 1
51565182

51575183
**See Also**
5158-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5184+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
51595185

51605186
----
51615187

@@ -5181,7 +5207,7 @@ stats.count_by *column*
51815207
2 1
51825208

51835209
**See Also**
5184-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5210+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
51855211

51865212
----
51875213

@@ -5218,7 +5244,7 @@ stats.hist *col* *\[slice:'1h'\]* *\[top:10\]*
52185244
2017-02⋯.000000 {"gw":1}
52195245

52205246
**See Also**
5221-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5247+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_sum_of`, :ref:`utils_distinct`
52225248

52235249
----
52245250

@@ -5242,7 +5268,7 @@ stats.sum_of *col*
52425268
4
52435269

52445270
**See Also**
5245-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`utils_distinct`
5271+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`utils_distinct`
52465272

52475273
----
52485274

@@ -5275,7 +5301,7 @@ take *n_or_range*
52755301
3
52765302

52775303
**See Also**
5278-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
5304+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`, :ref:`utils_distinct`
52795305

52805306
----
52815307

@@ -5301,7 +5327,7 @@ utils.distinct *col*
53015327
2
53025328

53035329
**See Also**
5304-
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`
5330+
:ref:`prql_aggregate`, :ref:`prql_append`, :ref:`prql_derive`, :ref:`prql_filter`, :ref:`prql_from`, :ref:`prql_group`, :ref:`prql_join`, :ref:`prql_let`, :ref:`prql_select`, :ref:`prql_sort`, :ref:`prql_take`, :ref:`stats_average_of`, :ref:`stats_by`, :ref:`stats_count_by`, :ref:`stats_hist`, :ref:`stats_sum_of`
53055331

53065332
----
53075333

src/readline_callbacks.cc

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@
3535
#include "base/humanize.network.hh"
3636
#include "base/injector.hh"
3737
#include "base/itertools.hh"
38+
#include "base/itertools.similar.hh"
3839
#include "base/paths.hh"
3940
#include "bound_tags.hh"
4041
#include "cmd.parser.hh"
4142
#include "command_executor.hh"
4243
#include "config.h"
4344
#include "field_overlay_source.hh"
4445
#include "help_text_formatter.hh"
45-
#include "base/itertools.similar.hh"
4646
#include "lnav.hh"
4747
#include "lnav.prompt.hh"
4848
#include "lnav_config.hh"
@@ -599,11 +599,11 @@ rl_sql_change(textinput_curses& rc, bool is_req)
599599
rc.open_popup_for_completion(0, poss);
600600
rc.tc_popup.set_title("DB Command");
601601
} else if (is_prql) {
602-
auto anno_line = attr_line_t(line);
602+
auto anno_line = rc.tc_lines[rc.tc_cursor.y];
603603
lnav::sql::annotate_prql_statement(anno_line);
604-
auto cursor_offset = prompt.p_editor.get_cursor_offset();
604+
auto cursor_offset = anno_line.column_to_byte_index(rc.tc_cursor.x);
605605
606-
log_debug("curs %d", cursor_offset);
606+
log_debug("curs %zu", cursor_offset);
607607
for (const auto& attr : anno_line.al_attrs) {
608608
log_debug("attr [%d:%d) %s",
609609
attr.sa_range.lr_start,
@@ -615,10 +615,6 @@ rl_sql_change(textinput_curses& rc, bool is_req)
615615
anno_line.al_attrs, cursor_offset, [](const auto& x) {
616616
return x.sa_type != &lnav::sql::PRQL_STAGE_ATTR;
617617
});
618-
auto stage_iter = rfind_string_attr_if(
619-
anno_line.al_attrs, cursor_offset, [](const auto& x) {
620-
return x.sa_type == &lnav::sql::PRQL_STAGE_ATTR;
621-
});
622618
if (attr_iter != anno_line.al_attrs.end()) {
623619
auto to_complete_sf = anno_line.to_string_fragment(attr_iter);
624620
auto to_complete = to_complete_sf.to_string();
@@ -1148,6 +1144,20 @@ rl_search_internal(textinput_curses& rc, ln_mode_t mode, bool complete = false)
11481144
lnav_data.ld_db_preview_source[0].clear();
11491145
lnav_data.ld_db_preview_source[1].clear();
11501146
1147+
{
1148+
auto compile_res = lnav::prql::compile(term_val);
1149+
if (compile_res.isErr()) {
1150+
auto um = compile_res.unwrapErr();
1151+
auto err_as_line = attr_line_t()
1152+
.append(um.um_message)
1153+
.append(" \u2014 ")
1154+
.append(um.um_reason);
1155+
lnav_data.ld_bottom_source.set_error(err_as_line);
1156+
lnav_data.ld_status[LNS_BOTTOM].set_needs_update();
1157+
return;
1158+
}
1159+
}
1160+
11511161
auto orig_prql_stmt = attr_line_t(term_val);
11521162
orig_prql_stmt.rtrim("| \r\n\t");
11531163
lnav::sql::annotate_prql_statement(orig_prql_stmt);

0 commit comments

Comments
 (0)