summaryrefslogtreecommitdiff
path: root/lib/output
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output')
-rw-r--r--lib/output/pq/updateDatabase.cpp30
-rw-r--r--lib/output/pq/updateDatabase.h3
2 files changed, 30 insertions, 3 deletions
diff --git a/lib/output/pq/updateDatabase.cpp b/lib/output/pq/updateDatabase.cpp
index 232e8f9..ea8797b 100644
--- a/lib/output/pq/updateDatabase.cpp
+++ b/lib/output/pq/updateDatabase.cpp
@@ -27,6 +27,8 @@
#include <streamSupport.h>
namespace MyGrate::Output::Pq {
+ constexpr uint8_t STANDALONE {1};
+
#ifndef __cpp_aggregate_paren_init
ColumnDef::ColumnDef(std::string n, std::size_t o, bool p) : name {std::move(n)}, ordinal(o), is_pk(p) { }
#endif
@@ -266,14 +268,18 @@ namespace MyGrate::Output::Pq {
void
UpdateDatabase::beforeEvent(const MariaDB_Event_Ptr &)
{
- beginTx();
+ if (!intx) {
+ beginTx();
+ }
}
void
UpdateDatabase::afterEvent(const MariaDB_Event_Ptr & e)
{
- output::pq::sql::updateSourcePosition::execute(this, e->next_event_pos, source);
- commitTx();
+ if (!intx) {
+ output::pq::sql::updateSourcePosition::execute(this, e->next_event_pos, source);
+ commitTx();
+ }
}
void
@@ -401,4 +407,22 @@ namespace MyGrate::Output::Pq {
afterEvent(e);
}
}
+
+ void
+ UpdateDatabase::gtid(MariaDB_Event_Ptr e)
+ {
+ beforeEvent(e);
+ if (!(e->event.gtid.flags & STANDALONE)) {
+ intx = true;
+ }
+ afterEvent(e);
+ }
+
+ void
+ UpdateDatabase::xid(MariaDB_Event_Ptr e)
+ {
+ beforeEvent(e);
+ intx = false;
+ afterEvent(e);
+ }
}
diff --git a/lib/output/pq/updateDatabase.h b/lib/output/pq/updateDatabase.h
index d2b4872..716d7f6 100644
--- a/lib/output/pq/updateDatabase.h
+++ b/lib/output/pq/updateDatabase.h
@@ -59,6 +59,8 @@ namespace MyGrate::Output::Pq {
void insertRow(MariaDB_Event_Ptr) override;
void tableMap(MariaDB_Event_Ptr) override;
void rotate(MariaDB_Event_Ptr) override;
+ void gtid(MariaDB_Event_Ptr) override;
+ void xid(MariaDB_Event_Ptr) override;
const uint64_t source;
const std::string schema;
@@ -81,6 +83,7 @@ namespace MyGrate::Output::Pq {
Tables tables;
Tables::const_iterator selected;
MariaDB_Event_Ptr table_map;
+ bool intx {false};
};
}