公开中的默认函数和客户端默认函数有什么区别?



我在 Kotlin 项目中使用 Exposed 库。 在我的表声明中,我有这样的列:

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

如果我默认替换客户端默认函数,如下所示,有什么不同:

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. default只接受固定T,会生成DEFAULTSQL 子句;

  2. clientDefault接受生成T的函数(因此它可以为不同的行返回不同的结果(,并且不生成DEFAULT

所以default(DateTime.now())几乎肯定不是你想要的;它会生成类似DEFAULT "2019-10-10T..."的东西,它被称为日期时间,而不是DEFAULT NOW()

最新更新