- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIndexDatabase.cpp
More file actions
Latest commit
161 lines (133 loc) · 3.69 KB
/
Copy pathIndexDatabase.cpp
File metadata and controls
161 lines (133 loc) · 3.69 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
159
160
161
#include"IndexDatabase.h"
#include<QVariant>
#include"ChineseLetterHelper.h"
IndexDatabase::IndexDatabase(QString name)
{
m_database = QSqlDatabase::addDatabase("QSQLITE",name);
m_database.setDatabaseName("IndexCache.db");
}
IndexDatabase::IndexDatabase(QString conName, QString dbName)
{
m_database = QSqlDatabase::addDatabase("QSQLITE",conName);
m_database.setDatabaseName(dbName);
}
IndexDatabase::~IndexDatabase()
{
QString connectionName = m_database.connectionName();
m_database.close();
m_database = QSqlDatabase();
QSqlDatabase::removeDatabase(connectionName);
}
boolIndexDatabase::load()
{
if (!m_database.open())
{
returnfalse;
}
QStringList tableList = m_database.tables();
if (tableList.isEmpty())
{
QSqlQuery query(m_database);
// Windows 沿用发布版的原始结构,升级零影响;Linux 为新平台,额外存图标与
// .desktop 路径,两套结构互不干扰。
#ifdef Q_OS_LINUX
constchar* createSql = "create table program(id integer primary key autoincrement,pyname text,name text,path text,iconpath text,desktoppath text)";
#else
constchar* createSql = "create table program(id integer primary key autoincrement,pyname text,name text,path text)";
#endif
if (!query.exec(createSql))
{
returnfalse;
}
}
returntrue;
}
boolIndexDatabase::insert(ProgramInfo& info)
{
QSqlQuery query(m_database);
#ifdef Q_OS_LINUX
QString strQuery = QString("insert into program values(null,\"%1\",\"%2\",\"%3\",\"%4\",\"%5\")").
arg(info.pyname).arg(info.name).arg(info.path).arg(info.iconPath).arg(info.desktopPath);
#else
QString strQuery = QString("insert into program values(null,\"%1\",\"%2\",\"%3\")").
arg(info.pyname).arg(info.name).arg(info.path);
#endif
if (!query.exec(strQuery))
{
returnfalse;
}
returntrue;
}
boolIndexDatabase::insert(QVector<ProgramInfo> &infos)
{
if (!m_database.transaction())
{
returnfalse;
}
foreach (ProgramInfo info,infos)
{
insert(info);
}
if (!m_database.commit())
{
returnfalse;
}
returntrue;
}
boolIndexDatabase::query(QString querystr, QVector<ProgramInfo> &vecInfo)
{
QString pyStr = ChineseLetterHelper::GetFirstLetters(querystr);
QSqlQuery query(m_database);
query.setForwardOnly(true);
QString strQuery = "select * from program where pyname like \"";
for (int i = 0; i <pyStr.length(); i++)
{
QChar c = pyStr[i];
strQuery = strQuery + QString("%%%1").arg(c);
}
strQuery = strQuery + "%%\"";
if (!query.exec(strQuery))
{
returnfalse;
}
while(query.next())
{
ProgramInfo info;
info.pyname = query.value(1).toString();
info.name = query.value(2).toString();
info.path = query.value(3).toString();
#ifdef Q_OS_LINUX
info.iconPath = query.value(4).toString();
info.desktopPath = query.value(5).toString();
#endif
vecInfo.append(info);
}
returntrue;
}
boolIndexDatabase::clear()
{
QSqlQuery query(m_database);
QString strQuery = "delete from program";
if (!query.exec(strQuery))
{
returnfalse;
}
strQuery = "update sqlite_sequence set seq = 0 where name ='program'";
if (!query.exec(strQuery))
{
returnfalse;
}
returntrue;
}
IndexDatabase* GetIndexDatabase()
{
static IndexDatabase* indexdb = nullptr;
staticbool s_initialed = false;
if (!s_initialed)
{
s_initialed = true;
indexdb = newIndexDatabase("MainQuery");
indexdb->load();
}
return indexdb;
}