2013-06-05 3 views
7

Nella chiazza di petrolio (1.0), qual è la differenza tra fare .where(), .filter() e .withFilter() su un tavolo?Slick dove/filter/withFilter

Nel API hanno firma simile ma non è chiaro come si differenziano:

def filter[T]   (f: (E) ⇒ T)(implicit wt: CanBeQueryCondition[T]): Query[E, U] 
def where[T <: Column[_]](f: (E) ⇒ T)(implicit arg0: CanBeQueryCondition[T]): Query[E, U] 
def withFilter[T]  (f: (E) ⇒ T)(implicit arg0: CanBeQueryCondition[T]): Query[E, U] 

risposta

9

Secondo le source tutti questi metodi sono uguali:

def withFilter[T : CanBeQueryCondition](f: E => T) = filter(f) 
def where[T <: Column[_] : CanBeQueryCondition](f: E => T) = filter(f) 

filtro è comune metodo per filtrare le collezioni in scala. C'è il metodo filter nelle raccolte, Option, Future, Try e così via.

withFilter è disponibile per for comprehensions. L'enunciazione if per la comprensione viene tradotta nella chiamata di withFilter.

Credo che dove è aggiunto per analogia con SQLwhere dichiarazione.