/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Update" /> method. /// </summary> /// <param name="table"> /// See the <see cref="ISQLiteManagedModule.Update" /> method. /// </param> /// <param name="values"> /// See the <see cref="ISQLiteManagedModule.Update" /> method. /// </param> /// <param name="rowId"> /// See the <see cref="ISQLiteManagedModule.Update" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Update" /> method. /// </returns> public override SQLiteErrorCode Update( SQLiteVirtualTable table, SQLiteValue[] values, ref long rowId ) { CheckDisposed(); return GetMethodResultCode("Update"); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xUpdate" /> method. /// </summary> /// <param name="table"> /// The <see cref="SQLiteVirtualTable" /> object instance associated /// with this virtual table. /// </param> /// <param name="values"> /// The array of <see cref="SQLiteValue" /> object instances containing /// the new or modified column values, if any. /// </param> /// <param name="rowId"> /// Upon success, this parameter must be modified to contain the unique /// integer row identifier for the row that was inserted, if any. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Update( SQLiteVirtualTable table, SQLiteValue[] values, ref long rowId );
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </summary> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </param> /// <param name="indexNumber"> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </param> /// <param name="indexString"> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </param> /// <param name="values"> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Filter" /> method. /// </returns> public override SQLiteErrorCode Filter( SQLiteVirtualTableCursor cursor, int indexNumber, string indexString, SQLiteValue[] values ) { CheckDisposed(); return GetMethodResultCode("Filter"); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xFilter" /> method. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <param name="indexNumber"> /// Number used to help identify the selected index. /// </param> /// <param name="indexString"> /// String used to help identify the selected index. /// </param> /// <param name="values"> /// The values corresponding to each column in the selected index. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Filter( SQLiteVirtualTableCursor cursor, int indexNumber, string indexString, SQLiteValue[] values );
/////////////////////////////////////////////////////////////////////// #region Internal Marshal Helper Methods /// <summary> /// Converts a logical array of native pointers to native sqlite3_value /// structures into a managed array of <see cref="SQLiteValue" /> /// object instances. /// </summary> /// <param name="argc"> /// The number of elements in the logical array of native sqlite3_value /// structures. /// </param> /// <param name="argv"> /// The native pointer to the logical array of native sqlite3_value /// structures to convert. /// </param> /// <returns> /// The managed array of <see cref="SQLiteValue" /> object instances or /// null upon failure. /// </returns> internal static SQLiteValue[] ArrayFromSizeAndIntPtr( int argc, IntPtr argv ) { if (argc < 0) return null; if (argv == IntPtr.Zero) return null; SQLiteValue[] result = new SQLiteValue[argc]; for (int index = 0, offset = 0; index < result.Length; index++, offset += IntPtr.Size) { IntPtr pArg = SQLiteMarshal.ReadIntPtr(argv, offset); result[index] = (pArg != IntPtr.Zero) ? new SQLiteValue(pArg) : null; } return result; }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Sets the context result to the specified <see cref="SQLiteValue" />. /// </summary> /// <param name="value"> /// The <see cref="SQLiteValue" /> to use. /// </param> public void SetValue(SQLiteValue value) { if (pContext == IntPtr.Zero) throw new InvalidOperationException(); if (value == null) throw new ArgumentNullException("value"); UnsafeNativeMethods.sqlite3_result_value( pContext, value.NativeHandle); }
/////////////////////////////////////////////////////////////////////// #region Public Methods /// <summary> /// This method should normally be used by the /// <see cref="ISQLiteManagedModule.Filter" /> method in order to /// perform filtering of the result rows and/or to record the filtering /// criteria provided by the SQLite core library. /// </summary> /// <param name="indexNumber"> /// Number used to help identify the selected index. /// </param> /// <param name="indexString"> /// String used to help identify the selected index. /// </param> /// <param name="values"> /// The values corresponding to each column in the selected index. /// </param> public virtual void Filter( int indexNumber, string indexString, SQLiteValue[] values ) { CheckDisposed(); if ((values != null) && (TryPersistValues(values) != values.Length)) { throw new SQLiteException( "failed to persist one or more values"); } this.indexNumber = indexNumber; this.indexString = indexString; this.values = values; }
/////////////////////////////////////////////////////////////////////// #region Protected Methods /// <summary> /// Attempts to persist the specified <see cref="SQLiteValue" /> object /// instances in order to make them available after the /// <see cref="ISQLiteManagedModule.Filter" /> method returns. /// </summary> /// <param name="values"> /// The array of <see cref="SQLiteValue" /> object instances to be /// persisted. /// </param> /// <returns> /// The number of <see cref="SQLiteValue" /> object instances that were /// successfully persisted. /// </returns> protected virtual int TryPersistValues( SQLiteValue[] values ) { int result = 0; if (values != null) { foreach (SQLiteValue value in values) { if (value == null) continue; if (value.Persist()) result++; } } return result; }