Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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