Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 8 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  Database.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
import Foundation
9
import SQLite3
10
 
11
class Database {
12
 
13
    private var db : OpaquePointer?
14
    private var path : String = Constants.DATABASE_NAME
15
 
16
    static let sharedInstance: Database = {
17
           let instance = Database()
18
 
19
           // setup code
20
           return instance
21
    }()
22
 
23
 
24
 
25
 
26
 
27
    public func createTables()
28
    {
29
        self.db = open()
30
        if(self.db != nil) {
31
            self.createTableSync()
32
            self.createTableProgress()
33
            self.createTableUserLog()
34
            self.createTableCompany()
35
            self.createTableTopic()
36
            self.createTableCapsule()
37
            self.createTableSlide()
38
            self.createTableQuiz()
39
            self.createTableQuestion()
40
            self.createTableAnswer()
41
            self.createTableUserExtended()
42
            self.createTableUserNotification()
43
        }
44
    }
45
 
46
    public func open() -> OpaquePointer? {
47
 
48
        if db == nil {
49
 
50
            let filePath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
51
                .appendingPathComponent(path)
52
 
53
            print("Database FilePath : \(filePath.path)")
54
 
55
            if sqlite3_open(filePath.path, &db) != SQLITE_OK {
56
                print("No se pudo abrir la DB : \(path) ")
57
                return nil
58
            } else {
59
                return db
60
            }
61
        } else {
62
            return db
63
        }
64
 
65
    }
66
 
67
    func deleteTables() {
68
        let queries = [
69
            "DELETE FROM " + Constants.TABLE_PROGRESS + ";",
70
            "DELETE FROM " + Constants.TABLE_USER_LOG + ";",
71
            "DELETE FROM " + Constants.TABLE_USER_NOTIFICATION + ";"
72
        ]
73
 
74
        queries.forEach { query in
75
            var statement : OpaquePointer? = nil
76
 
77
            if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
78
                if sqlite3_step(statement) != SQLITE_DONE {
79
                    print("Fallo la consulta: \(query) ")
80
                }
81
            } else {
82
                print("Fallo la preparación: \(query) ")
83
 
84
            }
85
 
86
        }
87
    }
88
    /*
89
 
90
     var addedOn: String
91
     */
92
 
93
    private func createTableUserNotification()
94
    {
95
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_NOTIFICATION + "("
96
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " INTEGER NOT NULL, "
97
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " TEXT,"
98
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + " TEXT,"
99
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_DESCRIPTION + " TEXT,"
100
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " TEXT, "
101
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " INTEGER, "
102
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_ADDED_ON + " TEXT, "
103
        sql = sql + " PRIMARY KEY(`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "`) "
104
        sql = sql + ");"
105
 
106
        let sql1 = "CREATE INDEX `idx_user_unotification_id` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "` );"
107
 
