System.Data.SQLite

Check-in [c156d4710c]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add support for using the sqlite3_limit() native API via the SetLimitOption method.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: c156d4710cc93151dac6093a3c4a1489bd5b2af7
User & Date: mistachkin 2019-10-26 23:26:58.418
Context
2019-10-26
23:47
Add preliminary support for .NET Core 3.0 and the .NET Standard 2.1. Pursuant to [ce75d320d0]. check-in: f27654c95b user: mistachkin tags: trunk
23:26
Add support for using the sqlite3_limit() native API via the SetLimitOption method. check-in: c156d4710c user: mistachkin tags: trunk
23:06
Fix test name. Closed-Leaf check-in: 08dc03fa55 user: mistachkin tags: limits
2019-10-20
04:37
Update Eagle in externals to the beta 45 release. check-in: a8c34ef499 user: mistachkin tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to Doc/Extra/Provider/version.html.
43
44
45
46
47
48
49

50
51
52
53
54
55
56
    <div id="mainSection">
    <div id="mainBody">
    <h1 class="heading">Version History</h1>
    <p><b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b></p>
    <ul>
      <li>Updated to <a href="https://www.sqlite.org/releaselog/3_30_0.html">SQLite 3.30.0</a>.</li>
      <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to <a href="https://system.data.sqlite.org/index.html/info/03b6b0edd7">[03b6b0edd7]</a>.</li>

    </ul>
    <p><b>1.0.111.0 - June 10, 2019</b></p>
    <ul>
      <li>Updated to <a href="https://www.sqlite.org/releaselog/3_28_0.html">SQLite 3.28.0</a>.</li>
      <li>Add No_SQLiteLog environment variable.</li>
    </ul>
    <p><b>1.0.110.0 - March 4, 2019</b></p>







>







43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    <div id="mainSection">
    <div id="mainBody">
    <h1 class="heading">Version History</h1>
    <p><b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b></p>
    <ul>
      <li>Updated to <a href="https://www.sqlite.org/releaselog/3_30_0.html">SQLite 3.30.0</a>.</li>
      <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to <a href="https://system.data.sqlite.org/index.html/info/03b6b0edd7">[03b6b0edd7]</a>.</li>
      <li>Add SetLimitOption method to the SQLiteConnection class.</li>
    </ul>
    <p><b>1.0.111.0 - June 10, 2019</b></p>
    <ul>
      <li>Updated to <a href="https://www.sqlite.org/releaselog/3_28_0.html">SQLite 3.28.0</a>.</li>
      <li>Add No_SQLiteLog environment variable.</li>
    </ul>
    <p><b>1.0.110.0 - March 4, 2019</b></p>
Changes to System.Data.SQLite/SQLite3.cs.
2855
2856
2857
2858
2859
2860
2861
















































2862
2863
2864
2865
2866
2867
2868
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_WRITE,
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_DEFERRED_FKS,
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_USED_SHARED);
#endif

        return builder.ToString();
    }

















































    /// <summary>
    /// Builds an error message string fragment containing the
    /// defined values of the <see cref="SQLiteConfigDbOpsEnum" />
    /// enumeration.
    /// </summary>
    /// <returns>







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_WRITE,
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_DEFERRED_FKS,
            SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_USED_SHARED);
#endif

        return builder.ToString();
    }

    /// <summary>
    /// Builds an error message string fragment containing the
    /// defined values of the <see cref="SQLiteLimitOpsEnum" />
    /// enumeration.
    /// </summary>
    /// <returns>
    /// The built string fragment.
    /// </returns>
    private static string GetLimitOpsNames()
    {
        StringBuilder builder = new StringBuilder();

#if !PLATFORM_COMPACTFRAMEWORK
        foreach (string name in Enum.GetNames(
                typeof(SQLiteLimitOpsEnum)))
        {
            if (String.IsNullOrEmpty(name))
                continue;

            if (builder.Length > 0)
                builder.Append(", ");

            builder.Append(name);
        }
#else
        //
        // TODO: Update this list if the available values in the
        //       "SQLiteLimitOpsEnum" enumeration change.
        //
        builder.AppendFormat(CultureInfo.InvariantCulture,
            "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}",
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_LENGTH,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_SQL_LENGTH,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_COLUMN,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_EXPR_DEPTH,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_COMPOUND_SELECT,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_VDBE_OP,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_FUNCTION_ARG,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_ATTACHED,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_LIKE_PATTERN_LENGTH,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_VARIABLE_NUMBER,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_TRIGGER_DEPTH,
            SQLiteConfigDbOpsEnum.SQLITE_LIMIT_WORKER_THREADS);
#endif

        return builder.ToString();
    }

    /// <summary>
    /// Builds an error message string fragment containing the
    /// defined values of the <see cref="SQLiteConfigDbOpsEnum" />
    /// enumeration.
    /// </summary>
    /// <returns>
