Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 17 | Rev 20 | 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
    {
26
        let code = sqlite3_errcode(self.conn)
27
        let message = sqlite3_errmsg(self.conn)
28
        print("sql error code : \(code) messsage : \(String(describing: message))")
29
    }
1 efrain 30
 
19 efrain 31
 
1 efrain 32
 
33
    public func createTables()
34
    {
19 efrain 35
        self.conn = open()
36
        if(self.conn != nil) {
8 efrain 37
            self.createTableApp()
1 efrain 38
            self.createTableSync()
39
            self.createTableProgress()
40
            self.createTableUserLog()
41
            self.createTableCompany()
42
            self.createTableTopic()
43
            self.createTableCapsule()
44
            self.createTableSlide()
45
            self.createTableQuiz()
46
            self.createTableQuestion()
47
            self.createTableAnswer()
48
            self.createTableUserExtended()
49
            self.createTableUserNotification()
50
        }
51
    }
52
 
53
    public func open() -> OpaquePointer? {
54
 
19 efrain 55
        if self.conn == nil {
1 efrain 56
 
57
            let filePath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
58
                .appendingPathComponent(path)
59
 
60
            print("Database FilePath : \(filePath.path)")
61
 
19 efrain 62
            if sqlite3_open(filePath.path, &self.conn) != SQLITE_OK {
1 efrain 63
                print("No se pudo abrir la DB : \(path) ")
19 efrain 64
 
65
                self.printError()
1 efrain 66
                return nil
67
            } else {
19 efrain 68
                return self.conn
1 efrain 69
            }
70
        } else {
19 efrain 71
            return self.conn
1 efrain 72
        }
73
 
74
    }
75
 
19 efrain 76
 
77
 
78
    func executeMultiQuery(queries: [String]) {
1 efrain 79
 
19 efrain 80
 
1 efrain 81
        queries.forEach { query in
82
            var statement : OpaquePointer? = nil
83
 
19 efrain 84
            if sqlite3_prepare_v2(self.conn, query, -1, &statement, nil) == SQLITE_OK {
1 efrain 85
                if sqlite3_step(statement) != SQLITE_DONE {
86
                    print("Fallo la consulta: \(query) ")
19 efrain 87
 
88
                    self.printError()
1 efrain 89
                }
90
            } else {
91
                print("Fallo la preparación: \(query) ")
92
 
19 efrain 93
                self.printError()
94
 
1 efrain 95
            }
96
 
97
        }
98
    }
99
    /*
100
 
101
     var addedOn: String
102
     */
103
 
8 efrain 104
    private func createTableApp()
105
    {
106
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_APP + " ("
107
        sql = sql + Constants.TABLE_APP_FIELD_ID + " INTEGER NOT NULL, "
108
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_UUID + " TEXT, "
109
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_AES + " TEXT, "
110
        sql = sql + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + " TEXT, "
111
        sql = sql + Constants.TABLE_APP_FIELD_USER_UUID + " TEXT, "
112
        sql = sql + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + " TEXT, "
113
        sql = sql + Constants.TABLE_APP_FIELD_USER_LASTNAME + " TEXT, "
114
        sql = sql + Constants.TABLE_APP_FIELD_USER_EMAIL + " TEXT, "
115
        sql = sql + Constants.TABLE_APP_FIELD_USER_IMAGE + " TEXT, "
116
        sql = sql + Constants.TABLE_APP_FIELD_FCM_TOKEN + " TEXT, "
117
        sql = sql + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + " TEXT, "
118
        sql = sql + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + " TEXT, "
119
        sql = sql + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + " TEXT, "
120
        sql = sql + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + " TEXT, "
11 efrain 121
        sql = sql + Constants.TABLE_APP_FIELD_COMPANY_UUID_ACTIVE + " TEXT, "
122
        sql = sql + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + " TEXT, "
17 efrain 123
        sql = sql + Constants.TABLE_APP_FIELD_LAST_CHECK_CHANGES + " TEXT, "
124
        sql = sql + Constants.TABLE_APP_FIELD_URL_EXTERNAL_DOWNLOADED + " TEXT, "
8 efrain 125
        sql = sql + " PRIMARY KEY(`" +  Constants.TABLE_APP_FIELD_ID + "`) "
126
        sql = sql + ");"
127
 
19 efrain 128
 
8 efrain 129
 
19 efrain 130
 
8 efrain 131
        var statement : OpaquePointer? = nil
132
 
19 efrain 133
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
134
            if sqlite3_step(statement) == SQLITE_DONE {
135
 
136
                let queries = [
137
                    "CREATE INDEX `idx_app_id` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_ID + "` );",
138
 
139
                    "CREATE INDEX `idx_app_user_uuid` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_USER_UUID + "` );",
140
 
141
                    "CREATE INDEX `idx_app_device_uuid` ON `" +  Constants.TABLE_APP + "` (`" +  Constants.TABLE_APP_FIELD_DEVICE_UUID + "` );"
142
                ]
143
 
144
                executeMultiQuery(queries: queries)
145
 
146
 
147
            } else {
8 efrain 148
                print("No se pudo crear la tabla: \(Constants.TABLE_APP)")
19 efrain 149
 
150
                self.printError()
8 efrain 151
            }
