Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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