Чем отличается функция default и clientDefault в Exposed? - PullRequest
1 голос
/ 10 октября 2019

Я использую библиотеку Exposed в проекте Kotlin. В моем объявлении таблицы у меня есть такой столбец:

val updatedDate = datetime("updated_dt").clientDefault { DateTime.now() }

Что отличается, если я заменю функцию clientDefault по умолчанию, как показано ниже:

val updatedDate = datetime("updated_dt").default(DateTime.now())

Я видел исходный код этих двух функций, но до сих пор не знаю.

clientDefault функция:

fun <T:Any> Column<T>.clientDefault(defaultValue: () -> T): Column<T> {
        this.defaultValueFun = defaultValue
        this.dbDefaultValue = null
        return this
    }

default функция:

fun <T:Any> Column<T>.default(defaultValue: T): Column<T> {
        this.dbDefaultValue = SqlExpressionBuilder.run {
            asLiteral(defaultValue)
        }
        this.defaultValueFun = { defaultValue }
        return this
    }

1 Ответ

2 голосов
/ 10 октября 2019

Разница в общем заключается в том, что (исходя из приведенного вами кода):

  1. default принимает только фиксированный T и генерирует SQL-предложение DEFAULT;

  2. clientDefault принимает функцию, генерирующую T (чтобы она могла возвращать разные результаты для разных строк), и не генерирует DEFAULT.

Так что default(DateTime.now()) почти наверняка не то, что вы хотите;он сгенерирует что-то вроде DEFAULT "2019-10-10T..." с указанием даты и времени, а не DEFAULT NOW().

...