Added error message if a predicate query is invalid

This commit is contained in:
John Wiegley 2009-11-03 15:34:08 -05:00
parent bdb3ebca3f
commit a77d9fc261
3 changed files with 19 additions and 5 deletions

View file

@ -231,6 +231,9 @@ value_t args_command(call_scope_t& args)
out << std::endl << std::endl; out << std::endl << std::endl;
std::pair<expr_t, query_parser_t> info = args_to_predicate(begin, 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));
call_scope_t sub_args(static_cast<scope_t&>(args)); call_scope_t sub_args(static_cast<scope_t&>(args));
sub_args.push_back(string_value(info.first.text())); 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; << std::endl << std::endl;
call_scope_t disp_sub_args(static_cast<scope_t&>(args)); call_scope_t disp_sub_args(static_cast<scope_t&>(args));
disp_sub_args.push_back info = args_to_predicate(info.second);
(string_value(args_to_predicate(info.second).first.text())); 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); parse_command(disp_sub_args);
} }

View file

@ -299,8 +299,7 @@ std::pair<expr_t, query_parser_t>
args_to_predicate(value_t::sequence_t::const_iterator begin, args_to_predicate(value_t::sequence_t::const_iterator begin,
value_t::sequence_t::const_iterator end); value_t::sequence_t::const_iterator end);
std::pair<expr_t, query_parser_t> std::pair<expr_t, query_parser_t> args_to_predicate(query_parser_t parser);
args_to_predicate(query_parser_t parser);
} // namespace ledger } // namespace ledger

View file

@ -413,6 +413,9 @@ namespace {
args.value().as_sequence().end(); args.value().as_sequence().end();
std::pair<expr_t, query_parser_t> info = args_to_predicate(begin, 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(); string limit = info.first.text();
if (! limit.empty()) if (! limit.empty())
@ -422,7 +425,12 @@ namespace {
"Predicate = " << report.HANDLER(limit_).str()); "Predicate = " << report.HANDLER(limit_).str());
if (info.second.tokens_remaining()) { 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()) if (! display.empty())
report.HANDLER(display_).on(whence, display); report.HANDLER(display_).on(whence, display);