152
        } else {
153
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_APP)")
154
 
19 efrain 155
            self.printError()
156
 
8 efrain 157
        }
158
    }
159
 
1 efrain 160
    private func createTableUserNotification()
161
    {
162
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_NOTIFICATION + "("
163
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " INTEGER NOT NULL, "
164
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " TEXT,"
165
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + " TEXT,"
166
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_DESCRIPTION + " TEXT,"
167
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " TEXT, "
168
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " INTEGER, "
169
        sql = sql + Constants.TABLE_USER_NOTIFICATION_FIELD_ADDED_ON + " TEXT, "
170
        sql = sql + " PRIMARY KEY(`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "`) "
171
        sql = sql + ");"
172
 
173
 
19 efrain 174
 
1 efrain 175
        var statement : OpaquePointer? = nil
176
 
19 efrain 177
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
178
            if sqlite3_step(statement) == SQLITE_DONE {
179
 
180
                let queries = [
181
                    "CREATE INDEX `idx_user_unotification_id` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_ID + "` );",
182
 
183
                    "CREATE INDEX `idx_user_notification_user_uuid` ON `" +  Constants.TABLE_USER_NOTIFICATION + "` (`" +  Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + "` );"
184
                ]
185
 
186
                executeMultiQuery(queries: queries)
187
 
188
            } else {
1 efrain 189
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
19 efrain 190
 
191
                self.printError()
1 efrain 192
            }
193
        } else {
194
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
19 efrain 195
 
196
            self.printError()
1 efrain 197
        }
198
    }
199
 
200
    private func createTableUserExtended()
201
    {
202
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_USER_EXTENDED + "("
203
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_UUID + " TEXT UNIQUE, "
204
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + " TEXT,"
205
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_LABEL + " TEXT,"
206
        sql = sql + Constants.TABLE_USER_EXTENDED_FIELD_VALUE + " TEXT"
207
        sql = sql + ");"
208
 
209
        var statement : OpaquePointer? = nil
210
 
19 efrain 211
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
212
            if sqlite3_step(statement) == SQLITE_DONE {
213
 
214
                let queries = [
215
                    "CREATE INDEX `idx_user_extended_company_uuid` ON `" +  Constants.TABLE_USER_EXTENDED + "` (`" +  Constants.TABLE_USER_EXTENDED_FIELD_COMPANY_UUID + "` );"
216
                ]
217
 
218
                executeMultiQuery(queries: queries)
219
 
220
            } else {
1 efrain 221
                print("No se pudo crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
19 efrain 222
 
223
                self.printError()
1 efrain 224
            }
225
        } else {
226
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_USER_EXTENDED)")
227
 
19 efrain 228
            self.printError()
229
 
1 efrain 230
        }
231
    }
232
 
233
    private func createTableSync()  {
234
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SYNC + "("
235
        sql = sql + Constants.TABLE_SYNC_FIELD_ID +  " INTEGER PRIMARY KEY, "
236
        sql = sql + Constants.TABLE_SYNC_FIELD_TYPE + " INTEGER,"
237
        sql = sql + Constants.TABLE_SYNC_FIELD_DATA + " TEXT"
238
        sql = sql + ");"
239
 
240
        var statement : OpaquePointer? = nil
241
 
19 efrain 242
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
1 efrain 243
            if sqlite3_step(statement) != SQLITE_DONE {
244
                print("No se pudo crear la tabla: \(Constants.TABLE_SYNC)")
19 efrain 245
 
246
                self.printError()
1 efrain 247
            }
248
        } else {
249
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SYNC)")
250
 
