Фантомный DSL scala.NotImplementedError

Я использую Phantom DSL (v2.28.0, scala v2.12.7), и при каждом запросе к моей базе данных я получаю следующую неоднозначную ошибку:

scala.NotImplementedError: отсутствует реализация

Этого не происходит, когда я использую .future() для решения моего запроса, в этом случае запросы работают нормально. Кроме того, запуск метода .executableQuery() возвращает правильно отформатированный запрос, что указывает на мою неспособность правильно построить модель, но я не понимаю, что я делаю неправильно. Примеры запросов:

Рабочие запросы:

db.entries.select.all.future // -> Returns a Future[ResultSet]
db.entries.select.where(_.user_id is userId).future() // -> ^

Неудачные запросы:

db.entries.select.all.fetch // -> Err
db.entries.select.where(_.user_id is userId).fetch() // -> Err
db.entries.select.all.fetchRecord // -> Err
... 

То же самое касается paginateRecord() и т. д.

 case class Rec(
    id: UUID,
    body: String,
    time: DateTime,
    user_id: Integer
                    )

 abstract class active extends Table[active, Rec] {
    object id extends UUIDColumn with PartitionKey
    object body extends StringColumn
    object time extends DateTimeColumn
    object user_id extends IntColumn
  } 

class BasicDatabase(override val connector: CassandraConnection) extends Database[BasicDatabase](connector) {
    object entries extends active with Connector
  }
  implicit val keySpace: KeySpace = KeySpace("some_keyspace")
  implicit val session: Session = db.session
  object db extends BasicDatabase(CassandraConnector.default)

Я все еще новичок, поэтому любые предложения полезны, заранее спасибо.


person Milan Velebit    schedule 20.11.2018    source источник


Ответы (1)


Хорошо, покопавшись в исходном коде, я понял, что метод fromRow() абстрактного класса дает сбой, поэтому я добавил переопределение:

abstract class active extends Table[active, Rec] {
    object id extends TimeUUIDColumn
    object body extends StringColumn
    object time extends DateTimeColumn
    object user_id extends IntColumn

    override def fromRow(row: Row): Rec = Rec(id(row), body(row), time(row), user_id(row))
  }

Это устранило проблему, хотя я до сих пор не уверен, почему это не удалось в первом случае, поэтому любой ответ с соответствующим объяснением по-прежнему приветствуется.

person Milan Velebit    schedule 21.11.2018
comment
В прошлый раз, когда у меня была эта ошибка, у меня было несоответствие типов в моем классе case. Вы пытались изменить Integer в своем классе case на Int? - person Wizard; 16.12.2018
comment
@Wizard Да, я сделал, но безрезультатно - person Milan Velebit; 16.12.2018