Comments (5)
According to this answer and many others, we need to make these changes:
- Make all constraints
DEFERRED
inside one transaction - Adjust insert order for compounds and lists and call
notifyQuery
only after allSQL
operations - Wrap
database
operations such ascreate
,migrate
,clear
anddrop
inside a transaction and turn off foreign keys usingPRAGMA
from kabin.
- Make all constraints
DEFERRED
inside one transaction
In order to make the first point work correctly, all foreign keys should be created as DEFERRABLE INITIALLY IMMEDIATE
by default, and DEFERRABLE INITIALLY DEFERRED
Changed here: 022636f
This means that projects adopting these changes, should update their database version
from kabin.
- Make all constraints DEFERRED inside one transaction
Some deeper research showed that room uses PRAGMA
syntax to make foreign keys DEFERRED
inside a transaction, which seems like a better option than SET CONSTRAINTS ALL DEFERRED
since it's rolled back once the transaction ends, and you don't have to do it manually.
More info: https://sqlite.org/pragma.html#pragma_defer_foreign_keys
from kabin.
1- Make all constraints
DEFERRED
inside one transaction
3- Wrapdatabase
operations such ascreate
,migrate
,clear
anddrop
inside a transaction and turn off foreign keys usingPRAGMA
In order to achieve this type of control over foreign keys, KabinDatabaseConfiguration
had to be changed to include more flags. configuration
is now passed to Database
, Scheme
and Dao
, which means this commit might introduce breaking changes for some projects.
Changed here: 132af15
from kabin.
- Adjust insert order for compounds and lists and call
notifyQuery
only after allSQL
operations
Further research showed that notifyQuery
inside one transaction delays triggers until the transaction is successful, therefore, these changes were postponed until future refactoring of the compiler
and processor
modules.
from kabin.
Related Issues (13)
- Multiple and nullable list arguments break code-gen HOT 5
- Flow of a single element doesn't throw error when the element doesn't exist HOT 2
- Bug: db connection on android doesn't support ForeignKey HOT 3
- Primary keys are ignored, if the columns are inside an embedded class HOT 1
- Bug: type mismatch for complex compounds having nullable and non-nullable types HOT 1
- Bug: Flow doesn't emit new value when compound have relation to list of entities HOT 2
- iOS: Creating scheme throws SQLiteExceptionErrorCode: transaction within a transaction HOT 2
- ForeignKey: Inconsistent behavior across different KMP targets, especially during migration
- Mapper: issue with the order of mapper constructor arguments in the generated database class
- Insert: Incorrect parameters count HOT 1
- Generator: method call conflicts
- Generator: java.io.FileNotFoundException (File name too long)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kabin.