2886
2887
2888
2889
2890
2891
2892
2893

2894
2895
2896
2897
2898
2899
2900
2901
2902
2903







2904
2905
2906
2907
2908
2909
2910
        }
#else
        //
        // TODO: Update this list if the available values in the
        //       "SQLiteConfigDbOpsEnum" enumeration change.
        //
        builder.AppendFormat(CultureInfo.InvariantCulture,
            "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}",

            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NONE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_MAINDBNAME,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LOOKASIDE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FKEY,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_TRIGGER,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_QPSG,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_TRIGGER_EQP);







#endif

        return builder.ToString();
    }

    /// <summary>
    /// Returns the current and/or highwater values for the specified







|
>









|
>
>
>
>
>
>
>







2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
        }
#else
        //
        // TODO: Update this list if the available values in the
        //       "SQLiteConfigDbOpsEnum" enumeration change.
        //
        builder.AppendFormat(CultureInfo.InvariantCulture,
            "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, " +
            "{9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}",
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NONE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_MAINDBNAME,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LOOKASIDE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FKEY,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_TRIGGER,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_QPSG,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_TRIGGER_EQP,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_RESET_DATABASE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DEFENSIVE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_WRITABLE_SCHEMA,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DQS_DML,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DQS_DDL,
            SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_VIEW);
#endif

        return builder.ToString();
    }

    /// <summary>
    /// Returns the current and/or highwater values for the specified
2939
2940
2941
2942
2943
2944
2945
2946
2947





























2948
2949
2950
2951
2952
2953
2954
2955
2956
                "unrecognized status option, must be: {0}",
                GetStatusDbOpsNames()));
        }

        return UnsafeNativeMethods.sqlite3_db_status(
            _sql, option, ref current, ref highwater, reset ? 1 : 0);
    }

    /// <summary>





























    /// Change a configuration option value for the database.
    /// connection.
    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified configuration option.
    /// </param>









>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

<







2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033

3034
3035
3036
3037
3038
3039
3040
                "unrecognized status option, must be: {0}",
                GetStatusDbOpsNames()));
        }

        return UnsafeNativeMethods.sqlite3_db_status(
            _sql, option, ref current, ref highwater, reset ? 1 : 0);
    }

    /// <summary>
    /// Change a limit value for the database.
    /// </summary>
    /// <param name="option">
    /// The database limit to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified limit.
    /// </param>
    /// <returns>
    /// The old value for the specified limit -OR- negative one if an error
    /// occurs.
    /// </returns>
    internal override int SetLimitOption(
        SQLiteLimitOpsEnum option,
        int value
        )
    {
        if (!Enum.IsDefined(typeof(SQLiteLimitOpsEnum), option))
        {
            throw new SQLiteException(HelperMethods.StringFormat(
                CultureInfo.CurrentCulture,
                "unrecognized limit option, must be: {0}",
                GetLimitOpsNames()));
        }

        return UnsafeNativeMethods.sqlite3_limit(_sql, option, value);
    }

    /// <summary>
    /// Change a configuration option value for the database.

    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified configuration option.
    /// </param>
Changes to System.Data.SQLite/SQLiteBase.cs.
390
391
392
393
394
395
396














397
398
399
400
401
402
403
    /// If applicable, receives the highwater value.
    /// </param>
    /// <returns>
    /// A standard SQLite return code.
    /// </returns>
    internal abstract SQLiteErrorCode GetStatusParameter(SQLiteStatusOpsEnum option, bool reset, ref int current, ref int highwater);
    /// <summary>














    /// Change a configuration option value for the database.
    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified configuration option.







