Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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