Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 17 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  SyncDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
 
9
import UIKit
10
import SQLite3
11
 
12
class SyncDao {
13
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
14
    private var db : OpaquePointer?
15
 
16
    static let sharedInstance: SyncDao = {
17
           let instance = SyncDao()
18
 
19
           // setup code
20
           return instance
21
    }()
22
 
23
    init() {
24
        self.db = Database.sharedInstance.open()
25
    }
26
 
27
    func insert(record : SyncModel) -> Int {
28
        let query = "INSERT INTO " + Constants.TABLE_SYNC + " ( " + Constants.TABLE_SYNC_FIELD_TYPE + ", " + Constants.TABLE_SYNC_FIELD_DATA + " ) VALUES (?, ?);"
29
        var statement : OpaquePointer?
30
        var result = 0;
31
 
32
 
33
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
34
 
35
            sqlite3_bind_int(statement, 1, Int32(record.type))
36
            sqlite3_bind_text(statement, 2, record.data , -1, SQLITE_TRANSIENT)
37
           if (sqlite3_step(statement) == SQLITE_DONE) {
38
               result = Int(sqlite3_last_insert_rowid(db))
39
           } else {
40
                print("No se pudo insertar el registro ( type: \(record.type) data: \(record.data)   en la tabla: \(Constants.TABLE_SYNC)")
41
 
42
           }
43
 
44
        } else {
45
            print("Fallo la preparación del insert en la tabla: \(Constants.TABLE_SYNC)")
46
        }
47
 
48
        sqlite3_finalize(statement)
49
        return result
50
     }
51
 
52
    func selectOneByType(type: Int) -> SyncModel {
53
        var record = SyncModel()
54
 
55
        let query = "SELECT "
56
            + Constants.TABLE_SYNC_FIELD_ID + "  , "
57
            + Constants.TABLE_SYNC_FIELD_TYPE + " , "
58
            + Constants.TABLE_SYNC_FIELD_DATA
59
            + "  FROM " + Constants.TABLE_SYNC + " WHERE type = '\(type)' LIMIT 1; "
60
        var statement : OpaquePointer? = nil
61
 
62
 
63
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
64
            if (sqlite3_step(statement) == SQLITE_ROW) {
65
                record.id = Int(sqlite3_column_int(statement, 0))
66
                record.type = Int(sqlite3_column_int(statement, 1))
67
                record.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
68
 
69
            }
70
        }
71
        sqlite3_finalize(statement)
72
        return record
73
    }
74
 
75
    func selectBatch()-> [SyncModel] {
76
        var records = [SyncModel]()
77
 
78
        let query = "SELECT "
79
            + Constants.TABLE_SYNC_FIELD_ID + "  , "
80
            + Constants.TABLE_SYNC_FIELD_TYPE + " , "
81
            + Constants.TABLE_SYNC_FIELD_DATA
82
            + "  FROM " + Constants.TABLE_SYNC + " LIMIT 5; "
83
        var statement : OpaquePointer? = nil
84
 
85
 
86
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
87
            if (sqlite3_step(statement) == SQLITE_ROW) {
88
                var model = SyncModel()
89
                model.id = Int(sqlite3_column_int(statement, 0))
90
                model.type = Int(sqlite3_column_int(statement, 1))
91
                model.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
92
 
93
                records.append(model)
94
            }
95
        }
96
        sqlite3_finalize(statement)
97
        return records
98
    }
99
 
100
    func remove(id : Int) {
101
        let query = "DELETE FROM " + Constants.TABLE_SYNC + " WHERE " + Constants.TABLE_SYNC_FIELD_ID + " = " + "\(id) ;"
102
        var statement : OpaquePointer? = nil
103
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
104
            if (sqlite3_step(statement) != SQLITE_DONE) {
105
                print("No se pudo borrar el ID: \(id) de la tabla: \(Constants.TABLE_SYNC)")
106
            }
107
        }
108
        sqlite3_finalize(statement)
109
    }
110
}
111
 
112