Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 1 | Rev 19 | Ir a la última revisión | | Comparar con el anterior | 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
 
17 efrain 75
 
76
    func countPendingRecords()-> Int {
77
        var count = 0
78
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_SYNC
79
        var statement : OpaquePointer? = nil
80
 
81
 
82
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
83
            if(sqlite3_step(statement) == SQLITE_ROW){
84
                count = Int(sqlite3_column_int(statement, 0))
85
            }
86
        }
87
        sqlite3_finalize(statement)
88
        return count
89
    }
90
 
1 efrain 91
    func selectBatch()-> [SyncModel] {
92
        var records = [SyncModel]()
93
 
17 efrain 94
        var query = "SELECT "
95
        query = query + Constants.TABLE_SYNC_FIELD_ID + "  , "
96
        query = query + Constants.TABLE_SYNC_FIELD_TYPE + " , "
97
        query = query + Constants.TABLE_SYNC_FIELD_DATA
98
        query = query + " FROM " + Constants.TABLE_SYNC
99
        query = query + " ORDER BY " + Constants.TABLE_SYNC_FIELD_ID + " ASC "
100
        query = query + " LIMIT 10; "
1 efrain 101
        var statement : OpaquePointer? = nil
102
 
103
 
104
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
17 efrain 105
            while (sqlite3_step(statement) == SQLITE_ROW) {
1 efrain 106
                var model = SyncModel()
107
                model.id = Int(sqlite3_column_int(statement, 0))
108
                model.type = Int(sqlite3_column_int(statement, 1))
109
                model.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
110
 
111
                records.append(model)
112
            }
113
        }
114
        sqlite3_finalize(statement)
115
        return records
116
    }
117
 
118
    func remove(id : Int) {
119
        let query = "DELETE FROM " + Constants.TABLE_SYNC + " WHERE " + Constants.TABLE_SYNC_FIELD_ID + " = " + "\(id) ;"
120
        var statement : OpaquePointer? = nil
121
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
122
            if (sqlite3_step(statement) != SQLITE_DONE) {
123
                print("No se pudo borrar el ID: \(id) de la tabla: \(Constants.TABLE_SYNC)")
124
            }
125
        }
126
        sqlite3_finalize(statement)
127
    }
128
}
129
 
130