Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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