Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add PoolCount property to the SQLiteConnection class to return the number of pool entries for the file name associated with the connection. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | tkt-996d13cd87 |
Files: | files | file ages | folders |
SHA1: |
9005890cba181d062cda050b2181ebbb |
User & Date: | mistachkin 2012-04-29 04:58:23.178 |
Context
2012-04-29
| ||
05:00 | Remove superfluous using statement. check-in: 0b2bf29623 user: mistachkin tags: tkt-996d13cd87 | |
04:58 | Add PoolCount property to the SQLiteConnection class to return the number of pool entries for the file name associated with the connection. check-in: 9005890cba user: mistachkin tags: tkt-996d13cd87 | |
03:27 | Modify static IsAutocommit method to prevent it from passing IntPtr.Zero to the native library. check-in: 5dd7f49382 user: mistachkin tags: tkt-996d13cd87 | |
Changes
Changes to System.Data.SQLite/SQLite3.cs.
︙ | ︙ | |||
284 285 286 287 288 289 290 291 292 293 294 295 296 297 | SetTimeout(0); } internal override void ClearPool() { SQLiteConnectionPool.ClearPool(_fileName); } internal override void SetTimeout(int nTimeoutMS) { int n = UnsafeNativeMethods.sqlite3_busy_timeout(_sql, nTimeoutMS); if (n > 0) throw new SQLiteException(n, SQLiteLastError()); } | > > > > > > > > > > > | 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 | SetTimeout(0); } internal override void ClearPool() { SQLiteConnectionPool.ClearPool(_fileName); } internal override int CountPool() { Dictionary<string, int> counts = null; int totalCount = 0; SQLiteConnectionPool.GetCounts(_fileName, ref counts, ref totalCount); return totalCount; } internal override void SetTimeout(int nTimeoutMS) { int n = UnsafeNativeMethods.sqlite3_busy_timeout(_sql, nTimeoutMS); if (n > 0) throw new SQLiteException(n, SQLiteLastError()); } |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteBase.cs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /******************************************************** * ADO.NET 2.0 Data Provider for SQLite Version 3.X * Written by Robert Simpson (robert@blackcastlesoft.com) * * Released to the public domain, use at your own risk! ********************************************************/ namespace System.Data.SQLite { using System; /// <summary> /// This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement /// a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. /// </summary> internal abstract class SQLiteBase : SQLiteConvert, IDisposable { | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /******************************************************** * ADO.NET 2.0 Data Provider for SQLite Version 3.X * Written by Robert Simpson (robert@blackcastlesoft.com) * * Released to the public domain, use at your own risk! ********************************************************/ namespace System.Data.SQLite { using System; using System.Collections.Generic; /// <summary> /// This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement /// a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. /// </summary> internal abstract class SQLiteBase : SQLiteConvert, IDisposable { |
︙ | ︙ | |||
83 84 85 86 87 88 89 90 91 92 93 94 95 96 | internal abstract string SQLiteLastError(); /// <summary> /// When pooling is enabled, force this connection to be disposed rather than returned to the pool /// </summary> internal abstract void ClearPool(); /// <summary> /// Prepares a SQL statement for execution. /// </summary> /// <param name="cnn">The source connection preparing the command. Can be null for any caller except LINQ</param> /// <param name="strSql">The SQL command text to prepare</param> /// <param name="previous">The previous statement in a multi-statement command, or null if no previous statement exists</param> /// <param name="timeoutMS">The timeout to wait before aborting the prepare</param> | > > > > > > | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | internal abstract string SQLiteLastError(); /// <summary> /// When pooling is enabled, force this connection to be disposed rather than returned to the pool /// </summary> internal abstract void ClearPool(); /// <summary> /// When pooling is enabled, returns the number of pool entries matching the current file name. /// </summary> /// <returns>The number of pool entries matching the current file name.</returns> internal abstract int CountPool(); /// <summary> /// Prepares a SQL statement for execution. /// </summary> /// <param name="cnn">The source connection preparing the command. Can be null for any caller except LINQ</param> /// <param name="strSql">The SQL command text to prepare</param> /// <param name="previous">The previous statement in a multi-statement command, or null if no previous statement exists</param> /// <param name="timeoutMS">The timeout to wait before aborting the prepare</param> |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteConnection.cs.
︙ | ︙ | |||
668 669 670 671 672 673 674 675 676 677 678 679 680 681 | _sql.Close(); _sql = null; } _transactionLevel = 0; } OnStateChange(ConnectionState.Closed); } /// <summary> /// Clears the connection pool associated with the connection. Any other active connections using the same database file /// will be discarded instead of returned to the pool when they are closed. /// </summary> /// <param name="connection"></param> public static void ClearPool(SQLiteConnection connection) | > > > > > > > > > > > > | 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 | _sql.Close(); _sql = null; } _transactionLevel = 0; } OnStateChange(ConnectionState.Closed); } /// <summary> /// Returns the number of pool entries for the file name associated with this connection. /// </summary> public int PoolCount { get { if (_sql == null) return 0; return _sql.CountPool(); } } /// <summary> /// Clears the connection pool associated with the connection. Any other active connections using the same database file /// will be discarded instead of returned to the pool when they are closed. /// </summary> /// <param name="connection"></param> public static void ClearPool(SQLiteConnection connection) |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteConnectionPool.cs.
︙ | ︙ | |||
34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /// </summary> private static SortedList<string, Pool> _connections = new SortedList<string, Pool>(StringComparer.OrdinalIgnoreCase); /// <summary> /// The default version number new pools will get /// </summary> private static int _poolVersion = 1; /// <summary> /// Attempt to pull a pooled connection out of the queue for active duty /// </summary> /// <param name="fileName">The filename for a desired connection</param> /// <param name="maxPoolSize">The maximum size the connection pool for the filename can be</param> /// <param name="version">The pool version the returned connection will belong to</param> | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | /// </summary> private static SortedList<string, Pool> _connections = new SortedList<string, Pool>(StringComparer.OrdinalIgnoreCase); /// <summary> /// The default version number new pools will get /// </summary> private static int _poolVersion = 1; /// <summary> /// Counts the number of pool entries matching the specified file name. /// </summary> /// <param name="fileName">The file name to match or null to match all files.</param> /// <param name="counts">The pool entry counts for each matching file.</param> /// <param name="totalCount">The total number of pool entries for all matching files.</param> internal static void GetCounts( string fileName, ref Dictionary<string, int> counts, ref int totalCount ) { lock (_connections) { if (counts == null) { counts = new Dictionary<string, int>( StringComparer.OrdinalIgnoreCase); } if (fileName != null) { Pool queue; if (_connections.TryGetValue(fileName, out queue)) { Queue<WeakReference> poolQueue = queue.Queue; int count = (poolQueue != null) ? poolQueue.Count : 0; counts.Add(fileName, count); totalCount += count; } } else { foreach (KeyValuePair<string, Pool> pair in _connections) { if (pair.Value == null) continue; Queue<WeakReference> poolQueue = pair.Value.Queue; int count = (poolQueue != null) ? poolQueue.Count : 0; counts.Add(pair.Key, count); totalCount += count; } } } } /// <summary> /// Attempt to pull a pooled connection out of the queue for active duty /// </summary> /// <param name="fileName">The filename for a desired connection</param> /// <param name="maxPoolSize">The maximum size the connection pool for the filename can be</param> /// <param name="version">The pool version the returned connection will belong to</param> |
︙ | ︙ |