Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 16 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  SyncDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
 
17 efrain 9
import SwiftUI
1 efrain 10
import SQLite3
11
 
12
class SyncDao {
17 efrain 13
    private var database = Environment(\.database).wrappedValue
1 efrain 14
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
17 efrain 15
 
1 efrain 16
    func insert(record : SyncModel) -> Int {
17 efrain 17
        let db = database.open()
1 efrain 18
        let query = "INSERT INTO " + Constants.TABLE_SYNC + " ( " + Constants.TABLE_SYNC_FIELD_TYPE + ", " + Constants.TABLE_SYNC_FIELD_DATA + " ) VALUES (?, ?);"
19
        var statement : OpaquePointer?
20
        var result = 0;
21
 
22
 
23
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
24
 
25
            sqlite3_bind_int(statement, 1, Int32(record.type))
26
            sqlite3_bind_text(statement, 2, record.data , -1, SQLITE_TRANSIENT)
27
           if (sqlite3_step(statement) == SQLITE_DONE) {
16 efrain 28
               result = Int(sqlite3_last_insert_rowid(db))
1 efrain 29
           } else {
30
                print("No se pudo insertar el registro ( type: \(record.type) data: \(record.data)   en la tabla: \(Constants.TABLE_SYNC)")
15 efrain 31
 
1 efrain 32
 
33
           }
34
 
35
        } else {
36
            print("Fallo la preparación del insert en la tabla: \(Constants.TABLE_SYNC)")
15 efrain 37
 
1 efrain 38
        }
39
 
40
        sqlite3_finalize(statement)
41
        return result
42
     }
43
 
44
    func selectOneByType(type: Int) -> SyncModel {
17 efrain 45
        let db = database.open()
1 efrain 46
        var record = SyncModel()
47
 
48
        let query = "SELECT "
49
            + Constants.TABLE_SYNC_FIELD_ID + "  , "
50
            + Constants.TABLE_SYNC_FIELD_TYPE + " , "
51
            + Constants.TABLE_SYNC_FIELD_DATA
52
            + "  FROM " + Constants.TABLE_SYNC + " WHERE type = '\(type)' LIMIT 1; "
53
        var statement : OpaquePointer? = nil
54
 
55
 
56
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
57
            if (sqlite3_step(statement) == SQLITE_ROW) {
58
                record.id = Int(sqlite3_column_int(statement, 0))
59
                record.type = Int(sqlite3_column_int(statement, 1))
60
                record.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
61
 
62
            }
63
        } else {
15 efrain 64
 
1 efrain 65
        }
66
        sqlite3_finalize(statement)
67
        return record
68
    }
69
 
70
 
71
    func countPendingRecords()-> Int {
17 efrain 72
        let db = database.open()
1 efrain 73
        var count = 0
74
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_SYNC
75
        var statement : OpaquePointer? = nil
76
 
77
 
78
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
79
            if(sqlite3_step(statement) == SQLITE_ROW){
80
                count = Int(sqlite3_column_int(statement, 0))
81
            }
82
        } else {
15 efrain 83
 
1 efrain 84
        }
85
        sqlite3_finalize(statement)
86
        return count
87
    }
88
 
89
    func selectBatch()-> [SyncModel] {
17 efrain 90
        let db = database.open()
1 efrain 91
        var records = [SyncModel]()
92
 
93
        var query = "SELECT "
94
        query = query + Constants.TABLE_SYNC_FIELD_ID + "  , "
95
        query = query + Constants.TABLE_SYNC_FIELD_TYPE + " , "
96
        query = query + Constants.TABLE_SYNC_FIELD_DATA
97
        query = query + " FROM " + Constants.TABLE_SYNC
98
        query = query + " ORDER BY " + Constants.TABLE_SYNC_FIELD_ID + " ASC "
99
        query = query + " LIMIT 10; "
100
        var statement : OpaquePointer? = nil
101
 
102
 
103
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
104
            while (sqlite3_step(statement) == SQLITE_ROW) {
105
                var model = SyncModel()
106
                model.id = Int(sqlite3_column_int(statement, 0))
107
                model.type = Int(sqlite3_column_int(statement, 1))
108
                model.data = String(describing: String(cString: sqlite3_column_text(statement, 2)))
109
 
110
                records.append(model)
111
            }
112
        } else {
15 efrain 113
 
1 efrain 114
        }
115
        sqlite3_finalize(statement)
116
        return records
117
    }
118
 
119
    func remove(id : Int) {
17 efrain 120
        let db = database.open()
1 efrain 121
        let query = "DELETE FROM " + Constants.TABLE_SYNC + " WHERE " + Constants.TABLE_SYNC_FIELD_ID + " = " + "\(id) ;"
122
        var statement : OpaquePointer? = nil
123
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
124
            if (sqlite3_step(statement) != SQLITE_DONE) {
125
                print("No se pudo borrar el ID: \(id) de la tabla: \(Constants.TABLE_SYNC)")
15 efrain 126
 
1 efrain 127
            }
128
        } else {
15 efrain 129
 
1 efrain 130
        }
131
        sqlite3_finalize(statement)
132
    }
133
}
134
 
135