108
        let sql2 = "CREATE INDEX `idx_user_notification_user_uuid` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + "` );"
109
 
110
        let query = sql + sql1 + sql2
111
        var statement : OpaquePointer? = nil
112
 
113
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
114
            if sqlite3_step(statement) != SQLITE_DONE {
115
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
116
            }
117
        } else {
118
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
119
 
120
        }
121
    }
122
 
123
    private func createTableUserExtended()
124
    {
125
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_EXTENDED + "("
126
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_UUID + " TEXT UNIQUE, "
127
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + " TEXT,"
128
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_LABEL + " TEXT,"
129
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_VALUE + " TEXT"
130
        sql = sql + ");"
131
 
132
        let sql1 = "CREATE INDEX `idx_user_extended_company_uuid` ON `" +  Constants.TABLE_USER_EXTENDED + "` (`" +  Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + "` );"
133
 
134
        let query = sql + sql1
135
 
136
        var statement : OpaquePointer? = nil
137
 
138
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
139
            if sqlite3_step(statement) != SQLITE_DONE {
140
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
141
            }
142
        } else {
143
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
144
 
145
        }
146
    }
147
 
148
    private func createTableSync()  {
149
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SYNC + "("
150
        sql = sql + Constants.TABLE_SYNC_FIELD_ID +  " INTEGER PRIMARY KEY, "
151
        sql = sql + Constants.TABLE_SYNC_FIELD_TYPE + " INTEGER,"
152
        sql = sql + Constants.TABLE_SYNC_FIELD_DATA + " TEXT"
153
        sql = sql + ");"
154
 
155
        var statement : OpaquePointer? = nil
156
 
157
        if sqlite3_prepare_v2(self.db, sql, -1, &statement, nil) == SQLITE_OK {
158
            if sqlite3_step(statement) != SQLITE_DONE {
159
                print("No se pudo crear la tabla: \(Constants.TABLE_SYNC)")
160
            }
161
        } else {
162
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SYNC)")
163
 
164
        }
165
    }
166
 
167
    private func createTableCompany()  {
168
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_COMPANY + "("
169
        sql = sql + Constants.TABLE_COMPANY_FIELD_UUID + " TEXT UNIQUE, "
170
        sql = sql + Constants.TABLE_COMPANY_FIELD_NAME + " TEXT, "
171
        sql = sql + Constants.TABLE_COMPANY_FIELD_IMAGE + " TEXT "
172
        sql = sql + ");"
173
        var statement : OpaquePointer? = nil
174
 
175
        if sqlite3_prepare_v2(self.db, sql, -1, &statement, nil) == SQLITE_OK {
176
            if sqlite3_step(statement) != SQLITE_DONE {
177
                print("No se pudo crear la tabla: \(Constants.TABLE_COMPANY)");
178
 
179
            }
180
        } else {
181
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_COMPANY)")
182
 
183
        }
184
    }
185
 
186
    private func createTableTopic()  {
187
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_TOPIC + "("
188
        sql = sql + Constants.TABLE_TOPIC_FIELD_UUID + " TEXT UNIQUE, "
189
        sql = sql + Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + " TEXT,"
190
        sql = sql + Constants.TABLE_TOPIC_FIELD_NAME + " TEXT,"
191
        sql = sql + Constants.TABLE_TOPIC_FIELD_DESCRIPTION + " TEXT,"
192
        sql = sql + Constants.TABLE_TOPIC_FIELD_IMAGE + " TEXT,"
193
        sql = sql + Constants.TABLE_TOPIC_FIELD_POSITION + " INTEGER, "
194
        sql = sql + Constants.TABLE_TOPIC_FIELD_ADDED_ON + " TEXT,"
195
        sql = sql + Constants.TABLE_TOPIC_FIELD_UPDATED_ON + " TEXT "
196
        sql = sql + ");"
197
 
198
        let sql1 = "CREATE INDEX `idx_topics_company_uuid` ON `" +  Constants.TABLE_TOPIC + "` (`" +  Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + "` );"
199
 
200
        let query = sql + sql1
201
        var statement : OpaquePointer? = nil
202
 
203
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
204
            if sqlite3_step(statement) != SQLITE_DONE {
205
                print("No se pudo crear la tabla: \(Constants.TABLE_TOPIC)")
206
           }
207
        } else {
208
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_TOPIC)")
209
        }
210
    }
211
 
212
 
213
    private func createTableCapsule()  {
214
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_CAPSULE + "("
215
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UUID + " TEXT UNIQUE, "
216
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " TEXT,"
217
        sql = sql + Constants.TABLE_CAPSULE_FIELD_NAME + " TEXT,"
218
        sql = sql + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " TEXT,"
219
        sql = sql + Constants.TABLE_CAPSULE_FIELD_IMAGE + " TEXT,"
220
        sql = sql + Constants.TABLE_CAPSULE_FIELD_POSITION + " INTEGER, "
221
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " TEXT, "
222
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " TEXT, "
223
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " INTEGER, "
224
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " INTEGER, "
225
        sql = sql + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " TEXT, "
226
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON  + " TEXT "
227
        sql = sql + ");"
228
 
229
        let sql1 = "CREATE INDEX `idx_capsules_topic_uuid` ON `" +  Constants.TABLE_CAPSULE + "` (`" +  Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + "` );"
230
 
231
        let query = sql + sql1
232
        var statement : OpaquePointer? = nil
233
 
234
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
235
            if sqlite3_step(statement) != SQLITE_DONE {
236
                print("No se pudo crear la tabla: \(Constants.TABLE_CAPSULE)")
237
           }
238
        } else {
239
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_CAPSULE)")
240
        }
241
    }
242
 
243
    private func createTableSlide()  {
244
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SLIDE + "("
245
        sql = sql + Constants.TABLE_SLIDE_FIELD_UUID + " TEXT UNIQUE, "
246
        sql = sql + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + " TEXT,"
247
        sql = sql + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + " TEXT,"
248
        sql = sql + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + " TEXT,"
249
        sql = sql + Constants.TABLE_SLIDE_FIELD_NAME + " TEXT,"
250
        sql = sql + Constants.TABLE_SLIDE_FIELD_DESCRIPTION + " TEXT,"
251
        sql = sql + Constants.TABLE_SLIDE_FIELD_TYPE + " TEXT,"
252
        sql = sql + Constants.TABLE_SLIDE_FIELD_FILE + " TEXT,"
253
        sql = sql + Constants.TABLE_SLIDE_FIELD_BACKGROUND + " TEXT,"
254
        sql = sql + Constants.TABLE_SLIDE_FIELD_POSITION + " INTEGER, "
255
        sql = sql + Constants.TABLE_SLIDE_FIELD_ADDED_ON + " TEXT,"
256
        sql = sql + Constants.TABLE_SLIDE_FIELD_UPDATED_ON + " TEXT);"
257
 
258
        let sql1 = "CREATE INDEX `idx_slides_quiz_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + "` );"
