Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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