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

org.panteleyev.persistence.SQLiteProxy.kt Maven / Gradle / Ivy

/*
 * Copyright (c) 2017, Petr Panteleyev 
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

package org.panteleyev.persistence

import org.panteleyev.persistence.annotations.Field
import org.panteleyev.persistence.annotations.ForeignKey
import java.sql.ResultSet
import java.sql.SQLException
import java.util.Date

internal class SQLiteProxy : DAOProxy {

    @Throws(SQLException::class)
    override fun getFieldValue(fieldName: String, typeClass: Class<*>, set: ResultSet): Any? {
        var value: Any? = set.getObject(fieldName)

        val typeName = typeClass.name

        if (value != null) {
            when (typeName) {
                DAOTypes.TYPE_STRING,
                DAOTypes.TYPE_INTEGER,
                DAOTypes.TYPE_INT,
                DAOTypes.TYPE_LONG,
                DAOTypes.TYPE_LONG_PRIM -> {
                    // do nothing
                }

                DAOTypes.TYPE_BOOL,
                DAOTypes.TYPE_BOOLEAN ->
                    value = value as Int != 0

                DAOTypes.TYPE_BIG_DECIMAL ->
                    value = set.getBigDecimal(fieldName)

                DAOTypes.TYPE_DATE ->
                    value = Date(set.getLong(fieldName))

                else -> throw IllegalStateException(DAOTypes.BAD_FIELD_TYPE)
            }// do nothing
        } else {
            when (typeName) {
                DAOTypes.TYPE_INT -> value = 0
                DAOTypes.TYPE_LONG_PRIM -> value = 0L
                DAOTypes.TYPE_BOOL -> value = false
            }
        }

        return value
    }

    override fun getColumnString(fld: Field, foreignKey: ForeignKey?, typeName: String, constraints: MutableList): String {
        val b = StringBuilder()

        when (typeName) {
            DAOTypes.TYPE_STRING ->
                b.append("VARCHAR(${fld.length})")

            DAOTypes.TYPE_BOOL,
            DAOTypes.TYPE_BOOLEAN ->
                b.append("BOOLEAN")

            DAOTypes.TYPE_INTEGER,
            DAOTypes.TYPE_INT,
            DAOTypes.TYPE_LONG,
            DAOTypes.TYPE_LONG_PRIM,
            DAOTypes.TYPE_DATE ->
                b.append("INTEGER")

            DAOTypes.TYPE_BIG_DECIMAL ->
                b.append("VARCHAR(${fld.precision + 1})")

            else -> throw IllegalStateException(DAOTypes.BAD_FIELD_TYPE)
        }

        if (fld.primaryKey) {
            b.append(" PRIMARY KEY")
        }

        if (!fld.nullable) {
            b.append(" NOT NULL")
        }

        if (foreignKey != null) {
            constraints.add(buildForeignKey(fld, foreignKey))
        }

        return b.toString()
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy