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

skinny.orm.feature.associations.Extractors.scala Maven / Gradle / Ivy

The newest version!
package skinny.orm.feature.associations

import scala.language.existentials

import skinny.orm._
import skinny.orm.feature._

/**
 * Extractor.
 *
 * @tparam Entity entity
 */
sealed trait Extractor[Entity]

/**
 * BelongsTo association extractor.
 *
 * @param mapper mapper
 * @param fk foreign key
 * @param alias table alias
 * @param merge function to merge associations
 * @param byDefault enable by default
 * @tparam Entity entity
 */
case class BelongsToExtractor[Entity](
  mapper: AssociationsFeature[_],
  fk: String,
  alias: Alias[_],
  merge: (Entity, Option[Any]) => Entity,
  includesMerge: (Seq[Entity], Seq[_]) => Seq[Entity] = AssociationsFeature.defaultIncludesMerge[Entity, Any],
  var byDefault: Boolean = false) extends Extractor[Entity]

/**
 * HasOne association extractor.
 *
 * @param mapper mapper
 * @param fk foreign key
 * @param alias table alias
 * @param merge function to merge associations
 * @param byDefault enable by default
 * @tparam Entity entity
 */
case class HasOneExtractor[Entity](
  mapper: AssociationsFeature[_],
  fk: String,
  alias: Alias[_],
  merge: (Entity, Option[Any]) => Entity,
  includesMerge: (Seq[Entity], Seq[_]) => Seq[Entity] = AssociationsFeature.defaultIncludesMerge[Entity, Any],
  var byDefault: Boolean = false) extends Extractor[Entity]

/**
 * HasMany association extractor.
 *
 * @param mapper mapper
 * @param alias table alias
 * @param merge function to merge associations
 * @param byDefault enable by default
 * @tparam Entity entity
 */
case class HasManyExtractor[Entity](
  mapper: AssociationsFeature[_],
  alias: Alias[_],
  merge: (Entity, Seq[Any]) => Entity,
  includesMerge: (Seq[Entity], Seq[_]) => Seq[Entity] = AssociationsFeature.defaultIncludesMerge[Entity, Any],
  var byDefault: Boolean = false) extends Extractor[Entity]




© 2015 - 2025 Weber Informatics LLC | Privacy Policy