aselab / scala-activerecord

ActiveRecord-like ORM library for Scala

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Some queries no longer work on latest build

mattfeury opened this issue · comments

I know 0.3.2 is technically unreleased, but it's the latest master and the only way to get play 2.4 support (side note: how about a release ;))

i did notice a bug that the all method no longer works. looks potentially related to this commit. stracktrace below

play.sbt.PlayExceptions$CompilationException: Compilation error[value toList is not a member of com.github.aselab.activerecord.ActiveRecord.Relation1[models.Subscription,models.Subscription]]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
    at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
    at scala.util.Either$LeftProjection.map(Either.scala:377) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$.compile(PlayReload.scala:17) ~[na:na]
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
    at play.runsupport.Reloader$$anonfun$reload$1.apply(Reloader.scala:323) ~[na:na]
    at play.runsupport.Reloader$$anon$3.run(Reloader.scala:43) ~[na:na]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_65]
    at play.runsupport.Reloader$.play$runsupport$Reloader$$withReloaderContextClassLoader(Reloader.scala:39) ~[na:na]
    at play.runsupport.Reloader.reload(Reloader.scala:321) ~[na:na]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:113) ~[play-server_2.11-2.4.6.jar:2.4.6]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) ~[play-server_2.11-2.4.6.jar:2.4.6]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) ~[akka-actor_2.11-2.3.13.jar:na]
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) ~[akka-actor_2.11-2.3.13.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) ~[scala-library-2.11.7.jar:na]
``

fyi this also impacts hasAndBelongsToMany records, so as it is right now, i don't have a way to retrieve my list of the relation, which is a little more impactful than just the all method being busted

stack:

play.sbt.PlayExceptions$CompilationException: Compilation error[value toList is not a member of com.github.aselab.activerecord.ActiveRecord.HasAndBelongsToManyAssociation[x$2.type,models.Plan]]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
    at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
    at scala.util.Either$LeftProjection.map(Either.scala:377) ~[scala-library-2.11.7.jar:na]
    at play.sbt.run.PlayReload$.compile(PlayReload.scala:17) ~[na:na]
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
    at play.runsupport.Reloader$$anonfun$reload$1.apply(Reloader.scala:323) ~[na:na]
    at play.runsupport.Reloader$$anon$3.run(Reloader.scala:43) ~[na:na]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_65]
    at play.runsupport.Reloader$.play$runsupport$Reloader$$withReloaderContextClassLoader(Reloader.scala:39) ~[na:na]
    at play.runsupport.Reloader.reload(Reloader.scala:321) ~[na:na]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:113) ~[play-server_2.11-2.4.6.jar:2.4.6]
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) ~[play-server_2.11-2.4.6.jar:2.4.6]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.7.jar:na]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) ~[akka-actor_2.11-2.3.13.jar:na]
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) ~[akka-actor_2.11-2.3.13.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) ~[scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) ~[scala-library-2.11.7.jar:na]

looks like it's more widespread. i can't actually do a where query either

objects Event extends ActiveRecordCompanion[Event]
case class Event(name:String) extends ActiveRecord with Timestamps { ... }

def events = Event.includes(_.partner).where { _.name like "%Mets%" } // returns Relation1 which doesn't have toList/map

events returns a Relation1 which doesn't have a toList or map or whatnot. so i'm not sure how to get my data from this?

i'm talking to myself here, but i was able to get the queries working by doing this

implicit val m = scala.reflect.classTag[Event]
val events = Event.includes(_.partner).where { _.name like "%Mets%" }.load(m)

either the docs need to be updated or there is a bug. but for anyone else looking that should help.

I'm using a previous version, 1.3.0, so I'm not affected by this, in my version the .toList / .toMap metods are provided by an implicit conversion of the relation, with relationToIterable.

Or by associationToIterable for associations. Those implicits are defined here:

https://github.com/aselab/scala-activerecord/blob/19c74754dfd6ad9db74793aae4670e98db04afd0/activerecord/src/main/scala/inner/Implicits.scala

// low priority implicits 
trait IterableConversion { 
  implicit def relationToIterable[T](relation: Relation[_, T]) 
     (implicit manifest: ClassTag[T]): Iterable[T] = relation.load 


  implicit def associationToIterable[T <: AR] 
    (association: Association[_, T])(implicit manifest: ClassTag[T]): Iterable[T] = 
      relationToIterable(association.relation) 
} 

Relation1 extends Relation, so in theory that implicit applies to it.

Now, not sure why in the new version that doesn't happen. Maybe those implicit conversions are not loaded in the scope?

Did you import both of this:

import com.github.aselab.activerecord._
import com.github.aselab.activerecord.dsl._

?

hey thanks for getting back to me @vnicolici! i wasn't actually importing them, which is likely the issue. however, when i import them, i now see another compile error:

val events = Event.includes(_.partner).where { event =>
    (event.active === true)
}

results in value === is not a member of Boolean
doesn't work with == either

huh. it started working now. i guess i'm going crazy. thanks for the assist @vnicolici !