Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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