Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 14 | 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
 
15 efrain 13
 
1 efrain 14
    private var path : String = Constants.DATABASE_NAME
15 efrain 15
    public let db : OpaquePointer?
1 efrain 16
 
17
    static let sharedInstance: Database = {
18
           let instance = Database()
19
 
20
           return instance
21
    }()
22
 
23
 
24
    public func createTables()
25
    {
15 efrain 26
        if(self.db != nil) {
1 efrain 27
            self.createTableApp()
28
            self.createTableSync()
29
            self.createTableProgress()
30
            self.createTableUserLog()
31
            self.createTableCompany()
32
            self.createTableTopic()
33
            self.createTableCapsule()
34
            self.createTableSlide()
35
            self.createTableQuiz()
36
            self.createTableQuestion()
37
            self.createTableAnswer()
38
            self.createTableUserExtended()
39
            self.createTableUserNotification()
40
        }
41
    }
42
 
43
    public func open() -> OpaquePointer? {
44
 
15 efrain 45
        if self.db == nil {
1 efrain 46
 
47
            let filePath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
15 efrain 48
                    .appendingPathComponent(path)
49
 
1 efrain 50
 
51
 
15 efrain 52
            if sqlite3_open(filePath.path, &self.db) == SQLITE_OK {
53
                print("Se abrio la conexión con la db : \(path) ")
54
                return conn
55
 
56
            } else {
57
                print("No se pudo abrir la db : \(path) ")
1 efrain 58
                return nil
59
            }
60
        }
15 efrain 61
 
1 efrain 62
 
63
    }
64
 
15 efrain 65
    public func close() -> Void
66
    {
67
        if self.db == nil {
68
            print("No se pudo cerrar la conexión, no es un recurso valida")
69
            return
70
        }
71
 
72
 
73
        if sqlite3_close(db) == SQLITE_OK {
74
            print("Se cerro la conexión de la base de datos")
75
            self.db = nil
76
        } else {
77
            print("No se pudo cerrar la conexión de la base de datos")
78
        }
79
    }
1 efrain 80
 
81
 
15 efrain 82
 
83
    func executeMultiQuery(queries: [String]) -> Bool {
1 efrain 84
 
85
 
86
        queries.forEach { query in
87
            var statement : OpaquePointer? = nil
88
 
15 efrain 89
            if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
90
                if sqlite3_step(statement) == SQLITE_DONE {
91
                    return true
92
                } else {
1 efrain 93
                    print("Fallo la consulta: \(query) ")
15 efrain 94
                    return false
1 efrain 95
                }
96
            } else {
97
                print("Fallo la preparación: \(query) ")
98
 
15 efrain 99
                return false
1 efrain 100
 
101
            }
102
 
103
        }
104
    }
105
 
106
 
15 efrain 107
    private func createTableApp() -> Void
