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

com.outworkers.phantom.TableAliases.scala Maven / Gradle / Ivy

/*
 * Copyright 2013 - 2020 Outworkers Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.outworkers.phantom

import java.net.InetAddress
import java.nio.ByteBuffer
import java.util.{Date, UUID}

import com.outworkers.phantom.builder.primitives.{AsciiValue, Primitive}
import com.outworkers.phantom.builder.syntax.CQLSyntax
import org.joda.time.{DateTime, LocalDate}

import scala.util.{Failure, Success, Try}

trait TableAliases[T <: CassandraTable[T, R], R] { self: CassandraTable[T, R] =>

  class ListColumn[RR]()(
    implicit ev: Primitive[RR],
    ev2: Primitive[List[RR]]
  ) extends com.outworkers.phantom.column.CollectionColumn[T, R, List, RR](this, CQLSyntax.Collections.list)

  class SetColumn[RR]()(
    implicit ev: Primitive[RR],
    ev2: Primitive[Set[RR]]
  ) extends com.outworkers.phantom.column.CollectionColumn[T, R, Set, RR](this, CQLSyntax.Collections.set)

  class MapColumn[KK, VV]()(implicit
    ev: Primitive[KK],
    ev2: Primitive[VV],
    ev3: Primitive[Map[KK, VV]]
  ) extends com.outworkers.phantom.column.MapColumn[T, R, KK, VV](this)

  abstract class JsonColumn[RR]()(implicit ev: Primitive[RR]) extends Col[RR]
  abstract class OptionalJsonColumn[RR]()(
    implicit ev: Primitive[RR],
    optEv: Primitive[Option[RR]]
  ) extends OptionalCol[RR]

  class EnumColumn[RR <: Enumeration#Value : Primitive] extends com.outworkers.phantom.column.PrimitiveColumn[T, R, RR](this)
  class OptionalEnumColumn[RR <: Enumeration#Value : Primitive] extends com.outworkers.phantom.column.OptionalPrimitiveColumn[T, R, RR](this)

  abstract class JsonSetColumn[RR]()(
    implicit ev: Primitive[Set[RR]],
    ev2: Primitive[RR]
  ) extends SetColumn[RR]

  abstract class JsonListColumn[RR]()(
    implicit ev: Primitive[List[RR]],
    ev2: Primitive[RR]
  ) extends ListColumn[RR]

  class JsonMapColumn[KK, VV]()(implicit
    ev: Primitive[KK],
    ev2: Primitive[VV],
    ev3: Primitive[Map[KK, VV]]
  ) extends MapColumn[KK, VV]

  class PrimitiveColumn[RR : Primitive] extends com.outworkers.phantom.column.PrimitiveColumn[T, R, RR](this)
  class TupleColumn[RR : Primitive] extends PrimitiveColumn[RR]
  class CustomColumn[RR : Primitive] extends PrimitiveColumn[RR]
  class Col[RR : Primitive] extends PrimitiveColumn[RR]

  class OptionalCol[RR](
    implicit ev: Primitive[RR],
    evOpt: Primitive[Option[RR]]
  ) extends Col[Option[RR]] {
    override def parse(r: Row): Try[Option[RR]] = ev.fromRow(name, r) match {
      case Success(value) => Success(Some(value))
      case Failure(_) if r.isNull(name) => Success(None)
      case Failure(ex) => Failure[Option[RR]](ex)
    }
  }

  abstract class Column[RR] extends com.outworkers.phantom.column.Column[T, R, RR](this)

  abstract class OptionalColumn[RR] extends com.outworkers.phantom.column.OptionalColumn[T, R, RR](this)
  class OptionalPrimitiveColumn[RR : Primitive] extends com.outworkers.phantom.column.OptionalPrimitiveColumn[T, R, RR](this)

  class BigDecimalColumn()(implicit ev: Primitive[BigDecimal]) extends Col[BigDecimal]
  class BlobColumn()(implicit ev: Primitive[ByteBuffer]) extends Col[ByteBuffer]
  class BigIntColumn()(implicit ev: Primitive[BigInt]) extends Col[BigInt]
  class BooleanColumn()(implicit ev: Primitive[Boolean]) extends Col[Boolean]
  class DateColumn()(implicit ev: Primitive[Date]) extends Col[Date]
  class DateTimeColumn()(implicit ev: Primitive[DateTime]) extends Col[DateTime]
  class LocalDateColumn()(implicit ev: Primitive[LocalDate]) extends Col[LocalDate]
  class DoubleColumn()(implicit ev: Primitive[Double]) extends Col[Double]
  class FloatColumn()(implicit ev: Primitive[Float]) extends Col[Float]
  class IntColumn()(implicit ev: Primitive[Int]) extends Col[Int]
  class SmallIntColumn()(implicit ev: Primitive[Short]) extends Col[Short]
  class TinyIntColumn()(implicit ev: Primitive[Byte]) extends Col[Byte]
  class InetAddressColumn()(implicit ev: Primitive[InetAddress]) extends Col[InetAddress]
  class LongColumn()(implicit ev: Primitive[Long]) extends Col[Long]
  class StringColumn()(implicit ev: Primitive[String]) extends Col[String]
  class UUIDColumn()(implicit ev: Primitive[UUID]) extends Col[UUID]
  class CounterColumn()(implicit ev: Primitive[Long]) extends com.outworkers.phantom.column.CounterColumn[T, R](this)
  class TimeUUIDColumn()(implicit ev: Primitive[UUID]) extends com.outworkers.phantom.column.TimeUUIDColumn[T, R](this)
  class AsciiColumn()(implicit ev: Primitive[AsciiValue]) extends Col[AsciiValue]

  class OptionalAsciiColumn()(implicit ev: Primitive[AsciiValue]) extends OptionalPrimitiveColumn[AsciiValue]

  class OptionalBlobColumn()(
    implicit ev: Primitive[ByteBuffer]
  ) extends OptionalPrimitiveColumn[ByteBuffer]

  class OptionalBigDecimalColumn()(
    implicit ev: Primitive[BigDecimal]
  ) extends OptionalPrimitiveColumn[BigDecimal]

  class OptionalBigIntColumn()(
    implicit ev: Primitive[BigInt]
  ) extends OptionalPrimitiveColumn[BigInt]

  class OptionalBooleanColumn()(
    implicit ev: Primitive[Boolean]
  ) extends OptionalPrimitiveColumn[Boolean]

  class OptionalDateColumn()(
    implicit ev: Primitive[Date]
  ) extends OptionalPrimitiveColumn[Date]

  class OptionalDateTimeColumn()(
    implicit ev: Primitive[DateTime]
  ) extends OptionalPrimitiveColumn[DateTime]

  class OptionalLocalDateColumn()(
    implicit ev: Primitive[LocalDate]
  ) extends OptionalPrimitiveColumn[LocalDate]

  class OptionalDoubleColumn()(
    implicit ev: Primitive[Double]
  ) extends OptionalPrimitiveColumn[Double]

  class OptionalFloatColumn()(
    implicit ev: Primitive[Float]
  ) extends OptionalPrimitiveColumn[Float]

  class OptionalIntColumn()(
    implicit ev: Primitive[Int]
  ) extends OptionalPrimitiveColumn[Int]

  class OptionalSmallIntColumn()(
    implicit ev: Primitive[Short]
  ) extends OptionalPrimitiveColumn[Short]

  class OptionalTinyIntColumn()(
    implicit ev: Primitive[Byte]
  ) extends OptionalPrimitiveColumn[Byte]

  class OptionalInetAddressColumn()(
    implicit ev: Primitive[InetAddress]
  ) extends OptionalPrimitiveColumn[InetAddress]

  class OptionalLongColumn()(
    implicit ev: Primitive[Long]
  ) extends OptionalPrimitiveColumn[Long]

  class OptionalStringColumn()(
    implicit ev: Primitive[String]
  ) extends OptionalPrimitiveColumn[String]

  class OptionalUUIDColumn()(
    implicit ev: Primitive[UUID]
  ) extends OptionalPrimitiveColumn[UUID]

  class OptionalTimeUUIDColumn()(
    implicit ev: Primitive[UUID]
  ) extends OptionalPrimitiveColumn[UUID] {
    override val cassandraType: String = CQLSyntax.Types.TimeUUID
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy