Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 15 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

//
//  CompanyDao.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 2/21/22.
//

import UIKit
import SQLite3

class CompanyDao {
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
    private var database = Database.sharedInstance
    
    static let sharedInstance: CompanyDao = {
           let instance = CompanyDao()
           
           // setup code
           return instance
    }()


   func selectAll()-> [CompanyModel] {
        let db = database.open()
        var records = [CompanyModel]()
        
        let query = "SELECT " +
             Constants.TABLE_COMPANY_FIELD_UUID + " , " +
             Constants.TABLE_COMPANY_FIELD_NAME + " , " +
             Constants.TABLE_COMPANY_FIELD_IMAGE +
            " FROM " +  Constants.TABLE_COMPANY + " ORDER BY " +   Constants.TABLE_COMPANY_FIELD_NAME + " ;"
        var statement : OpaquePointer? = nil
        
        
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            while sqlite3_step(statement) == SQLITE_ROW {
                var model = CompanyModel()
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 1)))
                model.image = String(describing: String(cString: sqlite3_column_text(statement, 2)))
                

                records.append(model)
                //print("\nSuccessfully get records")
                
            }
        } else {
            database.printError()
        }
        sqlite3_finalize(statement)
        return records
    }

    func selectByUuid(uuid : String) -> CompanyModel {
        let db = database.open()
        var model = CompanyModel()
        let query = "SELECT " +
             Constants.TABLE_COMPANY_FIELD_UUID + " , " +
             Constants.TABLE_COMPANY_FIELD_NAME + " , " +
             Constants.TABLE_COMPANY_FIELD_IMAGE +
            " FROM " +  Constants.TABLE_COMPANY +
            " WHERE " +  Constants.TABLE_COMPANY_FIELD_UUID + " = '\(uuid)'  ;"
        var statement : OpaquePointer? = nil
        
        
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            while sqlite3_step(statement) == SQLITE_ROW {
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 1)))
                model.image = String(describing: String(cString: sqlite3_column_text(statement, 2)))
       
               // print("Data selected success")
                break
                
            }
        } else {
            database.printError()
        }
        sqlite3_finalize(statement)
    
        return model;
    }
        
    func insert(company : CompanyModel) {
        let db = database.open()
        let query = "INSERT INTO " + Constants.TABLE_COMPANY + " ( " +
            Constants.TABLE_COMPANY_FIELD_UUID + " , " +
            Constants.TABLE_COMPANY_FIELD_NAME + " , " +
            Constants.TABLE_COMPANY_FIELD_IMAGE + " ) VALUES (?, ?, ?);"
           var statement : OpaquePointer?
           
           
           if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
                   
            sqlite3_bind_text(statement, 1, company.uuid, -1, SQLITE_TRANSIENT)
            sqlite3_bind_text(statement, 2, company.name , -1, SQLITE_TRANSIENT)
            sqlite3_bind_text(statement, 3, company.image , -1, SQLITE_TRANSIENT)

           if sqlite3_step(statement) != SQLITE_DONE {
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_COMPANY)")
                database.printError()
           }
           
        } else {
            print("Fallo la preparación del insertar en la tabla \(Constants.TABLE_COMPANY) ")
            database.printError()
        }
       
        sqlite3_finalize(statement)
     }

    func update(company : CompanyModel) {
        let db = database.open()
        var query = "UPDATE " + Constants.TABLE_COMPANY
        query = query + " SET " + Constants.TABLE_COMPANY_FIELD_NAME + " = '\(company.name)', "
        query = query + Constants.TABLE_COMPANY_FIELD_IMAGE + " = '\(company.image)' "
        query = query + " WHERE " + Constants.TABLE_COMPANY_FIELD_UUID + " = '\(company.uuid)' ;"
        var statement : OpaquePointer? = nil
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            if sqlite3_step(statement) != SQLITE_DONE {
                print("No se pudo actualizar un registro en la tabla \(Constants.TABLE_COMPANY) ")
                database.printError()
            }
        } else {
            print("Fallo la preparación de la actualización de la tabla \(Constants.TABLE_COMPANY)")
            database.printError()
            
            
        }
        sqlite3_finalize(statement)
    }

    func removeAll() {
        let db = database.open()
        let query = "DELETE FROM " +  Constants.TABLE_COMPANY + ";"
        var statement : OpaquePointer? = nil
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            if sqlite3_step(statement) != SQLITE_DONE {
                print("No se pudieron borrar todos los registros de la tabla: \(Constants.TABLE_COMPANY)")
                database.printError()
            }
        } else {
            print("Fallo la preparación para borrar todos los registros de la tabla: \(Constants.TABLE_COMPANY)")
            database.printError()
        }
        sqlite3_finalize(statement)
    }
    
}