1 efrain 108
    {
109
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_APP + " ("
110
        sql = sql + Constants.TABLE_APP_FIELD_ID + " INTEGER NOT NULL, "
111
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_UUID + " TEXT, "
112
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_AES + " TEXT, "
113
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + " TEXT, "
114
        sql = sql + Constants.TABLE_APP_FIELD_USER_UUID + " TEXT, "
115
        sql = sql + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + " TEXT, "
116
        sql = sql + Constants.TABLE_APP_FIELD_USER_LASTNAME + " TEXT, "
117
        sql = sql + Constants.TABLE_APP_FIELD_USER_EMAIL + " TEXT, "
118
        sql = sql + Constants.TABLE_APP_FIELD_USER_IMAGE + " TEXT, "
119
        sql = sql + Constants.TABLE_APP_FIELD_FCM_TOKEN + " TEXT, "
120
        sql = sql + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + " TEXT, "
121
        sql = sql + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + " TEXT, "
122
        sql = sql + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + " TEXT, "
123
        sql = sql + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + " TEXT, "
124
        sql = sql + Constants.TABLE_APP_FIELD_COMPANY_UUID_ACTIVE + " TEXT, "
125
        sql = sql + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + " TEXT, "
126
        sql = sql + Constants.TABLE_APP_FIELD_LAST_CHECK_CHANGES + " TEXT, "
127
        sql = sql + Constants.TABLE_APP_FIELD_URL_EXTERNAL_DOWNLOADED + " TEXT, "
128
        sql = sql + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE + " INTEGER, "
129
        sql = sql + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE_SHOW_PENDING + " INTEGER, "
130
        sql = sql + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_ACTION_REQUIRED + " INTEGER, "
131
        sql = sql + Constants.TABLE_APP_FIELD_SIGNOUT_ACTION_REQUIRED + " INTEGER, "
132
        sql = sql + " PRIMARY KEY(`" +  Constants.TABLE_APP_FIELD_ID + "`) "
133
        sql = sql + ");"
134
 
135
 
136
 
137
 
138
        var statement : OpaquePointer? = nil
139
 
15 efrain 140
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 141
            if sqlite3_step(statement) == SQLITE_DONE {
142
 
143
                let queries = [
14 efrain 144
                    "CREATE INDEX IF NOT EXISTS `idx_app_id` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_ID + "` );",
1 efrain 145
 
14 efrain 146
                    "CREATE INDEX IF NOT EXISTS `idx_app_user_uuid` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_USER_UUID + "` );",
1 efrain 147
 
14 efrain 148
                    "CREATE INDEX IF NOT EXISTS `idx_app_device_uuid` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_DEVICE_UUID + "` );"
1 efrain 149
                ]
150
 
151
                executeMultiQuery(queries: queries)
152
 
153
 
154
            } else {
155
                print("No se pudo crear la tabla: \(Constants.TABLE_APP)")
156
 
15 efrain 157
 
1 efrain 158
            }
159
        } else {
160
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_APP)")
161
 
162
 
15 efrain 163
 
1 efrain 164
        }
165
    }
166
 
15 efrain 167
    private func createTableUserNotification() -> Void
1 efrain 168
    {
169
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_NOTIFICATION + "("
170
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " INTEGER NOT NULL, "
171
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " TEXT,"
172
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + " TEXT,"
173
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_BODY + " TEXT,"
174
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " TEXT, "
175
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " INTEGER, "
176
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + " TEXT, "
177
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " TEXT, "
178
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON + " TEXT, "
179
        sql = sql + " PRIMARY KEY(`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "`) "
180
        sql = sql + ");"
181
 
182
 
183
 
184
        var statement : OpaquePointer? = nil
185
 
15 efrain 186
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 187
            if sqlite3_step(statement) == SQLITE_DONE {
188
 
189
                let queries = [
14 efrain 190
                    "CREATE INDEX IF NOT EXISTS `idx_user_unotification_id` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "` );",
1 efrain 191
 
14 efrain 192
                    "CREATE INDEX IF NOT EXISTS `idx_user_notification_user_uuid` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + "` );"
1 efrain 193
                ]
194
 
195
                executeMultiQuery(queries: queries)
196
 
197
            } else {
198
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
199
 
15 efrain 200
 
1 efrain 201
            }
202
        } else {
203
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
204
 
15 efrain 205
 
1 efrain 206
        }
207
    }
208
 
15 efrain 209
    private func createTableUserExtended() -> Void
1 efrain 210
    {
211
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_EXTENDED + "("
212
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_UUID + " TEXT UNIQUE, "
213
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + " TEXT,"
214
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_LABEL + " TEXT,"
215
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_VALUE + " TEXT"
216
        sql = sql + ");"
217
 
218
        var statement : OpaquePointer? = nil
219
 
15 efrain 220
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 221
            if sqlite3_step(statement) == SQLITE_DONE {
222
 
223
                let queries = [
14 efrain 224
                    "CREATE INDEX IF NOT EXISTS  `idx_user_extended_company_uuid` ON `" +  Constants.TABLE_USER_EXTENDED + "` (`" +  Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + "` );"
1 efrain 225
                ]
226
 
227
                executeMultiQuery(queries: queries)
228
 
229
            } else {
230
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
231
 
15 efrain 232
 
1 efrain 233
            }
234
        } else {
235
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
236
 
237
 
15 efrain 238
 
1 efrain 239
        }
240
    }
241
 