>
>
>
>
>
>
>
>
>
>
>
>
>
>







390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
    /// If applicable, receives the highwater value.
    /// </param>
    /// <returns>
    /// A standard SQLite return code.
    /// </returns>
    internal abstract SQLiteErrorCode GetStatusParameter(SQLiteStatusOpsEnum option, bool reset, ref int current, ref int highwater);
    /// <summary>
    /// Change a limit value for the database.
    /// </summary>
    /// <param name="option">
    /// The database limit to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified limit.
    /// </param>
    /// <returns>
    /// The old value for the specified limit -OR- negative one if an error
    /// occurs.
    /// </returns>
    internal abstract int SetLimitOption(SQLiteLimitOpsEnum option, int value);
    /// <summary>
    /// Change a configuration option value for the database.
    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified configuration option.
1703
1704
1705
1706
1707
1708
1709
1710















































































  {
      SQLITE_TRACE_NONE = 0x0, // nil
      SQLITE_TRACE_STMT = 0x1, // pStmt, zSql
      SQLITE_TRACE_PROFILE = 0x2, // pStmt, piNsec64
      SQLITE_TRACE_ROW = 0x4, // pStmt
      SQLITE_TRACE_CLOSE = 0x8 // pDb
  }
}






















































































|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
1803
  {
      SQLITE_TRACE_NONE = 0x0, // nil
      SQLITE_TRACE_STMT = 0x1, // pStmt, zSql
      SQLITE_TRACE_PROFILE = 0x2, // pStmt, piNsec64
      SQLITE_TRACE_ROW = 0x4, // pStmt
      SQLITE_TRACE_CLOSE = 0x8 // pDb
  }

  /// <summary>
  /// These constants are used with the sqlite3_limit() API.
  /// </summary>
  public enum SQLiteLimitOpsEnum
  {
      /// <summary>
      /// This value represents an unknown (or invalid) limit, do not use it.
      /// </summary>
      SQLITE_LIMIT_NONE = -1,

      /// <summary>
      /// The maximum size of any string or BLOB or table row, in bytes.
      /// </summary>
      SQLITE_LIMIT_LENGTH = 0,

      /// <summary>
      /// The maximum length of an SQL statement, in bytes.
      /// </summary>
      SQLITE_LIMIT_SQL_LENGTH = 1,

      /// <summary>
      /// The maximum number of columns in a table definition or in the
      /// result set of a SELECT or the maximum number of columns in an
      /// index or in an ORDER BY or GROUP BY clause.
      /// </summary>
      SQLITE_LIMIT_COLUMN = 2,

      /// <summary>
      /// The maximum depth of the parse tree on any expression.
      /// </summary>
      SQLITE_LIMIT_EXPR_DEPTH = 3,

      /// <summary>
      /// The maximum number of terms in a compound SELECT statement.
      /// </summary>
      SQLITE_LIMIT_COMPOUND_SELECT = 4,

      /// <summary>
      /// The maximum number of instructions in a virtual machine program
      /// used to implement an SQL statement. If sqlite3_prepare_v2() or
      /// the equivalent tries to allocate space for more than this many
      /// opcodes in a single prepared statement, an SQLITE_NOMEM error
      /// is returned.
      /// </summary>
      SQLITE_LIMIT_VDBE_OP = 5,

      /// <summary>
      /// The maximum number of arguments on a function.
      /// </summary>
      SQLITE_LIMIT_FUNCTION_ARG = 6,

      /// <summary>
      /// The maximum number of attached databases.
      /// </summary>
      SQLITE_LIMIT_ATTACHED = 7,

      /// <summary>
      /// The maximum length of the pattern argument to the LIKE or GLOB
      /// operators.
      /// </summary>
      SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8,

      /// <summary>
      /// The maximum index number of any parameter in an SQL statement.
      /// </summary>
      SQLITE_LIMIT_VARIABLE_NUMBER = 9,

      /// <summary>
      /// The maximum depth of recursion for triggers.
      /// </summary>
      SQLITE_LIMIT_TRIGGER_DEPTH = 10,

      /// <summary>
      /// The maximum number of auxiliary worker threads that a single
      /// prepared statement may start.
      /// </summary>
      SQLITE_LIMIT_WORKER_THREADS = 11
  }
}
Changes to System.Data.SQLite/SQLiteConnection.cs.
3927
3928
3929
3930
3931
3932
3933





























