summaryrefslogtreecommitdiffstats
path: root/lib/Plugins/SQLite3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Plugins/SQLite3.cpp')
-rw-r--r--lib/Plugins/SQLite3.cpp62
1 files changed, 42 insertions, 20 deletions
diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp
index 645287b..c886ff0 100644
--- a/lib/Plugins/SQLite3.cpp
+++ b/lib/Plugins/SQLite3.cpp
@@ -26,7 +26,8 @@
#include <iostream>
-#define TABLE_NAME "abrt"
+#define ABRT_TABLE "abrt"
+#define SQLITE3_MASTER_TABLE "sqlite_master"
CSQLite3::CSQLite3() :
m_sDBPath("/var/cache/abrt/abrt-db"),
@@ -36,7 +37,7 @@ CSQLite3::CSQLite3() :
bool CSQLite3::Exist(const std::string& pUUID, const std::string& pUID)
{
vector_database_rows_t table;
- GetTable("SELECT "DATABASE_COLUMN_REPORTED" FROM "TABLE_NAME" WHERE "
+ GetTable("SELECT "DATABASE_COLUMN_REPORTED" FROM "ABRT_TABLE" WHERE "
DATABASE_COLUMN_UUID" = '"+pUUID+"' AND "
DATABASE_COLUMN_UID" = '"+pUID+"';", table);
if(table.empty())
@@ -101,22 +102,31 @@ void CSQLite3::GetTable(const std::string& pCommand, vector_database_rows_t& pTa
void CSQLite3::Connect()
{
+ if (!OpenDB())
+ {
+ CreateDB();
+ }
+ if (!CheckTable())
+ {
+ CreateTable();
+ }
+}
+
+bool CSQLite3::OpenDB()
+{
int ret = sqlite3_open_v2(m_sDBPath.c_str(),
&m_pDB,
SQLITE_OPEN_READWRITE,
NULL);
- if(ret == SQLITE_CANTOPEN)
- {
- Create();
- }
- else if (ret != SQLITE_OK)
+ if (ret != SQLITE_OK && ret != SQLITE_CANTOPEN)
{
- throw std::string("SQLite3::Connect(): Could not open database.") + sqlite3_errmsg(m_pDB);
+ throw std::string("SQLite3::CheckDB(): Could not open database. ") + sqlite3_errmsg(m_pDB);
}
+ return ret == SQLITE_OK;
}
-void CSQLite3::Create()
+void CSQLite3::CreateDB()
{
int ret = sqlite3_open_v2(m_sDBPath.c_str(),
&m_pDB,
@@ -124,10 +134,22 @@ void CSQLite3::Create()
NULL);
if(ret != SQLITE_OK)
{
- throw std::string("SQLite3::Create(): Could not create database.") + sqlite3_errmsg(m_pDB);
+ throw std::string("SQLite3::Create(): Could not create database. ") + sqlite3_errmsg(m_pDB);
}
+}
+
+bool CSQLite3::CheckTable()
+{
+ vector_database_rows_t table;
+ GetTable("SELECT NAME FROM "SQLITE3_MASTER_TABLE" "
+ "WHERE TYPE='table' AND NAME='"ABRT_TABLE"';", table);
+
+ return table.size() == 1;
+}
- Exec("CREATE TABLE "TABLE_NAME" ("
+void CSQLite3::CreateTable()
+{
+ Exec("CREATE TABLE "ABRT_TABLE" ("
DATABASE_COLUMN_UUID" VARCHAR NOT NULL,"
DATABASE_COLUMN_UID" VARCHAR NOT NULL,"
DATABASE_COLUMN_DEBUG_DUMP_PATH" VARCHAR NOT NULL,"
@@ -149,7 +171,7 @@ void CSQLite3::Insert(const std::string& pUUID,
{
if (!Exist(pUUID, pUID))
{
- Exec("INSERT INTO "TABLE_NAME"("
+ Exec("INSERT INTO "ABRT_TABLE"("
DATABASE_COLUMN_UUID","
DATABASE_COLUMN_UID","
DATABASE_COLUMN_DEBUG_DUMP_PATH","
@@ -162,7 +184,7 @@ void CSQLite3::Insert(const std::string& pUUID,
}
else
{
- Exec("UPDATE "TABLE_NAME" "
+ Exec("UPDATE "ABRT_TABLE" "
"SET "DATABASE_COLUMN_COUNT" = "DATABASE_COLUMN_COUNT" + 1, "
DATABASE_COLUMN_TIME" = '"+pTime+"' "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
@@ -174,12 +196,12 @@ void CSQLite3::Delete(const std::string& pUUID, const std::string& pUID)
{
if (pUID == "0")
{
- Exec("DELETE FROM "TABLE_NAME" "
+ Exec("DELETE FROM "ABRT_TABLE" "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';");
}
else if (Exist(pUUID, pUID))
{
- Exec("DELETE FROM "TABLE_NAME" "
+ Exec("DELETE FROM "ABRT_TABLE" "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
"AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
}
@@ -193,7 +215,7 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID)
{
if (Exist(pUUID, pUID))
{
- Exec("UPDATE "TABLE_NAME" "
+ Exec("UPDATE "ABRT_TABLE" "
"SET "DATABASE_COLUMN_REPORTED" = 1 "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
"AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
@@ -209,11 +231,11 @@ const vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID)
vector_database_rows_t table;
if (pUID == "0")
{
- GetTable("SELECT * FROM "TABLE_NAME";", table);
+ GetTable("SELECT * FROM "ABRT_TABLE";", table);
}
else
{
- GetTable("SELECT * FROM "TABLE_NAME
+ GetTable("SELECT * FROM "ABRT_TABLE
" WHERE "DATABASE_COLUMN_UID" = '"+pUID+"';",
table);
}
@@ -226,13 +248,13 @@ const database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::
if (pUID == "0")
{
- GetTable("SELECT * FROM "TABLE_NAME" "
+ GetTable("SELECT * FROM "ABRT_TABLE" "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';",
table);
}
else
{
- GetTable("SELECT * FROM "TABLE_NAME" "
+ GetTable("SELECT * FROM "ABRT_TABLE" "
"WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
"AND "DATABASE_COLUMN_UID" = '"+pUID+"';",
table);