Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Enforce that synchronous drivers require a synchronous schema initializer #4013

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Mar 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/PR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
# for a log of why this is needed, see: https://github.com/touchlab/SQLiter/pull/38#issuecomment-867171789
#
# Windows checks are temporarily disabled until fixed, see: https://github.com/cashapp/sqldelight/issues/2579
os: [ macOS-latest, ubuntu-18.04 ]
os: [ macOS-latest, ubuntu-22.04 ]
job: [ instrumentation, test, gradle-plugin-tests ]
exclude:
- os: windows-latest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class AndroidSqliteDriver private constructor(
* @param [useNoBackupDirectory] Sets whether to use a no backup directory or not.
*/
@JvmOverloads constructor(
schema: SqlSchema,
schema: SqlSchema<QueryResult.Value<Unit>>,
context: Context,
name: String? = null,
factory: SupportSQLiteOpenHelper.Factory = FrameworkSQLiteOpenHelperFactory(),
Expand Down Expand Up @@ -182,7 +182,7 @@ class AndroidSqliteDriver private constructor(
}

open class Callback(
private val schema: SqlSchema,
private val schema: SqlSchema<QueryResult.Value<Unit>>,
private vararg val callbacks: AfterVersion,
) : SupportSQLiteOpenHelper.Callback(schema.version) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.squareup.sqldelight.android

import androidx.test.core.app.ApplicationProvider.getApplicationContext
import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlPreparedStatement
import app.cash.sqldelight.db.SqlSchema
Expand All @@ -17,7 +18,7 @@ import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
class AndroidDriverTest : DriverTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return AndroidSqliteDriver(schema, getApplicationContext())
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.squareup.sqldelight.android

import androidx.test.core.app.ApplicationProvider.getApplicationContext
import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
Expand All @@ -10,7 +11,7 @@ import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
class AndroidQueryTest : QueryTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return AndroidSqliteDriver(schema, getApplicationContext())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.test.core.app.ApplicationProvider.getApplicationContext
import app.cash.sqldelight.Transacter
import app.cash.sqldelight.TransactionWithReturn
import app.cash.sqldelight.TransactionWithoutReturn
import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
Expand All @@ -17,7 +18,7 @@ import kotlin.concurrent.thread

@RunWith(RobolectricTestRunner::class)
class AndroidTransacterTest : TransacterTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return AndroidSqliteDriver(schema, getApplicationContext())
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import kotlin.test.assertTrue

abstract class DriverTest {
protected lateinit var driver: SqlDriver
protected val schema = object : SqlSchema {
protected val schema = object : SqlSchema<QueryResult.Value<Unit>> {
override val version: Int = 1

override fun create(driver: SqlDriver): QueryResult<Unit> {
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(
0,
"""
Expand Down Expand Up @@ -59,7 +59,7 @@ abstract class DriverTest {
}
private var transacter = AtomicReference<Transacter?>(null)

abstract fun setupDatabase(schema: SqlSchema): SqlDriver
abstract fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver

private fun changes(): Long? {
// wrap in a transaction to ensure read happens on transaction thread/connection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ abstract class QueryTest {

private lateinit var driver: SqlDriver

abstract fun setupDatabase(schema: SqlSchema): SqlDriver
abstract fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver

@BeforeTest fun setup() {
driver = setupDatabase(
schema = object : SqlSchema {
schema = object : SqlSchema<QueryResult.Value<Unit>> {
override val version: Int = 1

override fun create(driver: SqlDriver): QueryResult<Unit> {
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(
null,
"""
Expand All @@ -50,7 +50,7 @@ abstract class QueryTest {
oldVersion: Int,
newVersion: Int,
vararg callbacks: AfterVersion,
): QueryResult<Unit> {
): QueryResult.Value<Unit> {
// No-op.
return QueryResult.Unit
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,19 @@ abstract class TransacterTest {
protected lateinit var transacter: TransacterImpl
private lateinit var driver: SqlDriver

abstract fun setupDatabase(schema: SqlSchema): SqlDriver
abstract fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver

@BeforeTest fun setup() {
val driver = setupDatabase(
object : SqlSchema {
object : SqlSchema<QueryResult.Value<Unit>> {
override val version = 1
override fun create(driver: SqlDriver): QueryResult<Unit> = QueryResult.Unit
override fun create(driver: SqlDriver): QueryResult.Value<Unit> = QueryResult.Unit
override fun migrate(
driver: SqlDriver,
oldVersion: Int,
newVersion: Int,
vararg callbacks: AfterVersion,
): QueryResult<Unit> = QueryResult.Unit
): QueryResult.Value<Unit> = QueryResult.Unit
},
)
transacter = object : TransacterImpl(driver) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class NativeSqliteDriver(
* @param onConfiguration Callback to hook into [DatabaseConfiguration] creation.
*/
constructor(
schema: SqlSchema,
schema: SqlSchema<QueryResult.Value<Unit>>,
name: String,
maxReaderConnections: Int = 1,
onConfiguration: (DatabaseConfiguration) -> DatabaseConfiguration = { it },
Expand All @@ -126,9 +126,7 @@ class NativeSqliteDriver(
configuration = DatabaseConfiguration(
name = name,
version = schema.version,
create = { connection ->
wrapConnection(connection) { schema.create(it) }
},
create = { connection -> wrapConnection(connection) { schema.create(it) } },
upgrade = { connection, oldVersion, newVersion ->
wrapConnection(connection) { schema.migrate(it, oldVersion, newVersion, *callbacks) }
},
Expand Down Expand Up @@ -259,7 +257,7 @@ class NativeSqliteDriver(
* Helper function to create an in-memory driver. In-memory drivers have a single connection, so
* concurrent access will be block
*/
fun inMemoryDriver(schema: SqlSchema): NativeSqliteDriver = NativeSqliteDriver(
fun inMemoryDriver(schema: SqlSchema<QueryResult.Value<Unit>>): NativeSqliteDriver = NativeSqliteDriver(
DatabaseConfiguration(
name = null,
inMemory = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ abstract class LazyDriverBaseTest {
driver.close()
}

protected fun defaultSchema(): SqlSchema {
return object : SqlSchema {
protected fun defaultSchema(): SqlSchema<QueryResult.Value<Unit>> {
return object : SqlSchema<QueryResult.Value<Unit>> {
override val version: Int = 1

override fun create(driver: SqlDriver): QueryResult<Unit> {
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(
20,
"""
Expand Down Expand Up @@ -86,7 +86,7 @@ abstract class LazyDriverBaseTest {
}

private fun setupDatabase(
schema: SqlSchema,
schema: SqlSchema<QueryResult.Value<Unit>>,
config: DatabaseConfiguration = defaultConfiguration(schema),
): NativeSqliteDriver {
deleteDatabase(config.name!!)
Expand All @@ -95,7 +95,7 @@ abstract class LazyDriverBaseTest {
return NativeSqliteDriver(manager!!)
}

protected fun defaultConfiguration(schema: SqlSchema): DatabaseConfiguration {
protected fun defaultConfiguration(schema: SqlSchema<QueryResult.Value<Unit>>): DatabaseConfiguration {
return DatabaseConfiguration(
name = "testdb",
version = 1,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.sqldelight.drivers.native

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.native.NativeSqliteDriver
Expand All @@ -8,15 +9,15 @@ import co.touchlab.sqliter.DatabaseFileContext.deleteDatabase
import com.squareup.sqldelight.driver.test.DriverTest

class NativeDriverTest : DriverTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val name = "testdb"
deleteDatabase(name)
return NativeSqliteDriver(schema, name)
}
}

class NativeDriverMemoryTest : DriverTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return inMemoryDriver(schema)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.sqldelight.drivers.native

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.native.NativeSqliteDriver
Expand All @@ -8,15 +9,15 @@ import co.touchlab.sqliter.DatabaseFileContext
import com.squareup.sqldelight.driver.test.QueryTest

class NativeQueryTest : QueryTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val name = "testdb"
DatabaseFileContext.deleteDatabase(name)
return NativeSqliteDriver(schema, name)
}
}

class NativeQueryMemoryTest : QueryTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return inMemoryDriver(schema)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.sqldelight.drivers.native

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.native.NativeSqliteDriver
Expand All @@ -8,15 +9,15 @@ import co.touchlab.sqliter.DatabaseFileContext.deleteDatabase
import com.squareup.sqldelight.driver.test.TransacterTest

class NativeTransacterTest : TransacterTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val name = "testdb"
deleteDatabase(name)
return NativeSqliteDriver(schema, name)
}
}

class NativeTransacterMemoryTest : TransacterTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
return inMemoryDriver(schema)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ abstract class BaseConcurrencyTest {
}

fun setupDatabase(
schema: SqlSchema,
schema: SqlSchema<QueryResult.Value<Unit>>,
dbType: DbType,
configBase: DatabaseConfiguration,
maxReaderConnections: Int = 4,
Expand Down Expand Up @@ -111,10 +111,10 @@ abstract class BaseConcurrencyTest {
configBase: DatabaseConfiguration = DatabaseConfiguration(name = null, version = 1, create = {}),
): SqlDriver {
return setupDatabase(
schema = object : SqlSchema {
schema = object : SqlSchema<QueryResult.Value<Unit>> {
override val version: Int = 1

override fun create(driver: SqlDriver): QueryResult<Unit> {
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(
null,
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.squareup.sqldelight.driver.sqlite

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver.Companion.IN_MEMORY
import com.squareup.sqldelight.driver.test.DriverTest

class SqliteDriverTest : DriverTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val database = JdbcSqliteDriver(IN_MEMORY)
schema.create(database)
return database
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.squareup.sqldelight.driver.sqlite

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver.Companion.IN_MEMORY
import com.squareup.sqldelight.driver.test.QueryTest

class SqliteQueryTest : QueryTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val database = JdbcSqliteDriver(IN_MEMORY)
schema.create(database)
return database
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.squareup.sqldelight.driver.sqlite

import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver.Companion.IN_MEMORY
import com.squareup.sqldelight.driver.test.TransacterTest

class SqliteTransacterTest : TransacterTest() {
override fun setupDatabase(schema: SqlSchema): SqlDriver {
override fun setupDatabase(schema: SqlSchema<QueryResult.Value<Unit>>): SqlDriver {
val database = JdbcSqliteDriver(IN_MEMORY)
schema.create(database)
return database
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ import kotlin.js.Promise

fun Promise<Database>.driver(): Promise<SqlDriver> = then { JsSqlDriver(it) }

fun Promise<SqlDriver>.withSchema(schema: SqlSchema? = null): Promise<SqlDriver> = then {
fun Promise<SqlDriver>.withSchema(schema: SqlSchema<QueryResult.Value<Unit>>? = null): Promise<SqlDriver> = then {
schema?.create(it)
it
}

fun Promise<SqlDriver>.transacter(): Promise<Transacter> = then { object : TransacterImpl(it) {} }

fun initSqlDriver(schema: SqlSchema? = null): Promise<SqlDriver> = initDb().driver().withSchema(schema)
fun initSqlDriver(schema: SqlSchema<QueryResult.Value<Unit>>? = null): Promise<SqlDriver> = initDb().driver().withSchema(schema)

class JsSqlDriver(private val db: Database) : SqlDriver {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ import kotlin.test.assertTrue
class JsDriverTest {

private lateinit var driverPromise: Promise<SqlDriver>
private val schema = object : SqlSchema {
private val schema = object : SqlSchema<QueryResult.Value<Unit>> {
override val version: Int = 1

override fun create(driver: SqlDriver): QueryResult<Unit> {
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(
0,
"""
Expand Down Expand Up @@ -54,7 +54,7 @@ class JsDriverTest {
oldVersion: Int,
newVersion: Int,
vararg callbacks: AfterVersion,
): QueryResult<Unit> {
): QueryResult.Value<Unit> {
// No-op.
return QueryResult.Unit
}
Expand Down
Loading