From d74a7b7aec40d83b940dbfe10850734075aa6c5c Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 27 Jun 2021 18:59:21 +0100 Subject: Add an existing table to the config --- lib/output/pq/updateDatabase.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'lib/output/pq/updateDatabase.cpp') diff --git a/lib/output/pq/updateDatabase.cpp b/lib/output/pq/updateDatabase.cpp index 52388be..389d47a 100644 --- a/lib/output/pq/updateDatabase.cpp +++ b/lib/output/pq/updateDatabase.cpp @@ -1,19 +1,25 @@ #include "updateDatabase.h" #include "pqConn.h" +#include "typeMapper.h" #include #include #include #include #include +#include #include +#include #include #include +#include #include +#include #include #include #include #include #include +#include namespace MyGrate::Output::Pq { UpdateDatabase::UpdateDatabase(const char * const str, uint64_t s) : @@ -56,4 +62,29 @@ namespace MyGrate::Output::Pq { }); return UpdateDatabase(pq->connstr.c_str(), source_id); } + + void + UpdateDatabase::addTable(Input::MySQLConn * conn, const char * tableName) + { + auto cols = input::sql::selectColumns::execute(conn, tableName); + verify(cols->rows() > 0, "Table has no rows"); + Tx {this}([&] { + const auto table_id = **output::pq::sql::insertTable::execute(this, tableName, source); + std::stringstream ct; + scprintf<"CREATE TABLE %?.%?(">(ct, schema, tableName); + TypeMapper tm; + for (auto col : *cols) { + output::pq::sql::insertColumn::execute(this, col[0], col.currentRow(), table_id); + if (col.currentRow()) + ct << ','; + scprintf<"%? %?">(ct, col[0], tm.map(col[2], scprintf<"%?.%?">(tableName, col[0]))); + if (!col[1]) + ct << " not null"; + if (col[3]) + ct << " primary key"; + } + ct << ")"; + this->query(ct.str().c_str()); + }); + } } -- cgit v1.2.3