Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 15 | 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 database = Database.sharedInstance
15
 
16
    static let sharedInstance: SyncDao = {
17
           let instance = SyncDao()
18
 
19
           // setup code
20
           return instance
21
    }()
22
 
23
    func insert(record : SyncModel) -> Int {
24
        let db = database.open()
25
        let query = "INSERT INTO " + Constants.TABLE_SYNC + " ( " + Constants.TABLE_SYNC_FIELD_TYPE + ", " + Constants.TABLE_SYNC_FIELD_DATA + " ) VALUES (?, ?);"
26
        var statement : OpaquePointer?
27
        var result = 0;
28
 
29
 
30
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
31
 
32
            sqlite3_bind_int(statement, 1, Int32(record.type))
33
            sqlite3_bind_text(statement, 2, record.data , -1, SQLITE_TRANSIENT)
34
           if (sqlite3_step(statement) == SQLITE_DONE) {
35
               result = Int(sqlite3_last_insert_rowid(db))
36
           } else {
37
                print("No se pudo insertar el registro ( type: \(record.type) data: \(record.data)   en la tabla: \(Constants.TABLE_SYNC)")
38
                database.printError()
39
 
40
           }
41
 
42
        } else {
43
            print("Fallo la preparación del insert en la tabla: \(Constants.TABLE_SYNC)")
44
            database.printError()
45
        }
46
 
47
        sqlite3_finalize(statement)
48
        return result
49
     }
50
 
51
    func selectOneByType(type: Int) -> SyncModel {
52
        let db = database.open()
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
        } else {
71
            database.printError()
72
        }
73
        sqlite3_finalize(statement)
74
        return record
75
    }
76
 
77
 
78
    func countPendingRecords()-> Int {
79
        let db = database.open()
80
        var count = 0
81
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_SYNC
82
        var statement : OpaquePointer? = nil
83
 
84
 
85
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
86
            if(sqlite3_step(statement) == SQLITE_ROW){
87
                count = Int(sqlite3_column_int(statement, 0))
88
            }
89
        } else {
90
            database.printError()
91
        }
92
        sqlite3_finalize(statement)
93
        return count
94
    }
95
 
96
    func selectBatch()-> [SyncModel] {
97
        let db = database.open()
98
        var records = [SyncModel]()
99
 
100
        var query = "SELECT "
101
        query = query + Constants.TABLE_SYNC_FIELD_ID + "  , "
102
        query = query + Constants.TABLE_SYNC_FIELD_TYPE + " , "
103
        query = query + Constants.TABLE_SYNC_FIELD_DATA
104
        query = query + " FROM " + Constants.TABLE_SYNC
105
        query = query + " ORDER BY " + Constants.TABLE_SYNC_FIELD_ID + " ASC "
106
        query = query + " LIMIT 10; "
107
        var statement : OpaquePointer? = nil
108
 
109
 
110
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
111
            while (sqlite3_step(statement) == SQLITE_ROW) {
112
                var model = SyncModel()
113
                model.id = Int(sqlite3_column_int(statement, 0))
114
                model.type = Int(sqlite3_column_int(statement, 1))
115
                model.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
116
 
117
                records.append(model)
118
            }
119
        } else {
120
            database.printError()
121
        }
122
        sqlite3_finalize(statement)
123
        return records
124
    }
125
 
126
    func remove(id : Int) {
127
        let db = database.open()
128
        let query = "DELETE FROM " + Constants.TABLE_SYNC + " WHERE " + Constants.TABLE_SYNC_FIELD_ID + " = " + "\(id) ;"
129
        var statement : OpaquePointer? = nil
130
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
131
            if (sqlite3_step(statement) != SQLITE_DONE) {
132
                print("No se pudo borrar el ID: \(id) de la tabla: \(Constants.TABLE_SYNC)")
133
                database.printError()
134
            }
135
        } else {
136
            database.printError()
137
        }
138
        sqlite3_finalize(statement)
139
    }
140
}
141
 
142