piszę kod oparty na „asynchroniczne iteratorów dla dużych zbiorów fonograficznych” opisywanych w https://github.com/websudos/phantom#partial-select-querieswartość plaster nie jest członkiem play.api.libs.iteratee.Enumerator
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
import org.joda.time.format.DateTimeFormatter
import com.anomaly42.aml.dao.CassandraConnector
import com.websudos.phantom.CassandraTable
import com.websudos.phantom.Implicits._
object People extends People {
def getPersonByUpdatedAt(from:String, to:String, start: Int, limit: Int) = {
val dtf:DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
val fromDateTime = dtf.parseDateTime(from)
val toDateTime = dtf.parseDateTime(to)
People.select(_.updated_at, _.firstName).allowFiltering.where(_.updated_at gte fromDateTime).and(_.updated_at lte toDateTime).fetchEnumerator().slice(start, limit).collect
}
}
Używam następujących zależnościach bibliotek:
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
"com.websudos" %% "phantom-dsl" % "1.5.4",
many more...
)
ale pojawia się następujący błąd podczas kompilacji:
value slice is not a member of play.api.libs.iteratee.Enumerator[(org.joda.time.DateTime, Option[String])]
Co ja próbuję g do zrobienia jest napisanie zapytania, które przywraca następną "limit" liczbę wyników zaczynając od "start", za każdym razem wywoływana jest metoda getPersonByUpdatedAt().
Hi @flavian, dzięki za odpowiedź. Moja baza danych ma miliony rekordów i dlatego będę musiał ją zaimplementować przy użyciu enumeratorów. Zdefiniowałem kolumnę z datą z klauzulą "CLUSTERING ORDER", o której wspomniałem, ale jeśli nie używam opcji "ALLOW FILTERING", otrzymuję błędy czasu wykonywania. Udało mi się uciec z błędem kompilacji z następującą instrukcją: People.select (_. Updated_at, _.firstName) .allowFiltering.where (_. Updated_at gte fromDateTime) .and (_. Updated_at lte toDateTime) .setFetchSize (pageSize) .fetchEnumerator() uruchom Iteratee.slice (start, pageSize)) –