19 efrain 251
            self.printError()
252
 
1 efrain 253
        }
254
    }
255
 
256
    private func createTableCompany()  {
257
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_COMPANY + "("
258
        sql = sql + Constants.TABLE_COMPANY_FIELD_UUID + " TEXT UNIQUE, "
259
        sql = sql + Constants.TABLE_COMPANY_FIELD_NAME + " TEXT, "
260
        sql = sql + Constants.TABLE_COMPANY_FIELD_IMAGE + " TEXT "
261
        sql = sql + ");"
262
        var statement : OpaquePointer? = nil
263
 
19 efrain 264
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
265
            if sqlite3_step(statement) == SQLITE_DONE {
266
 
267
                let queries = [
268
                    "CREATE INDEX `idx_company_company_uuid` ON `" +  Constants.TABLE_COMPANY + "` (`" +  Constants.TABLE_COMPANY_FIELD_UUID + "` );"
269
                ]
270
 
271
                executeMultiQuery(queries: queries)
272
 
273
            } else {
1 efrain 274
                print("No se pudo crear la tabla: \(Constants.TABLE_COMPANY)");
275
 
19 efrain 276
                self.printError()
1 efrain 277
            }
278
        } else {
279
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_COMPANY)")
280
 
19 efrain 281
            self.printError()
282
 
1 efrain 283
        }
284
    }
285
 
286
    private func createTableTopic()  {
287
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_TOPIC + "("
288
        sql = sql + Constants.TABLE_TOPIC_FIELD_UUID + " TEXT UNIQUE, "
289
        sql = sql + Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + " TEXT,"
290
        sql = sql + Constants.TABLE_TOPIC_FIELD_NAME + " TEXT,"
291
        sql = sql + Constants.TABLE_TOPIC_FIELD_DESCRIPTION + " TEXT,"
292
        sql = sql + Constants.TABLE_TOPIC_FIELD_IMAGE + " TEXT,"
293
        sql = sql + Constants.TABLE_TOPIC_FIELD_POSITION + " INTEGER, "
294
        sql = sql + Constants.TABLE_TOPIC_FIELD_ADDED_ON + " TEXT,"
295
        sql = sql + Constants.TABLE_TOPIC_FIELD_UPDATED_ON + " TEXT "
296
        sql = sql + ");"
297
 
19 efrain 298
 
1 efrain 299
        var statement : OpaquePointer? = nil
300
 
19 efrain 301
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
302
            if sqlite3_step(statement) == SQLITE_DONE {
303
 
304
                let queries = [
305
                    "CREATE INDEX `idx_topics_company_uuid` ON `" +  Constants.TABLE_TOPIC + "` (`" +  Constants.TABLE_TOPIC_FIELD_COMPANY_UUID + "` );"
306
                ]
307
 
308
                executeMultiQuery(queries: queries)
309
 
310
            } else {
1 efrain 311
                print("No se pudo crear la tabla: \(Constants.TABLE_TOPIC)")
19 efrain 312
 
313
                self.printError()
1 efrain 314
           }
315
        } else {
316
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_TOPIC)")
19 efrain 317
 
318
 
319
            self.printError()
1 efrain 320
        }
321
    }
322
 
323
 
324
    private func createTableCapsule()  {
325
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_CAPSULE + "("
326
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UUID + " TEXT UNIQUE, "
327
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " TEXT,"
328
        sql = sql + Constants.TABLE_CAPSULE_FIELD_NAME + " TEXT,"
329
        sql = sql + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " TEXT,"
330
        sql = sql + Constants.TABLE_CAPSULE_FIELD_IMAGE + " TEXT,"
331
        sql = sql + Constants.TABLE_CAPSULE_FIELD_POSITION + " INTEGER, "
332
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " TEXT, "
333
        sql = sql + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " TEXT, "
334
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " INTEGER, "
335
        sql = sql + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " INTEGER, "
336
        sql = sql + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " TEXT, "
337
        sql = sql + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON  + " TEXT "
338
        sql = sql + ");"
339
 
19 efrain 340
 
1 efrain 341
        var statement : OpaquePointer? = nil
342
 
19 efrain 343
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
344
            if sqlite3_step(statement) == SQLITE_DONE {
345
 
346
                let queries = [
347
                    "CREATE INDEX `idx_capsules_topic_uuid` ON `" +  Constants.TABLE_CAPSULE + "` (`" +  Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + "` );"
348
 
349
                ]
350
 
351
                executeMultiQuery(queries: queries)
352
 
353
            } else {
1 efrain 354
                print("No se pudo crear la tabla: \(Constants.TABLE_CAPSULE)")
19 efrain 355
 
356
                self.printError()
1 efrain 357
           }
358
        } else {
359
            print("Fallo la preparación de la creación de la tabla: \(Constants.TABLE_CAPSULE)")
19 efrain 360
 
361
            self.printError()
1 efrain 362
        }
