summaryrefslogtreecommitdiff
path: root/lib/output/pq/updateDatabase.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-06-12 19:21:22 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2021-06-12 19:21:22 +0100
commitde6ac08985252e7b5d36959896386a414e590d15 (patch)
tree60abba81244c4aa484660b6ae15d7b6f4379f8b1 /lib/output/pq/updateDatabase.cpp
parentSimplify and allow offset when creating objects from rows (diff)
downloadmygrate-de6ac08985252e7b5d36959896386a414e590d15.tar.bz2
mygrate-de6ac08985252e7b5d36959896386a414e590d15.tar.xz
mygrate-de6ac08985252e7b5d36959896386a414e590d15.zip
Load schema and config etc from target DB
Diffstat (limited to 'lib/output/pq/updateDatabase.cpp')
-rw-r--r--lib/output/pq/updateDatabase.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/output/pq/updateDatabase.cpp b/lib/output/pq/updateDatabase.cpp
index 352517e..8b4d5e3 100644
--- a/lib/output/pq/updateDatabase.cpp
+++ b/lib/output/pq/updateDatabase.cpp
@@ -6,11 +6,20 @@
#include <helpers.h>
#include <input/replStream.h>
#include <memory>
+#include <output/pq/sql/selectColumns.h>
#include <output/pq/sql/selectSource.h>
+#include <output/pq/sql/selectTables.h>
#include <stdexcept>
namespace MyGrate::Output::Pq {
- UpdateDatabase::UpdateDatabase(const char * const str, uint64_t s) : PqConn {str}, source {s} { }
+ UpdateDatabase::UpdateDatabase(const char * const str, uint64_t s) : PqConn {str}, source {s}
+ {
+ auto trecs = output::pq::sql::selectTables::execute(this, source);
+ auto crecs = output::pq::sql::selectColumns::execute(this, source);
+ for (auto t {0U}; t < trecs->rows(); t++) {
+ tables.emplace(trecs->at(t, 0), std::make_unique<TableDef>(*crecs, trecs->at(t, 0)));
+ }
+ }
EventSourceBasePtr
UpdateDatabase::getSource()
@@ -19,4 +28,13 @@ namespace MyGrate::Output::Pq {
verify<std::runtime_error>(srcrec->rows() == 1, "Wrong number of source config rows");
return (*srcrec)[0].create<Input::ReplicationStream, 7>();
}
+
+ TableDef::TableDef(const RecordSet & crecs, std::string_view name)
+ {
+ for (auto c {0U}; c < crecs.rows(); c++) {
+ if (crecs.at(c, 0) == name) {
+ columns.emplace_back(crecs[c].create<ColumnDef, 3, 1>());
+ }
+ }
+ }
}