15 efrain 242
    private func createTableSync() -> Void {
1 efrain 243
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SYNC + "("
244
        sql = sql + Constants.TABLE_SYNC_FIELD_ID +  " INTEGER PRIMARY KEY, "
245
        sql = sql + Constants.TABLE_SYNC_FIELD_TYPE + " INTEGER,"
246
        sql = sql + Constants.TABLE_SYNC_FIELD_DATA + " TEXT"
247
        sql = sql + ");"
248
 
249
        var statement : OpaquePointer? = nil
250
 
15 efrain 251
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 252
            if sqlite3_step(statement) != SQLITE_DONE {
253
                print("No se pudo crear la tabla: \(Constants.TABLE_SYNC)")
254
 
15 efrain 255
 
1 efrain 256
            }
257
        } else {
258
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SYNC)")
259
 
260
 
15 efrain 261
 
1 efrain 262
        }
263
    }
264
 
15 efrain 265
    private func createTableCompany() -> Void  {
1 efrain 266
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_COMPANY + "("
267
        sql = sql + Constants.TABLE_COMPANY_FIELD_UUID + " TEXT UNIQUE, "
268
        sql = sql + Constants.TABLE_COMPANY_FIELD_NAME + " TEXT, "
269
        sql = sql + Constants.TABLE_COMPANY_FIELD_IMAGE + " TEXT "
270
        sql = sql + ");"
271
        var statement : OpaquePointer? = nil
272
 
15 efrain 273
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 274
            if sqlite3_step(statement) == SQLITE_DONE {
275
 
276
                let queries = [
14 efrain 277
                    "CREATE INDEX IF NOT EXISTS `idx_company_company_uuid` ON `" +  Constants.TABLE_COMPANY + "` (`" +  Constants.TABLE_COMPANY_FIELD_UUID + "` );"
1 efrain 278
                ]
279
 
280
                executeMultiQuery(queries: queries)
281
 
282
            } else {
283
                print("No se pudo crear la tabla: \(Constants.TABLE_COMPANY)");
284
 
15 efrain 285
 
1 efrain 286
            }
287
        } else {
288
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_COMPANY)")
289
 
290
 
15 efrain 291
 
1 efrain 292
        }
293
    }
294
 
15 efrain 295
    private func createTableTopic() -> Void  {
1 efrain 296
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_TOPIC + "("
297
        sql = sql + Constants.TABLE_TOPIC_FIELD_UUID + " TEXT UNIQUE, "
298
        sql = sql + Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + " TEXT,"
299
        sql = sql + Constants.TABLE_TOPIC_FIELD_NAME + " TEXT,"
300
        sql = sql + Constants.TABLE_TOPIC_FIELD_DESCRIPTION + " TEXT,"
301
        sql = sql + Constants.TABLE_TOPIC_FIELD_IMAGE + " TEXT,"
302
        sql = sql + Constants.TABLE_TOPIC_FIELD_POSITION + " INTEGER, "
303
        sql = sql + Constants.TABLE_TOPIC_FIELD_ADDED_ON + " TEXT,"
304
        sql = sql + Constants.TABLE_TOPIC_FIELD_UPDATED_ON + " TEXT "
305
        sql = sql + ");"
306
 
307
 
308
        var statement : OpaquePointer? = nil
309
 
15 efrain 310
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 311
            if sqlite3_step(statement) == SQLITE_DONE {
312
 
313
                let queries = [
14 efrain 314
                    "CREATE INDEX IF NOT EXISTS  `idx_topics_company_uuid` ON `" +  Constants.TABLE_TOPIC + "` (`" +  Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + "` );"
1 efrain 315
                ]
316
 
317
                executeMultiQuery(queries: queries)
318
 
319
            } else {
320
                print("No se pudo crear la tabla: \(Constants.TABLE_TOPIC)")
321
 
15 efrain 322
 
1 efrain 323
           }
324
        } else {
325
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_TOPIC)")
326
 
327
 
15 efrain 328
 
1 efrain 329
        }
330
    }
331
 
332
 
