Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  CapsuleDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
import UIKit
9
import SQLite3
10
 
11
class CapsuleDao {
12
 
13
    let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
14
    var db = Database().open()
15
 
16
 
17
    func getCountAll() -> Int {
18
        var count = 0
19
        let query = "SELECT COUNT(*) AS total FROM \(Constants.TABLE_CAPSULE) LIMIT 1"
20
 
21
        var statement : OpaquePointer? = nil
22
 
23
 
24
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
25
            if(sqlite3_step(statement) == SQLITE_ROW){
26
                count = Int(sqlite3_column_int(statement, 0))
27
                print("\(count)")
28
            }
29
        }
30
        sqlite3_finalize(statement)
31
        return count
32
    }
33
 
34
    func getCountByTopicUuid(topicUuid: String) -> Int {
35
        var count = 0
36
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_CAPSULE +
37
            " WHERE " +  Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " = \(topicUuid) LIMIT 1"
38
 
39
        var statement : OpaquePointer? = nil
40
 
41
 
42
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
43
            if(sqlite3_step(statement) == SQLITE_ROW){
44
                count = Int(sqlite3_column_int(statement, 0))
45
                print("\(count)")
46
            }
47
        }
48
        sqlite3_finalize(statement)
49
        return count
50
    }
51
 
52
    func selectAllByTopicUuid(topicUuid: String)-> [CapsuleModel] {
53
        var records = [CapsuleModel]()
54
        var query = "SELECT "
55
        query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
56
        query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
57
        query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
58
        query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
59
        query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
60
        query = query + Constants.TABLE_CAPSULE_FIELD_POSITION
61
        query = query + " FROM " + Constants.TABLE_CAPSULE
62
        query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " = '\(topicUuid)' "
63
        query = query + " ORDER BY " + Constants.TABLE_CAPSULE_FIELD_POSITION + " ;"
64
        var statement : OpaquePointer? = nil
65
 
66
 
67
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
68
            while (sqlite3_step(statement) == SQLITE_ROW) {
69
                var model = CapsuleModel()
70
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
71
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
72
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
73
                model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
74
                model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
75
                model.position = Int(sqlite3_column_int(statement, 5))
76
 
77
                records.append(model)
78
            }
79
        }
80
        sqlite3_finalize(statement)
81
        return records
82
    }
83
 
84
    func selectByUuid(uuid: String)-> CapsuleModel {
85
        var model = CapsuleModel()
86
        var query = "SELECT " + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
87
        query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
88
        query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
89
        query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
90
        query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
91
        query = query + Constants.TABLE_CAPSULE_FIELD_POSITION
92
        query = query + " FROM " + Constants.TABLE_CAPSULE
93
        query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = '\(uuid)'  LIMIT 1;"
94
        var statement : OpaquePointer? = nil
95
 
96
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
97
            if (sqlite3_step(statement) == SQLITE_ROW) {
98
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
99
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
100
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
101
                model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
102
                model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
103
                model.position = Int(sqlite3_column_int(statement, 5))
104
 
105
            }
106
        }
107
        sqlite3_finalize(statement)
108
        return model
109
    }
110
 
111
    func insert(capsule: CapsuleModel) {
112
        var query = "INSERT INTO " + Constants.TABLE_CAPSULE + " ( "
113
        query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
114
        query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + ", "
115
        query = query + Constants.TABLE_CAPSULE_FIELD_NAME + ", "
116
        query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + ", "
117
        query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + ", "
118
        query = query + Constants.TABLE_CAPSULE_FIELD_POSITION  + " ) VALUES (?, ?, ?, ?, ?, ?);"
119
        var statement : OpaquePointer?
120
 
121
 
122
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
123
 
124
            sqlite3_bind_text(statement, 1, capsule.uuid, -1, SQLITE_TRANSIENT)
125
            sqlite3_bind_text(statement, 2, capsule.topicUuid, -1, SQLITE_TRANSIENT)
126
            sqlite3_bind_text(statement, 3, capsule.name , -1, SQLITE_TRANSIENT)
127
            sqlite3_bind_text(statement, 4, capsule.description , -1, SQLITE_TRANSIENT)
128
            sqlite3_bind_text(statement, 5, capsule.image , -1, SQLITE_TRANSIENT)
129
            sqlite3_bind_int(statement, 6, Int32(capsule.position))
130
 
131
           if (sqlite3_step(statement) != SQLITE_DONE) {
132
            print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
133
           }
134
        } else {
135
            print("Fallo la prepración de insertar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
136
        }
137
 
138
        sqlite3_finalize(statement)
139
    }
140
 
141
    func update(capsule : CapsuleModel) {
142
        var query = "UPDATE " + Constants.TABLE_CAPSULE
143
        query = query + " SET " + Constants.TABLE_CAPSULE_FIELD_NAME + " = '\(capsule.name)', "
144
        query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " = '\(capsule.description)', "
145
        query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " = '\(capsule.image)', "
146
        query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " = '\(capsule.position)' "
147
        query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = '\(capsule.uuid)' ;"
148
        var statement : OpaquePointer? = nil
149
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
150
            if (sqlite3_step(statement) != SQLITE_DONE) {
151
                print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
152
            }
153
        } else {
154
            print("Fallo la preparación para actualizar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
155
        }
156
        sqlite3_finalize(statement)
157
    }
158
 
159
    func remove(uuid: String) {
160
        let query = "DELETE FROM " + Constants.TABLE_CAPSULE +
161
            " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = " + "\(uuid) ;"
162
        var statement : OpaquePointer? = nil
163
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
164
            if (sqlite3_step(statement) != SQLITE_DONE) {
165
                print("No se pudo borrar el registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_CAPSULE)")
166
            }
167
        } else {
168
            print("Fallo la preparación de borrar un registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_CAPSULE)")
169
        }
170
        sqlite3_finalize(statement)
171
    }
172
 
173
    func removeAll() {
174
        let query = "DELETE FROM " + Constants.TABLE_CAPSULE + ";"
175
        var statement : OpaquePointer? = nil
176
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
177
            if (sqlite3_step(statement) != SQLITE_DONE) {
178
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_CAPSULE)")
179
            }
180
        } else {
181
            print("No se pudo preparar el borrar todos los registros en la tabla: \(Constants.TABLE_CAPSULE)")
182
        }
183
        sqlite3_finalize(statement)
184
    }
185
 
186
}