}
+/**
+ * Return the line number of the end-of-scope for the expression indicated by start_line_no
+ *
+ * @param cntxt context containing the Expression Database handle
+ * @param file_name path to the file in which the expression in question exists
+ * @param start_line_no expression's line
+ * @param iter callback function, iterator for values returned from the Database
+ * @param iter_cls closure for the expression iterator, will contain the scope-end line number
+ * @return GNUNET_OK on success, GNUNET_NO on failure
+ */
+int
+GNUNET_MONKEY_EDB_get_expression_scope_end(struct GNUNET_MONKEY_EDB_Context *cntxt,
+ const char *file_name, int start_line_no,
+ GNUNET_MONKEY_ExpressionIterator iter,
+ void *iter_cls)
+{
+ int err;
+ char *errMsg;
+ char *query;
+
+ if (asprintf(&query, "select end_lineno from Expression where file_name LIKE \'%%/%s\' and start_lineno = %d", file_name, start_line_no) == -1) {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Memory allocation problem occurred during creating database query!\n");
+ return GNUNET_NO;
+ }
+
+ err = sqlite3_exec(cntxt->db_handle, query, iter, iter_cls, &errMsg);
+ if (err) {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error occurred while executing Database query. `%s'",
+ errMsg);
+ return GNUNET_NO;
+ }
+ return GNUNET_OK;
+}
+
+
/**
* Run an SQLite query to retrieve those expressions that are previous to
* given expression and are in the same scope of the given expression
*
- * @param cntxt context containing the Expression Database handle.
+ * @param cntxt context containing the Expression Database handle
* @param file_name path to the file in which the expression in question exists
* @param start_line_no expression beginning line
* @param end_line_no line number for the expression's scope end
char *query;
if (asprintf
(&query,
- "select expr_syntax, start_lineno from Expression where file_name = \'%s\' and start_lineno < %d and end_lineno = %d",
+ "select expr_syntax, start_lineno from Expression where file_name LIKE \'%%/%s\' and start_lineno <= %d and end_lineno = %d",
file_name, start_line_no, end_line_no) == -1)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Memory allocation problem occurred.");
+ "Memory allocation problem occurred!\n");
return GNUNET_NO;
}