Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the SQLiteDataReader, try to stop processing query results if the underlying connection is closed. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
441fd3e40ba0f56dad371257207f50dc |
User & Date: | mistachkin 2012-10-13 20:26:28.632 |
Context
2012-10-13
| ||
20:28 | Make the stress test failure handling more flexible, add more comments, and improve readability. check-in: 742684b09c user: mistachkin tags: trunk | |
20:26 | In the SQLiteDataReader, try to stop processing query results if the underlying connection is closed. check-in: 441fd3e40b user: mistachkin tags: trunk | |
19:11 | Prevent stress test from running out of memory due to large result sets. Also, increase several of the default workload argument values. check-in: c2d27a493d user: mistachkin tags: trunk | |
Changes
Changes to System.Data.SQLite/SQLite3.cs.
︙ | ︙ | |||
300 301 302 303 304 305 306 | { SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_shutdown(); return rc; } internal override bool IsOpen() { | | | 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 | { SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_shutdown(); return rc; } internal override bool IsOpen() { return (_sql != null) && !_sql.IsInvalid && !_sql.IsClosed; } internal override void Open(string strFilename, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, int maxPoolSize, bool usePool) { if (_sql != null) return; _usePool = usePool; |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteDataReader.cs.
︙ | ︙ | |||
1243 1244 1245 1246 1247 1248 1249 | if (stmt == null) break; _activeStatementIndex++; stmt._sql.Step(stmt); if (stmt._sql.ColumnCount(stmt) == 0) { if (_rowsAffected == -1) _rowsAffected = 0; | > > | > > | 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 | if (stmt == null) break; _activeStatementIndex++; stmt._sql.Step(stmt); if (stmt._sql.ColumnCount(stmt) == 0) { if (_rowsAffected == -1) _rowsAffected = 0; int changes = 0; if (stmt.TryGetChanges(ref changes)) _rowsAffected += changes; else return false; } stmt._sql.Reset(stmt); // Gotta reset after every step to release any locks and such! } return false; } } |
︙ | ︙ | |||
1276 1277 1278 1279 1280 1281 1282 | if (stmt._sql.Step(stmt)) { _readingState = -1; } else if (fieldCount == 0) // No rows returned, if fieldCount is zero, skip to the next statement { if (_rowsAffected == -1) _rowsAffected = 0; | > > | > > | 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 | if (stmt._sql.Step(stmt)) { _readingState = -1; } else if (fieldCount == 0) // No rows returned, if fieldCount is zero, skip to the next statement { if (_rowsAffected == -1) _rowsAffected = 0; int changes = 0; if (stmt.TryGetChanges(ref changes)) _rowsAffected += changes; else return false; stmt._sql.Reset(stmt); continue; // Skip this command and move to the next, it was not a row-returning resultset } else // No rows, fieldCount is non-zero so stop here { _readingState = 1; // This command returned columns but no rows, so return true, but HasRows = false and Read() returns false } |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteStatement.cs.
︙ | ︙ | |||
157 158 159 160 161 162 163 164 165 166 167 168 169 170 | #region Destructor ~SQLiteStatement() { Dispose(false); } #endregion /////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to /// this statement, and if so, keeps a reference to the parameter so it can be bound later. /// </summary> | > > > > > > > > > > > > > > > > > > > > > > | 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | #region Destructor ~SQLiteStatement() { Dispose(false); } #endregion /////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// If the underlying database connection is open, fetches the number of changed rows /// resulting from the most recent query; otherwise, does nothing. /// </summary> /// <param name="changes"> /// The number of changes when true is returned. /// Undefined if false is returned. /// </param> /// <returns>Non-zero if the number of changed rows was fetched.</returns> internal bool TryGetChanges(ref int changes) { if ((_sql != null) && _sql.IsOpen()) { changes = _sql.Changes; return true; } return false; } /////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to /// this statement, and if so, keeps a reference to the parameter so it can be bound later. /// </summary> |
︙ | ︙ |