Phantom DSL 和 Cassandra 自定义列类型
Phantom DSL and Cassandra custom column type
我定义了一个自定义 Cassandra 类型和一个 table,例如:
CREATE TYPE my.usertype (
id text,
firstname text,
lastname text
);
CREATE TABLE mytable (
user frozen <usertype>,
...,
PRIMARY KEY(user)
);
如何在 Scala 的 Cassandra table 定义中定义此用户类型?
class MyTable extends CassandraTable[X, Y] {
object user extends UserColumn(this) with PartitionKey[User]
^^^^^??? ^^^???
如何为 UserType
实现自定义 UserColumn
?我检查了列实现的 Phantom 代码,但任何示例 and/or 解释都很好。
所以根据库的作者,phantom 的开源版本不支持用户定义的类型:https://github.com/outworkers/phantom/issues/496
但是,您可以通过扩展 MapColumn 来部分解决这个问题,如下所述:。当然,这并不完美,例如您将无法为模式创建生成 CQL,您将不得不进行一些手动管道操作。
所以或多或少会像这样:
class MyTable extends CassandraTable[MyTable , Y] {
object user extends MapColumn[MyTable , Y, String, String](this) with PartitionKey[MapColumn...]
仅限 Phantom Pro。
@Udt case class User(
id: String,
firstname: String,
lastname: String
)
然后你使用UDTColumn
:
class MyTable extends Table[MyTable , Y] {
object user extends Col[User] with PartitionKey
}
这将为您提供自动架构生成和其他任何功能,包括自动初始化您的 UDT。
我定义了一个自定义 Cassandra 类型和一个 table,例如:
CREATE TYPE my.usertype (
id text,
firstname text,
lastname text
);
CREATE TABLE mytable (
user frozen <usertype>,
...,
PRIMARY KEY(user)
);
如何在 Scala 的 Cassandra table 定义中定义此用户类型?
class MyTable extends CassandraTable[X, Y] {
object user extends UserColumn(this) with PartitionKey[User]
^^^^^??? ^^^???
如何为 UserType
实现自定义 UserColumn
?我检查了列实现的 Phantom 代码,但任何示例 and/or 解释都很好。
所以根据库的作者,phantom 的开源版本不支持用户定义的类型:https://github.com/outworkers/phantom/issues/496
但是,您可以通过扩展 MapColumn 来部分解决这个问题,如下所述:
所以或多或少会像这样:
class MyTable extends CassandraTable[MyTable , Y] {
object user extends MapColumn[MyTable , Y, String, String](this) with PartitionKey[MapColumn...]
仅限 Phantom Pro。
@Udt case class User(
id: String,
firstname: String,
lastname: String
)
然后你使用UDTColumn
:
class MyTable extends Table[MyTable , Y] {
object user extends Col[User] with PartitionKey
}
这将为您提供自动架构生成和其他任何功能,包括自动初始化您的 UDT。