System.Data.SQLite

Login
This project makes use of Eagle, provided by Mistachkin Systems.
Eagle: Secure Software Automation
2014-04-03
11:41 Ticket [56b42d99c1] Auto-enlistment in ambient transaction does not use the transaction isolation level status still Closed with 3 other changes artifact: 00fd834dc6 user: anonymous
2014-04-02
02:09
Add support for mapping transaction isolation levels to their legacy default values. Pursuant to [56b42d99c1]. check-in: 919d687064 user: mistachkin tags: trunk
2014-03-30
01:51 Ticket [56b42d99c1] Auto-enlistment in ambient transaction does not use the transaction isolation level status still Closed with 3 other changes artifact: fe428eb33b user: mistachkin
01:19
Add support for mapping transaction isolation levels to their legacy default values. Pursuant to [56b42d99c1]. check-in: 79365bcaed user: mistachkin tags: isolationLevels
2014-03-28
22:01 Ticket [56b42d99c1] Auto-enlistment in ambient transaction does not use the transaction isolation level status still Closed with 3 other changes artifact: 1f8a8ff754 user: mistachkin
20:02 Ticket [56b42d99c1]: 3 changes artifact: 8ba69750c7 user: anonymous
2013-12-23
14:48 Closed ticket [56b42d99c1]. artifact: f06085f9ff user: mistachkin
2013-12-20
17:03 Ticket [56b42d99c1]: 3 changes artifact: 07fc2d8ef9 user: mistachkin
17:02
Use the current isolation level when enlisting into an existing transaction. Fix for [56b42d99c1]. check-in: f89efea9e9 user: mistachkin tags: trunk
16:59 Pending ticket [56b42d99c1]: Auto-enlistment in ambient transaction does not use the transaction isolation level plus 3 other changes artifact: 9a1470c755 user: mistachkin
2013-12-19
06:38
Add test for ticket [56b42d99c1]. Minor style fixes. check-in: c91f525f5a user: mistachkin tags: tkt-56b42d99c1
02:16 Fixed ticket [56b42d99c1]: Auto-enlistment in ambient transaction does not use the transaction isolation level plus 3 other changes artifact: f94f3d9179 user: mistachkin
02:14
Use the current isolation level when enlisting into an existing transaction. Fix for [56b42d99c1]. Still needs tests. check-in: 4f050c73ff user: mistachkin tags: tkt-56b42d99c1
00:42 Ticket [56b42d99c1] Auto-enlistment in ambient transaction does not use the transaction isolation level status still Open with 7 other changes artifact: b8000b1ea7 user: mistachkin
2013-12-18
20:59 New ticket [56b42d99c1]. artifact: 2e059bc3da user: anonymous

Ticket Hash: 56b42d99c18456d55e769fd2663ef7a75129c46b
Title: Auto-enlistment in ambient transaction does not use the transaction isolation level
Status: Closed Type: Code_Defect
Severity: Important Priority: Blocker
Subsystem: Enlistment Resolution: Fixed
Last Modified: 2014-04-03 11:41:34
Version Found In: 1.0.89.0
User Comments:
anonymous added on 2013-12-18 20:59:53:
We are using TransactionScope to control transactions, and SQLite connections correctly enlists in the ambient transaction if there is one at connection opening time. However, the SQLite transaction itself is not started using the isolation level of the ambient transaction. Instead it uses the default isolation level configured for the connection. Given that it is a default, and that there is already a controlling transaction with an isolation level specified, I think it would be better if the latter was used, thereby avoiding having to control isolation level for each connection individually.

mistachkin added on 2013-12-19 02:16:52:
A prototype fix for this is checked-in [4f050c73ff] on the "tkt-56b42d99c1"
branch.  Could you please try this fix in your environment, see if it resolves
the issue, and report back?  In Fossil, to update to that branch, the following
command may be used:

fossil update tkt-56b42d99c1

mistachkin added on 2013-12-20 16:59:54:
Ticket is pending closure waiting for a response from the originator.

mistachkin added on 2013-12-20 17:03:29:
Fix merged to trunk via check-in [f89efea9e9].

anonymous added on 2014-03-28 20:02:06:
(Assuming that I'm correct in my belief that SQLite only allows for ReadUncommitted and Serializable...)


This change broke my code.  I use a Data Access Layer interface to generalize across several data access providers.  I specify Snapshot isolation in my next layer, which SQLite does not support, and now throws "isolationLevel".  I guess it was using the connection default of Serializable before, but now it's failing if the Transaction enlisted doesn't match.

Is there a more robust resolution that can avoid such leaks in my abstraction layer?

mistachkin added on 2014-03-28 22:01:25:
I'll look into it; however, throwing an exception for an unsupported isolation
level seems like a reasonable thing to do?

mistachkin added on 2014-03-30 01:51:38:
I've made some changes on the [/info/isolationLevels] branch that add a new
connection flag named "MapIsolationLevels".  When this connection flag is used,
one of the known transaction isolation levels will be used when enlisting into an
existing transaction.

Could you please test these changes in your environment and let me know if they
work for you?

In order to make use of these changes, you will need to add the following to your
connection string:

    Flags=MapIsolationLevels;

anonymous added on 2014-04-03 11:41:34:
This seems like a good resolution to me.  Thank you.  I would not be setting this flag in my environment, so the old behavior is expected and should work great.