259
 
260
        let sql2 = "CREATE INDEX `idx_slides_capsule_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + "` );"
261
 
262
        let sql3 = "CREATE INDEX `idx_slides_topic_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + "` );"
263
 
264
        let query = sql + sql1 + sql2 + sql3
265
        var statement : OpaquePointer? = nil
266
 
267
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
268
            if sqlite3_step(statement) != SQLITE_DONE {
269
                print("No se pudo crear la tabla: \(Constants.TABLE_SLIDE)")
270
           }
271
        } else {
272
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SLIDE)")
273
        }
274
    }
275
 
276
 
277
    private func createTableProgress()  {
278
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_PROGRESS + "("
279
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ID + " INTEGER PRIMARY KEY, "
280
        sql = sql + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " TEXT,"
281
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " TEXT,"
282
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " TEXT,"
283
        sql = sql + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " TEXT,"
284
        sql = sql + Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " TEXT,"
285
        sql = sql + Constants.TABLE_PROGRESS_FIELD_PROGRESS + " REAL,"
286
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " INTEGER,"
287
        sql = sql + Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " INTEGER,"
288
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TYPE + " TEXT,"
289
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING  + " INTEGER,"
290
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED  + " INTEGER,"
291
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPLETED  + " INTEGER,"
292
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ADDED_ON  + " TEXT,"
293
        sql = sql + Constants.TABLE_PROGRESS_FIELD_UPDATED_ON  + " TEXT);"
294
 
295
        let sql1 = "CREATE INDEX `idx_progress_topic_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + "` );"
296
 
297
        let sql2 = "CREATE INDEX `idx_progress_capsule_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + "` );"
298
 
299
        let sql3 = "CREATE INDEX `idx_progress_slide_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + "` );"
300
 
301
        let sql4 = "CREATE INDEX `idx_progress_user_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + "` );"
302
 
303
        let query = sql + sql1 + sql2 + sql3 + sql4
304
        var statement : OpaquePointer? = nil
305
 
306
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
307
            if sqlite3_step(statement) != SQLITE_DONE {
308
                print("No se pudo crear la tabla: \(Constants.TABLE_PROGRESS)")
309
           }
310
        } else {
311
            print("Fallo la preparación para la creación de la tabla: \(Constants.TABLE_PROGRESS)")
312
        }
313
    }
314
 
315
    private func createTableUserLog()  {
316
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_LOG + "("
317
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ID + " INTEGER PRIMARY KEY, "
318
        sql = sql + Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " TEXT,"
319
        sql = sql + Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + " TEXT,"
320
        sql = sql + Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + " TEXT,"
321
        sql = sql + Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + " TEXT,"
322
        sql = sql + Constants.TABLE_USER_LOG_FIELD_USER_UUID + " TEXT,"
323
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " TEXT,"
324
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " TEXT"
325
        sql = sql + ");"
326
 
327
        let sql1 = "CREATE INDEX `idx_user_log_added_on` ON `" +  Constants.TABLE_USER_LOG + "` (`" +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON + "` );"
328
 
329
        let query = sql + sql1
330
        var statement : OpaquePointer? = nil
331
 
332
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
333
            if sqlite3_step(statement) != SQLITE_DONE {
334
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_LOG)")
335
           }
336
        } else {
337
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_USER_LOG)")
338
        }
339
    }
340
 
341
 
342
 
