-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDatabase.swift
107 lines (83 loc) · 2.95 KB
/
Database.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// Database.swift
// foodTracker
//
// Created by Joey Lieb on 7/24/23.
//
import Foundation
import SQLite3
class Database {
var db: OpaquePointer?
var dbPath = "Tags.sqlite"
init() {
db = openDatabase()
}
private func openDatabase() -> OpaquePointer?{
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(dbPath)
var db:OpaquePointer? = nil
if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
print("Error opening database")
return nil
} else {
print("Created database")
return db
}
}
private func createTable() {
let tableString = "CREATE TABLE IF NOT EXISTS Tags(id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT)"
var tableStatement:OpaquePointer? = nil
if sqlite3_prepare_v2(db, tableString, -1, &tableStatement, nil) == SQLITE_OK {
if sqlite3_step(tableStatement) == SQLITE_DONE {
print("table created")
} else {
print("failed to make table")
}
}
sqlite3_finalize(tableStatement)
}
public func createTag(tag:String){
let tags = getAllTags()
for tagContent in tags {
if tagContent == tag {
return
}
}
let insertStatement = "INSERT INTO Tags (content) VALUES (?)"
var stmt: OpaquePointer?
print(tag)
if sqlite3_prepare_v2(db, insertStatement, -1, &stmt, nil) == SQLITE_OK {
sqlite3_bind_text(stmt, 1, (tag as NSString).utf8String, -1, nil)
if sqlite3_step(stmt) == SQLITE_DONE {
print("Sucessfully inserted row")
} else {
print("Failed to insert")
}
}
sqlite3_finalize(stmt)
}
public func getAllTags() -> Array<String> {
var array:Array<String> = []
let query = "SELECT * FROM Tags"
var stmt:OpaquePointer?
if sqlite3_prepare_v2(db, query, -1, &stmt, nil) == SQLITE_OK{
while sqlite3_step(stmt) == SQLITE_ROW{
let content = String(describing: String(cString: sqlite3_column_text(stmt, 1)))
array.append(content)
print("Query Result\n\(content)")
}
} else {
print("Could not prepare statement")
}
sqlite3_finalize(stmt)
return array
}
public func clearDatabase(){
let query = "DELETE FROM Tags WHERE content LIKE ''"
var stmt:OpaquePointer?
if sqlite3_prepare_v2(db, query, -1, &stmt, nil) == SQLITE_OK {
if sqlite3_step(stmt) == SQLITE_DONE {
print("Cleared Database")
}
}
}
}