Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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