You've already forked linux-packaging-mono
Imported Upstream version 3.8.0
Former-commit-id: 6a76a29bd07d86e57c6c8da45c65ed5447d38a61
This commit is contained in:
@@ -652,11 +652,37 @@ namespace Mono.Data.Sqlite
|
||||
return UnsafeNativeMethods.sqlite3_aggregate_count(context);
|
||||
}
|
||||
|
||||
#if MONOTOUCH
|
||||
class FunctionData {
|
||||
public SQLiteCallback Func;
|
||||
public SQLiteCallback FuncStep;
|
||||
public SQLiteFinalCallback FuncFinal;
|
||||
}
|
||||
#endif
|
||||
|
||||
internal override void CreateFunction(string strFunction, int nArgs, bool needCollSeq, SQLiteCallback func, SQLiteCallback funcstep, SQLiteFinalCallback funcfinal)
|
||||
{
|
||||
int n;
|
||||
|
||||
#if !SQLITE_STANDARD
|
||||
#if MONOTOUCH
|
||||
var data = new FunctionData();
|
||||
data.Func = func;
|
||||
data.FuncStep = funcstep;
|
||||
data.FuncFinal = funcfinal;
|
||||
SQLiteCallback func_callback = func == null ? null : new SQLiteCallback(scalar_callback);
|
||||
SQLiteCallback funcstep_callback = funcstep == null ? null : new SQLiteCallback(step_callback);
|
||||
SQLiteFinalCallback funcfinal_callback = funcfinal == null ? null : new SQLiteFinalCallback(final_callback);
|
||||
|
||||
IntPtr user_data;
|
||||
user_data = GCHandle.ToIntPtr(GCHandle.Alloc(data));
|
||||
n = UnsafeNativeMethods.sqlite3_create_function_v2(_sql, ToUTF8(strFunction), nArgs, 4, user_data, func_callback, funcstep_callback, funcfinal_callback, destroy_callback);
|
||||
|
||||
if (n == 0) {
|
||||
// sqlite3_create_function_v2 will call 'destroy_callback' if it fails, so we need to recreate the gchandle here.
|
||||
user_data = GCHandle.ToIntPtr(GCHandle.Alloc(data));
|
||||
n = UnsafeNativeMethods.sqlite3_create_function_v2(_sql, ToUTF8(strFunction), nArgs, 1, user_data, func_callback, funcstep_callback, funcfinal_callback, destroy_callback);
|
||||
}
|
||||
#elif !SQLITE_STANDARD
|
||||
n = UnsafeNativeMethods.sqlite3_create_function_interop(_sql, ToUTF8(strFunction), nArgs, 4, IntPtr.Zero, func, funcstep, funcfinal, (needCollSeq == true) ? 1 : 0);
|
||||
if (n == 0) n = UnsafeNativeMethods.sqlite3_create_function_interop(_sql, ToUTF8(strFunction), nArgs, 1, IntPtr.Zero, func, funcstep, funcfinal, (needCollSeq == true) ? 1 : 0);
|
||||
#else
|
||||
@@ -673,6 +699,38 @@ namespace Mono.Data.Sqlite
|
||||
if (n > 0) throw new SqliteException(n, SQLiteLastError());
|
||||
}
|
||||
|
||||
#if MONOTOUCH
|
||||
[MonoTouch.MonoPInvokeCallback(typeof(SQLiteCallback))]
|
||||
internal static void scalar_callback(IntPtr context, int nArgs, IntPtr argsptr)
|
||||
{
|
||||
var handle = GCHandle.FromIntPtr (UnsafeNativeMethods.sqlite3_user_data(context));
|
||||
var func = (FunctionData)handle.Target;
|
||||
func.Func(context, nArgs, argsptr);
|
||||
}
|
||||
|
||||
[MonoTouch.MonoPInvokeCallback(typeof(SQLiteCallback))]
|
||||
internal static void step_callback(IntPtr context, int nArgs, IntPtr argsptr)
|
||||
{
|
||||
var handle = GCHandle.FromIntPtr(UnsafeNativeMethods.sqlite3_user_data(context));
|
||||
var func = (FunctionData)handle.Target;
|
||||
func.FuncStep(context, nArgs, argsptr);
|
||||
}
|
||||
|
||||
[MonoTouch.MonoPInvokeCallback(typeof(SQLiteFinalCallback))]
|
||||
internal static void final_callback(IntPtr context)
|
||||
{
|
||||
var handle = GCHandle.FromIntPtr(UnsafeNativeMethods.sqlite3_user_data(context));
|
||||
var func = (FunctionData)handle.Target;
|
||||
func.FuncFinal(context);
|
||||
}
|
||||
|
||||
[MonoTouch.MonoPInvokeCallback(typeof(SQLiteFinalCallback))]
|
||||
internal static void destroy_callback(IntPtr context)
|
||||
{
|
||||
GCHandle.FromIntPtr(context).Free();
|
||||
}
|
||||
#endif
|
||||
|
||||
internal override int ContextCollateCompare(CollationEncodingEnum enc, IntPtr context, string s1, string s2)
|
||||
{
|
||||
#if !SQLITE_STANDARD
|
||||
|
||||
Reference in New Issue
Block a user