Proyectos de Subversion Iphone Microlearning

Rev

Autoría | Ultima modificación | Ver Log |

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


import UIKit
import SQLite3

class SyncDao {
    let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
    var db = Database().open()

        
    func insert(record : SyncModel) -> Int {
        let query = "INSERT INTO " + Constants.TABLE_SYNC + " ( " + Constants.TABLE_SYNC_FIELD_TYPE + ", " + Constants.TABLE_SYNC_FIELD_DATA + " ) VALUES (?, ?);"
        var statement : OpaquePointer?
        var result = 0;
        
           
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
                
            sqlite3_bind_int(statement, 1, Int32(record.type))
            sqlite3_bind_text(statement, 2, record.data , -1, SQLITE_TRANSIENT)
           if (sqlite3_step(statement) == SQLITE_DONE) {
               result = Int(sqlite3_last_insert_rowid(db))
           } else {
                print("No se pudo insertar el registro ( type: \(record.type) data: \(record.data)   en la tabla: \(Constants.TABLE_SYNC)")
            
           }
           
        } else {
            print("Fallo la preparación del insert en la tabla: \(Constants.TABLE_SYNC)")
        }
        
        sqlite3_finalize(statement)
        return result
     }
    
    func selectOneByType(type: Int) -> SyncModel {
        var record = SyncModel()
        
        let query = "SELECT "
            + Constants.TABLE_SYNC_FIELD_ID + "  , "
            + Constants.TABLE_SYNC_FIELD_TYPE + " , "
            + Constants.TABLE_SYNC_FIELD_DATA
            + "  FROM " + Constants.TABLE_SYNC + " WHERE type = '\(type)' LIMIT 1; "
        var statement : OpaquePointer? = nil
        
        
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
            if (sqlite3_step(statement) == SQLITE_ROW) {
                record.id = Int(sqlite3_column_int(statement, 0))
                record.type = Int(sqlite3_column_int(statement, 1))
                record.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
                
            }
        }
        sqlite3_finalize(statement)
        return record
    }
    
    func selectBatch()-> [SyncModel] {
        var records = [SyncModel]()
        
        let query = "SELECT "
            + Constants.TABLE_SYNC_FIELD_ID + "  , "
            + Constants.TABLE_SYNC_FIELD_TYPE + " , "
            + Constants.TABLE_SYNC_FIELD_DATA
            + "  FROM " + Constants.TABLE_SYNC + " LIMIT 5; "
        var statement : OpaquePointer? = nil
        
        
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
            if (sqlite3_step(statement) == SQLITE_ROW) {
                var model = SyncModel()
                model.id = Int(sqlite3_column_int(statement, 0))
                model.type = Int(sqlite3_column_int(statement, 1))
                model.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
                
                records.append(model)
            }
        }
        sqlite3_finalize(statement)
        return records
    }
    
    func remove(id : Int) {
        let query = "DELETE FROM " + Constants.TABLE_SYNC + " WHERE " + Constants.TABLE_SYNC_FIELD_ID + " = " + "\(id) ;"
        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 borrar el ID: \(id) de la tabla: \(Constants.TABLE_SYNC)")
            }
        }
        sqlite3_finalize(statement)
    }
}