3934
3935
3936
3937
3938
3939
3940
        catch
        {
            result = 0;
            return false;
        }
#endif
    }






























    /// <summary>
    /// Change a configuration option value for the database.
    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
        catch
        {
            result = 0;
            return false;
        }
#endif
    }

    /// <summary>
    /// Change a limit value for the database.
    /// </summary>
    /// <param name="option">
    /// The database limit to change.
    /// </param>
    /// <param name="value">
    /// The new value for the specified limit.
    /// </param>
    /// <returns>
    /// The old value for the specified limit -OR- negative one if an error
    /// occurs.
    /// </returns>
    public int SetLimitOption(
        SQLiteLimitOpsEnum option,
        int value
        )
    {
        CheckDisposed();

        if (_sql == null)
        {
            throw new InvalidOperationException(
                "Database connection not valid for changing a limit option.");
        }

        return _sql.SetLimitOption(option, value);
    }

    /// <summary>
    /// Change a configuration option value for the database.
    /// </summary>
    /// <param name="option">
    /// The database configuration option to change.
    /// </param>
Changes to System.Data.SQLite/UnsafeNativeMethods.cs.
4303
4304
4305
4306
4307
4308
4309







4310
4311
4312
4313
4314
4315
4316
#if !PLATFORM_COMPACTFRAMEWORK
    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
#else
    [DllImport(SQLITE_DLL)]
#endif
    internal static extern IntPtr sqlite3_trace_v2(IntPtr db, SQLiteTraceFlags mask, SQLiteTraceCallback2 func, IntPtr pvUser);








    // Since sqlite3_config() takes a variable argument list, we have to overload declarations
    // for all possible calls that we want to use.
#if !PLATFORM_COMPACTFRAMEWORK
    [DllImport(SQLITE_DLL, EntryPoint = "sqlite3_config", CallingConvention = CallingConvention.Cdecl)]
#else
    [DllImport(SQLITE_DLL, EntryPoint = "sqlite3_config")]
#endif







>
>
>
>
>
>
>







4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
#if !PLATFORM_COMPACTFRAMEWORK
    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
#else
    [DllImport(SQLITE_DLL)]
#endif
    internal static extern IntPtr sqlite3_trace_v2(IntPtr db, SQLiteTraceFlags mask, SQLiteTraceCallback2 func, IntPtr pvUser);

#if !PLATFORM_COMPACTFRAMEWORK
    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
#else
    [DllImport(SQLITE_DLL)]
#endif
    internal static extern int sqlite3_limit(IntPtr db, SQLiteLimitOpsEnum op, int value);

    // Since sqlite3_config() takes a variable argument list, we have to overload declarations
    // for all possible calls that we want to use.
#if !PLATFORM_COMPACTFRAMEWORK
    [DllImport(SQLITE_DLL, EntryPoint = "sqlite3_config", CallingConvention = CallingConvention.Cdecl)]
#else
    [DllImport(SQLITE_DLL, EntryPoint = "sqlite3_config")]
#endif
Changes to Tests/basic.eagle.
5498
5499
5500
5501
5502
5503
5504








































5505
5506
5507
5508
5509
5510
5511
(net471)
(net472)
(net48)
(netXX)
(netstandard2.0)
(netstandard2.1)
(.NETStandard,Version=vX.X)}}









































###############################################################################

reportSQLiteResources $test_channel

###############################################################################








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
(net471)
(net472)
(net48)
(netXX)
(netstandard2.0)
(netstandard2.1)
(.NETStandard,Version=vX.X)}}

###############################################################################

