22 const QSqlDatabase DB_;
27 const QString InsertBase_;
28 const QString Updater_;
32 , InsertBase_ {
"INSERT INTO " + data.Table_ +
33 " (" + data.
Fields_.join (
", ") +
") VALUES (" +
34 data.BoundFields_.join (
", ") +
") " }
35 , Updater_ {
Map (data.
Fields_, [] (auto&& str) {
return str +
" = EXCLUDED." + str; }).join (
", ") }
42 [
this] (InsertAction::DefaultTag) { return GetDefaultQuery (); },
43 [
this] (InsertAction::IgnoreTag) { return GetIgnoreQuery (); },
51 Default_ = std::make_shared<QSqlQuery> (DB_);
52 Default_->prepare (InsertBase_);
61 Default_ = std::make_shared<QSqlQuery> (DB_);
62 Default_->prepare (InsertBase_ +
"ON CONFLICT DO NOTHING");
67 QSqlQuery_ptr MakeReplaceQuery (
const QStringList& constraining)
69 auto query = std::make_shared<QSqlQuery> (DB_);
70 query->prepare (InsertBase_ + GetReplacer (constraining));
74 QString GetReplacer (
const QStringList& constraining)
const
76 return "ON CONFLICT (" +
77 constraining.join (
", ") +
88 inline static const QString IntAutoincrement {
"SERIAL PRIMARY KEY" };
89 inline static const QString Binary {
"BYTEA" };
96 return std::make_unique<InsertQueryBuilder> (db, data);
auto MakeInsertQueryBuilder(const QSqlDatabase &db, const CachedFieldsData &data) const
InsertQueryBuilder(const QSqlDatabase &db, const CachedFieldsData &data)
QSqlQuery_ptr GetQuery(InsertAction action) override
std::shared_ptr< QSqlQuery > QSqlQuery_ptr
std::shared_ptr< QSqlQuery > QSqlQuery_ptr
auto Visit(const Either< Left, Right > &either, Args &&... args)
auto Map(Container &&c, F f)
ActionSelector_t Selector_