363
    }
364
 
365
    private func createTableSlide()  {
366
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_SLIDE + "("
367
        sql = sql + Constants.TABLE_SLIDE_FIELD_UUID + " TEXT UNIQUE, "
368
        sql = sql + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + " TEXT,"
369
        sql = sql + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + " TEXT,"
370
        sql = sql + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + " TEXT,"
371
        sql = sql + Constants.TABLE_SLIDE_FIELD_NAME + " TEXT,"
372
        sql = sql + Constants.TABLE_SLIDE_FIELD_DESCRIPTION + " TEXT,"
373
        sql = sql + Constants.TABLE_SLIDE_FIELD_TYPE + " TEXT,"
374
        sql = sql + Constants.TABLE_SLIDE_FIELD_FILE + " TEXT,"
375
        sql = sql + Constants.TABLE_SLIDE_FIELD_BACKGROUND + " TEXT,"
376
        sql = sql + Constants.TABLE_SLIDE_FIELD_POSITION + " INTEGER, "
377
        sql = sql + Constants.TABLE_SLIDE_FIELD_ADDED_ON + " TEXT,"
378
        sql = sql + Constants.TABLE_SLIDE_FIELD_UPDATED_ON + " TEXT);"
379
 
380
 
19 efrain 381
 
1 efrain 382
        var statement : OpaquePointer? = nil
383
 
19 efrain 384
        if sqlite3_prepare_v2(self.conn, sql, -1, &statement, nil) == SQLITE_OK {
385
            if sqlite3_step(statement) == SQLITE_DONE {
386
 
387
                let queries = [
388
                    "CREATE INDEX `idx_slides_quiz_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + "` );",
389
 
390
                    "CREATE INDEX `idx_slides_capsule_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + "` );",
391
 
392
                    "CREATE INDEX `idx_slides_topic_uuid` ON `" +  Constants.TABLE_SLIDE + "` (`" +  Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + "` );"
393
 
394
                ]
395
 
396
                executeMultiQuery(queries: queries)
397
 
398
            } else {
1 efrain 399
                print("No se pudo crear la tabla: \(Constants.TABLE_SLIDE)")
19 efrain 400
 
401
                self.printError()
1 efrain 402
           }
403
        } else {
404
            print("Fallo la preparación para crear la tabla: \(Constants.TABLE_SLIDE)")
19 efrain 405
 
406
            self.printError()
1 efrain 407
        }
408
    }
409
 
410
 
411
    private func createTableProgress()  {
412
        var sql = "CREATE TABLE IF NOT EXISTS " + Constants.TABLE_PROGRESS + "("
413
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ID + " INTEGER PRIMARY KEY, "
414
        sql = sql + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " TEXT,"
415
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " TEXT,"
416
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " TEXT,"
417
        sql = sql + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " TEXT,"
418
        sql = sql + Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " TEXT,"
419
        sql = sql + Constants.TABLE_PROGRESS_FIELD_PROGRESS + " REAL,"
420
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " INTEGER,"
421
        sql = sql + Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " INTEGER,"
422
        sql = sql + Constants.TABLE_PROGRESS_FIELD_TYPE + " TEXT,"
423
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING  + " INTEGER,"
424
        sql = sql + Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED  + " INTEGER,"
425
        sql = sql + Constants.TABLE_PROGRESS_FIELD_COMPLETED  + " INTEGER,"
426
        sql = sql + Constants.TABLE_PROGRESS_FIELD_ADDED_ON  + " TEXT,"
427
        sql = sql + Constants.TABLE_PROGRESS_FIELD_UPDATED_ON  + " TEXT);"
428
 
19 efrain 429
 
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)")
19 efrain 451
 
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
}