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


import jooq.main.tables.Company
import jooq.main.tables.records.CompanyRecord

import kotlin.collections.List

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


/**
 * This class is generated by jOOQ.
 */
@Suppress("UNCHECKED_CAST")
open class CompanyDao(configuration: Configuration?) : DAOImpl<CompanyRecord, jooq.main.tables.pojos.Company, Long>(Company.COMPANY, jooq.main.tables.pojos.Company::class.java, configuration) {

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

    override fun getId(o: jooq.main.tables.pojos.Company): 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.Company> = fetchRange(Company.COMPANY.ID, lowerInclusive, upperInclusive)

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

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

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

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

    /**
     * Fetch records that have <code>description BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfDescription(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Company> = fetchRange(Company.COMPANY.DESCRIPTION, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>description IN (values)</code>
     */
    fun fetchByDescription(vararg values: String): List<jooq.main.tables.pojos.Company> = fetch(Company.COMPANY.DESCRIPTION, *values)

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

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

    /**
     * Fetch records that have <code>logo BETWEEN lowerInclusive AND
     * upperInclusive</code>
     */
    fun fetchRangeOfLogo(lowerInclusive: String?, upperInclusive: String?): List<jooq.main.tables.pojos.Company> = fetchRange(Company.COMPANY.LOGO, lowerInclusive, upperInclusive)

    /**
     * Fetch records that have <code>logo IN (values)</code>
     */
    fun fetchByLogo(vararg values: String): List<jooq.main.tables.pojos.Company> = fetch(Company.COMPANY.LOGO, *values)

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

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