From 11045770209cd36a3628862c15bda84c033ba8af Mon Sep 17 00:00:00 2001 From: Baptiste DURAND Date: Sun, 14 Apr 2013 13:42:01 +0200 Subject: [PATCH] Fix WRT Runtime : SQL Issue , remove transaction around CHECK_WIDGET_EXISTENCE + Force transaction BEGIN IMEDIATE + Try catch --- etc/wrt_commons_create_clean_db.sh | 2 - .../db/include/dpl/db/thread_database_support.h | 2 +- modules/widget_dao/dao/widget_dao_read_only.cpp | 64 +++++++++++++--------- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/etc/wrt_commons_create_clean_db.sh b/etc/wrt_commons_create_clean_db.sh index bb8d16e..72e9dd7 100755 --- a/etc/wrt_commons_create_clean_db.sh +++ b/etc/wrt_commons_create_clean_db.sh @@ -36,8 +36,6 @@ function create_db { fi rm -f $dbpath.$name.db-journal - SQL="PRAGMA journal_mode = PERSIST;" - sqlite3 $dbpath.$name.db "$SQL" SQL=".read /usr/share/wrt-engine/"$name"_db.sql" sqlite3 $dbpath.$name.db "$SQL" touch $dbpath.$name.db-journal diff --git a/modules/db/include/dpl/db/thread_database_support.h b/modules/db/include/dpl/db/thread_database_support.h index 52cfb33..8ba1d34 100644 --- a/modules/db/include/dpl/db/thread_database_support.h +++ b/modules/db/include/dpl/db/thread_database_support.h @@ -253,7 +253,7 @@ class ThreadDatabaseSupport : LogPedantic("Transaction is initialized"); TransactionCancel() = false; - (*Connection())->ExecCommand("BEGIN;"); + (*Connection())->ExecCommand("BEGIN IMMEDIATE;"); } } diff --git a/modules/widget_dao/dao/widget_dao_read_only.cpp b/modules/widget_dao/dao/widget_dao_read_only.cpp index 87815fc..0019518 100644 --- a/modules/widget_dao/dao/widget_dao_read_only.cpp +++ b/modules/widget_dao/dao/widget_dao_read_only.cpp @@ -55,10 +55,9 @@ namespace WrtDB { message); \ } -#define CHECK_WIDGET_EXISTENCE(macro_transaction, macro_handle) \ +#define CHECK_WIDGET_EXISTENCE(macro_handle) \ if (!WidgetDAOReadOnly::isWidgetInstalled(macro_handle)) \ { \ - macro_transaction.Commit(); \ LogWarning("Cannot find widget. Handle: " << macro_handle); \ ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist, \ "Cannot find widget. Handle: " << macro_handle); \ @@ -310,8 +309,7 @@ const LogDebug("Getting Localized Info. Handle: " << m_widgetHandle); SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN { - ScopedTransaction transaction(&WrtDatabase::interface()); - CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle) + CHECK_WIDGET_EXISTENCE(m_widgetHandle) WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface()) select->Where( @@ -326,7 +324,6 @@ const result.license = info.Get_widget_license(); result.licenseHref = info.Get_widget_license_href(); - transaction.Commit(); return result; } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info") @@ -337,8 +334,7 @@ DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle); SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN { - ScopedTransaction transaction(&WrtDatabase::interface()); - CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle) + CHECK_WIDGET_EXISTENCE(m_widgetHandle) WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface()) select->Where(Equals(m_widgetHandle)); @@ -355,7 +351,6 @@ DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const feature.pluginId = featureDao.GetPluginHandle(); resultSet.insert(feature); } - transaction.Commit(); return resultSet; } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list") @@ -368,8 +363,7 @@ bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const m_widgetHandle); SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN { - ScopedTransaction transaction(&WrtDatabase::interface()); - CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle) + CHECK_WIDGET_EXISTENCE(m_widgetHandle) WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface()) select->Where(And(Equals(m_widgetHandle), @@ -377,7 +371,6 @@ bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const DPL::FromUTF8String(featureName)))); wrt::WidgetFeature::Select::RowList rows = select->GetRowList(); - transaction.Commit(); return !rows.empty(); } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature") @@ -388,8 +381,7 @@ HostList WidgetDAOReadOnly::getAccessHostList() const LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle); SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN { - ScopedTransaction transaction(&WrtDatabase::interface()); - CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle) + CHECK_WIDGET_EXISTENCE(m_widgetHandle) WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface()) select->Where(Equals(m_widgetHandle)); @@ -399,7 +391,6 @@ HostList WidgetDAOReadOnly::getAccessHostList() const FOREACH(it, values) ret.push_back(DPL::ToUTF8String(*it)); - transaction.Commit(); return ret; } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list") @@ -506,47 +497,68 @@ ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const CertificateChainList WidgetDAOReadOnly::getWidgetCertificate( CertificateSource source) const { - WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface()) - select->Where( - And( + CertificateChainList result; + + SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN + { + + WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface()) + select->Where( + And( Equals(m_widgetHandle), Equals(source))); std::list chainList = select->GetRowList(); - CertificateChainList result; FOREACH(iter, chainList) result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain())); + } + SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to getWidgetCertificate") + return result; } DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const { - WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle); + DbWidgetSize size; + SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN + { WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle); - DbWidgetSize size; size.width = row.Get_widget_width(); size.height = row.Get_widget_height(); LogDebug("Return size wxh = " << (!!size.width ? *size.width : -1) << " x " << (!!size.height ? *size.height : -1)); + } + SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to getPreferredSize") return size; } WidgetType WidgetDAOReadOnly::getWidgetType() const { - WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle); - DPL::OptionalInt result = row.Get_widget_type(); + DPL::OptionalInt result; + SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN + { + WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle); + result = row.Get_widget_type(); + + } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to getWidgetType") + return WidgetType(static_cast(*result)); } WidgetGUID WidgetDAOReadOnly::getGUID() const { - WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle); - return row.Get_widget_id(); + WidgetInfoRow row; + SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN + { + row = getWidgetInfoRow(m_widgetHandle); + + } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to getGUID") + return row.Get_widget_id(); } DPL::OptionalString WidgetDAOReadOnly::getTizenAppId() const @@ -1102,8 +1114,7 @@ void WidgetDAOReadOnly::getAppControlList( LogDebug("Getting getAppControlList. Handle: " << m_widgetHandle); SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN { - ScopedTransaction transaction(&WrtDatabase::interface()); - CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle) + CHECK_WIDGET_EXISTENCE(m_widgetHandle) WRT_DB_SELECT(select, AppControlInfo, &WrtDatabase::interface()) select->Where(Equals(m_widgetHandle)); @@ -1126,7 +1137,6 @@ void WidgetDAOReadOnly::getAppControlList( outAppControlList.push_back(ret); } - transaction.Commit(); } SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get AppControl list") } -- 2.7.4