Esempio n. 1
0
        /// <summary>
        /// Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
        /// WARNING: Must not throw exceptions.
        /// </summary>
        /// <param name="ptr">Not used</param>
        /// <param name="len1">Length of the string pv1</param>
        /// <param name="ptr1">Pointer to the first string to compare</param>
        /// <param name="len2">Length of the string pv2</param>
        /// <param name="ptr2">Pointer to the second string to compare</param>
        /// <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater
        /// than the second.  Returns 0 if an exception is caught.</returns>
        internal int CompareCallback16(IntPtr ptr, int len1, IntPtr ptr1, int len2, IntPtr ptr2)
        {
            try
            {
                return(Compare(SQLite3_UTF16.UTF16ToString(ptr1, len1),
                               SQLite3_UTF16.UTF16ToString(ptr2, len2))); /* throw */
            }
#if !PLATFORM_COMPACTFRAMEWORK
            catch (Exception e) /* NOTE: Must catch ALL. */
            {
                try
                {
                    if ((_flags & SQLiteConnectionFlags.LogCallbackException) ==
                        SQLiteConnectionFlags.LogCallbackException)
                    {
                        SQLiteLog.LogMessage(COR_E_EXCEPTION, String.Format(
                                                 CultureInfo.CurrentCulture,
                                                 "Caught exception in \"Compare\" (UTF16) method: {0}",
                                                 e)); /* throw */
                    }
                }
                catch
                {
                    // do nothing.
                }
            }
#else
            catch /* NOTE: Must catch ALL. */
            {
                // do nothing (Windows CE).
            }
#endif

            //
            // NOTE: This must be done to prevent the core SQLite library from
            //       using our (invalid) result.
            //
            if (_base != null)
            {
                _base.Cancel();
            }

            return(0);
        }
Esempio n. 2
0
 internal int CompareCallback16(IntPtr ptr, int len1, IntPtr ptr1, int len2, IntPtr ptr2)
 {
     return(this.Compare(SQLite3_UTF16.UTF16ToString(ptr1, len1), SQLite3_UTF16.UTF16ToString(ptr2, len2)));
 }