/////////////////////////////////////////////////////////////////////// /// <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.xRowId" /> 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="rowId"> /// Upon success, this parameter must be modified to contain the unique /// integer row identifier for the current row for the specified cursor. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode RowId( SQLiteVirtualTableCursor cursor, ref long rowId );
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Open" /> method. /// </summary> /// <param name="table"> /// See the <see cref="ISQLiteManagedModule.Open" /> method. /// </param> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.Open" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Open" /> method. /// </returns> public override SQLiteErrorCode Open( SQLiteVirtualTable table, ref SQLiteVirtualTableCursor cursor ) { CheckDisposed(); return GetMethodResultCode("Open"); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xEof" /> method. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <returns> /// Non-zero if no more rows are available; zero otherwise. /// </returns> public abstract bool Eof( SQLiteVirtualTableCursor cursor );
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xColumn" /> 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="context"> /// The <see cref="SQLiteContext" /> object instance to be used for /// returning the specified column value to the SQLite core library. /// </param> /// <param name="index"> /// The zero-based index corresponding to the column containing the /// value to be returned. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Column( SQLiteVirtualTableCursor cursor, SQLiteContext context, int index );
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Column" /> method. /// </summary> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.Column" /> method. /// </param> /// <param name="context"> /// See the <see cref="ISQLiteManagedModule.Column" /> method. /// </param> /// <param name="index"> /// See the <see cref="ISQLiteManagedModule.Column" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Column" /> method. /// </returns> public override SQLiteErrorCode Column( SQLiteVirtualTableCursor cursor, SQLiteContext context, int index ) { CheckDisposed(); return GetMethodResultCode("Column"); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Sets the table error message to one that indicates the virtual /// table cursor is of the wrong type. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance. /// </param> /// <param name="type"> /// The <see cref="Type" /> that the virtual table cursor should be. /// </param> /// <returns> /// The value of <see cref="SQLiteErrorCode.Error" />. /// </returns> protected virtual SQLiteErrorCode CursorTypeMismatchError( SQLiteVirtualTableCursor cursor, Type type ) { if (type != null) { SetCursorError(cursor, String.Format("not a \"{0}\" cursor", type)); } else { SetCursorError(cursor, "cursor type mismatch"); } return SQLiteErrorCode.Error; }
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xOpen" /> method. /// </summary> /// <param name="table"> /// The <see cref="SQLiteVirtualTable" /> object instance associated /// with this virtual table. /// </param> /// <param name="cursor"> /// Upon success, this parameter must be modified to contain the /// <see cref="SQLiteVirtualTableCursor" /> object instance associated /// with the newly opened virtual table cursor. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Open( SQLiteVirtualTable table, ref SQLiteVirtualTableCursor cursor );
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xClose" /> method. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Close( SQLiteVirtualTableCursor cursor );
/////////////////////////////////////////////////////////////////////// /// <summary> /// Allocates and returns a native pointer to a sqlite3_vtab_cursor /// derived structure and creates an association between it and the /// specified <see cref="SQLiteVirtualTableCursor" /> object instance. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance to be /// used when creating the association. /// </param> /// <returns> /// The native pointer to a sqlite3_vtab_cursor derived structure or /// <see cref="IntPtr.Zero" /> if the method fails for any reason. /// </returns> protected virtual IntPtr CursorToIntPtr( SQLiteVirtualTableCursor cursor ) { if ((cursor == null) || (cursors == null)) return IntPtr.Zero; IntPtr pCursor = IntPtr.Zero; bool success = false; try { pCursor = AllocateCursor(); if (pCursor != IntPtr.Zero) { cursor.NativeHandle = pCursor; cursors.Add(pCursor, cursor); success = true; } } finally { if (!success && (pCursor != IntPtr.Zero)) { FreeCursor(pCursor); pCursor = IntPtr.Zero; } } return pCursor; }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Arranges for the specified error message to be placed into the /// zErrMsg field of a sqlite3_vtab derived structure, freeing the /// existing error message, if any. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance used to /// lookup the native pointer to the sqlite3_vtab derived structure. /// </param> /// <param name="error"> /// The error message. /// </param> /// <returns> /// Non-zero upon success. /// </returns> protected virtual bool SetCursorError( SQLiteVirtualTableCursor cursor, string error ) { return SetCursorError( this, cursor, LogErrorsNoThrow, LogExceptionsNoThrow, error); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Arranges for the specified error message to be placed into the /// zErrMsg field of a sqlite3_vtab derived structure, freeing the /// existing error message, if any. /// </summary> /// <param name="module"> /// The <see cref="SQLiteModule" /> object instance to be used. /// </param> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance used to /// lookup the native pointer to the sqlite3_vtab derived structure. /// </param> /// <param name="logErrors"> /// Non-zero if this error message should also be logged using the /// <see cref="SQLiteLog" /> class. /// </param> /// <param name="logExceptions"> /// Non-zero if caught exceptions should be logged using the /// <see cref="SQLiteLog" /> class. /// </param> /// <param name="error"> /// The error message. /// </param> /// <returns> /// Non-zero upon success. /// </returns> private static bool SetCursorError( SQLiteModule module, SQLiteVirtualTableCursor cursor, bool logErrors, bool logExceptions, string error ) { if (cursor == null) return false; IntPtr pCursor = cursor.NativeHandle; if (pCursor == IntPtr.Zero) return false; return SetCursorError( module, pCursor, logErrors, logExceptions, error); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Determines the unique row identifier for the current row. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <param name="value"> /// The object instance to return a unique row identifier for. /// </param> /// <returns> /// The unique row identifier or zero upon failure. /// </returns> protected virtual long GetRowIdFromObject( SQLiteVirtualTableCursor cursor, object value ) { int rowIndex = (cursor != null) ? cursor.GetRowIndex() : 0; int hashCode = SQLiteMarshal.GetHashCode(value, objectIdentity); return MakeRowId(rowIndex, hashCode); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Determines the string to return as the column value for the object /// instance value. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <param name="value"> /// The object instance to return a string representation for. /// </param> /// <returns> /// The string representation of the specified object instance or null /// upon failure. /// </returns> protected virtual string GetStringFromObject( SQLiteVirtualTableCursor cursor, object value ) { if (value == null) return null; if (value is string) return (string)value; return value.ToString(); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Next" /> method. /// </summary> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.Next" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Next" /> method. /// </returns> public override SQLiteErrorCode Next( SQLiteVirtualTableCursor cursor ) { CheckDisposed(); return GetMethodResultCode("Next"); }
/////////////////////////////////////////////////////////////////////// /// <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 );
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.Eof" /> method. /// </summary> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.Eof" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.Eof" /> method. /// </returns> public override bool Eof( SQLiteVirtualTableCursor cursor ) { CheckDisposed(); return ResultCodeToEofResult(GetMethodResultCode("Eof")); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// This method is called in response to the /// <see cref="ISQLiteNativeModule.xNext" /> method. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance /// associated with the previously opened virtual table cursor to be /// used. /// </param> /// <returns> /// A standard SQLite return code. /// </returns> public abstract SQLiteErrorCode Next( SQLiteVirtualTableCursor cursor );
/////////////////////////////////////////////////////////////////////// /// <summary> /// See the <see cref="ISQLiteManagedModule.RowId" /> method. /// </summary> /// <param name="cursor"> /// See the <see cref="ISQLiteManagedModule.RowId" /> method. /// </param> /// <param name="rowId"> /// See the <see cref="ISQLiteManagedModule.RowId" /> method. /// </param> /// <returns> /// See the <see cref="ISQLiteManagedModule.RowId" /> method. /// </returns> public override SQLiteErrorCode RowId( SQLiteVirtualTableCursor cursor, ref long rowId ) { CheckDisposed(); return GetMethodResultCode("RowId"); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Sets the table error message to one that indicates the virtual /// table cursor is of the wrong type. /// </summary> /// <param name="cursor"> /// The <see cref="SQLiteVirtualTableCursor" /> object instance. /// </param> /// <param name="type"> /// The <see cref="Type" /> that the virtual table cursor should be. /// </param> /// <returns> /// The value of <see cref="SQLiteErrorCode.Error" />. /// </returns> protected virtual SQLiteErrorCode CursorTypeMismatchError( SQLiteVirtualTableCursor cursor, Type type ) { if (type != null) { SetCursorError(cursor, UnsafeNativeMethods.StringFormat( CultureInfo.CurrentCulture, "not a \"{0}\" cursor", type)); } else { SetCursorError(cursor, "cursor type mismatch"); } return SQLiteErrorCode.Error; }