internal progress_handler_hook_info(delegate_progress_handler func, object v) { _func = func; _user_data = v; _h = GCHandle.Alloc(this); }
public void test_progress_handler() { using (sqlite3 db = ugly.open(":memory:")) { int count = 0; delegate_progress_handler handler = obj => { Assert.AreEqual(obj, "user_data"); count++; return(0); }; raw.sqlite3_progress_handler(db, 1, handler, "user_data"); GC.Collect(); using (sqlite3_stmt stmt = db.prepare("SELECT 1;")) { stmt.step(); } Assert.IsTrue(count > 0); handler = obj => 1; raw.sqlite3_progress_handler(db, 1, handler, null); using (sqlite3_stmt stmt = db.prepare("SELECT 1;")) { try { stmt.step(); Assert.Fail("Expected sqlite3_exception"); } catch (ugly.sqlite3_exception e) { Assert.AreEqual(e.errcode, raw.SQLITE_INTERRUPT); } } // Test that assigning null to the handler removes the progress handler. handler = null; raw.sqlite3_progress_handler(db, 1, handler, null); using (sqlite3_stmt stmt = db.prepare("SELECT 1;")) { stmt.step(); } } }
internal void free() { _func = null; _user_data = null; _h.Free(); }
void ISQLite3Provider.sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v) { throw new Exception(GRIPE); }
static public void sqlite3_progress_handler(sqlite3 db, int instructions, delegate_progress_handler func, object v) { _imp.sqlite3_progress_handler(db.ptr, instructions, func, v); }
void ISQLite3Provider.sqlite3_progress_handler (IntPtr db, int instructions, delegate_progress_handler func, object v) { var info = hooks.getOrCreateFor (db); if (info.progress != null) { // TODO maybe turn off the hook here, for now info.progress.free (); info.progress = null; } if (func != null) { info.progress = new progress_handler_hook_info (func, v); NativeMethods.sqlite3_progress_handler (db, instructions, progress_handler_hook_bridge, info.progress.ptr); } else { NativeMethods.sqlite3_progress_handler (db, instructions, null, IntPtr.Zero); } }
static public void sqlite3_progress_handler(sqlite3 db, int instructions, delegate_progress_handler func, object v) { _imp.sqlite3_progress_handler(db.ptr, instructions, func, v); }
public void sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v) { throw new NotImplementedException(); }
void ISQLite3Provider.sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v) { var info = hooks.getOrCreateFor(db); if (info.progress != null) { // TODO maybe turn off the hook here, for now info.progress.free(); info.progress = null; } if (func != null) { info.progress = new progress_handler_hook_info(func, v); SQLite3RuntimeProvider.sqlite3_progress_handler(db.ToInt64(), instructions, Marshal.GetFunctionPointerForDelegate(progress_handler_hook_bridge).ToInt64(), info.progress.ptr.ToInt64()); } else { SQLite3RuntimeProvider.sqlite3_progress_handler(db.ToInt64(), instructions, IntPtr.Zero.ToInt64(), IntPtr.Zero.ToInt64()); } }
void ISQLite3Provider.sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v) { throw new Exception(GRIPE); }
void ISQLite3Provider.sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v) { if (_progress_handler_hook != null) { // TODO maybe turn off the hook here, for now _progress_handler_hook.free(); _progress_handler_hook = null; } if (func != null) { _progress_handler_hook = new progress_handler_hook_info(func, v); NativeMethods.sqlite3_progress_handler(db, instructions, progress_handler_hook_bridge, _progress_handler_hook.ptr); } else { NativeMethods.sqlite3_progress_handler(db, instructions, null, IntPtr.Zero); } }