我試圖在SQLite for Windows Runtime中實現自定義排序規則。在SQLite中爲WinRT實現自定義排序規則
的create_collation方法實現如下:
SQLITE_API int sqlite3_create_collation(
sqlite3*,
const char *zName,
int eTextRep,
void *pArg,
int(*xCompare)(void*,int,const void*,int,const void*)
);
到目前爲止,我有下面的C#簽名:
[DllImport("sqlite3", EntryPoint = "sqlite3_create_collation", CallingConvention = CallingConvention.Cdecl)]
public static extern int CreateCollation(IntPtr db, [MarshalAs(UnmanagedType.LPStr)] string name, int textRep, object state, Compare callback);
public delegate int Compare(object pCompareArg, int size1, IntPtr Key1, int size2, IntPtr Key2);
這是實現:
int i = CreateCollation(db, "unicode_nocase", SQLITE_UTF8, null, CompareMethod);
/* ... */
public static int CompareMethod(object o, int i1, IntPtr s1, int i2, IntPtr s2)
{
return string.Compare(Marshal.PtrToStringUni(s1), Marshal.PtrToStringUni(s2));
}
應用程序編譯沒有錯誤。到create_collation調用返回零(SQLITE_OK),但如果我使用歸類在一份聲明中返回以下錯誤信息:
no such collation sequence: unicode_nocase
源參考:https://github.com/doo/SQLite3-WinRT/tree/master/SQLite3Component
有人可以幫我嗎?
謝謝!
你應該只能使用'SQLITE_UTF8';這是SQLite字符串的本地格式。 – 2013-03-01 15:15:03
謝謝!我會嘗試;) – 2013-05-15 21:26:09
因此,只是爲了確認我明白,這種自定義整理會相對較慢,因爲實現是C#,從C調用?或者,如果使用C#自定義collator執行表掃描,那麼可以期望合理的性能? – hyperspasm 2017-01-03 17:17:29