Index: System.Data.SQLite/SQLiteSession.cs ================================================================== --- System.Data.SQLite/SQLiteSession.cs +++ System.Data.SQLite/SQLiteSession.cs @@ -1282,18 +1282,32 @@ throw new SQLiteException(rc, "sqlite3session_create"); } /////////////////////////////////////////////////////////////////////// + private UnsafeNativeMethods.xSessionFilter ApplyTableFilter( + SessionTableFilterCallback callback, /* in: NULL OK */ + object clientData /* in: NULL OK */ + ) + { + this.tableFilterCallback = callback; + this.tableFilterClientData = clientData; + + return (callback != null) ? + xFilter : (UnsafeNativeMethods.xSessionFilter)null; + } + + /////////////////////////////////////////////////////////////////////// + #region Native Callback Methods private int xFilter( IntPtr context, /* NOT USED */ - byte[] tblName + IntPtr pTblName ) { return tableFilterCallback(tableFilterClientData, - SQLiteString.GetStringFromUtf8Bytes(tblName)) ? 1 : 0; + SQLiteString.StringFromUtf8IntPtr(pTblName)) ? 1 : 0; } #endregion #endregion /////////////////////////////////////////////////////////////////////// @@ -1391,15 +1405,12 @@ ) { CheckDisposed(); CheckHandle(); - this.tableFilterCallback = callback; - this.tableFilterClientData = clientData; - UnsafeNativeMethods.sqlite3session_table_filter( - session, xFilter, IntPtr.Zero); + session, ApplyTableFilter(callback, clientData), IntPtr.Zero); } /////////////////////////////////////////////////////////////////////// public void CreateChangeSet( @@ -1647,16 +1658,16 @@ return null; UnsafeNativeMethods.xSessionFilter xFilter; xFilter = new UnsafeNativeMethods.xSessionFilter( - delegate(IntPtr context, byte[] tblName) + delegate(IntPtr context, IntPtr pTblName) { try { - string name = SQLiteString.GetStringFromUtf8Bytes( - tblName); + string name = SQLiteString.StringFromUtf8IntPtr( + pTblName); return tableFilterCallback(clientData, name) ? 1 : 0; } catch (Exception e) { Index: System.Data.SQLite/UnsafeNativeMethods.cs ================================================================== --- System.Data.SQLite/UnsafeNativeMethods.cs +++ System.Data.SQLite/UnsafeNativeMethods.cs @@ -3804,11 +3804,11 @@ #region session extension #if INTEROP_SESSION_EXTENSION #if !PLATFORM_COMPACTFRAMEWORK [UnmanagedFunctionPointer(CallingConvention.Cdecl)] #endif - internal delegate int xSessionFilter(IntPtr context, byte[] tblName); + internal delegate int xSessionFilter(IntPtr context, IntPtr pTblName); #if !PLATFORM_COMPACTFRAMEWORK [UnmanagedFunctionPointer(CallingConvention.Cdecl)] #endif internal delegate SQLiteChangeSetConflictResult xSessionConflict(IntPtr context, SQLiteChangeSetConflictType type, IntPtr iterator);