summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-11-03 15:34:08 -0500
committerJohn Wiegley <johnw@newartisans.com>2009-11-03 15:34:08 -0500
commita77d9fc2617c639f146aeb31b5eaeaa30fa96e5d (patch)
treeb6df4ffa6f9778877e06fc7a4ae904990f803dc6
parentbdb3ebca3fd33d530a0c38b739622082d23b6d93 (diff)
downloadfork-ledger-a77d9fc2617c639f146aeb31b5eaeaa30fa96e5d.tar.gz
fork-ledger-a77d9fc2617c639f146aeb31b5eaeaa30fa96e5d.tar.bz2
fork-ledger-a77d9fc2617c639f146aeb31b5eaeaa30fa96e5d.zip
Added error message if a predicate query is invalid
-rw-r--r--src/precmd.cc11
-rw-r--r--src/predicate.h3
-rw-r--r--src/report.cc10
3 files changed, 19 insertions, 5 deletions
diff --git a/src/precmd.cc b/src/precmd.cc
index a08fd2d6..479d7c2d 100644
--- a/src/precmd.cc
+++ b/src/precmd.cc
@@ -231,6 +231,9 @@ value_t args_command(call_scope_t& args)
out << std::endl << std::endl;
std::pair<expr_t, query_parser_t> info = args_to_predicate(begin, end);
+ if (! info.first)
+ throw_(std::runtime_error,
+ _("Invalid query predicate: %1") << join_args(args));
call_scope_t sub_args(static_cast<scope_t&>(args));
sub_args.push_back(string_value(info.first.text()));
@@ -242,8 +245,12 @@ value_t args_command(call_scope_t& args)
<< std::endl << std::endl;
call_scope_t disp_sub_args(static_cast<scope_t&>(args));
- disp_sub_args.push_back
- (string_value(args_to_predicate(info.second).first.text()));
+ info = args_to_predicate(info.second);
+ if (! info.first)
+ throw_(std::runtime_error,
+ _("Invalid display predicate: %1") << join_args(args));
+
+ disp_sub_args.push_back(string_value(info.first.text()));
parse_command(disp_sub_args);
}
diff --git a/src/predicate.h b/src/predicate.h
index 5e900234..2ac3cc4b 100644
--- a/src/predicate.h
+++ b/src/predicate.h
@@ -299,8 +299,7 @@ std::pair<expr_t, query_parser_t>
args_to_predicate(value_t::sequence_t::const_iterator begin,
value_t::sequence_t::const_iterator end);
-std::pair<expr_t, query_parser_t>
-args_to_predicate(query_parser_t parser);
+std::pair<expr_t, query_parser_t> args_to_predicate(query_parser_t parser);
} // namespace ledger
diff --git a/src/report.cc b/src/report.cc
index 60f6955c..fe482a2e 100644
--- a/src/report.cc
+++ b/src/report.cc
@@ -413,6 +413,9 @@ namespace {
args.value().as_sequence().end();
std::pair<expr_t, query_parser_t> info = args_to_predicate(begin, end);
+ if (! info.first)
+ throw_(std::runtime_error,
+ _("Invalid query predicate: %1") << join_args(args));
string limit = info.first.text();
if (! limit.empty())
@@ -422,7 +425,12 @@ namespace {
"Predicate = " << report.HANDLER(limit_).str());
if (info.second.tokens_remaining()) {
- string display = args_to_predicate(info.second).first.text();
+ info = args_to_predicate(info.second);
+ if (! info.first)
+ throw_(std::runtime_error,
+ _("Invalid display predicate: %1") << join_args(args));
+
+ string display = info.first.text();
if (! display.empty())
report.HANDLER(display_).on(whence, display);