43 const QSqlDatabase DB_;
48 const QString InsertBase_;
49 const QString Updater_;
53 , InsertBase_ {
"INSERT INTO " + data.Table_ +
54 " (" + data.Fields_.join (
", ") +
") VALUES (" +
55 data.BoundFields_.join (
", ") +
") " }
56 , Updater_ {
Map (data.Fields_, [] (
auto&& str) { return str +
" = EXCLUDED." + str; }).join (
", ") }
63 [
this] (InsertAction::DefaultTag) { return GetDefaultQuery (); },
64 [
this] (InsertAction::IgnoreTag) { return GetIgnoreQuery (); },
72 Default_ = std::make_shared<QSqlQuery> (DB_);
73 Default_->prepare (InsertBase_);
82 Default_ = std::make_shared<QSqlQuery> (DB_);
83 Default_->prepare (InsertBase_ +
"ON CONFLICT DO NOTHING");
88 QSqlQuery_ptr MakeReplaceQuery (
const QStringList& constraining)
90 auto query = std::make_shared<QSqlQuery> (DB_);
91 query->prepare (InsertBase_ + GetReplacer (constraining));
95 QString GetReplacer (
const QStringList& constraining)
const 97 return "ON CONFLICT (" +
98 constraining.join (
", ") +
110 inline static const QString
Binary {
"BYTEA" };
117 return std::make_unique<InsertQueryBuilder> (db, data);
static const QString IntAutoincrement
InsertQueryBuilder(const QSqlDatabase &db, const CachedFieldsData &data)
QSqlQuery_ptr GetQuery(InsertAction action) override
auto Visit(const Either< Left, Right > &either, Args &&... args)
std::shared_ptr< QSqlQuery > QSqlQuery_ptr
std::shared_ptr< QSqlQuery > QSqlQuery_ptr
auto Map(Container &&c, F f)
ActionSelector_t Selector_
static const QString Binary
auto MakeInsertQueryBuilder(const QSqlDatabase &db, const CachedFieldsData &data) const