All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.getquill.norm.AttachToEntity.scala Maven / Gradle / Ivy

There is a newer version: 4.6.0
Show newest version
package io.getquill.norm

import io.getquill.ast._
import io.getquill.util.Messages.fail

object AttachToEntity {

  def apply(f: (Query, Ident) => Query, alias: Option[Ident] = None)(q: Query): Query =
    q match {

      case Map(a: Entity, b, c)             => Map(f(a, b), b, c)
      case FlatMap(a: Entity, b, c)         => FlatMap(f(a, b), b, c)
      case Filter(a: Entity, b, c)          => Filter(f(a, b), b, c)
      case SortBy(a: Entity, b, c, d)       => SortBy(f(a, b), b, c, d)

      case Map(a: Query, b, c)              => Map(apply(f, Some(b))(a), b, c)
      case FlatMap(a: Query, b, c)          => FlatMap(apply(f, Some(b))(a), b, c)
      case Filter(a: Query, b, c)           => Filter(apply(f, Some(b))(a), b, c)
      case SortBy(a: Query, b, c, d)        => SortBy(apply(f, Some(b))(a), b, c, d)
      case Take(a: Query, b)                => Take(apply(f, alias)(a), b)
      case Drop(a: Query, b)                => Drop(apply(f, alias)(a), b)
      case GroupBy(a: Query, b, c)          => GroupBy(apply(f, Some(b))(a), b, c)
      case Aggregation(op, a: Query)        => Aggregation(op, apply(f, alias)(a))
      case Distinct(a: Query)               => Distinct(apply(f, alias)(a))

      case _: Union | _: UnionAll | _: Join => f(q, alias.getOrElse(Ident("x")))

      case e: Entity                        => f(e, alias.getOrElse(Ident("x")))

      case other                            => fail(s"Can't find an 'Entity' in '$q'")
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy