Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 15 | 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
//  QuestionDao.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 QuestionDao {
12
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
16 efrain 13
    public var db : OpaquePointer?
1 efrain 14
 
15
    func selectAllByQuizUuid(quizUuid: String)-> [QuestionModel] {
15 efrain 16
 
1 efrain 17
        var records = [QuestionModel]()
18
 
19
        var query = "SELECT "
20
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " , "
21
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " , "
22
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + " , "
23
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + " , "
24
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " , "
25
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " , "
26
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
27
        query = query + " FROM " + Constants.TABLE_QUESTION
28
        query = query + " WHERE " + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " = '\(quizUuid)'  "
29
        query = query + " ORDER BY " + Constants.TABLE_QUESTION_FIELD_POSITION + " ;"
30
        var statement : OpaquePointer? = nil
31
 
32
 
33
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
34
            while sqlite3_step(statement) == SQLITE_ROW {
35
                var model = QuestionModel()
36
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
37
                model.quizUuid = String(describing: String(cString : sqlite3_column_text(statement, 1)))
38
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 2)))
39
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 3)))
40
                model.points = Int(sqlite3_column_int(statement, 4))
41
                model.position = Int(sqlite3_column_int(statement, 5))
42
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 6)))
43
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
44
 
45
                records.append(model)
46
 
47
            }
48
        } else {
15 efrain 49
 
1 efrain 50
        }
51
        sqlite3_finalize(statement)
52
        return records
53
    }
54
 
55
    func selectByUuid(uuid: String)-> QuestionModel  {
15 efrain 56
 
1 efrain 57
        var model = QuestionModel()
58
 
59
        var query = "SELECT "
60
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " , "
61
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " , "
62
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + " , "
63
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + " , "
64
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " , "
65
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " , "
66
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
67
        query = query + " WHERE " + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(uuid)' LIMIT 1;"
68
 
69
        var statement : OpaquePointer? = nil
70
 
71
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
72
            if (sqlite3_step(statement) == SQLITE_ROW) {
73
 
74
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
75
                model.quizUuid = String(describing: String(cString : sqlite3_column_text(statement, 1)))
76
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 2)))
77
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 3)))
78
                model.points = Int(sqlite3_column_int(statement, 4))
79
                model.position = Int(sqlite3_column_int(statement, 5))
80
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 6)))
81
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
82
            }
83
        } else {
15 efrain 84
 
1 efrain 85
        }
86
        sqlite3_finalize(statement)
87
        return model
88
    }
89
 
90
    func insert(question: QuestionModel) {
15 efrain 91
 
1 efrain 92
        var query = "INSERT INTO " + Constants.TABLE_QUESTION + " ( "
93
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + ", "
94
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + ", "
95
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + ", "
96
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + ", "
97
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + ", "
98
        query = query + Constants.TABLE_QUESTION_FIELD_POSITION + ", "
99
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + ", "
100
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
101
        query = query + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
102
        var statement : OpaquePointer?
103
 
104
 
105
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
106
 
107
            sqlite3_bind_text(statement, 1, question.uuid, -1, SQLITE_TRANSIENT)
108
            sqlite3_bind_text(statement, 2, question.quizUuid, -1, SQLITE_TRANSIENT)
109
            sqlite3_bind_text(statement, 3, question.text , -1, SQLITE_TRANSIENT)
110
            sqlite3_bind_text(statement, 4, question.type , -1, SQLITE_TRANSIENT)
111
            sqlite3_bind_int(statement, 5, Int32(question.points))
112
            sqlite3_bind_int(statement, 6, Int32(question.position))
113
            sqlite3_bind_text(statement, 7, question.addedOn , -1, SQLITE_TRANSIENT)
114
            sqlite3_bind_text(statement, 8, question.updatedOn , -1, SQLITE_TRANSIENT)
115
 
116
           if (sqlite3_step(statement) != SQLITE_DONE) {
117
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_QUESTION) ")
15 efrain 118
 
1 efrain 119
           }
120
        } else {
121
            print("Fallo la preparación de insertar un registro en una tabla: \(Constants.TABLE_QUESTION) ")
15 efrain 122
 
1 efrain 123
        }
124
 
125
        sqlite3_finalize(statement)
126
    }
127
 
128
    func update(question: QuestionModel) {
15 efrain 129
 
1 efrain 130
        var query = "UPDATE " + Constants.TABLE_QUESTION
131
        query = query + " SET " + Constants.TABLE_QUESTION_FIELD_TEXT + " = '\(question.text)', "
132
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " = '\(question.points)', "
133
        query = query + Constants.TABLE_QUESTION_FIELD_POSITION + " = '\(question.position)', "
134
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " = '\(question.addedOn)', "
135
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON + " = '\(question.updatedOn)' "
136
        query = query + " WHERE "
137
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(question.uuid)' ;"
138
        var statement : OpaquePointer? = nil
139
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
140
            if (sqlite3_step(statement) != SQLITE_DONE) {
141
                print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_QUESTION)")
15 efrain 142
 
1 efrain 143
            }
144
        } else {
145
            print("No se pudo preparar el actualizar un registro en la tabla: \(Constants.TABLE_QUESTION)")
15 efrain 146
 
1 efrain 147
        }
148
        sqlite3_finalize(statement)
149
    }
150
 
151
    func remove(uuid: String) {
15 efrain 152
 
1 efrain 153
        let query = "DELETE FROM " + Constants.TABLE_QUESTION +
154
            " WHERE " + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(uuid)' ;"
155
        var statement : OpaquePointer? = nil
156
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
157
            if sqlite3_step(statement) != SQLITE_DONE {
158
                print("No se pudo borrar el registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_QUESTION)")
15 efrain 159
 
1 efrain 160
            }
161
        } else {
162
            print("No se pudo prepara el borrar de un registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_QUESTION)" )
15 efrain 163
 
1 efrain 164
        }
165
        sqlite3_finalize(statement)
166
    }
167
 
168
    func removeAll() {
15 efrain 169
 
1 efrain 170
        let query = "DELETE FROM " + Constants.TABLE_QUESTION + ";"
171
        var statement : OpaquePointer? = nil
172
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
173
            if sqlite3_step(statement) != SQLITE_DONE {
174
                print("No se pudo borrar todos los registros de la tabla: \(Constants.TABLE_QUESTION)")
15 efrain 175
 
1 efrain 176
            }
177
        } else {
178
            print("No se pudo preparar el borrar todos los registros de la tabla: \(Constants.TABLE_QUESTION)")
15 efrain 179
 
1 efrain 180
        }
181
        sqlite3_finalize(statement)
182
    }
183
 
184
}