15 efrain 333
    private func createTableCapsule() -> Void  {
1 efrain 334
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_CAPSULE + "("
335
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UUID + " TEXT UNIQUE, "
336
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " TEXT,"
337
        sql = sql + Constants.TABLE_CAPSULE_FIELD_NAME + " TEXT,"
338
        sql = sql + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " TEXT,"
339
        sql = sql + Constants.TABLE_CAPSULE_FIELD_IMAGE + " TEXT,"
340
        sql = sql + Constants.TABLE_CAPSULE_FIELD_POSITION + " INTEGER, "
341
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " TEXT, "
342
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " TEXT, "
343
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " INTEGER, "
344
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " INTEGER, "
345
        sql = sql + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " TEXT, "
346
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON  + " TEXT "
347
        sql = sql + ");"
348
 
349
 
350
        var statement : OpaquePointer? = nil
351
 
15 efrain 352
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 353
            if sqlite3_step(statement) == SQLITE_DONE {
354
 
355
                let queries = [
14 efrain 356
                    "CREATE INDEX IF NOT EXISTS `idx_capsules_topic_uuid` ON `" +  Constants.TABLE_CAPSULE + "` (`" +  Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + "` );"
1 efrain 357
 
358
                ]
359
 
360
                executeMultiQuery(queries: queries)
361
 
362
            } else {
363
                print("No se pudo crear la tabla: \(Constants.TABLE_CAPSULE)")
364
 
15 efrain 365
 
1 efrain 366
           }
367
        } else {
368
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_CAPSULE)")
369
 
15 efrain 370
 
1 efrain 371
        }
372
    }
373
 
15 efrain 374
    private func createTableSlide() -> Void {
1 efrain 375
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SLIDE + " ("
376
        sql = sql + Constants.TABLE_SLIDE_FIELD_UUID + " TEXT UNIQUE, "
377
        sql = sql + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + " TEXT,"
378
        sql = sql + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + " TEXT,"
379
        sql = sql + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + " TEXT,"
380
        sql = sql + Constants.TABLE_SLIDE_FIELD_NAME + " TEXT,"
381
        sql = sql + Constants.TABLE_SLIDE_FIELD_DESCRIPTION + " TEXT,"
382
        sql = sql + Constants.TABLE_SLIDE_FIELD_TYPE + " TEXT,"
383
        sql = sql + Constants.TABLE_SLIDE_FIELD_FILE + " TEXT,"
384
        sql = sql + Constants.TABLE_SLIDE_FIELD_BACKGROUND + " TEXT,"
385
        sql = sql + Constants.TABLE_SLIDE_FIELD_POSITION + " INTEGER, "
386
        sql = sql + Constants.TABLE_SLIDE_FIELD_ADDED_ON + " TEXT,"
387
        sql = sql + Constants.TABLE_SLIDE_FIELD_UPDATED_ON + " TEXT);"
388
 
389
 
390
 
391
        var statement : OpaquePointer? = nil
392
 
15 efrain 393
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 394
            if sqlite3_step(statement) == SQLITE_DONE {
395
 
396
                let queries = [
14 efrain 397
                    "CREATE INDEX IF NOT EXISTS `idx_slides_quiz_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + "` );",
1 efrain 398
 
14 efrain 399
                    "CREATE INDEX IF NOT EXISTS  `idx_slides_capsule_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + "` );",
1 efrain 400
 
14 efrain 401
                    "CREATE INDEX IF NOT EXISTS  `idx_slides_topic_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + "` );"
1 efrain 402
 
403
                ]
404
 
405
                executeMultiQuery(queries: queries)
406
 
407
            } else {
408
                print("No se pudo crear la tabla: \(Constants.TABLE_SLIDE)")
409
 
15 efrain 410
 
1 efrain 411
           }
412
        } else {
413
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SLIDE)")
414
 
15 efrain 415
 
1 efrain 416
        }
417
    }
418
 
419
 
15 efrain 420
    private func createTableProgress() -> Void  {
1 efrain 421
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_PROGRESS + " ("
422
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ID + " INTEGER PRIMARY KEY, "
423
        sql = sql + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " TEXT,"
424
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " TEXT,"
425
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " TEXT,"
426
        sql = sql + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " TEXT,"
427
        sql = sql + Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " TEXT,"
428
        sql = sql + Constants.TABLE_PROGRESS_FIELD_PROGRESS + " REAL,"
429
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " INTEGER,"
430
        sql = sql + Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " INTEGER,"
431
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TYPE + " TEXT,"
432
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING  + " INTEGER,"
433
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED  + " INTEGER,"
434
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPLETED  + " INTEGER,"
435
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ADDED_ON  + " TEXT,"
436
        sql = sql + Constants.TABLE_PROGRESS_FIELD_UPDATED_ON  + " TEXT);"
437
 
438
 
439
        print("sql : \(sql)")
440
 
441
 
442
        var statement : OpaquePointer? = nil
443
 
15 efrain 444
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 445
            if sqlite3_step(statement) == SQLITE_DONE {
446
 
447
                let queries = [
14 efrain 448
                    "CREATE INDEX IF NOT EXISTS `idx_progress_topic_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + "` );",
1 efrain 449
 
14 efrain 450
                    "CREATE INDEX IF NOT EXISTS  `idx_progress_capsule_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + "` );",
1 efrain 451
 
14 efrain 452
                    "CREATE INDEX IF NOT EXISTS  `idx_progress_slide_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + "` );",
1 efrain 453
 
14 efrain 454
                    "CREATE INDEX IF NOT EXISTS  `idx_progress_user_uuid` ON `" +  Constants.TABLE_PROGRESS + "` (`" +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + "` );"
1 efrain 455
                ]
456
 
457
                executeMultiQuery(queries: queries)
458
 
459
            } else {
460
                print("No se pudo crear la tabla: \(Constants.TABLE_PROGRESS)")
461
                print(sql)
15 efrain 462
 
1 efrain 463
           }
464
        } else {
465
            print("Fallo la preparación para la creación de la tabla: \(Constants.TABLE_PROGRESS)")
466
 
15 efrain 467
 
1 efrain 468
        }
