Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the AggressiveDisposal connection flag. Other pre-release fixes. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8d439ebddedfbcdeace9218f8391199e |
User & Date: | mistachkin 2024-07-02 05:10:27 |
Context
2024-07-02
| ||
14:37 | Add some comments. check-in: 3e72cd9da8 user: mistachkin tags: trunk | |
05:10 | Add the AggressiveDisposal connection flag. Other pre-release fixes. check-in: 8d439ebdde user: mistachkin tags: trunk | |
03:02 | More test enhancments. check-in: 943172a587 user: mistachkin tags: trunk | |
Changes
Changes to Doc/Extra/Provider/version.html.
︙ | ︙ | |||
47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <ul> <li>Updated to <a href="https://www.sqlite.org/releaselog/3_46_0.html">SQLite 3.46.0</a>.</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/3757f4365b">[3757f4365b]</a>.</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/66a0d2716a">[66a0d2716a]</a>.</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/25cafb35e5">[25cafb35e5]</a>.</li> <li>Add the VfsName connection string property.</li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with <a href="https://www.sqlite.org/see">SEE</a>.</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for <a href="https://system.data.sqlite.org/index.html/info/bbddfeb773">[bbddfeb773]</a>.</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/76cb35b58d">[76cb35b58d]</a>.</li> </ul> | > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <ul> <li>Updated to <a href="https://www.sqlite.org/releaselog/3_46_0.html">SQLite 3.46.0</a>.</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/3757f4365b">[3757f4365b]</a>.</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/66a0d2716a">[66a0d2716a]</a>.</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/25cafb35e5">[25cafb35e5]</a>.</li> <li>Add the VfsName connection string property.</li> <li>Add the ConnectionPoolOnly and AggressiveDisposal connection flags. <b>** Potentially Incompatible Change **</b></li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with <a href="https://www.sqlite.org/see">SEE</a>.</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for <a href="https://system.data.sqlite.org/index.html/info/bbddfeb773">[bbddfeb773]</a>.</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post <a href="https://www.sqlite.org/forum/forumpost/76cb35b58d">[76cb35b58d]</a>.</li> </ul> |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteBase.cs.
︙ | ︙ | |||
1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 | /// <summary> /// If a connection cannot be opened using the connection pool, throw /// an exception instead of default behavior of falling back to using /// a non-pooled connection. /// </summary> ConnectionPoolOnly = 0x10000000000000, /// <summary> /// When binding parameter values or returning column values, always /// treat them as though they were plain text (i.e. no numeric, /// date/time, or other conversions should be attempted). /// </summary> BindAndGetAllAsText = BindAllAsText | GetAllAsText, | > > > > > > | 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 | /// <summary> /// If a connection cannot be opened using the connection pool, throw /// an exception instead of default behavior of falling back to using /// a non-pooled connection. /// </summary> ConnectionPoolOnly = 0x10000000000000, /// <summary> /// Be more aggressive about disposing of unused native resources, /// e.g. connections, transactions, commands, data readers, etc. /// </summary> AggressiveDisposal = 0x20000000000000, /// <summary> /// When binding parameter values or returning column values, always /// treat them as though they were plain text (i.e. no numeric, /// date/time, or other conversions should be attempted). /// </summary> BindAndGetAllAsText = BindAllAsText | GetAllAsText, |
︙ | ︙ | |||
1627 1628 1629 1630 1631 1632 1633 | #else LogDefault = LogCallbackException, #endif /// <summary> /// The default extra flags for new connections. /// </summary> | | > | 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 | #else LogDefault = LogCallbackException, #endif /// <summary> /// The default extra flags for new connections. /// </summary> Default = LogDefault | BindInvariantDecimal | GetInvariantDecimal | AggressiveDisposal, /// <summary> /// The default extra flags for new connections with all logging enabled. /// </summary> DefaultAndLogAll = Default | LogAll } |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteCommand.cs.
︙ | ︙ | |||
250 251 252 253 254 255 256 | } } if (reader != null) { reader._disposeCommand = true; | > > > | | | | | | | | | | | | | | | | | > | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | } } if (reader != null) { reader._disposeCommand = true; if (HelperMethods.HasFlags(reader._flags, SQLiteConnectionFlags.AggressiveDisposal)) { // // HACK: Copy the statement list to our active reader, // after adding a reference to each one of the // valid statements. // if (_statementList != null) { foreach (SQLiteStatement statement in _statementList) { if (statement == null) continue; statement.AddReference(); } reader._statementList = _statementList; } else { reader._statementList = null; } } _activeReader = null; skippedDispose = true; return; } |
︙ | ︙ | |||
516 517 518 519 520 521 522 | } /// <summary> /// Builds an array of prepared statements for each complete SQL statement in the command text /// </summary> internal SQLiteStatement BuildNextCommand() { | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | > | > > > > | | | > | | | | | 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 | } /// <summary> /// Builds an array of prepared statements for each complete SQL statement in the command text /// </summary> internal SQLiteStatement BuildNextCommand() { SQLiteStatement stmt = null; try { if ((_cnn != null) && (_cnn._sql != null)) { if (_statementList == null) _remainingText = _commandText; stmt = _cnn._sql.Prepare(_cnn, this, _remainingText, (_statementList == null) ? null : _statementList[_statementList.Count - 1], (uint)(_commandTimeout * 1000), ref _remainingText); if (stmt != null) { stmt.AddReference(); stmt._command = this; if (_statementList == null) _statementList = new List<SQLiteStatement>(); _statementList.Add(stmt); _parameterCollection.MapParameters(stmt); stmt.BindParameters(); } } return stmt; } catch (Exception) { if (stmt != null) { if ((_statementList != null) && _statementList.Contains(stmt)) { _statementList.Remove(stmt); } if ((stmt.RemoveReference() <= 0) || !HelperMethods.HasFlags( SQLiteConnection.GetFlags(_cnn), SQLiteConnectionFlags.AggressiveDisposal)) { stmt.Dispose(); } } // If we threw an error compiling the statement, we cannot continue on so set the remaining text to null. _remainingText = null; throw; } } internal SQLiteStatement GetStatement(int index) { // Haven't built any statements yet if (_statementList == null) return BuildNextCommand(); |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteConnection.cs.
︙ | ︙ | |||
5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 | _sql.SetPassword(passwordBytes, true); _passwordWasText = true; _passwordWasHex = true; break; } } } password = null; /* IMMUTABLE */ } hexPassword = null; /* IMMUTABLE */ } | > > > | 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 | _sql.SetPassword(passwordBytes, true); _passwordWasText = true; _passwordWasHex = true; break; } } Array.Clear(passwordBytes, 0, passwordBytes.Length); passwordBytes = null; } password = null; /* IMMUTABLE */ } hexPassword = null; /* IMMUTABLE */ } |
︙ | ︙ | |||
5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 | if (opts.ContainsKey("Password")) opts["Password"] = String.Empty; _connectionString = BuildConnectionString(opts); } #else if (FindKey(opts, "TextHexPassword", null) != null) { throw new SQLiteException(SQLiteErrorCode.Error, "Cannot use \"TextHexPassword\" connection string property: " + "library was not built with encryption support, please " + "see \"https://www.sqlite.org/see\" for more information"); } | > | 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 | if (opts.ContainsKey("Password")) opts["Password"] = String.Empty; _connectionString = BuildConnectionString(opts); } #else if (FindKey(opts, "TextHexPassword", null) != null) { throw new SQLiteException(SQLiteErrorCode.Error, "Cannot use \"TextHexPassword\" connection string property: " + "library was not built with encryption support, please " + "see \"https://www.sqlite.org/see\" for more information"); } |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteDataReader.cs.
︙ | ︙ | |||
22 23 24 25 26 27 28 | /// <summary> /// Underlying command this reader is attached to /// </summary> private SQLiteCommand _command; /// <summary> /// The flags pertaining to the associated connection (via the command). /// </summary> | | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /// <summary> /// Underlying command this reader is attached to /// </summary> private SQLiteCommand _command; /// <summary> /// The flags pertaining to the associated connection (via the command). /// </summary> internal SQLiteConnectionFlags _flags; /// <summary> /// Index of the current statement in the command being processed /// </summary> private int _activeStatementIndex; /// <summary> /// Current statement being Read() /// </summary> |
︙ | ︙ | |||
200 201 202 203 204 205 206 | { if (disposing) { //////////////////////////////////// // dispose managed resources here... //////////////////////////////////// | > > > | | > | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | { if (disposing) { //////////////////////////////////// // dispose managed resources here... //////////////////////////////////// if (HelperMethods.HasFlags(_flags, SQLiteConnectionFlags.AggressiveDisposal)) { SQLiteCommand.DisposeStatements( false, ref _statementList); } } ////////////////////////////////////// // release unmanaged resources here... ////////////////////////////////////// // |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteException.cs.
︙ | ︙ | |||
798 799 800 801 802 803 804 805 806 807 808 809 810 811 | /// Data read from the file system appears to be incorrect. /// </summary> IoErr_Data = (IoErr | (32 << 8)), /// <summary> /// File system corruption was detected during a read or write. /// </summary> IoErr_CorruptFs = (IoErr | (33 << 8)), /// <summary> /// A database table is locked in shared-cache mode. /// </summary> Locked_SharedCache = (Locked | (1 << 8)), /// <summary> /// A virtual table in the database is locked. /// </summary> | > > > > > | 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 | /// Data read from the file system appears to be incorrect. /// </summary> IoErr_Data = (IoErr | (32 << 8)), /// <summary> /// File system corruption was detected during a read or write. /// </summary> IoErr_CorruptFs = (IoErr | (33 << 8)), /// <summary> /// An exception was caught during use of mapped memory. /// In general, this applies only to the WAL journal mode. /// </summary> IoErr_In_Page = (IoErr | (34 << 8)), /// <summary> /// A database table is locked in shared-cache mode. /// </summary> Locked_SharedCache = (Locked | (1 << 8)), /// <summary> /// A virtual table in the database is locked. /// </summary> |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteFunction.cs.
︙ | ︙ | |||
95 96 97 98 99 100 101 | /// clauses, expression indexes, partial indexes, and generated columns unless /// the function is tagged with SQLITE_INNOCUOUS. Most built-in functions are /// innocuous. Developers are advised to avoid using the SQLITE_INNOCUOUS flag /// for application-defined functions unless the function has been carefully /// audited and found to be free of potentially security-adverse side-effects /// and information-leaks. /// </summary> | | > > > > > > > > > > > > | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /// clauses, expression indexes, partial indexes, and generated columns unless /// the function is tagged with SQLITE_INNOCUOUS. Most built-in functions are /// innocuous. Developers are advised to avoid using the SQLITE_INNOCUOUS flag /// for application-defined functions unless the function has been carefully /// audited and found to be free of potentially security-adverse side-effects /// and information-leaks. /// </summary> SQLITE_INNOCUOUS = 0x200000, /// <summary> /// The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function /// might call sqlite3_result_subtype() to cause a sub-type to be /// associated with its result. Every function that invokes /// sqlite3_result_subtype() should have this property. If it does not, /// then the call to sqlite3_result_subtype() might become a no-op if the /// function is used as term in an expression index. On the other hand, /// SQL functions that never invoke sqlite3_result_subtype() should avoid /// setting this property, as the purpose of this property is to disable /// certain optimizations that are incompatible with subtypes. /// </summary> SQLITE_RESULT_SUBTYPE = 0x1000000 } /// <summary> /// This abstract class is designed to handle user-defined functions easily. An instance of the derived class is made for each /// connection to the database. /// </summary> /// <remarks> |
︙ | ︙ |
Changes to Tests/tkt-71bedaca19.eagle.
︙ | ︙ | |||
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | IoErr_Delete 2570 IoErr_Delete_NoEnt 5898 IoErr_Dir_Close 4362 IoErr_Dir_Fsync 1290 IoErr_Fstat 1802 IoErr_Fsync 1034 IoErr_GetTempPath 6410 IoErr_Lock 3850 IoErr_Mmap 6154 IoErr_NoMem 3082 IoErr_RdLock 2314 IoErr_Read 266 IoErr_Rollback_Atomic 7946 IoErr_Seek 5642 | > | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | IoErr_Delete 2570 IoErr_Delete_NoEnt 5898 IoErr_Dir_Close 4362 IoErr_Dir_Fsync 1290 IoErr_Fstat 1802 IoErr_Fsync 1034 IoErr_GetTempPath 6410 IoErr_In_Page 8714 IoErr_Lock 3850 IoErr_Mmap 6154 IoErr_NoMem 3082 IoErr_RdLock 2314 IoErr_Read 266 IoErr_Rollback_Atomic 7946 IoErr_Seek 5642 |
︙ | ︙ |
Changes to readme.htm.
︙ | ︙ | |||
213 214 215 216 217 218 219 220 221 222 223 224 225 226 | <ul> <li>Updated to <a href="https://www.sqlite.org/releaselog/3_46_0.html">SQLite 3.46.0</a>.</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post [3757f4365b].</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post [66a0d2716a].</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post [25cafb35e5].</li> <li>Add the VfsName connection string property.</li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with <a href="https://www.sqlite.org/see">SEE</a>.</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for [bbddfeb773].</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post [76cb35b58d].</li> </ul> | > | 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | <ul> <li>Updated to <a href="https://www.sqlite.org/releaselog/3_46_0.html">SQLite 3.46.0</a>.</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post [3757f4365b].</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post [66a0d2716a].</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post [25cafb35e5].</li> <li>Add the VfsName connection string property.</li> <li>Add the ConnectionPoolOnly and AggressiveDisposal connection flags. <b>** Potentially Incompatible Change **</b></li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with <a href="https://www.sqlite.org/see">SEE</a>.</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for [bbddfeb773].</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post [76cb35b58d].</li> </ul> |
︙ | ︙ |
Changes to www/news.wiki.
︙ | ︙ | |||
60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <ul> <li>Updated to [https://www.sqlite.org/releaselog/3_46_0.html|SQLite 3.46.0].</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/3757f4365b|3757f4365b].</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/66a0d2716a|66a0d2716a].</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/25cafb35e5|25cafb35e5]</a>.</li> <li>Add the VfsName connection string property.</li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with [https://www.sqlite.org/see|SEE].</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for [bbddfeb773].</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/76cb35b58d|76cb35b58d].</li> </ul> | > | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | <ul> <li>Updated to [https://www.sqlite.org/releaselog/3_46_0.html|SQLite 3.46.0].</li> <li>Update internal resource list of reserved SQL words.</li> <li>Add experimental support for using NuGet runtime identifiers to help locate the interop assembly. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/3757f4365b|3757f4365b].</li> <li>Avoid NullReferenceException from Path.Combine method when the PublishSingleFile property is enabled for a project. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/66a0d2716a|66a0d2716a].</li> <li>Avoid setting up for the Changed event when it will not be fired. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/25cafb35e5|25cafb35e5]</a>.</li> <li>Add the VfsName connection string property.</li> <li>Add the ConnectionPoolOnly and AggressiveDisposal connection flags. <b>** Potentially Incompatible Change **</b></li> <li>Add the "compress" and "zipfile" extensions to the interop assembly.</li> <li>Add the GetPasswordCallback property to the SQLiteConnection class for use with [https://www.sqlite.org/see|SEE].</li> <li>Add the NoCase property to the SQLiteParameterCollection class.</li> <li>Fix rarely seen NullReferenceException in the StaticWeakConnectionPool.Add method.</li> <li>Revise the calculation used to bind DateTime values. Fix for [bbddfeb773].</li> <li>Fix support for unnamed parameters using the ?NNN syntax. Pursuant to forum post [https://www.sqlite.org/forum/forumpost/76cb35b58d|76cb35b58d].</li> </ul> |
︙ | ︙ |