/*
 * This file is generated by jOOQ.
 */
package jooq.main.tables.daos


import java.time.OffsetDateTime

import jooq.main.enums.KugStatusEnum
import jooq.main.tables.Kug
import jooq.main.tables.records.KugRecord

import kotlin.collections.List

import org.jooq.Configuration
import org.jooq.impl.DAOImpl


/**
 * This class is generated by jOOQ.
 */
@Suppress("UNCHECKED_CAST")
open class KugDao(configuration: Configuration?) : DAOImpl<KugRecord, jooq.main.tables.pojos.Kug, Long>(Kug.KUG, jooq.main.tables.pojos.Kug::class.java, configuration) {

    /**
     * Create a new KugDao without any configuration
     */
    constructor(): this(null)

    override fun getId(o: jooq.main.tables.pojos.Kug): Long? = o.id

    /**
     * Fetch records that have <code>id BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfId(lowerInclusive: Long?, upperInclusive: Long?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.ID, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>id IN (values)</code>
     */
    fun fetchById(vararg values: Long): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.ID, *values.toTypedArray())

    /**
     * Fetch a unique record that has <code>id = value</code>
     */
    fun fetchOneById(value: Long): jooq.main.tables.pojos.Kug? = fetchOne(Kug.KUG.ID, value)

    /**
     * Fetch records that have <code>created BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfCreated(lowerInclusive: OffsetDateTime?, upperInclusive: OffsetDateTime?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.CREATED, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>created IN (values)</code>
     */
    fun fetchByCreated(vararg values: OffsetDateTime): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.CREATED, *values)

    /**
     * Fetch records that have <code>updated BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfUpdated(lowerInclusive: OffsetDateTime?, upperInclusive: OffsetDateTime?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.UPDATED, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>updated IN (values)</code>
     */
    fun fetchByUpdated(vararg values: OffsetDateTime): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.UPDATED, *values)

    /**
     * Fetch records that have <code>created_by BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfCreatedBy(lowerInclusive: Long?, upperInclusive: Long?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.CREATED_BY, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>created_by IN (values)</code>
     */
    fun fetchByCreatedBy(vararg values: Long): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.CREATED_BY, *values.toTypedArray())

    /**
     * Fetch records that have <code>updated_by BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfUpdatedBy(lowerInclusive: Long?, upperInclusive: Long?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.UPDATED_BY, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>updated_by IN (values)</code>
     */
    fun fetchByUpdatedBy(vararg values: Long): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.UPDATED_BY, *values.toTypedArray())

    /**
     * Fetch records that have <code>status BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfStatus(lowerInclusive: KugStatusEnum?, upperInclusive: KugStatusEnum?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.STATUS, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>status IN (values)</code>
     */
    fun fetchByStatus(vararg values: KugStatusEnum): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.STATUS, *values)

    /**
     * Fetch records that have <code>continent BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfContinent(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.CONTINENT, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>continent IN (values)</code>
     */
    fun fetchByContinent(vararg values: String): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.CONTINENT, *values)

    /**
     * Fetch records that have <code>name BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfName(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.NAME, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>name IN (values)</code>
     */
    fun fetchByName(vararg values: String): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.NAME, *values)

    /**
     * Fetch records that have <code>country BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfCountry(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.COUNTRY, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>country IN (values)</code>
     */
    fun fetchByCountry(vararg values: String): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.COUNTRY, *values)

    /**
     * Fetch records that have <code>url BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfUrl(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.URL, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>url IN (values)</code>
     */
    fun fetchByUrl(vararg values: String): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.URL, *values)

    /**
     * Fetch records that have <code>slug BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfSlug(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.SLUG, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>slug IN (values)</code>
     */
    fun fetchBySlug(vararg values: String): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.SLUG, *values)

    /**
     * Fetch records that have <code>latitude BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfLatitude(lowerInclusive: Double?, upperInclusive: Double?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.LATITUDE, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>latitude IN (values)</code>
     */
    fun fetchByLatitude(vararg values: Double): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.LATITUDE, *values.toTypedArray())

    /**
     * Fetch records that have <code>longitude BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfLongitude(lowerInclusive: Double?, upperInclusive: Double?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.LONGITUDE, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>longitude IN (values)</code>
     */
    fun fetchByLongitude(vararg values: Double): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.LONGITUDE, *values.toTypedArray())

    /**
     * Fetch records that have <code>version BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfVersion(lowerInclusive: Long?, upperInclusive: Long?): List<jooq.main.tables.pojos.Kug> = fetchRange(Kug.KUG.VERSION, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>version IN (values)</code>
     */
    fun fetchByVersion(vararg values: Long): List<jooq.main.tables.pojos.Kug> = fetch(Kug.KUG.VERSION, *values.toTypedArray())
}