469
    }
470
 
15 efrain 471
    private func createTableUserLog() -> Void  {
1 efrain 472
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_LOG + "("
473
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ID + " INTEGER PRIMARY KEY, "
474
        sql = sql + Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " TEXT,"
475
        sql = sql + Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + " TEXT,"
476
        sql = sql + Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + " TEXT,"
477
        sql = sql + Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + " TEXT,"
478
        sql = sql + Constants.TABLE_USER_LOG_FIELD_USER_UUID + " TEXT,"
479
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " TEXT,"
480
        sql = sql + Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " TEXT"
481
        sql = sql + ");"
482
 
483
 
484
        var statement : OpaquePointer? = nil
485
 
15 efrain 486
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 487
            if sqlite3_step(statement) == SQLITE_DONE {
488
 
489
                let queries = [
14 efrain 490
                    "CREATE INDEX IF NOT EXISTS `idx_user_log_user_uuid` ON `" +  Constants.TABLE_USER_LOG + "` (`" +  Constants.TABLE_USER_LOG_FIELD_USER_UUID + "` );",
1 efrain 491
 
14 efrain 492
                    "CREATE INDEX IF NOT EXISTS `idx_user_log_added_on` ON `" +  Constants.TABLE_USER_LOG + "` (`" +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON + "` );"
1 efrain 493
                ]
494
 
495
                executeMultiQuery(queries: queries)
496
 
497
            } else {
498
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_LOG)")
499
 
15 efrain 500
 
1 efrain 501
           }
502
        } else {
503
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_USER_LOG)")
504
 
15 efrain 505
 
1 efrain 506
        }
507
    }
508
 
509
 
510
 
15 efrain 511
    private func createTableQuiz() -> Void  {
1 efrain 512
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_QUIZ + "("
513
        sql = sql + Constants.TABLE_QUIZ_FIELD_UUID + " TEXT UNIQUE, "
514
        sql = sql + Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + " TEXT,"
515
        sql = sql + Constants.TABLE_QUIZ_FIELD_NAME + " TEXT,"
516
        sql = sql + Constants.TABLE_QUIZ_FIELD_TEXT + " TEXT,"
517
        sql = sql + Constants.TABLE_QUIZ_FIELD_FAILED + " TEXT,"
518
        sql = sql + Constants.TABLE_QUIZ_FIELD_POINTS + " INTEGER,"
519
        sql = sql + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + " INTEGER, "
520
        sql = sql + Constants.TABLE_QUIZ_FIELD_MAX_TIME + " INTEGER, "
521
        sql = sql + Constants.TABLE_QUIZ_FIELD_ADDED_ON + " TEXT,"
522
        sql = sql + Constants.TABLE_QUIZ_FIELD_UPDATED_ON + " TEXT);"
523
 
524
 
525
        var statement : OpaquePointer? = nil
526
 
15 efrain 527
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 528
            if sqlite3_step(statement) == SQLITE_DONE {
529
 
530
                let queries = [
14 efrain 531
                    "CREATE INDEX IF NOT EXISTS  `idx_quizzes_company_uuid` ON `" +  Constants.TABLE_QUIZ + "` (`" +  Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + "` );"
1 efrain 532
                ]
533
 
534
                executeMultiQuery(queries: queries)
535
 
536
            } else {
537
                print("No se pudo crear la tabla: \(Constants.TABLE_QUIZ)")
538
 
15 efrain 539
 
1 efrain 540
           }
541
        } else {
542
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_QUIZ)")
543
 
