Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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