-
Notifications
You must be signed in to change notification settings - Fork 497
/
AsyncQueryWrapperTest.kt
112 lines (107 loc) · 3.46 KB
/
AsyncQueryWrapperTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package app.cash.sqldelight.core.async
import app.cash.sqldelight.test.util.FixtureCompiler
import com.google.common.truth.Truth
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import java.io.File
class AsyncQueryWrapperTest {
@get:Rule val tempFolder = TemporaryFolder()
@Test
fun `queryWrapper generates with migration statements`() {
FixtureCompiler.writeSql(
"""
|CREATE TABLE test (
| value1 TEXT
|);
""".trimMargin(),
tempFolder, "0.sqm"
)
FixtureCompiler.writeSql(
"""
|ALTER TABLE test ADD COLUMN value2 TEXT;
""".trimMargin(),
tempFolder, "1.sqm"
)
FixtureCompiler.writeSql(
"""
|ALTER TABLE test ADD COLUMN value3 REAL;
""".trimMargin(),
tempFolder, "2.sqm"
)
val result = FixtureCompiler.compileSql(
"""
|CREATE TABLE test (
| value1 TEXT,
| value2 TEXT,
| value3 REAL
|);
""".trimMargin(),
tempFolder,
generateAsync = true
)
Truth.assertThat(result.errors).isEmpty()
val queryWrapperFile = result.compilerOutput[File(result.outputDirectory, "com/example/testmodule/TestDatabaseImpl.kt")]
Truth.assertThat(queryWrapperFile).isNotNull()
Truth.assertThat(queryWrapperFile.toString()).isEqualTo(
"""
|package com.example.testmodule
|
|import app.cash.sqldelight.SuspendingTransacterImpl
|import app.cash.sqldelight.db.QueryResult
|import app.cash.sqldelight.db.SqlDriver
|import app.cash.sqldelight.db.SqlSchema
|import com.example.TestDatabase
|import kotlin.Int
|import kotlin.Unit
|import kotlin.reflect.KClass
|
|internal val KClass<TestDatabase>.schema: SqlSchema
| get() = TestDatabaseImpl.Schema
|
|internal fun KClass<TestDatabase>.newInstance(driver: SqlDriver): TestDatabase =
| TestDatabaseImpl(driver)
|
|private class TestDatabaseImpl(
| driver: SqlDriver,
|) : SuspendingTransacterImpl(driver), TestDatabase {
| public object Schema : SqlSchema {
| public override val version: Int
| get() = 3
|
| public override fun create(driver: SqlDriver): QueryResult<Unit> = QueryResult.AsyncValue {
| driver.execute(null, ""${'"'}
| |CREATE TABLE test (
| | value1 TEXT,
| | value2 TEXT,
| | value3 REAL
| |)
| ""${'"'}.trimMargin(), 0).await()
| }
|
| public override fun migrate(
| driver: SqlDriver,
| oldVersion: Int,
| newVersion: Int,
| ): QueryResult<Unit> = QueryResult.AsyncValue {
| if (oldVersion <= 0 && newVersion > 0) {
| driver.execute(null, ""${'"'}
| |CREATE TABLE test (
| | value1 TEXT
| |)
| ""${'"'}.trimMargin(), 0).await()
| }
| if (oldVersion <= 1 && newVersion > 1) {
| driver.execute(null, "ALTER TABLE test ADD COLUMN value2 TEXT", 0).await()
| }
| if (oldVersion <= 2 && newVersion > 2) {
| driver.execute(null, "ALTER TABLE test ADD COLUMN value3 REAL", 0).await()
| }
| }
| }
|}
|
""".trimMargin()
)
}
}