Beispiel #1
0
        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();
                }
            }
        }
Beispiel #3
0
 internal void free()
 {
     _func      = null;
     _user_data = null;
     _h.Free();
 }
Beispiel #4
0
 void ISQLite3Provider.sqlite3_progress_handler(IntPtr db, int instructions, delegate_progress_handler func, object v)
 {
     throw new Exception(GRIPE);
 }
Beispiel #5
0
 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);
            }
        }
Beispiel #7
0
 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());
            }
        }
Beispiel #10
0
 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);
            }
        }