Rev 16 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
//
// SyncDao.swift
// twogetskills
//
// Created by Efrain Yanez Recanatini on 2/21/22.
//
import SwiftUI
import SQLite3
class SyncDao {
private var database = Environment(\.database).wrappedValue
private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
func insert(record : SyncModel) -> Int {
let db = database.open()
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 {
let db = database.open()
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)))
}
} else {
}
sqlite3_finalize(statement)
return record
}
func countPendingRecords()-> Int {
let db = database.open()
var count = 0
let query = "SELECT COUNT(*) AS total FROM " + Constants.TABLE_SYNC
var statement : OpaquePointer? = nil
if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
if(sqlite3_step(statement) == SQLITE_ROW){
count = Int(sqlite3_column_int(statement, 0))
}
} else {
}
sqlite3_finalize(statement)
return count
}
func selectBatch()-> [SyncModel] {
let db = database.open()
var records = [SyncModel]()
var query = "SELECT "
query = query + Constants.TABLE_SYNC_FIELD_ID + " , "
query = query + Constants.TABLE_SYNC_FIELD_TYPE + " , "
query = query + Constants.TABLE_SYNC_FIELD_DATA
query = query + " FROM " + Constants.TABLE_SYNC
query = query + " ORDER BY " + Constants.TABLE_SYNC_FIELD_ID + " ASC "
query = query + " LIMIT 10; "
var statement : OpaquePointer? = nil
if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
while (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)
}
} else {
}
sqlite3_finalize(statement)
return records
}
func remove(id : Int) {
let db = database.open()
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)")
}
} else {
}
sqlite3_finalize(statement)
}
}