Skip to content

타입

SQLite 타입

SQLDelight 컬럼 정의는 일반적인 SQLite 컬럼 정의와 동일하지만, 생성된 인터페이스에서 컬럼의 Kotlin 타입을 지정하는 추가 컬럼 제약 사항(extra column constraint)을 지원합니다.

sql
CREATE TABLE some_types (
  some_long INTEGER,           -- DB에 INTEGER로 저장되고 Long으로 검색됨
  some_double REAL,            -- DB에 REAL로 저장되고 Double로 검색됨
  some_string TEXT,            -- DB에 TEXT로 저장되고 String으로 검색됨
  some_blob BLOB               -- DB에 BLOB으로 저장되고 ByteArray로 검색됨
);

기본 타입(Primitives)

사용자의 편의를 위해 기본 타입(primitives)을 어댑팅하는 형제 모듈입니다.

kotlin
dependencies {
  implementation("app.cash.sqldelight:primitive-adapters:2.1.0")
}
groovy
dependencies {
  implementation "app.cash.sqldelight:primitive-adapters:2.1.0"
}

다음과 같은 어댑터들이 존재합니다:

  • FloatColumnAdapter — 암시적으로 kotlin.Double로 저장된 SQL 타입에 대해 kotlin.Float을 가져옵니다.
  • IntColumnAdapter — 암시적으로 kotlin.Long으로 저장된 SQL 타입에 대해 kotlin.Int를 가져옵니다.
  • ShortColumnAdapter — 암시적으로 kotlin.Long으로 저장된 SQL 타입에 대해 kotlin.Short를 가져옵니다.

커스텀 컬럼 타입

컬럼을 커스텀 타입으로 가져오고 싶다면 Kotlin 타입을 지정할 수 있습니다:

sql
import kotlin.String;
import kotlin.collections.List;

CREATE TABLE hockeyPlayer (
  cup_wins TEXT AS List<String> NOT NULL
);

하지만 Database를 생성할 때 데이터베이스 타입과 커스텀 타입 간의 매핑 방법을 알고 있는 ColumnAdapter를 제공해야 합니다:

kotlin
val listOfStringsAdapter = object : ColumnAdapter<List<String>, String> {
  override fun decode(databaseValue: String) =
    if (databaseValue.isEmpty()) {
      listOf()
    } else {
      databaseValue.split(",")
    }
  override fun encode(value: List<String>) = value.joinToString(separator = ",")
}

val queryWrapper: Database = Database(
  driver = driver,
  hockeyPlayerAdapter = hockeyPlayer.Adapter(
    cup_winsAdapter = listOfStringsAdapter
  )
)

Enums

편의를 위해 SQLDelight 런타임에는 enum을 String 데이터로 저장하기 위한 ColumnAdapter가 포함되어 있습니다.

sql
import com.example.hockey.HockeyPlayer;

CREATE TABLE hockeyPlayer (
  position TEXT AS HockeyPlayer.Position
)
kotlin
val queryWrapper: Database = Database(
  driver = driver,
  hockeyPlayerAdapter = HockeyPlayer.Adapter(
    positionAdapter = EnumColumnAdapter()
  )
)

값 타입(Value types)

SQLDelight는 요청 시 기본 데이터베이스 타입을 래핑하는 컬럼용 값 타입(value type)을 생성할 수 있습니다:

sql
CREATE TABLE hockeyPlayer (
  id INT AS VALUE
);