[tracker/wip/garnacho/sparql1.1: 13/23] libtracker-data: Add SparqlCeil/Floor sqlite functions
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/garnacho/sparql1.1: 13/23] libtracker-data: Add SparqlCeil/Floor sqlite functions
- Date: Thu, 20 Aug 2015 08:53:46 +0000 (UTC)
commit 2d5912c2604f55bf5aa679925aa36ff21a07b982
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Jul 28 23:40:14 2015 +0200
libtracker-data: Add SparqlCeil/Floor sqlite functions
These will be used to implement CEIL/FLOOR, as per Sparql 1.1
src/libtracker-data/tracker-db-interface-sqlite.c | 39 +++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c
b/src/libtracker-data/tracker-db-interface-sqlite.c
index 5e6cada..0408549 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -979,6 +979,38 @@ function_sparql_string_after (sqlite3_context *context,
sqlite3_result_text (context, g_strdup (loc + len), -1, g_free);
}
+static void
+function_sparql_ceil (sqlite3_context *context,
+ int argc,
+ sqlite3_value *argv[])
+{
+ gdouble value;
+
+ if (argc != 1) {
+ sqlite3_result_error (context, "Invalid argument count", -1);
+ return;
+ }
+
+ value = sqlite3_value_double (argv[0]);
+ sqlite3_result_double (context, ceil (value));
+}
+
+static void
+function_sparql_floor (sqlite3_context *context,
+ int argc,
+ sqlite3_value *argv[])
+{
+ gdouble value;
+
+ if (argc != 1) {
+ sqlite3_result_error (context, "Invalid argument count", -1);
+ return;
+ }
+
+ value = sqlite3_value_double (argv[0]);
+ sqlite3_result_double (context, floor (value));
+}
+
static inline int
stmt_step (sqlite3_stmt *stmt)
{
@@ -1113,6 +1145,13 @@ open_database (TrackerDBInterface *db_interface,
db_interface, &function_sparql_string_after,
NULL, NULL);
+ sqlite3_create_function (db_interface->db, "SparqlCeil", 1, SQLITE_ANY,
+ db_interface, &function_sparql_ceil,
+ NULL, NULL);
+ sqlite3_create_function (db_interface->db, "SparqlFloor", 1, SQLITE_ANY,
+ db_interface, &function_sparql_floor,
+ NULL, NULL);
+
sqlite3_extended_result_codes (db_interface->db, 0);
sqlite3_busy_timeout (db_interface->db, 100000);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]