-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSqlite3Unit.cpp
More file actions
161 lines (140 loc) · 3.28 KB
/
Copy pathSqlite3Unit.cpp
File metadata and controls
161 lines (140 loc) · 3.28 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//---------------------------------------------------------------------------
#include "sqlite3.h"
#pragma hdrstop
#include "Sqlite3Unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
std::string DateConvert(int64_t timestamp)
{ //Ôóíêöèÿ ïðåîáðàçóåò âðåìåííóþ ìåòêó èç 64-áèò â ñòðîêó
std::string result;
//timestamp - ýòî êîëè÷åñòâî ìèêðîñåêóíä íà÷èíàÿ ñ 01/01/1601 00:00:00
//Ìàãè÷åñêîå ÷èñëî 11644473600 - ýòî ðàçíèöà â ñåêóíäàõ ìåæäó
//01/01/1601 00:00:00 è 01/01/1970 00:00:00
int64_t unixFormat = (timestamp/1000000) - 11644473600;
time_t datetime = (time_t)unixFormat;
result = ctime(&datetime);
return result;
}
SQLiteHistory::SQLiteHistory()
{
Database = nullptr;
DatabaseOpened = false;
StatementPrepared = false;
Steped = false;
}
bool SQLiteHistory::OpenDatabase(const wchar_t* fileName)
{
int openResult = sqlite3_open16(fileName, &Database);
if(openResult != SQLITE_OK)//åñëè íå ñìîãëè îòêðûòü áàçó äàííûõ
{
sqlite3_close(Database);
DatabaseOpened = false;
return false;
}
// Ïðîâåðÿåì, ÿâëÿåòñÿ ëè îòêðûòûé ôàéë áàçîé äàííûõ èñòîðèè áðàóçåðà
const char* query = "SELECT count(*) FROM urls";
char* errorMessage;
int result = sqlite3_exec(Database, query, NULL, NULL, &errorMessage);
if(result != SQLITE_OK)
{
sqlite3_close(Database);
DatabaseOpened = false;
return false;
}
DatabaseOpened = true;
return true;
}
bool SQLiteHistory::PrepareStatement()
{
if(DatabaseOpened)
{
int execResult = sqlite3_prepare16_v2(Database,
L"SELECT id, url, title, last_visit_time FROM urls",
-1,
&pStatement, NULL);
if(execResult != SQLITE_OK)
{
StatementPrepared = false;
sqlite3_close(Database);
return false;
}
StatementPrepared = true;
return true;
}
return false;
}
bool SQLiteHistory::Step()
{
if(StatementPrepared)
{
int stepResult = sqlite3_step(pStatement);
if(stepResult != SQLITE_ROW)
{
Steped = false;
sqlite3_finalize(pStatement);
return false;
}
Steped = true;
return true;
}
Steped = false;
return false;
}
uint64_t SQLiteHistory::GetId()
{
if(Steped == true)
{
return sqlite3_column_int64(pStatement, 0);
}
return 1;
}
wchar_t* SQLiteHistory::GetUrl()
{
if(Steped == true)
{
return (wchar_t*)sqlite3_column_text16(pStatement, 1);
}
return nullptr;
}
wchar_t* SQLiteHistory::GetTitle()
{
if(Steped == true)
{
return (wchar_t*)sqlite3_column_text16(pStatement, 2);
}
return nullptr;
}
int64_t SQLiteHistory::GetLastVisit()
{
if(Steped == true)
{
return sqlite3_column_int64(pStatement, 3);
}
return 1;
}
bool SQLiteHistory::DeleteEntry(uint64_t Id)
{
char *errmsg; //ïåðåìåííàÿ-óêàçàòåëü êóäà îòïðàâëÿåòñÿ îøèáêà
std::string request = "DELETE FROM urls WHERE id=" + std::to_string(Id);
int execResult = sqlite3_exec(Database, request.c_str(), NULL, 0, &errmsg);
if(execResult != SQLITE_OK)
{
return false;
}
return true;
}
bool SQLiteHistory::ClearHistory()
{
if(DatabaseOpened)
{
char *errmsg; //ïåðåìåííàÿ-óêàçàòåëü êóäà îòïðàâëÿåòñÿ îøèáêà
std::string request = "DELETE FROM urls";
int execResult = sqlite3_exec(Database, request.c_str(), NULL, 0, &errmsg);
if(execResult != SQLITE_OK)
{
return false;
}
return true;
}
return false;
}