343
    private func createTableQuiz()  {
344
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_QUIZ + "("
345
        sql = sql + Constants.TABLE_QUIZ_FIELD_UUID + " TEXT UNIQUE, "
346
        sql = sql + Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + " TEXT,"
347
        sql = sql + Constants.TABLE_QUIZ_FIELD_NAME + " TEXT,"
348
        sql = sql + Constants.TABLE_QUIZ_FIELD_TEXT + " TEXT,"
349
        sql = sql + Constants.TABLE_QUIZ_FIELD_FAILED + " TEXT,"
350
        sql = sql + Constants.TABLE_QUIZ_FIELD_POINTS + " INTEGER,"
351
        sql = sql + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + " INTEGER, "
352
        sql = sql + Constants.TABLE_QUIZ_FIELD_MAX_TIME + " INTEGER, "
353
        sql = sql + Constants.TABLE_QUIZ_FIELD_ADDED_ON + " TEXT,"
354
        sql = sql + Constants.TABLE_QUIZ_FIELD_UPDATED_ON + " TEXT);"
355
 
356
        let sql1 = "CREATE INDEX `idx_quizzes_company_uuid` ON `" +  Constants.TABLE_QUIZ + "` (`" +  Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + "` );"
357
 
358
        let query = sql + sql1
359
 
360
        var statement : OpaquePointer? = nil
361
 
362
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
363
            if sqlite3_step(statement) != SQLITE_DONE {
364
                print("No se pudo crear la tabla: \(Constants.TABLE_QUIZ)")
365
           }
366
        } else {
367
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_QUIZ)")
368
        }
369
 
370
    }
371
 
372
    private func createTableQuestion()  {
373
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_QUESTION + "("
374
        sql = sql + Constants.TABLE_QUESTION_FIELD_UUID + " TEXT UNIQUE, "
375
        sql = sql + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " TEXT,"
376
        sql = sql + Constants.TABLE_QUESTION_FIELD_TEXT + " TEXT,"
377
        sql = sql + Constants.TABLE_QUESTION_FIELD_TYPE + " TEXT,"
378
        sql = sql + Constants.TABLE_QUESTION_FIELD_POINTS + " INTEGER,"
379
        sql = sql + Constants.TABLE_QUESTION_FIELD_POSITION + " INTEGER, "
380
        sql = sql + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " TEXT,"
381
        sql = sql + Constants.TABLE_QUESTION_FIELD_UPDATED_ON + " TEXT);"
382
 
383
        let sql1 = "CREATE INDEX `idx_questions_quiz_uuid` ON " +  Constants.TABLE_QUIZ + "` (`" +  Constants.TABLE_QUIZ_FIELD_UUID + "` );"
384
 
385
        let query = sql + sql1
386
 
387
        var statement : OpaquePointer? = nil
388
 
389
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
390
            if sqlite3_step(statement) != SQLITE_DONE {
391
                print("No se pudo crear la tabla: \(Constants.TABLE_QUESTION)")
392
           }
393
        } else {
394
            print("Fallo la preparación de la creación  de la tabla: \(Constants.TABLE_QUESTION)")
395
        }
396
    }
397
 
398
    private func createTableAnswer()  {
399
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_ANSWER + "("
400
        sql = sql + Constants.TABLE_ANSWER_FIELD_UUID + " TEXT UNIQUE, "
401
        sql = sql + Constants.TABLE_ANSWER_FIELD_QUESTION_UUID + " TEXT,"
402
        sql = sql + Constants.TABLE_ANSWER_FIELD_TEXT + " TEXT,"
403
        sql = sql + Constants.TABLE_ANSWER_FIELD_POINTS + " INTEGER,"
404
        sql = sql + Constants.TABLE_ANSWER_FIELD_CORRECT + " TEXT, "
405
        sql = sql + Constants.TABLE_ANSWER_FIELD_ADDED_ON + " TEXT, "
406
        sql = sql + Constants.TABLE_ANSWER_FIELD_UPDATED_ON + " TEXT); "
407
 
408
        let sql1 = "CREATE INDEX `idx_answers_question_uuid` ON `" +  Constants.TABLE_QUESTION + "` (`" +  Constants.TABLE_QUESTION_FIELD_UUID + "` );"
409
        let query = sql + sql1
410
        var statement : OpaquePointer? = nil
411
 
412
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
413
            if sqlite3_step(statement) != SQLITE_DONE {
414
                print("No se pudo crear la tabla: \(Constants.TABLE_ANSWER)")
415
           }
416
        } else {
417
            print("Fallo la preparación para la creación de la tabla: \(Constants.TABLE_ANSWER)")
418
        }
419
    }
420
 
421
 
422
 
423
 
424
}