runTest {test data-1.103 {SetLimitOption method} -setup {
  setupDb [set fileName data-1.103.db]
} -body {
  set limits [list]

  lappend limits SQLITE_LIMIT_NONE
  lappend limits SQLITE_LIMIT_LENGTH
  lappend limits SQLITE_LIMIT_SQL_LENGTH
  lappend limits SQLITE_LIMIT_COLUMN
  lappend limits SQLITE_LIMIT_EXPR_DEPTH
  lappend limits SQLITE_LIMIT_COMPOUND_SELECT
  lappend limits SQLITE_LIMIT_VDBE_OP
  lappend limits SQLITE_LIMIT_FUNCTION_ARG
  lappend limits SQLITE_LIMIT_ATTACHED
  lappend limits SQLITE_LIMIT_LIKE_PATTERN_LENGTH
  lappend limits SQLITE_LIMIT_VARIABLE_NUMBER
  lappend limits SQLITE_LIMIT_TRIGGER_DEPTH
  lappend limits SQLITE_LIMIT_WORKER_THREADS

  set connection [getDbConnection]

  foreach limit $limits {
    lappend result [$connection SetLimitOption $limit 1]
    lappend result [$connection SetLimitOption $limit 2]
  }

  set result
} -cleanup {
  cleanupDb $fileName

  freeDbConnection

  unset -nocomplain value result limit limits
  unset -nocomplain connection db fileName
} -constraints {eagle monoBug28 command.sql compile.DATA SQLite\
System.Data.SQLite} -result {-1 -1 1000000000 1 1000000000 1 2000 1 1000 1 500\
1 250000000 1 127 1 10 1 50000 1 999 1 1000 1 0 1}}

###############################################################################

reportSQLiteResources $test_channel

###############################################################################

Changes to readme.htm.
209
210
211
212
213
214
215

216
217
218
219
220
221
222

<p>
    <b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b>
</p>
<ul>
    <li>Updated to <a href="https://www.sqlite.org/releaselog/3_30_0.html">SQLite 3.30.0</a>.</li>
    <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to [03b6b0edd7].</li>

</ul>
<p>
    <b>1.0.111.0 - June 10, 2019</b>
</p>
<ul>
    <li>Updated to <a href="https://www.sqlite.org/releaselog/3_28_0.html">SQLite 3.28.0</a>.</li>
    <li>Add No_SQLiteLog environment variable.</li>







>







209
210
211
212
213
214
215
216
217
218
219
220
221
222
223

<p>
    <b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b>
</p>
<ul>
    <li>Updated to <a href="https://www.sqlite.org/releaselog/3_30_0.html">SQLite 3.30.0</a>.</li>
    <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to [03b6b0edd7].</li>
    <li>Add SetLimitOption method to the SQLiteConnection class.</li>
</ul>
<p>
    <b>1.0.111.0 - June 10, 2019</b>
</p>
<ul>
    <li>Updated to <a href="https://www.sqlite.org/releaselog/3_28_0.html">SQLite 3.28.0</a>.</li>
    <li>Add No_SQLiteLog environment variable.</li>
Changes to www/news.wiki.
46
47
48
49
50
51
52

53
54
55
56
57
58
59

<p>
    <b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b>
</p>
<ul>
    <li>Updated to [https://www.sqlite.org/releaselog/3_30_0.html|SQLite 3.30.0].</li>
    <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to [03b6b0edd7].</li>

</ul>
<p>
    <b>1.0.111.0 - June 10, 2019</b>
</p>
<ul>
    <li>Updated to [https://www.sqlite.org/releaselog/3_28_0.html|SQLite 3.28.0].</li>
    <li>Add No_SQLiteLog environment variable.</li>







>







46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

<p>
    <b>1.0.112.0 - October XX, 2019 <font color="red">(release scheduled)</font></b>
</p>
<ul>
    <li>Updated to [https://www.sqlite.org/releaselog/3_30_0.html|SQLite 3.30.0].</li>
    <li>Add support for new DBCONFIG options from the SQLite core library. Pursuant to [03b6b0edd7].</li>
    <li>Add SetLimitOption method to the SQLiteConnection class.</li>
</ul>
<p>
    <b>1.0.111.0 - June 10, 2019</b>
</p>
<ul>
    <li>Updated to [https://www.sqlite.org/releaselog/3_28_0.html|SQLite 3.28.0].</li>
    <li>Add No_SQLiteLog environment variable.</li>