summaryrefslogtreecommitdiff
path: root/plugins/Dbx_mdbx
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-12-07 12:58:27 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-12-07 12:58:27 +0300
commit0f8396dd2266cb169797d24bb738d9ff45a003d5 (patch)
tree55f90778eac68bc5b8b1efa78869cf92ac1e2a7d /plugins/Dbx_mdbx
parent8343b85b097da18cc7d4b17e598f2d5a9003a7fe (diff)
Dbx_mdbx: we don't have to bother db if we're trying to delete missing setting
Diffstat (limited to 'plugins/Dbx_mdbx')
-rw-r--r--plugins/Dbx_mdbx/src/dbevents.cpp2
-rw-r--r--plugins/Dbx_mdbx/src/dbintf.h6
-rw-r--r--plugins/Dbx_mdbx/src/dbsettings.cpp17
3 files changed, 14 insertions, 11 deletions
diff --git a/plugins/Dbx_mdbx/src/dbevents.cpp b/plugins/Dbx_mdbx/src/dbevents.cpp
index bc16f4f460..203d696b2d 100644
--- a/plugins/Dbx_mdbx/src/dbevents.cpp
+++ b/plugins/Dbx_mdbx/src/dbevents.cpp
@@ -441,7 +441,7 @@ BOOL CDbxMDBX::MarkEventRead(MCONTACT contactID, MEVENT hDbEvent)
///////////////////////////////////////////////////////////////////////////////////////////////////
-MEVENT CDbxMDBX::GetEventById(LPCSTR szModule, LPCSTR szId)
+MEVENT CDbxMDBX::GetEventById(const char *szModule, const char *szId)
{
if (szModule == nullptr || szId == nullptr)
return 0;
diff --git a/plugins/Dbx_mdbx/src/dbintf.h b/plugins/Dbx_mdbx/src/dbintf.h
index 80ffeef3d8..cf3bda9553 100644
--- a/plugins/Dbx_mdbx/src/dbintf.h
+++ b/plugins/Dbx_mdbx/src/dbintf.h
@@ -278,9 +278,9 @@ public:
STDMETHODIMP_(BOOL) EnumModuleNames(DBMODULEENUMPROC pFunc, void *pParam) override;
- STDMETHODIMP_(BOOL) GetContactSettingWorker(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv, int isStatic) override;
+ STDMETHODIMP_(BOOL) GetContactSettingWorker(MCONTACT contactID, const char *szModule, const char *szSetting, DBVARIANT *dbv, int isStatic) override;
STDMETHODIMP_(BOOL) WriteContactSetting(MCONTACT contactID, DBCONTACTWRITESETTING *dbcws) override;
- STDMETHODIMP_(BOOL) DeleteContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting) override;
+ STDMETHODIMP_(BOOL) DeleteContactSetting(MCONTACT contactID, const char *szModule, const char *szSetting) override;
STDMETHODIMP_(BOOL) EnumContactSettings(MCONTACT hContact, DBSETTINGENUMPROC pfnEnumProc, const char *szModule, void *param) override;
STDMETHODIMP_(BOOL) MetaMergeHistory(DBCachedContact *ccMeta, DBCachedContact *ccSub) override;
@@ -291,7 +291,7 @@ public:
STDMETHODIMP_(BOOL) Compact();
STDMETHODIMP_(BOOL) Backup(const wchar_t*);
- STDMETHODIMP_(MEVENT) GetEventById(LPCSTR szModule, LPCSTR szId) override;
+ STDMETHODIMP_(MEVENT) GetEventById(const char *szModule, const char *szId) override;
STDMETHODIMP_(DB::EventCursor *) EventCursor(MCONTACT hContact, MEVENT hDbEvent) override;
STDMETHODIMP_(DB::EventCursor *) EventCursorRev(MCONTACT hContact, MEVENT hDbEvent) override;
diff --git a/plugins/Dbx_mdbx/src/dbsettings.cpp b/plugins/Dbx_mdbx/src/dbsettings.cpp
index 523d7a4801..2d85ef0779 100644
--- a/plugins/Dbx_mdbx/src/dbsettings.cpp
+++ b/plugins/Dbx_mdbx/src/dbsettings.cpp
@@ -99,7 +99,7 @@ void CDbxMDBX::FillSettings()
#define VLT(n) ((n == DBVT_UTF8 || n == DBVT_ENCRYPTED)?DBVT_ASCIIZ:n)
-static bool ValidLookupName(LPCSTR szModule, LPCSTR szSetting)
+static bool ValidLookupName(const char *szModule, const char *szSetting)
{
if (!strcmp(szModule, META_PROTO))
return strcmp(szSetting, "IsSubcontact") && strcmp(szSetting, "ParentMetaID");
@@ -107,7 +107,7 @@ static bool ValidLookupName(LPCSTR szModule, LPCSTR szSetting)
return false;
}
-int CDbxMDBX::GetContactSettingWorker(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv, int isStatic)
+int CDbxMDBX::GetContactSettingWorker(MCONTACT contactID, const char *szModule, const char *szSetting, DBVARIANT *dbv, int isStatic)
{
if (szSetting == nullptr || szModule == nullptr)
return 1;
@@ -363,7 +363,7 @@ BOOL CDbxMDBX::WriteContactSetting(MCONTACT contactID, DBCONTACTWRITESETTING *db
return 0;
}
-BOOL CDbxMDBX::DeleteContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting)
+BOOL CDbxMDBX::DeleteContactSetting(MCONTACT contactID, const char *szModule, const char *szSetting)
{
if (!szModule || !szSetting)
return 1;
@@ -374,7 +374,13 @@ BOOL CDbxMDBX::DeleteContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR
mir_cslock lck(m_csDbAccess);
char *szCachedSettingName = m_cache->GetCachedSetting(szModule, szSetting, moduleNameLen, settingNameLen);
- // it's not a resident variable, delete it from database too
+ // try to remove it from cache first.
+ // if there's nothing, don't try to remove a setting from database
+ auto *pSetting = m_cache->GetCachedValuePtr(contactID, szCachedSettingName, -1);
+ if (pSetting == nullptr)
+ return 1;
+
+ // if it's not a resident variable, delete it from database too
if (szCachedSettingName[-1] == 0) {
DBSettingKey *keyVal = (DBSettingKey*)_alloca(sizeof(DBSettingKey) + settingNameLen);
keyVal->hContact = contactID;
@@ -387,9 +393,6 @@ BOOL CDbxMDBX::DeleteContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR
return 1;
DBFlush();
}
-
- // and don't forget to remove it from cache
- m_cache->GetCachedValuePtr(contactID, szCachedSettingName, -1);
}
// notify