From f1d4d76b1b6a9a4d7102c692e21612c67fd81689 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 8 Jan 2018 10:09:30 +0100 Subject: [PATCH] feat(AbstractDb): add checkTableExists func --- src/db/abstract/abstract-db.cpp | 18 ++++++++++++++++++ src/db/abstract/abstract-db.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/db/abstract/abstract-db.cpp b/src/db/abstract/abstract-db.cpp index 4dbd70786..34d9f0008 100644 --- a/src/db/abstract/abstract-db.cpp +++ b/src/db/abstract/abstract-db.cpp @@ -205,4 +205,22 @@ void AbstractDb::enableForeignKeys (bool status) { #endif // ifdef SOCI_ENABLED } +bool AbstractDb::checkTableExists (const string &table) const { + #ifdef SOCI_ENABLED + L_D(); + soci::session *session = d->dbSession.getBackendSession(); + switch (d->backend) { + case Mysql: + *session << "SHOW TABLES LIKE :table", soci::use(table); + return session->got_data() > 0; + case Sqlite3: + *session << "SELECT name FROM sqlite_master WHERE type='table' AND name=:table", soci::use(table); + return session->got_data() > 0; + } + #endif // ifdef SOCI_ENABLED + + L_ASSERT(false); + return false; +} + LINPHONE_END_NAMESPACE diff --git a/src/db/abstract/abstract-db.h b/src/db/abstract/abstract-db.h index 29bf9be15..09a52f39f 100644 --- a/src/db/abstract/abstract-db.h +++ b/src/db/abstract/abstract-db.h @@ -63,6 +63,8 @@ protected: void enableForeignKeys (bool status); + bool checkTableExists (const std::string &table) const; + private: L_DECLARE_PRIVATE(AbstractDb); L_DISABLE_COPY(AbstractDb);