15 efrain 544
 
1 efrain 545
        }
546
 
547
    }
548
 
15 efrain 549
    private func createTableQuestion() -> Void  {
1 efrain 550
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_QUESTION + "("
551
        sql = sql + Constants.TABLE_QUESTION_FIELD_UUID + " TEXT UNIQUE, "
552
        sql = sql + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " TEXT,"
553
        sql = sql + Constants.TABLE_QUESTION_FIELD_TEXT + " TEXT,"
554
        sql = sql + Constants.TABLE_QUESTION_FIELD_TYPE + " TEXT,"
555
        sql = sql + Constants.TABLE_QUESTION_FIELD_POINTS + " INTEGER,"
556
        sql = sql + Constants.TABLE_QUESTION_FIELD_POSITION + " INTEGER, "
557
        sql = sql + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " TEXT,"
558
        sql = sql + Constants.TABLE_QUESTION_FIELD_UPDATED_ON + " TEXT);"
559
 
560
        var statement : OpaquePointer? = nil
561
 
15 efrain 562
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 563
            if sqlite3_step(statement) == SQLITE_DONE {
564
 
565
                let queries = [
14 efrain 566
                    "CREATE INDEX IF NOT EXISTS `idx_questions_quiz_uuid` ON " +  Constants.TABLE_QUIZ + "` (`" +  Constants.TABLE_QUIZ_FIELD_UUID + "` );"
1 efrain 567
                ]
568
 
569
                executeMultiQuery(queries: queries)
570
            } else {
571
                print("No se pudo crear la tabla: \(Constants.TABLE_QUESTION)")
572
 
15 efrain 573
 
1 efrain 574
           }
575
        } else {
576
            print("Fallo la preparación de la creación  de la tabla: \(Constants.TABLE_QUESTION)")
577
 
15 efrain 578
 
1 efrain 579
        }
580
    }
581
 
15 efrain 582
    private func createTableAnswer() -> Void {
1 efrain 583
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_ANSWER + "("
584
        sql = sql + Constants.TABLE_ANSWER_FIELD_UUID + " TEXT UNIQUE, "
585
        sql = sql + Constants.TABLE_ANSWER_FIELD_QUESTION_UUID + " TEXT,"
586
        sql = sql + Constants.TABLE_ANSWER_FIELD_TEXT + " TEXT,"
587
        sql = sql + Constants.TABLE_ANSWER_FIELD_POINTS + " INTEGER,"
588
        sql = sql + Constants.TABLE_ANSWER_FIELD_CORRECT + " TEXT, "
589
        sql = sql + Constants.TABLE_ANSWER_FIELD_ADDED_ON + " TEXT, "
590
        sql = sql + Constants.TABLE_ANSWER_FIELD_UPDATED_ON + " TEXT); "
591
 
592
 
593
        var statement : OpaquePointer? = nil
594
 
15 efrain 595
        if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 596
            if sqlite3_step(statement) == SQLITE_DONE {
597
                let queries = [
14 efrain 598
                    "CREATE INDEX IF NOT EXISTS `idx_answers_question_uuid` ON `" +  Constants.TABLE_QUESTION + "` (`" +  Constants.TABLE_QUESTION_FIELD_UUID + "` );"
1 efrain 599
                ]
600
 
601
                executeMultiQuery(queries: queries)
602
 
603
            } else {
604
                print("No se pudo crear la tabla: \(Constants.TABLE_ANSWER)")
605
 
15 efrain 606
 
1 efrain 607
           }
608
        } else {
609
            print("Fallo la preparación para la creación de la tabla: \(Constants.TABLE_ANSWER)")
610
 
15 efrain 611
 
1 efrain 612
        }
613
    }
614
 
615
 
616
 
617
 
618
}