>From 86e4ea3d5ec4c3a7525ad935199a1c426de3d1ae Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 11 Dec 2009 17:32:40 +0100 Subject: [PATCH] sqlite3: Add Context and Database.create_function() bindings. These bindings make it possible to create custom functions for use in SQL code. --- vapi/sqlite3.vapi | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 46 insertions(+), 0 deletions(-) diff --git a/vapi/sqlite3.vapi b/vapi/sqlite3.vapi index c9d3e26..8c5ee3a 100644 --- a/vapi/sqlite3.vapi +++ b/vapi/sqlite3.vapi @@ -18,6 +18,7 @@ * * Author: * Jürg Billeter + * Julian Andres Klode */ [CCode (lower_case_cprefix = "sqlite3_", cheader_filename = "sqlite3.h")] @@ -49,8 +50,17 @@ namespace Sqlite { public void progress_handler (int n_opcodes, Sqlite.ProgressCallback? progress_handler); public void commit_hook (CommitCallback? commit_hook); public void rollback_hook (RollbackCallback? rollback_hook); + + public int create_function (string name, int nargs, int encoding, void* client_data, CustomFunc? func, CustomFunc? step=null, CustomFinal? final=null); } + // No target, since the value of client_data is retrieved by calling + // user_data() on the Context object of the callbacks. + [CCode (has_target = false)] + public delegate void CustomFunc(Context context, [CCode(array_length_pos=1.9)] Value[] args); + [CCode (has_target = false)] + public delegate void CustomFinal(Context context); + [CCode (instance_pos = 0)] public delegate void TraceCallback (string message); [CCode (instance_pos = 0)] @@ -163,6 +173,19 @@ namespace Sqlite { [CCode (cname = "SQLITE_MUTEX_RECURSIVE")] public const int MUTEX_RECURSIVE; + [CCode (cname = "SQLITE_UTF8")] + public const int UTF8; + [CCode (cname = "SQLITE_UTF16LE")] + public const int UTF16LE; + [CCode (cname = "SQLITE_UTF16BE")] + public const int UTF16BE; + [CCode (cname = "SQLITE_UTF16")] + public const int UTF16; + [CCode (cname = "SQLITE_ANY")] + public const int ANY; + [CCode (cname = "SQLITE_UTF16_ALIGNED")] + public const int UTF16_ALIGNED; + /* SQL Statement Object */ [Compact] [CCode (free_function = "sqlite3_finalize", cname = "sqlite3_stmt", cprefix = "sqlite3_")] @@ -205,5 +228,28 @@ namespace Sqlite { public int @try (); public void leave (); } + + [Compact] + [CCode (cname = "sqlite3_context", cprefix="sqlite3_")] + public class Context { + public void result_blob (void* blob, int size, GLib.DestroyNotify destroy_notify); + public void result_double (double result); + public void result_error (string message, int length=-1); + public void result_error_toobig (); + public void result_error_nomem (); + public void result_error_code (int error_code); + public void result_int (int result); + public void result_int64 (int64 result); + public void result_null (); + public void result_text (string text, int length=-1, GLib.DestroyNotify destroy_notify = GLib.g_free); + public void result_value (Value value); + public void result_zeroblob (int count); + public void* aggregate_context (int nbytes); + public void* user_data (); + public void* get_auxdata (int argument); + public void set_auxdata (int argument, void* data, GLib.DestroyNotify destroy_notify); + [CCode (cname = "sqlite3_context_db_handle")] + public weak Database db_handle(); + } } -- 1.6.5.4