Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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