Gradle
더 세부적인 커스터마이징을 위해 Gradle DSL을 사용하여 데이터베이스를 명시적으로 선언할 수 있습니다.
SQLDelight 설정
databases
데이터베이스를 위한 컨테이너입니다. 지정된 이름으로 각 데이터베이스를 생성하도록 SQLDelight를 설정합니다.
sqldelight {
databases {
create("MyDatabase") {
// 여기에 데이터베이스 설정을 작성합니다.
}
}
}sqldelight {
databases {
MyDatabase {
// 여기에 데이터베이스 설정을 작성합니다.
}
}
}linkSqlite
타입: Property<Boolean>
네이티브 타겟(native targets)을 위한 설정입니다. SQLite를 자동으로 링크할지 여부를 결정합니다. 이 설정은 프로젝트가 동적 프레임워크(dynamic framework)로 컴파일될 때(최근 KMP 버전의 기본값) SQLite 링크에 필요한 메타데이터를 추가합니다.
정적 프레임워크(static framework)의 경우 이 플래그는 효과가 없음에 유의하세요. 프로젝트를 가져오는(import) Xcode 빌드에서 링커 플래그에 -lsqlite3를 추가해야 합니다. 또는 CocoaPods 플러그인을 통해 sqlite3 포드(pod)에 대한 프로젝트 의존성을 추가하세요. 다른 방법으로는 Gradle Kotlin DSL에서 extraSpecAttributes["libraries"] = "'c++', 'sqlite3'"와 같이 CocoaPods spec.libraries 설정에 sqlite3를 추가하는 방법이 있습니다.
기본값은 true입니다.
linkSqlite.set(true)linkSqlite = true데이터베이스 설정
packageName
타입: Property<String>
데이터베이스 클래스에 사용될 패키지 이름입니다.
packageName.set("com.example.db")packageName = "com.example.db"srcDirs
타입: ConfigurableFileCollection
플러그인이 .sq 및 .sqm 파일을 찾을 폴더 컬렉션입니다.
기본값은 src/[prefix]main/sqldelight이며, 접두사(prefix)는 적용된 Kotlin 플러그인에 따라 달라집니다(예: 멀티플랫폼의 경우 common).
srcDirs.setFrom("src/main/sqldelight")srcDirs = ['src/main/sqldelight']srcDirs(vararg objects: Any)
플러그인이 .sq 및 .sqm 파일을 찾을 객체 컬렉션입니다.
srcDirs("src/main/sqldelight", "main/sqldelight")srcDirs('src/main/sqldelight', 'main/sqldelight')schemaOutputDirectory
타입: DirectoryProperty
프로젝트 루트를 기준으로 .db 스키마 파일이 저장될 디렉터리입니다. 이 파일들은 마이그레이션 결과가 최신 스키마를 가진 데이터베이스를 생성하는지 검증하는 데 사용됩니다.
기본값은 null입니다.null인 경우 마이그레이션 검증 태스크가 생성되지 않습니다.
schemaOutputDirectory.set(file("src/main/sqldelight/databases"))schemaOutputDirectory = file("src/main/sqldelight/databases")dependency
타입: Project
선택적으로 다른 Gradle 프로젝트에 대한 스키마 의존성을 지정합니다(아래 참고).
dependency(project(":other-project"))dependency project(":other-project")dialect
타입: String 또는 Provider<MinimalExternalModuleDependency>
타겟으로 삼을 SQL 방언(dialect)입니다. 방언은 Gradle 의존성을 사용하여 선택합니다. 이러한 의존성은 app.cash.sqldelight:{dialect module}:2.1.0와 같이 지정할 수 있습니다. 사용 가능한 방언은 아래를 참조하세요.
Android 프로젝트의 경우, SQLite 버전은 minSdk를 기반으로 자동으로 선택됩니다. 그렇지 않은 경우 기본적으로 SQLite 3.18이 사용됩니다.
사용 가능한 방언:
- HSQL:
hsql-dialect - MySQL:
mysql-dialect - PostgreSQL:
postgresql-dialect - SQLite 3.18:
sqlite-3-18-dialect - SQLite 3.24:
sqlite-3-24-dialect - SQLite 3.25:
sqlite-3-25-dialect - SQLite 3.30:
sqlite-3-30-dialect - SQLite 3.33:
sqlite-3-33-dialect - SQLite 3.35:
sqlite-3-35-dialect - SQLite 3.38:
sqlite-3-38-dialect
dialect("app.cash.sqldelight:sqlite-3-24-dialect:2.1.0")dialect 'app.cash.sqldelight:sqlite-3-24-dialect:2.1.0'verifyMigrations
타입: Property<Boolean>
true로 설정하면 마이그레이션 파일에 오류가 있을 경우 빌드 과정에서 실패 처리됩니다.
기본값은 false입니다.
verifyMigrations.set(true)verifyMigrations = truetreatNullAsUnknownForEquality
타입: Property<Boolean>
true로 설정하면 SQLDelight는 IS를 사용할 때 nullable 타입 값에 대한 동등 비교를 대체하지 않습니다.
기본값은 false입니다.
treatNullAsUnknownForEquality.set(true)treatNullAsUnknownForEquality = truegenerateAsync
타입: Property<Boolean>
true로 설정하면 SQLDelight는 비동기 드라이버와 함께 사용할 수 있도록 중단(suspending) 쿼리 메서드를 생성합니다.
기본값은 false입니다.
generateAsync.set(true)generateAsync = truederiveSchemaFromMigrations
타입: Property<Boolean>
true로 설정하면 각 마이그레이션이 적용된 것처럼 .sqm 파일에서 데이터베이스 스키마를 도출합니다. false인 경우, 스키마는 .sq 파일에 정의됩니다.
기본값은 false입니다.
deriveSchemaFromMigrations.set(true)deriveSchemaFromMigrations = trueexpandSelectStar
타입: Property<Boolean>
true로 설정하면 SQLDelight는 SELECT * 문을 각 결과 컬럼을 명시적으로 참조하도록 재작성합니다.
예를 들어, 아래의 getAll 쿼리는
CREATE TABLE hockey_player (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
number INTEGER NOT NULL
);
getAll:
SELECT * FROM hockey_player;SELECT hockey_player.id, hockey_player.name, hockey_player.number FROM hockey_player; 로 재작성됩니다.
기본값은 true입니다.
expandSelectStar.set(true)expandSelectStar = true스키마 의존성 (Schema Dependencies)
다른 모듈에 대한 스키마 의존성을 지정할 수 있습니다:
// project-a/build.gradle.kts
sqldelight {
databases {
create("MyDatabase") {
packageName.set("com.example.projecta")
dependency(project(":ProjectB"))
}
}
}// project-a/build.gradle
sqldelight {
databases {
MyDatabase {
packageName = "com.example.projecta"
dependency project(":ProjectB")
}
}
}이 설정은 ProjectB에서 MyDatabase를 찾아 컴파일할 때 해당 스키마를 포함합니다. 이 기능이 작동하려면 ProjectB에 동일한 이름(이 경우 MyDatabase)의 데이터베이스가 있어야 하지만 서로 다른 패키지에서 생성되어야 합니다. ProjectB의 Gradle 설정은 다음과 같습니다:
// project-b/build.gradle.kts
sqldelight {
databases {
// 동일한 데이터베이스 이름
create("MyDatabase") {
package = "com.example.projectb"
}
}
}// project-b/build.gradle
sqldelight {
databases {
// 동일한 데이터베이스 이름
MyDatabase {
package = "com.example.projectb"
}
}
}deriveSchemaFromMigrations = true를 사용하는 경우, 이 모듈을 의존하는 모든 모듈에서도 이 기능을 활성화해야 합니다.
