Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Heavily refactor how native delegates and exception handling are performed. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | sessions |
Files: | files | file ages | folders |
SHA1: |
3b281ced1169273dd472518804e51761 |
User & Date: | mistachkin 2017-10-10 21:38:27.926 |
Context
2017-10-10
| ||
21:41 | Merge updates from trunk. check-in: 0b70bd2e0e user: mistachkin tags: sessions | |
21:38 | Heavily refactor how native delegates and exception handling are performed. check-in: 3b281ced11 user: mistachkin tags: sessions | |
20:08 | Add and revise tests for the session extension support classes. check-in: ca9127aa51 user: mistachkin tags: sessions | |
Changes
Changes to System.Data.SQLite/SQLiteSession.cs.
︙ | ︙ | |||
148 149 150 151 152 153 154 155 156 157 158 159 160 161 | /////////////////////////////////////////////////////////////////////////// #region SQLiteConnectionLock Class internal abstract class SQLiteConnectionLock : IDisposable { #region Private Constants private const string LockNopSql = "SELECT 1;"; #endregion /////////////////////////////////////////////////////////////////////// #region Private Data private SQLiteConnectionHandle handle; private SQLiteConnectionFlags flags; | > > > > > | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | /////////////////////////////////////////////////////////////////////////// #region SQLiteConnectionLock Class internal abstract class SQLiteConnectionLock : IDisposable { #region Private Constants private const string LockNopSql = "SELECT 1;"; /////////////////////////////////////////////////////////////////////// private const string StatementMessageFormat = "Connection lock object was {0} with statement {1}"; #endregion /////////////////////////////////////////////////////////////////////// #region Private Data private SQLiteConnectionHandle handle; private SQLiteConnectionFlags flags; |
︙ | ︙ | |||
178 179 180 181 182 183 184 | Lock(); } #endregion /////////////////////////////////////////////////////////////////////// | | > > > > > > > > > > > > > > | | 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | Lock(); } #endregion /////////////////////////////////////////////////////////////////////// #region Protected Methods protected SQLiteConnectionHandle GetHandle() { return handle; } /////////////////////////////////////////////////////////////////////// protected SQLiteConnectionFlags GetFlags() { return flags; } /////////////////////////////////////////////////////////////////////// protected IntPtr GetIntPtr() { if (handle == null) { throw new InvalidOperationException( "Connection lock object has an invalid handle."); } |
︙ | ︙ | |||
221 222 223 224 225 226 227 | pSql = SQLiteString.Utf8IntPtrFromString(LockNopSql, ref nSql); IntPtr pRemain = IntPtr.Zero; int nRemain = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_prepare_interop( | | | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | pSql = SQLiteString.Utf8IntPtrFromString(LockNopSql, ref nSql); IntPtr pRemain = IntPtr.Zero; int nRemain = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_prepare_interop( GetIntPtr(), pSql, nSql, ref statement, ref pRemain, ref nRemain); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3_prepare_interop"); } finally { |
︙ | ︙ | |||
309 310 311 312 313 314 315 | // // NOTE: This should never happen. This object was // disposed (or finalized) without the Unlock // method being called first. // try { | < | | > | > | | > | 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 | // // NOTE: This should never happen. This object was // disposed (or finalized) without the Unlock // method being called first. // try { if (HelperMethods.LogPrepare(GetFlags())) { /* throw */ SQLiteLog.LogMessage( SQLiteErrorCode.Misuse, HelperMethods.StringFormat( CultureInfo.CurrentCulture, StatementMessageFormat, disposing ? "disposed" : "finalized", statement)); } } catch { // do nothing. } |
︙ | ︙ | |||
382 383 384 385 386 387 388 | { if (iterator == IntPtr.Zero) throw new InvalidOperationException("iterator is not open"); } /////////////////////////////////////////////////////////////////////// | | | 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 | { if (iterator == IntPtr.Zero) throw new InvalidOperationException("iterator is not open"); } /////////////////////////////////////////////////////////////////////// internal IntPtr GetIntPtr() { return iterator; } #endregion /////////////////////////////////////////////////////////////////////// |
︙ | ︙ | |||
767 768 769 770 771 772 773 774 775 776 777 778 779 780 | this.stream = stream; this.flags = flags; } #endregion /////////////////////////////////////////////////////////////////////// #region Native Callback Methods public SQLiteErrorCode xInput( IntPtr context, IntPtr pData, ref int nData ) { | > > > > > > > > > | 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 | this.stream = stream; this.flags = flags; } #endregion /////////////////////////////////////////////////////////////////////// #region Private Methods private SQLiteConnectionFlags GetFlags() { return flags; } #endregion /////////////////////////////////////////////////////////////////////// #region Native Callback Methods public SQLiteErrorCode xInput( IntPtr context, IntPtr pData, ref int nData ) { |
︙ | ︙ | |||
795 796 797 798 799 800 801 | return SQLiteErrorCode.Ok; } catch (Exception e) { try { | < | | > | > | | | 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 | return SQLiteErrorCode.Ok; } catch (Exception e) { try { if (HelperMethods.LogCallbackExceptions(GetFlags())) { SQLiteLog.LogMessage( SQLiteBase.COR_E_EXCEPTION, HelperMethods.StringFormat( CultureInfo.CurrentCulture, UnsafeNativeMethods.ExceptionMessageFormat, "xInput", e)); /* throw */ } } catch { // do nothing. } } |
︙ | ︙ | |||
842 843 844 845 846 847 848 | return SQLiteErrorCode.Ok; } catch (Exception e) { try { | < | | > | > | | | 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 | return SQLiteErrorCode.Ok; } catch (Exception e) { try { if (HelperMethods.LogCallbackExceptions(GetFlags())) { SQLiteLog.LogMessage( SQLiteBase.COR_E_EXCEPTION, HelperMethods.StringFormat( CultureInfo.CurrentCulture, UnsafeNativeMethods.ExceptionMessageFormat, "xOutput", e)); /* throw */ } } catch { // do nothing. } } |
︙ | ︙ | |||
1565 1566 1567 1568 1569 1570 1571 1572 1573 | } #endregion } #endregion /////////////////////////////////////////////////////////////////////////// #region SQLiteMemoryChangeSet Class internal sealed class SQLiteMemoryChangeSet : | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < < < < | 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 | } #endregion } #endregion /////////////////////////////////////////////////////////////////////////// #region SQLiteChangeSetBase Class internal class SQLiteChangeSetBase : SQLiteConnectionLock { #region Private Constants private const string ExceptionMessageFormat = "Caught exception in \"{0}\" method: {1}"; #endregion /////////////////////////////////////////////////////////////////////// #region Private Constructors internal SQLiteChangeSetBase( SQLiteConnectionHandle handle, SQLiteConnectionFlags flags ) : base(handle, flags) { // do nothing. } #endregion /////////////////////////////////////////////////////////////////////// #region Protected Methods protected UnsafeNativeMethods.xSessionFilter GetDelegate( SessionTableFilterCallback tableFilterCallback, object clientData ) { if (tableFilterCallback == null) return null; UnsafeNativeMethods.xSessionFilter xFilter; xFilter = new UnsafeNativeMethods.xSessionFilter( delegate(IntPtr context, byte[] tblName) { try { string name = SQLiteString.GetStringFromUtf8Bytes( tblName); return tableFilterCallback(clientData, name) ? 1 : 0; } catch (Exception e) { try { if (HelperMethods.LogCallbackExceptions(GetFlags())) { SQLiteLog.LogMessage( /* throw */ SQLiteBase.COR_E_EXCEPTION, HelperMethods.StringFormat( CultureInfo.CurrentCulture, UnsafeNativeMethods.ExceptionMessageFormat, "xFilter", e)); } } catch { // do nothing. } } return 0; }); return xFilter; } /////////////////////////////////////////////////////////////////////// protected UnsafeNativeMethods.xSessionConflict GetDelegate( SessionConflictCallback conflictCallback, object clientData ) { if (conflictCallback == null) return null; UnsafeNativeMethods.xSessionConflict xConflict; xConflict = new UnsafeNativeMethods.xSessionConflict( delegate(IntPtr context, SQLiteChangeSetConflictType type, IntPtr iterator) { ISQLiteChangeSetMetadataItem item = null; try { return conflictCallback(clientData, type, item); } catch (Exception e) { try { if (HelperMethods.LogCallbackExceptions(GetFlags())) { SQLiteLog.LogMessage( /* throw */ SQLiteBase.COR_E_EXCEPTION, HelperMethods.StringFormat( CultureInfo.CurrentCulture, UnsafeNativeMethods.ExceptionMessageFormat, "xConflict", e)); } } catch { // do nothing. } } return SQLiteChangeSetConflictResult.Abort; }); return xConflict; } #endregion /////////////////////////////////////////////////////////////////////// #region IDisposable "Pattern" Members private bool disposed; private void CheckDisposed() /* throw */ { #if THROW_ON_DISPOSED if (disposed) { throw new ObjectDisposedException( typeof(SQLiteChangeSetBase).Name); } #endif } /////////////////////////////////////////////////////////////////////// protected override void Dispose(bool disposing) { try { if (!disposed) { if (disposing) { //////////////////////////////////// // dispose managed resources here... //////////////////////////////////// } ////////////////////////////////////// // release unmanaged resources here... ////////////////////////////////////// Unlock(); } } finally { base.Dispose(disposing); // // NOTE: Everything should be fully disposed at this point. // disposed = true; } } #endregion } #endregion /////////////////////////////////////////////////////////////////////////// #region SQLiteMemoryChangeSet Class internal sealed class SQLiteMemoryChangeSet : SQLiteChangeSetBase, ISQLiteChangeSet { #region Private Data private byte[] rawData; #endregion /////////////////////////////////////////////////////////////////////// #region Private Constructors internal SQLiteMemoryChangeSet( byte[] rawData, SQLiteConnectionHandle handle, SQLiteConnectionFlags flags ) : base(handle, flags) { this.rawData = rawData; } #endregion /////////////////////////////////////////////////////////////////////// #region Private Methods private void CheckRawData() |
︙ | ︙ | |||
1628 1629 1630 1631 1632 1633 1634 | nInData, pInData, ref nOutData, ref pOutData); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_invert"); byte[] newData = SQLiteBytes.FromIntPtr(pOutData, nOutData); | | > | 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 | nInData, pInData, ref nOutData, ref pOutData); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_invert"); byte[] newData = SQLiteBytes.FromIntPtr(pOutData, nOutData); return new SQLiteMemoryChangeSet( newData, GetHandle(), GetFlags()); } finally { if (pOutData != IntPtr.Zero) { SQLiteMemory.Free(pOutData); pOutData = IntPtr.Zero; |
︙ | ︙ | |||
1692 1693 1694 1695 1696 1697 1698 | ref pOutData); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_concat"); byte[] newData = SQLiteBytes.FromIntPtr(pOutData, nOutData); | | > | 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 | ref pOutData); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_concat"); byte[] newData = SQLiteBytes.FromIntPtr(pOutData, nOutData); return new SQLiteMemoryChangeSet( newData, GetHandle(), GetFlags()); } finally { if (pOutData != IntPtr.Zero) { SQLiteMemory.Free(pOutData); pOutData = IntPtr.Zero; |
︙ | ︙ | |||
1742 1743 1744 1745 1746 1747 1748 | { CheckDisposed(); CheckRawData(); if (conflictCallback == null) throw new ArgumentNullException("conflictCallback"); | < < < | < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < | | 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 | { CheckDisposed(); CheckRawData(); if (conflictCallback == null) throw new ArgumentNullException("conflictCallback"); UnsafeNativeMethods.xSessionFilter xFilter = GetDelegate( tableFilterCallback, clientData); UnsafeNativeMethods.xSessionConflict xConflict = GetDelegate( conflictCallback, clientData); IntPtr pData = IntPtr.Zero; try { int nData = 0; pData = SQLiteBytes.ToIntPtr(rawData, ref nData); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_apply( GetIntPtr(), nData, pData, xFilter, xConflict, IntPtr.Zero); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_apply"); } finally { if (pData != IntPtr.Zero) |
︙ | ︙ | |||
1923 1924 1925 1926 1927 1928 1929 | } #endregion /////////////////////////////////////////////////////////////////////////// #region SQLiteStreamChangeSet Class internal sealed class SQLiteStreamChangeSet : | | < < < < | 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 | } #endregion /////////////////////////////////////////////////////////////////////////// #region SQLiteStreamChangeSet Class internal sealed class SQLiteStreamChangeSet : SQLiteChangeSetBase, ISQLiteChangeSet { #region Private Data private Stream inputStream; private Stream outputStream; #endregion /////////////////////////////////////////////////////////////////////// #region Private Constructors internal SQLiteStreamChangeSet( Stream inputStream, Stream outputStream, SQLiteConnectionHandle handle, SQLiteConnectionFlags flags ) : base(handle, flags) { this.inputStream = inputStream; this.outputStream = outputStream; } #endregion /////////////////////////////////////////////////////////////////////// #region Private Methods private void CheckInputStream() |
︙ | ︙ | |||
1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 | #region ISQLiteChangeSet Members public ISQLiteChangeSet Invert() { CheckDisposed(); CheckInputStream(); CheckOutputStream(); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_invert_strm( new SQLiteStreamAdapter(inputStream, flags).xInput, IntPtr.Zero, new SQLiteStreamAdapter(outputStream, flags).xOutput, IntPtr.Zero); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_invert_strm"); | > > | 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 | #region ISQLiteChangeSet Members public ISQLiteChangeSet Invert() { CheckDisposed(); CheckInputStream(); CheckOutputStream(); SQLiteConnectionFlags flags = GetFlags(); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_invert_strm( new SQLiteStreamAdapter(inputStream, flags).xInput, IntPtr.Zero, new SQLiteStreamAdapter(outputStream, flags).xOutput, IntPtr.Zero); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_invert_strm"); |
︙ | ︙ | |||
2013 2014 2015 2016 2017 2018 2019 2020 2021 | if (streamChangeSet == null) { throw new ArgumentException( "not a stream based change set", "changeSet"); } streamChangeSet.CheckInputStream(); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_concat_strm( | > > > | | | | | 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 | if (streamChangeSet == null) { throw new ArgumentException( "not a stream based change set", "changeSet"); } streamChangeSet.CheckInputStream(); SQLiteConnectionFlags otherFlags = streamChangeSet.GetFlags(); SQLiteConnectionFlags flags = GetFlags(); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_concat_strm( new SQLiteStreamAdapter(inputStream, flags).xInput, IntPtr.Zero, new SQLiteStreamAdapter(streamChangeSet.inputStream, otherFlags).xInput, IntPtr.Zero, new SQLiteStreamAdapter( outputStream, flags).xOutput, IntPtr.Zero); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_concat_strm"); return null; } |
︙ | ︙ | |||
2052 2053 2054 2055 2056 2057 2058 | { CheckDisposed(); CheckInputStream(); if (conflictCallback == null) throw new ArgumentNullException("conflictCallback"); | < < < | < < < < < < < < < | | < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < | | < < < < < | | < < < < < < < < < < < < < < < < < < | > | 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 | { CheckDisposed(); CheckInputStream(); if (conflictCallback == null) throw new ArgumentNullException("conflictCallback"); UnsafeNativeMethods.xSessionFilter xFilter = GetDelegate( tableFilterCallback, clientData); UnsafeNativeMethods.xSessionConflict xConflict = GetDelegate( conflictCallback, clientData); SQLiteConnectionFlags flags = GetFlags(); SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_apply_strm( GetIntPtr(), new SQLiteStreamAdapter(inputStream, flags).xInput, IntPtr.Zero, xFilter, xConflict, IntPtr.Zero); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_apply_strm"); } #endregion /////////////////////////////////////////////////////////////////////// #region IEnumerable<ISQLiteChangeSetMetadataItem> Members public IEnumerator<ISQLiteChangeSetMetadataItem> GetEnumerator() { SQLiteConnectionFlags flags = GetFlags(); return new SQLiteStreamChangeSetEnumerator(inputStream, flags); } #endregion /////////////////////////////////////////////////////////////////////// #region IEnumerable Members |
︙ | ︙ | |||
2588 2589 2590 2591 2592 2593 2594 | IntPtr pTblName = IntPtr.Zero; SQLiteAuthorizerActionCode op = SQLiteAuthorizerActionCode.None; int bIndirect = 0; int nColumns = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_op( | | | 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 | IntPtr pTblName = IntPtr.Zero; SQLiteAuthorizerActionCode op = SQLiteAuthorizerActionCode.None; int bIndirect = 0; int nColumns = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_op( iterator.GetIntPtr(), ref pTblName, ref nColumns, ref op, ref bIndirect); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_op"); tableName = SQLiteString.StringFromUtf8IntPtr(pTblName); numberOfColumns = nColumns; |
︙ | ︙ | |||
2613 2614 2615 2616 2617 2618 2619 | { CheckIterator(); IntPtr pPrimaryKeys = IntPtr.Zero; int nColumns = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_pk( | | | 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 | { CheckIterator(); IntPtr pPrimaryKeys = IntPtr.Zero; int nColumns = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_pk( iterator.GetIntPtr(), ref pPrimaryKeys, ref nColumns); if (rc != SQLiteErrorCode.Ok) throw new SQLiteException(rc, "sqlite3changeset_pk"); byte[] bytes = SQLiteBytes.FromIntPtr(pPrimaryKeys, nColumns); if (bytes != null) |
︙ | ︙ | |||
2642 2643 2644 2645 2646 2647 2648 | { CheckIterator(); int conflicts = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_fk_conflicts( | | | 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 | { CheckIterator(); int conflicts = 0; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_fk_conflicts( iterator.GetIntPtr(), ref conflicts); if (rc != SQLiteErrorCode.Ok) { throw new SQLiteException(rc, "sqlite3changeset_fk_conflicts"); } |
︙ | ︙ | |||
2752 2753 2754 2755 2756 2757 2758 | { CheckDisposed(); CheckIterator(); IntPtr pValue = IntPtr.Zero; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_old( | | | | | 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 | { CheckDisposed(); CheckIterator(); IntPtr pValue = IntPtr.Zero; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_old( iterator.GetIntPtr(), columnIndex, ref pValue); return SQLiteValue.FromIntPtr(pValue); } /////////////////////////////////////////////////////////////////////// public SQLiteValue GetNewValue( int columnIndex ) { CheckDisposed(); CheckIterator(); IntPtr pValue = IntPtr.Zero; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_new( iterator.GetIntPtr(), columnIndex, ref pValue); return SQLiteValue.FromIntPtr(pValue); } /////////////////////////////////////////////////////////////////////// public SQLiteValue GetConflictValue( int columnIndex ) { CheckDisposed(); CheckIterator(); IntPtr pValue = IntPtr.Zero; SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3changeset_conflict( iterator.GetIntPtr(), columnIndex, ref pValue); return SQLiteValue.FromIntPtr(pValue); } #endregion /////////////////////////////////////////////////////////////////////// |
︙ | ︙ |