summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_database.h13
-rw-r--r--libs/win32/mir_core.libbin466640 -> 467702 bytes
-rw-r--r--libs/win64/mir_core.libbin471552 -> 472636 bytes
-rw-r--r--plugins/AvatarHistory/src/AvatarDlg.cpp5
-rw-r--r--plugins/BasicHistory/src/EventList.cpp6
-rw-r--r--plugins/CmdLine/src/mimcmd_handlers.cpp6
-rw-r--r--plugins/HistoryLinkListPlus/src/linklist.cpp32
-rw-r--r--plugins/HistorySweeperLight/src/historysweeperlight.cpp17
-rwxr-xr-xplugins/Msg_Export/src/options.cpp6
-rw-r--r--plugins/NoHistory/src/dllmain.cpp9
-rw-r--r--plugins/RemovePersonalSettings/src/rps.cpp12
-rw-r--r--plugins/StopSpamPlus/src/utils.cpp5
-rw-r--r--plugins/UserInfoEx/src/ex_import/classExImContactXML.cpp3
-rw-r--r--plugins/UserInfoEx/src/mir_db.cpp3
-rw-r--r--protocols/VKontakte/src/misc.cpp14
-rw-r--r--protocols/VKontakte/src/vk_feed.cpp11
-rw-r--r--protocols/VKontakte/src/vk_history.cpp29
-rw-r--r--src/mir_core/src/db.cpp29
-rw-r--r--src/mir_core/src/mir_core.def5
-rw-r--r--src/mir_core/src/mir_core64.def5
20 files changed, 115 insertions, 95 deletions
diff --git a/include/m_database.h b/include/m_database.h
index c47f3ef872..c3d030ccb9 100644
--- a/include/m_database.h
+++ b/include/m_database.h
@@ -726,6 +726,19 @@ public:
}
};
+class MIR_CORE_EXPORT ECPTR : public MNonCopyable
+{
+ EventCursor *m_cursor;
+ MEVENT m_prevFetched, m_currEvent;
+
+public:
+ ECPTR(EventCursor *_1);
+ ~ECPTR();
+
+ void DeleteEvent();
+ MEVENT FetchNext();
+};
+
class EventIterator
{
EventCursor *cursor;
diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib
index 4353410b14..dab014d3d9 100644
--- a/libs/win32/mir_core.lib
+++ b/libs/win32/mir_core.lib
Binary files differ
diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib
index 30d44a40ef..e6e9573b12 100644
--- a/libs/win64/mir_core.lib
+++ b/libs/win64/mir_core.lib
Binary files differ
diff --git a/plugins/AvatarHistory/src/AvatarDlg.cpp b/plugins/AvatarHistory/src/AvatarDlg.cpp
index 8e696d6cf6..245c58005a 100644
--- a/plugins/AvatarHistory/src/AvatarDlg.cpp
+++ b/plugins/AvatarHistory/src/AvatarDlg.cpp
@@ -410,9 +410,10 @@ int FillAvatarListFromFolder(HWND list, MCONTACT hContact)
int FillAvatarListFromDB(HWND list, MCONTACT hContact)
{
int max_pos = 0;
- BYTE blob[2048];
- for (MEVENT hDbEvent = db_event_first(hContact); hDbEvent; hDbEvent = db_event_next(hContact, hDbEvent)) {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
+ BYTE blob[2048];
dbei.cbBlob = sizeof(blob);
dbei.pBlob = blob;
if (db_event_get(hDbEvent, &dbei) != 0) continue;
diff --git a/plugins/BasicHistory/src/EventList.cpp b/plugins/BasicHistory/src/EventList.cpp
index 834cc025fa..f6d03409dd 100644
--- a/plugins/BasicHistory/src/EventList.cpp
+++ b/plugins/BasicHistory/src/EventList.cpp
@@ -194,8 +194,9 @@ void HistoryEventList::GetTempList(std::list<EventTempIndex>& tempList, bool noF
EventIndex ei;
ti.isExternal = false;
ei.isExternal = false;
- MEVENT hDbEvent = db_event_first(hContact);
- while (hDbEvent != NULL) {
+
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
if (isWndLocal && !IsWindow(m_hWnd))
break;
@@ -207,7 +208,6 @@ void HistoryEventList::GetTempList(std::list<EventTempIndex>& tempList, bool noF
tempList.push_back(ti);
}
}
- hDbEvent = db_event_next(hContact, hDbEvent);
}
if (!noExt) {
diff --git a/plugins/CmdLine/src/mimcmd_handlers.cpp b/plugins/CmdLine/src/mimcmd_handlers.cpp
index 74bfa10f37..7427dc3257 100644
--- a/plugins/CmdLine/src/mimcmd_handlers.cpp
+++ b/plugins/CmdLine/src/mimcmd_handlers.cpp
@@ -1348,12 +1348,13 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
int count = stop - start + 1;
if (count > 0) {
int index = 0;
- MEVENT hEvent = db_event_first(hContact);
+
DBEVENTINFO dbEvent = {};
char message[4096];
dbEvent.pBlob = (PBYTE)message;
- while (hEvent) {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hEvent = pCursor.FetchNext()) {
dbEvent.cbBlob = _countof(message);
if (!db_event_get(hEvent, &dbEvent)) { // if successful call
dbEvent.pBlob[dbEvent.cbBlob] = 0;
@@ -1364,7 +1365,6 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
if (index > stop)
break;
- hEvent = db_event_next(hContact, hEvent);
index++;
}
}
diff --git a/plugins/HistoryLinkListPlus/src/linklist.cpp b/plugins/HistoryLinkListPlus/src/linklist.cpp
index 4715aa8bd2..4b0e97f785 100644
--- a/plugins/HistoryLinkListPlus/src/linklist.cpp
+++ b/plugins/HistoryLinkListPlus/src/linklist.cpp
@@ -65,7 +65,8 @@ static INT_PTR LinkList_Main(WPARAM hContact, LPARAM)
return 0;
}
- MEVENT hEvent = db_event_first(hContact);
+ DB::ECPTR pCursor(DB::Events(hContact));
+ MEVENT hEvent = pCursor.FetchNext();
if (hEvent == NULL) {
MessageBox(nullptr, TXT_EMPTYHISTORY, TXT_PLUGINNAME, (MB_OK | MB_ICONINFORMATION));
return 0;
@@ -73,28 +74,28 @@ static INT_PTR LinkList_Main(WPARAM hContact, LPARAM)
int histCount = db_event_count(hContact), actCount = 0;
- DBEVENTINFO dbe = {};
- dbe.cbBlob = db_event_getBlobSize(hEvent);
- dbe.pBlob = (PBYTE)mir_alloc(dbe.cbBlob + 1);
- db_event_get(hEvent, &dbe);
- dbe.pBlob[dbe.cbBlob] = 0;
-
RECT DesktopRect;
GetWindowRect(GetDesktopWindow(), &DesktopRect);
HWND hWndProgress = CreateWindow(L"Progressbar", TranslateT("Processing history..."), WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, 350, 45, nullptr, nullptr, g_plugin.getInst(), nullptr);
if (hWndProgress == nullptr) {
- mir_free(dbe.pBlob);
MessageBox(nullptr, TranslateT("Could not create window!"), TranslateT("Error"), MB_OK | MB_ICONEXCLAMATION);
return -1;
}
+
SetWindowPos(hWndProgress, HWND_TOP, (int)((DesktopRect.right / 2) - 175), (int)((DesktopRect.bottom / 2) - 22), 0, 0, SWP_NOSIZE);
ShowWindow(hWndProgress, SW_SHOW);
SetForegroundWindow(hWndProgress);
- LISTELEMENT *listStart = (LISTELEMENT*)mir_alloc(sizeof(LISTELEMENT));
+ LISTELEMENT *listStart = (LISTELEMENT *)mir_alloc(sizeof(LISTELEMENT));
memset(listStart, 0, sizeof(LISTELEMENT));
- for (;;) {
+ do {
+ DBEVENTINFO dbe = {};
+ dbe.cbBlob = db_event_getBlobSize(hEvent);
+ dbe.pBlob = (PBYTE)mir_alloc(dbe.cbBlob + 1);
+ db_event_get(hEvent, &dbe);
+ dbe.pBlob[dbe.cbBlob] = 0;
+
if (dbe.eventType == EVENTTYPE_MESSAGE) {
// Call function to find URIs
if (ExtractURI(&dbe, hEvent, listStart) < 0) {
@@ -108,17 +109,10 @@ static INT_PTR LinkList_Main(WPARAM hContact, LPARAM)
actCount++;
if (((int)(((float)actCount / histCount) * 100.00)) % 10 == 0)
SendMessage(hWndProgress, WM_COMMAND, 100, ((int)(((float)actCount / histCount) * 100.00)));
-
- hEvent = db_event_next(hContact, hEvent);
- if (hEvent == NULL)
- break;
mir_free(dbe.pBlob);
- dbe.cbBlob = db_event_getBlobSize(hEvent);
- dbe.pBlob = (PBYTE)mir_alloc(dbe.cbBlob + 1);
- db_event_get(hEvent, &dbe);
- dbe.pBlob[dbe.cbBlob] = 0;
}
- mir_free(dbe.pBlob);
+ while (hEvent = pCursor.FetchNext());
+
SendMessage(hWndProgress, WM_CLOSE, 0, 0);
if (ListCount(listStart) <= 0) {
RemoveList(listStart);
diff --git a/plugins/HistorySweeperLight/src/historysweeperlight.cpp b/plugins/HistorySweeperLight/src/historysweeperlight.cpp
index 7e32d8aa4e..afd9b155bc 100644
--- a/plugins/HistorySweeperLight/src/historysweeperlight.cpp
+++ b/plugins/HistorySweeperLight/src/historysweeperlight.cpp
@@ -140,7 +140,7 @@ void SweepHistoryFromContact(MCONTACT hContact, CriteriaStruct Criteria, BOOL ke
if (eventsCnt == 0)
return;
- BOOL doDelete, unsafe = g_plugin.getByte("UnsafeMode", 0);
+ BOOL unsafe = g_plugin.getByte("UnsafeMode", 0);
BEventData *books, *item, ev = { 0 };
size_t bookcnt, btshift;
@@ -153,7 +153,8 @@ void SweepHistoryFromContact(MCONTACT hContact, CriteriaStruct Criteria, BOOL ke
GetBookmarks(hContact, &books, &bookcnt);
// Get first event
- for (MEVENT hDBEvent = db_event_first(hContact); hDBEvent != NULL; ) {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDBEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
db_event_get(hDBEvent, &dbei);
@@ -161,9 +162,9 @@ void SweepHistoryFromContact(MCONTACT hContact, CriteriaStruct Criteria, BOOL ke
// lPolicy == 1 - for time criterion, lPolicy == 2 - keep N last events, lPolicy == 3 - delete all events
if ((lPolicy == 1 && (unsigned)Criteria.time < dbei.timestamp) || (lPolicy == 2 && Criteria.keep > --eventsCnt)) break;
- doDelete = TRUE;
-
- if (!(dbei.flags & (DBEF_SENT | DBEF_READ)) && keepUnread) doDelete = FALSE; // keep unread events
+ bool doDelete = true;
+ if (!(dbei.flags & (DBEF_SENT | DBEF_READ)) && keepUnread)
+ doDelete = false; // keep unread events
if (bookcnt != 0) { // keep bookmarks
ev.hDBEvent = hDBEvent;
@@ -176,12 +177,8 @@ void SweepHistoryFromContact(MCONTACT hContact, CriteriaStruct Criteria, BOOL ke
}
}
- // find next event
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
if (doDelete)
- db_event_delete(hDBEvent);
-
- hDBEvent = hDBEventNext;
+ pCursor.DeleteEvent();
}
mir_free(books);
diff --git a/plugins/Msg_Export/src/options.cpp b/plugins/Msg_Export/src/options.cpp
index 932f9f3778..0d795588bf 100755
--- a/plugins/Msg_Export/src/options.cpp
+++ b/plugins/Msg_Export/src/options.cpp
@@ -146,11 +146,9 @@ void __cdecl exportContactsMessages(ExportDialogData *data)
list<CLDBEvent> &rclCurList = AllEvents[GetFilePathFromUser(hContact)];
- MEVENT hDbEvent = db_event_first(hContact);
- while (hDbEvent) {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext())
rclCurList.push_back(CLDBEvent(hContact, hDbEvent));
- hDbEvent = db_event_next(hContact, hDbEvent);
- }
SendMessage(hProg, PBM_SETPOS, nCur, 0);
RedrawWindow(hDlg, nullptr, nullptr, RDW_ALLCHILDREN | RDW_UPDATENOW);
diff --git a/plugins/NoHistory/src/dllmain.cpp b/plugins/NoHistory/src/dllmain.cpp
index 21bdc3dec3..4f51522157 100644
--- a/plugins/NoHistory/src/dllmain.cpp
+++ b/plugins/NoHistory/src/dllmain.cpp
@@ -89,12 +89,9 @@ void RemoveReadEvents(MCONTACT hContact = 0)
void RemoveAllEvents(MCONTACT hContact)
{
- MEVENT hDBEvent = db_event_first(hContact);
- while(hDBEvent) {
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
- db_event_delete(hDBEvent);
- hDBEvent = hDBEventNext;
- }
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (pCursor.FetchNext())
+ pCursor.DeleteEvent();
}
void CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD)
diff --git a/plugins/RemovePersonalSettings/src/rps.cpp b/plugins/RemovePersonalSettings/src/rps.cpp
index 4b274a6a9a..91a1c56cd8 100644
--- a/plugins/RemovePersonalSettings/src/rps.cpp
+++ b/plugins/RemovePersonalSettings/src/rps.cpp
@@ -363,17 +363,13 @@ void RemoveUsers()
hContact = db_find_first();
while (hContact != NULL) {
db_delete_contact(hContact);
-
hContact = db_find_first();
}
- // Delete events for contacts not in list
- MEVENT hDbEvent = db_event_first(0);
-
- while (hDbEvent != NULL) {
- db_event_delete(hDbEvent);
- hDbEvent = db_event_first(0);
- }
+ // Delete events from system history
+ DB::ECPTR pCursor(DB::Events(0));
+ while (pCursor.FetchNext())
+ pCursor.DeleteEvent();
// Now delete groups
DeleteSettingEx("CListGroups", nullptr);
diff --git a/plugins/StopSpamPlus/src/utils.cpp b/plugins/StopSpamPlus/src/utils.cpp
index e01f73802e..427495026c 100644
--- a/plugins/StopSpamPlus/src/utils.cpp
+++ b/plugins/StopSpamPlus/src/utils.cpp
@@ -14,8 +14,8 @@ tstring& GetDlgItemString(HWND hwnd, int id)
bool IsExistMyMessage(MCONTACT hContact)
{
- MEVENT hDbEvent = db_event_first(hContact);
- while (hDbEvent) {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
if (db_event_get(hDbEvent, &dbei))
break;
@@ -26,7 +26,6 @@ bool IsExistMyMessage(MCONTACT hContact)
// ...let the event go its way
return true;
}
- hDbEvent = db_event_next(hContact, hDbEvent);
}
return false;
}
diff --git a/plugins/UserInfoEx/src/ex_import/classExImContactXML.cpp b/plugins/UserInfoEx/src/ex_import/classExImContactXML.cpp
index 735e2b71d3..bc50caf32e 100644
--- a/plugins/UserInfoEx/src/ex_import/classExImContactXML.cpp
+++ b/plugins/UserInfoEx/src/ex_import/classExImContactXML.cpp
@@ -390,7 +390,8 @@ BYTE CExImContactXML::ExportEvents()
int dwNumEventsAdded = 0;
// read out all events for the current contact
- for (MEVENT hDbEvent = db_event_first(_hContact); hDbEvent != NULL; hDbEvent = db_event_next(_hContact, hDbEvent)) {
+ DB::ECPTR pCursor(DB::Events(_hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
if (DB::Event::GetInfoWithData(hDbEvent, &dbei))
continue;
diff --git a/plugins/UserInfoEx/src/mir_db.cpp b/plugins/UserInfoEx/src/mir_db.cpp
index 9b4c936e9d..cbd411f569 100644
--- a/plugins/UserInfoEx/src/mir_db.cpp
+++ b/plugins/UserInfoEx/src/mir_db.cpp
@@ -34,7 +34,8 @@ namespace Contact {
DWORD WhenAdded(DWORD dwUIN, LPCSTR)
{
DBEVENTINFO dbei = {};
- for (MEVENT edbe = db_event_first(NULL); edbe != NULL; edbe = db_event_next(NULL, edbe)) {
+ DB::ECPTR pCursor(DB::Events(0));
+ while (MEVENT edbe = pCursor.FetchNext()) {
// get eventtype and compare
if (!DB::Event::GetInfo(edbe, &dbei) && dbei.eventType == EVENTTYPE_ADDED) {
if (!DB::Event::GetInfoWithData(edbe, &dbei)) {
diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp
index e5acc0d84f..82cf1fb737 100644
--- a/protocols/VKontakte/src/misc.cpp
+++ b/protocols/VKontakte/src/misc.cpp
@@ -722,19 +722,13 @@ int CVkProto::IsHystoryMessageExist(MCONTACT hContact)
if (!hContact)
return 0;
- MEVENT hDBEvent = db_event_first(hContact);
-
- if (!hDBEvent)
- return 0;
-
- do {
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
- db_event_get(hDBEvent, &dbei);
+ db_event_get(hDbEvent, &dbei);
if (dbei.eventType != VK_USER_DEACTIVATE_ACTION)
return 1;
-
- hDBEvent = db_event_next(hContact, hDBEvent);
- } while (hDBEvent);
+ }
return -1;
}
diff --git a/protocols/VKontakte/src/vk_feed.cpp b/protocols/VKontakte/src/vk_feed.cpp
index ed39bd871e..d2e92ec6f6 100644
--- a/protocols/VKontakte/src/vk_feed.cpp
+++ b/protocols/VKontakte/src/vk_feed.cpp
@@ -860,13 +860,12 @@ void CVkProto::NewsClearHistory()
return;
time_t tTime = time(0) - m_vkOptions.iNewsAutoClearHistoryInterval;
- MEVENT hDBEvent = db_event_first(hContact);
- while (hDBEvent) {
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
+
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
- db_event_get(hDBEvent, &dbei);
+ db_event_get(hDbEvent, &dbei);
if (dbei.timestamp < tTime)
- db_event_delete(hDBEvent);
- hDBEvent = hDBEventNext;
+ pCursor.DeleteEvent();
}
} \ No newline at end of file
diff --git a/protocols/VKontakte/src/vk_history.cpp b/protocols/VKontakte/src/vk_history.cpp
index aa5286312b..3e7a05a8e7 100644
--- a/protocols/VKontakte/src/vk_history.cpp
+++ b/protocols/VKontakte/src/vk_history.cpp
@@ -38,12 +38,9 @@ INT_PTR __cdecl CVkProto::SvcGetAllServerHistoryForContact(WPARAM hContact, LPAR
setByte(hContact, "ActiveHistoryTask", 1);
- MEVENT hDBEvent = db_event_first(hContact);
- while (hDBEvent) {
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
- db_event_delete(hDBEvent);
- hDBEvent = hDBEventNext;
- }
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (pCursor.FetchNext())
+ pCursor.DeleteEvent();
m_bNotifyForEndLoadingHistory = true;
@@ -70,12 +67,9 @@ INT_PTR __cdecl CVkProto::SvcGetAllServerHistory(WPARAM, LPARAM)
break;
setByte(hContact, "ActiveHistoryTask", 1);
- MEVENT hDBEvent = db_event_first(hContact);
- while (hDBEvent) {
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
- db_event_delete(hDBEvent);
- hDBEvent = hDBEventNext;
- }
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (pCursor.FetchNext())
+ pCursor.DeleteEvent();
{
mir_cslock lck(m_csLoadHistoryTask);
@@ -86,7 +80,6 @@ INT_PTR __cdecl CVkProto::SvcGetAllServerHistory(WPARAM, LPARAM)
db_unset(hContact, m_szModuleName, "lastmsgid");
GetServerHistory(hContact, 0, MAXHISTORYMIDSPERONE, 0, 0);
-
}
return 1;
@@ -105,14 +98,12 @@ void CVkProto::GetServerHistoryLastNDay(MCONTACT hContact, int NDay)
time_t tTime = time(0) - 60 * 60 * 24 * NDay;
if (NDay > 3) {
- MEVENT hDBEvent = db_event_first(hContact);
- while (hDBEvent) {
- MEVENT hDBEventNext = db_event_next(hContact, hDBEvent);
+ DB::ECPTR pCursor(DB::Events(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
- db_event_get(hDBEvent, &dbei);
+ db_event_get(hDbEvent, &dbei);
if (dbei.timestamp > tTime && dbei.eventType != VK_USER_DEACTIVATE_ACTION)
- db_event_delete(hDBEvent);
- hDBEvent = hDBEventNext;
+ pCursor.DeleteEvent();
}
{
diff --git a/src/mir_core/src/db.cpp b/src/mir_core/src/db.cpp
index 50df1e3e83..62fd662b35 100644
--- a/src/mir_core/src/db.cpp
+++ b/src/mir_core/src/db.cpp
@@ -453,6 +453,35 @@ MIR_CORE_DLL(DB::EventCursor*) DB::EventsRev(MCONTACT hContact, MEVENT iStartEve
return (currDb == nullptr) ? 0 : currDb->EventCursorRev(hContact, iStartEvent);
}
+DB::ECPTR::ECPTR(EventCursor *_pCursor) :
+ m_cursor(_pCursor),
+ m_prevFetched(-1),
+ m_currEvent(0)
+{
+}
+
+DB::ECPTR::~ECPTR()
+{
+ delete m_cursor;
+}
+
+void DB::ECPTR::DeleteEvent()
+{
+ m_prevFetched = m_cursor->FetchNext();
+ db_event_delete(m_currEvent);
+}
+
+MEVENT DB::ECPTR::FetchNext()
+{
+ if (m_prevFetched != -1) {
+ m_currEvent = m_prevFetched;
+ m_prevFetched = -1;
+ }
+ else m_currEvent = m_cursor->FetchNext();
+
+ return m_currEvent;
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
// misc functions
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def
index a89c1757ff..6ccd0c16b5 100644
--- a/src/mir_core/src/mir_core.def
+++ b/src/mir_core/src/mir_core.def
@@ -1466,3 +1466,8 @@ XmlGetChildText @1645
?begin@EventCursor@DB@@QAEIXZ @1690 NONAME
?end@EventCursor@DB@@QAEIXZ @1691 NONAME
TimeZone_GetSystemTime @1692
+??0ECPTR@DB@@QAE@PAVEventCursor@1@@Z @1693 NONAME
+??1ECPTR@DB@@QAE@XZ @1694 NONAME
+??4EventCursor@DB@@QAEAAV01@ABV01@@Z @1695 NONAME
+?DeleteEvent@ECPTR@DB@@QAEXXZ @1696 NONAME
+?FetchNext@ECPTR@DB@@QAEIXZ @1697 NONAME
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def
index e98319e623..9779067440 100644
--- a/src/mir_core/src/mir_core64.def
+++ b/src/mir_core/src/mir_core64.def
@@ -1466,3 +1466,8 @@ XmlGetChildText @1645
?begin@EventCursor@DB@@QEAAIXZ @1690 NONAME
?end@EventCursor@DB@@QEAAIXZ @1691 NONAME
TimeZone_GetSystemTime @1692
+??0ECPTR@DB@@QEAA@PEAVEventCursor@1@@Z @1693 NONAME
+??1ECPTR@DB@@QEAA@XZ @1694 NONAME
+??4EventCursor@DB@@QEAAAEAV01@AEBV01@@Z @1695 NONAME
+?DeleteEvent@ECPTR@DB@@QEAAXXZ @1696 NONAME
+?FetchNext@ECPTR@DB@@QEAAIXZ @1697 NONAME