Skip to content

Gradle

더 세부적인 커스터마이징을 위해 Gradle DSL을 사용하여 데이터베이스를 명시적으로 선언할 수 있습니다.

SQLDelight 설정

databases

데이터베이스를 위한 컨테이너입니다. 지정된 이름으로 각 데이터베이스를 생성하도록 SQLDelight를 설정합니다.

kotlin
sqldelight {
  databases {
    create("MyDatabase") {
      // 여기에 데이터베이스 설정을 작성합니다.
    }
  }
}
groovy
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입니다.

kotlin
linkSqlite.set(true)
groovy
linkSqlite = true

데이터베이스 설정

packageName

타입: Property<String>

데이터베이스 클래스에 사용될 패키지 이름입니다.

kotlin
packageName.set("com.example.db")
groovy
packageName = "com.example.db"

srcDirs

타입: ConfigurableFileCollection

플러그인이 .sq.sqm 파일을 찾을 폴더 컬렉션입니다.

기본값은 src/[prefix]main/sqldelight이며, 접두사(prefix)는 적용된 Kotlin 플러그인에 따라 달라집니다(예: 멀티플랫폼의 경우 common).

kotlin
srcDirs.setFrom("src/main/sqldelight")
groovy
srcDirs = ['src/main/sqldelight']

srcDirs(vararg objects: Any)

플러그인이 .sq.sqm 파일을 찾을 객체 컬렉션입니다.

kotlin
srcDirs("src/main/sqldelight", "main/sqldelight")
groovy
srcDirs('src/main/sqldelight', 'main/sqldelight')

schemaOutputDirectory

타입: DirectoryProperty

프로젝트 루트를 기준으로 .db 스키마 파일이 저장될 디렉터리입니다. 이 파일들은 마이그레이션 결과가 최신 스키마를 가진 데이터베이스를 생성하는지 검증하는 데 사용됩니다.

기본값은 null입니다.
null인 경우 마이그레이션 검증 태스크가 생성되지 않습니다.

kotlin
schemaOutputDirectory.set(file("src/main/sqldelight/databases"))
groovy
schemaOutputDirectory = file("src/main/sqldelight/databases")

dependency

타입: Project

선택적으로 다른 Gradle 프로젝트에 대한 스키마 의존성을 지정합니다(아래 참고).

kotlin
dependency(project(":other-project"))
groovy
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
kotlin
dialect("app.cash.sqldelight:sqlite-3-24-dialect:2.1.0")
groovy
dialect 'app.cash.sqldelight:sqlite-3-24-dialect:2.1.0'

verifyMigrations

타입: Property<Boolean>

true로 설정하면 마이그레이션 파일에 오류가 있을 경우 빌드 과정에서 실패 처리됩니다.

기본값은 false입니다.

kotlin
verifyMigrations.set(true)
groovy
verifyMigrations = true

treatNullAsUnknownForEquality

타입: Property<Boolean>

true로 설정하면 SQLDelight는 IS를 사용할 때 nullable 타입 값에 대한 동등 비교를 대체하지 않습니다.

기본값은 false입니다.

kotlin
treatNullAsUnknownForEquality.set(true)
groovy
treatNullAsUnknownForEquality = true

generateAsync

타입: Property<Boolean>

true로 설정하면 SQLDelight는 비동기 드라이버와 함께 사용할 수 있도록 중단(suspending) 쿼리 메서드를 생성합니다.

기본값은 false입니다.

kotlin
generateAsync.set(true)
groovy
generateAsync = true

deriveSchemaFromMigrations

타입: Property<Boolean>

true로 설정하면 각 마이그레이션이 적용된 것처럼 .sqm 파일에서 데이터베이스 스키마를 도출합니다. false인 경우, 스키마는 .sq 파일에 정의됩니다.

기본값은 false입니다.

kotlin
deriveSchemaFromMigrations.set(true)
groovy
deriveSchemaFromMigrations = true

expandSelectStar

타입: Property<Boolean>

true로 설정하면 SQLDelight는 SELECT * 문을 각 결과 컬럼을 명시적으로 참조하도록 재작성합니다.

예를 들어, 아래의 getAll 쿼리는

sql
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입니다.

kotlin
expandSelectStar.set(true)
groovy
expandSelectStar = true

스키마 의존성 (Schema Dependencies)

다른 모듈에 대한 스키마 의존성을 지정할 수 있습니다:

kotlin
// project-a/build.gradle.kts

sqldelight {
  databases {
    create("MyDatabase") {
      packageName.set("com.example.projecta")
      dependency(project(":ProjectB"))
    }
  }
}
groovy
// project-a/build.gradle

sqldelight {
  databases {
    MyDatabase {
      packageName = "com.example.projecta"
      dependency project(":ProjectB")
    }
  }
}

이 설정은 ProjectB에서 MyDatabase를 찾아 컴파일할 때 해당 스키마를 포함합니다. 이 기능이 작동하려면 ProjectB에 동일한 이름(이 경우 MyDatabase)의 데이터베이스가 있어야 하지만 서로 다른 패키지에서 생성되어야 합니다. ProjectB의 Gradle 설정은 다음과 같습니다:

kotlin
// project-b/build.gradle.kts

sqldelight {
  databases {
    // 동일한 데이터베이스 이름
    create("MyDatabase") {
      package = "com.example.projectb"
    }
  }
}
groovy
// project-b/build.gradle

sqldelight {
  databases {
    // 동일한 데이터베이스 이름
    MyDatabase {
      package = "com.example.projectb"
    }
  }
}

deriveSchemaFromMigrations = true를 사용하는 경우, 이 모듈을 의존하는 모든 모듈에서도 이 기능을 활성화해야 합니다.