X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fquery.c;h=338d95a75c6351343a6a2b248b3f5bc2a61cdafa;hp=7b105e731bf056af321611bc444a2a7287151d6a;hb=34bfa9790e6e7ed1ba9f1d4ed17fa34a73a1b064;hpb=04f49a80dff6b98ebe7eed5d3a3a1ea46989814e diff --git a/src/frontend/query.c b/src/frontend/query.c index 7b105e7..338d95a 100644 --- a/src/frontend/query.c +++ b/src/frontend/query.c @@ -73,13 +73,13 @@ sdb_fe_query(sdb_conn_t *conn) 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; } @@ -107,16 +107,7 @@ sdb_fe_query(sdb_conn_t *conn) } 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)); } @@ -201,24 +192,27 @@ sdb_fe_lookup(sdb_conn_t *conn) 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; + /* run analyzer separately; parse_matcher is missing + * the right context to do so */ if (sdb_fe_analyze(SDB_CONN_NODE(&node))) { char expr[matcher_len + 1]; strncpy(expr, matcher, sizeof(expr)); expr[sizeof(expr) - 1] = '\0'; - sdb_log(SDB_LOG_ERR, "frontend: Failed to verify " + sdb_strbuf_sprintf(conn->errbuf, "Failed to verify " "lookup condition '%s'", expr); status = -1; }