]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add GREATEST(x, ...) to sqlite to support sqlcounter
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 2 Dec 2013 23:18:47 +0000 (23:18 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 2 Dec 2013 23:21:33 +0000 (23:21 +0000)
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c

index 72291da0557ec7919e864d9e2af3d88e4a8db933..040bb53cc09b6973fc9590b7242cccf64185c3d0 100644 (file)
@@ -336,6 +336,21 @@ static int sql_socket_destructor(void *c)
        return 0;
 }
 
+static void _sql_greatest(sqlite3_context *ctx, int num_values, sqlite3_value **values)
+{
+       int i;
+       sqlite3_int64 value, max = 0;
+
+       for (i = 0; i < num_values; i++) {
+               value = sqlite3_value_int64(values[i]);
+               if (value < max) {
+                       max = value;
+               }
+       }
+
+       sqlite3_result_int64(ctx, max);
+}
+
 static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
 {
        rlm_sql_sqlite_conn_t *conn;
@@ -373,6 +388,17 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
                return -1;
        }
 
+#ifdef HAVE_SQLITE_V2_API
+       status = sqlite3_create_function_v2(conn->db, "GREATEST", -1, SQLITE_ANY, NULL,
+                                           _sql_greatest, NULL, NULL, NULL);
+#else
+       status = sqlite3_create_function(conn->db, "GREATEST", -1, SQLITE_ANY, NULL,
+                                        _sql_greatest, NULL, NULL);
+#endif
+       if (status != SQLITE_OK) {
+               ERROR("rlm_sql_sqlite: Failed registering 'GREATEST' sql function: %s", sqlite3_errmsg(conn->db));
+       }
+
        return 0;
 }