@@ -81,9 +81,9 @@ class DatabaseConfigurationTest : BaseDatabaseTest(){
81
81
}))
82
82
83
83
val conn = manager.surpriseMeConnection()
84
- println ( " tr 0 " )
84
+
85
85
assertEquals(conn.journalMode, JournalMode .WAL )
86
- println ( " tr 1 " )
86
+
87
87
println (" Update journal to DELETE result ${conn.updateJournalMode(JournalMode .DELETE )} " )
88
88
assertEquals(conn.journalMode, JournalMode .DELETE )
89
89
println (" Update journal to WAL result ${conn.updateJournalMode(JournalMode .WAL )} " )
@@ -109,5 +109,73 @@ class DatabaseConfigurationTest : BaseDatabaseTest(){
109
109
conn2.close()
110
110
}
111
111
112
+ @Test
113
+ fun foreignKeyConstraintsSetting (){
114
+ runFkTest(" fkoff" , false )
115
+ runFkTest(" fkon" , true )
116
+ }
117
+
118
+ private fun runFkTest (dbname : String , enableFK : Boolean ){
119
+ var bookId = 1
120
+ fun makeBookWithoutTransaction (conn : DatabaseConnection ) =
121
+ conn.withStatement(" insert into book(id, name, author_id)values(${bookId++ } , 'Hello Book', 5)" ) { executeInsert() }
122
+
123
+ fun makeBook (conn : DatabaseConnection ) {
124
+ conn.withTransaction { conn ->
125
+ makeBookWithoutTransaction(conn)
126
+ }
127
+ }
128
+ fun checkAB (conn : DatabaseConnection , expectBooks : Int , expectAuthors : Int ){
129
+ val books = conn.longForQuery(" select count(*) from book" ).toInt()
130
+ val authors = conn.longForQuery(" select count(*) from author" ).toInt()
131
+
132
+ assertEquals(expectBooks, books)
133
+ assertEquals(expectAuthors, authors)
134
+ }
135
+
136
+ val manager = createDatabaseManager(DatabaseConfiguration (
137
+ name = dbname,
138
+ version = 1 ,
139
+ journalMode = JournalMode .WAL ,
140
+ foreignKeyConstraints = enableFK,
141
+ create = { db ->
142
+ db.withStatement(AUTHOR ) {
143
+ execute()
144
+ }
145
+ db.withStatement(BOOK ) {
146
+ execute()
147
+ }
148
+ }))
149
+
150
+ val conn = manager.createMultiThreadedConnection()
151
+
152
+ try {
153
+ checkAB(conn, 0 , 0 )
154
+
155
+ if (enableFK){
156
+ assertFails { makeBook(conn) }
157
+ assertFails { makeBookWithoutTransaction(conn) }
158
+ checkAB(conn, 0 , 0 )
159
+ }else {
160
+ makeBook(conn)
161
+ makeBookWithoutTransaction(conn)
162
+ checkAB(conn, 2 , 0 )
163
+ }
164
+ } finally {
165
+ conn.close()
166
+ DatabaseFileContext .deleteDatabase(dbname)
167
+ }
168
+ }
112
169
170
+ private val AUTHOR = """ CREATE TABLE author (
171
+ id INTEGER NOT NULL PRIMARY KEY,
172
+ name TEXT NOT NULL
173
+ );"""
174
+
175
+ private val BOOK = """ CREATE TABLE book (
176
+ id INTEGER NOT NULL PRIMARY KEY,
177
+ name TEXT NOT NULL,
178
+ author_id INTEGER NOT NULL,
179
+ FOREIGN KEY (author_id) REFERENCES author(id) ON DELETE CASCADE
180
+ );"""
113
181
}
0 commit comments