diff --git a/src/frontend/query.c b/src/frontend/query.c
index 7b105e731bf056af321611bc444a2a7287151d6a..34b35839e03c3d00835e449710f5fffaec5d76fc 100644 (file)
--- a/src/frontend/query.c
+++ b/src/frontend/query.c
return -1;
parsetree = sdb_fe_parse(sdb_strbuf_string(conn->buf),
- (int)conn->cmd_len);
+ (int)conn->cmd_len, conn->errbuf);
if (! parsetree) {
char query[conn->cmd_len + 1];
strncpy(query, sdb_strbuf_string(conn->buf), conn->cmd_len);
query[sizeof(query) - 1] = '\0';
- sdb_log(SDB_LOG_ERR, "frontend: Failed to parse query '%s'",
- query);
+ sdb_log(SDB_LOG_ERR, "frontend: Failed to parse query '%s': %s",
+ query, sdb_strbuf_string(conn->errbuf));
return -1;
}
}
if (node) {
- if (sdb_fe_analyze(node)) {
- char query[conn->cmd_len + 1];
- strncpy(query, sdb_strbuf_string(conn->buf), conn->cmd_len);
- query[sizeof(query) - 1] = '\0';
- sdb_log(SDB_LOG_ERR, "frontend: Failed to verify query '%s'",
- query);
- status = -1;
- }
- else
- status = sdb_fe_exec(conn, node);
+ status = sdb_fe_exec(conn, node);
sdb_object_deref(SDB_OBJ(node));
}
matcher = sdb_strbuf_string(conn->buf) + sizeof(uint32_t);
matcher_len = conn->cmd_len - sizeof(uint32_t);
- m = sdb_fe_parse_matcher(matcher, (int)matcher_len);
+ m = sdb_fe_parse_matcher(matcher, (int)matcher_len, conn->errbuf);
if (! m) {
char expr[matcher_len + 1];
strncpy(expr, matcher, sizeof(expr));
expr[sizeof(expr) - 1] = '\0';
sdb_log(SDB_LOG_ERR, "frontend: Failed to parse "
- "lookup condition '%s'", expr);
+ "lookup condition '%s': %s", expr,
+ sdb_strbuf_string(conn->errbuf));
return -1;
}
node.type = type;
m_node.matcher = m;
- if (sdb_fe_analyze(SDB_CONN_NODE(&node))) {
+ /* run analyzer separately; parse_matcher is missing
+ * the right context to do so */
+ if (sdb_fe_analyze(SDB_CONN_NODE(&node), conn->errbuf)) {
char expr[matcher_len + 1];
+ char err[sdb_strbuf_len(conn->errbuf) + sizeof(expr) + 64];
strncpy(expr, matcher, sizeof(expr));
expr[sizeof(expr) - 1] = '\0';
- sdb_log(SDB_LOG_ERR, "frontend: Failed to verify "
- "lookup condition '%s'", expr);
+ snprintf(err, sizeof(err), "Failed to parse "
+ "lookup condition '%s': %s", expr,
+ sdb_strbuf_string(conn->errbuf));
+ sdb_strbuf_sprintf(conn->errbuf, "%s", err);
status = -1;
}
else