[tracker/wip/garnacho/sparql1.1: 13/23] libtracker-data: Add SparqlCeil/Floor sqlite functions



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]