[libgda] SQLite: using sqlite3_create_function_v2



commit 9fb2ab10c4a668d4b6a9928577ecc453381ff579
Author: Daniel Espinosa Ortiz <esodan gmail com>
Date:   Thu Mar 7 14:12:03 2019 -0600

    SQLite: using sqlite3_create_function_v2
    
    Fix https://gitlab.gnome.org/GNOME/libgda/issues/183

 libgda/sqlite/gda-sqlite-provider.c | 12 ++++++++----
 libgda/sqlite/gda-sqlite.h          |  1 +
 2 files changed, 9 insertions(+), 4 deletions(-)
---
diff --git a/libgda/sqlite/gda-sqlite-provider.c b/libgda/sqlite/gda-sqlite-provider.c
index 3702804f9..75a6cd3b3 100644
--- a/libgda/sqlite/gda-sqlite-provider.c
+++ b/libgda/sqlite/gda-sqlite-provider.c
@@ -1376,10 +1376,11 @@ gda_sqlite_provider_prepare_connection (GdaServerProvider *provider, GdaConnecti
 
                        for (i = 0; i < sizeof (scalars) / sizeof (ScalarFunction); i++) {
                                ScalarFunction *func = (ScalarFunction *) &(scalars [i]);
-                               gint res = (s3r->sqlite3_create_function) (cdata->connection,
+                               g_object_ref (prov);
+                               gint res = (s3r->sqlite3_create_function_v2) (cdata->connection,
                                                                                         func->name, 
func->nargs,
                                                                                         SQLITE_UTF8, prov,
-                                                                                        func->xFunc, NULL, 
NULL);
+                                                                                        func->xFunc, NULL, 
NULL, g_object_unref);
                                if (res != SQLITE_OK) {
                                        gda_connection_add_event_string (cnc, _("Could not register function 
'%s'"),
                                                                         func->name);
@@ -1395,10 +1396,11 @@ gda_sqlite_provider_prepare_connection (GdaServerProvider *provider, GdaConnecti
 
                        for (i = 0; i < sizeof (regexp_functions) / sizeof (ScalarFunction); i++) {
                                ScalarFunction *func = (ScalarFunction *) &(regexp_functions [i]);
-                               gint res = (s3r->sqlite3_create_function) (cdata->connection,
+                               g_object_ref (prov);
+                               gint res = (s3r->sqlite3_create_function_v2) (cdata->connection,
                                                                                         func->name, 
func->nargs,
                                                                                         SQLITE_UTF8, prov,
-                                                                                        func->xFunc, NULL, 
NULL);
+                                                                                        func->xFunc, NULL, 
NULL, g_object_unref);
                                if (res != SQLITE_OK) {
                                        gda_connection_add_event_string (cnc, _("Could not register function 
'%s'"),
                                                                         func->name);
@@ -5311,6 +5313,8 @@ gda_sqlite_load_symbols (GModule *module, Sqlite3ApiRoutines** apilib)
                goto onerror;
        if (! g_module_symbol (module, "sqlite3_create_function", (gpointer*) 
&((*apilib)->sqlite3_create_function)))
                goto onerror;
+       if (! g_module_symbol (module, "sqlite3_create_function_v2", (gpointer*) 
&((*apilib)->sqlite3_create_function_v2)))
+               goto onerror;
        if (! g_module_symbol (module, "sqlite3_create_module", (gpointer*) 
&((*apilib)->sqlite3_create_module)))
                goto onerror;
        if (! g_module_symbol (module, "sqlite3_db_handle", (gpointer*) &((*apilib)->sqlite3_db_handle)))
diff --git a/libgda/sqlite/gda-sqlite.h b/libgda/sqlite/gda-sqlite.h
index 7915735de..1321b6e70 100644
--- a/libgda/sqlite/gda-sqlite.h
+++ b/libgda/sqlite/gda-sqlite.h
@@ -98,6 +98,7 @@ typedef struct {
        int (*sqlite3_config) (int, ...);
 
        int  (*sqlite3_create_function)(sqlite3*,const char*,int,int,void*,void 
(*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void 
(*xFinal)(sqlite3_context*));
+  int  (*sqlite3_create_function_v2)(sqlite3*,const char*,int,int,void*,void 
(*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void 
(*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
        int (*sqlite3_create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
        sqlite3 * (*sqlite3_db_handle)(sqlite3_stmt*);
        int (*sqlite3_declare_vtab)(sqlite3*,const char*);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]