Proyectos de Subversion Iphone Microlearning

Rev

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