column, placeholder and column_value generator progress

This commit is contained in:
Sascha Kühl
2025-11-10 16:12:53 +01:00
parent 4b51ad21da
commit b3bff2dd1b
15 changed files with 267 additions and 83 deletions
+4 -2
View File
@@ -44,7 +44,7 @@ add_library(matador-orm STATIC
../../include/matador/query/intermediates/query_update_intermediate.hpp
../../include/matador/query/intermediates/query_where_intermediate.hpp
../../include/matador/query/internal/basic_type_to_string_visitor.hpp
../../include/matador/query/internal/key_value_pair.hpp
../../include/matador/query/internal/column_value_pair.hpp
../../include/matador/query/internal/query_parts.hpp
../../include/matador/query/join_data.hpp
../../include/matador/query/key_value_generator.hpp
@@ -123,7 +123,7 @@ add_library(matador-orm STATIC
query/intermediates/query_update_intermediate.cpp
query/intermediates/query_where_intermediate.cpp
query/internal/basic_type_to_string_visitor.cpp
query/internal/key_value_pair.cpp
query/internal/column_value_pair.cpp
query/internal/query_parts.cpp
query/internal/query_result_impl.cpp
query/key_value_generator.cpp
@@ -154,6 +154,8 @@ add_library(matador-orm STATIC
sql/statement.cpp
sql/statement_cache.cpp
sql/table.cpp
../../include/matador/query/generator.hpp
query/generator.cpp
)
target_include_directories(matador-orm
+11
View File
@@ -0,0 +1,11 @@
#include "matador/query/generator.hpp"
namespace matador::query::generator {
void placeholder_generator::on_revision(const char* /*id*/, uint64_t&) {
result_.emplace_back(utils::_);
}
void column_value_generator::on_revision(const char* id, uint64_t& x) {
result_.emplace_back(id, x);
}
}
@@ -9,12 +9,12 @@ query_update_intermediate::query_update_intermediate(const sql::table& table)
context_->parts.push_back(std::make_unique<internal::query_update_part>(table));
}
query_set_intermediate query_update_intermediate::set(const std::initializer_list<internal::key_value_pair> columns)
query_set_intermediate query_update_intermediate::set(const std::initializer_list<internal::column_value_pair> columns)
{
return set(std::vector<internal::key_value_pair>{columns});
return set(std::vector<internal::column_value_pair>{columns});
}
query_set_intermediate query_update_intermediate::set(std::vector<internal::key_value_pair> &&columns)
query_set_intermediate query_update_intermediate::set(std::vector<internal::column_value_pair> &&columns)
{
context_->parts.push_back(std::make_unique<internal::query_set_part>(std::move(columns)));
return {context_};
@@ -0,0 +1,33 @@
#include "matador/query/internal/column_value_pair.hpp"
#include <utility>
namespace matador::query::internal {
column_value_pair::column_value_pair(std::string name, utils::database_type value)
: name_(std::move(name))
, value_(std::move(value)) {
}
column_value_pair::column_value_pair(const sql::column &col, utils::database_type value)
: name_(col.name)
, value_(std::move(value)) {
}
column_value_pair::column_value_pair(const char *name, utils::database_type value)
: name_(name)
, value_(std::move(value)) {
}
column_value_pair::column_value_pair( const char* name, utils::placeholder p )
: name_(name)
, value_(p) {}
const std::string &column_value_pair::name() const {
return name_;
}
const std::variant<utils::placeholder, utils::database_type>& column_value_pair::value() const {
return value_;
}
}
@@ -1,33 +0,0 @@
#include "matador/query/internal/key_value_pair.hpp"
#include <utility>
namespace matador::query::internal {
key_value_pair::key_value_pair(std::string name, utils::database_type value)
: name_(std::move(name))
, value_(std::move(value)) {
}
key_value_pair::key_value_pair(const sql::column &col, utils::database_type value)
: name_(col.name)
, value_(std::move(value)) {
}
key_value_pair::key_value_pair(const char *name, utils::database_type value)
: name_(name)
, value_(std::move(value)) {
}
key_value_pair::key_value_pair( const char* name, utils::placeholder p )
: name_(name)
, value_(p) {}
const std::string &key_value_pair::name() const {
return name_;
}
const std::variant<utils::placeholder, utils::database_type>& key_value_pair::value() const {
return value_;
}
}
+2 -2
View File
@@ -300,11 +300,11 @@ void query_update_part::accept(query_part_visitor &visitor)
visitor.visit(*this);
}
query_set_part::query_set_part(const std::vector<key_value_pair>& key_value_pairs)
query_set_part::query_set_part(const std::vector<column_value_pair>& key_value_pairs)
: query_part(sql::dialect_token::Set)
, key_value_pairs_(key_value_pairs) {}
const std::vector<key_value_pair> &query_set_part::key_values() const
const std::vector<column_value_pair> &query_set_part::key_values() const
{
return key_value_pairs_;
}
+1 -1
View File
@@ -3,7 +3,7 @@
#include "matador/query/value_extractor.hpp"
namespace matador::query {
key_value_generator::key_value_generator(std::vector<internal::key_value_pair> &result)
key_value_generator::key_value_generator(std::vector<internal::column_value_pair> &result)
: result_(result) {}
void key_value_generator::on_revision(const char *id, uint64_t &x) {
+1 -6
View File
@@ -7,12 +7,10 @@ namespace matador::sql {
column_generator::column_generator(std::vector<column> &column_infos,
const object::repository &scm,
const std::string &table_name,
const bool force_lazy,
const bool has_many_to_many)
const bool force_lazy)
: column_infos_(column_infos)
, table_schema_(scm)
, force_lazy_(force_lazy)
, has_many_to_many_(has_many_to_many)
{
table_name_stack_.push(table_name);
seen_tables.insert(table_name);
@@ -33,9 +31,6 @@ std::vector<column> column_generator::generate( const object::repository& scm, c
void column_generator::on_revision(const char *id, uint64_t &)
{
if (has_many_to_many_) {
return;
}
push(id);
}