Fix WRT Runtime : SQL Issue , remove transaction around CHECK_WIDGET_EXISTENCE +... 01/3601/1
authorBaptiste DURAND <baptiste.durand@eurogiciel.fr>
Sun, 14 Apr 2013 11:42:01 +0000 (13:42 +0200)
committerRusty Lynch <rusty.lynch@intel.com>
Tue, 21 May 2013 00:17:18 +0000 (17:17 -0700)
etc/wrt_commons_create_clean_db.sh
modules/db/include/dpl/db/thread_database_support.h
modules/widget_dao/dao/widget_dao_read_only.cpp

index bb8d16ed97c07747a551824a74f058fc760c2ee0..72e9dd7c0341b9dd24325c016ee444e812515c49 100755 (executable)
@@ -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
index 52cfb33592d90eb7e62dc117a3a5a3c39a0f5ffe..8ba1d3474dd06cf951f96c8b214d048f03b5968a 100644 (file)
@@ -253,7 +253,7 @@ class ThreadDatabaseSupport :
             LogPedantic("Transaction is initialized");
 
             TransactionCancel() = false;
-            (*Connection())->ExecCommand("BEGIN;");
+            (*Connection())->ExecCommand("BEGIN IMMEDIATE;");
         }
     }
 
index 87815fc4d7bdb3f7f84a701ee8542fd5dedcc8a7..0019518628725077a2e2bfcde96fa2263db60027 100644 (file)
@@ -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<WidgetFeature::app_id>(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<wrt::WidgetFeature::app_id>(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<WidgetAccessHost::app_id>(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<WidgetCertificate::app_id>(m_widgetHandle),
             Equals<WidgetCertificate::cert_source>(source)));
 
     std::list<WidgetCertificate::Row> 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<AppType>(*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<AppControlInfo::app_id>(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")
 }