added InsertQueryBuilderTest.cpp
This commit is contained in:
parent
c1620d620e
commit
d9f9712487
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "matador/query/basic_schema.hpp"
|
||||
#include "matador/query/intermediates/executable_query.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
#include "matador/query/query_builder_exception.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
class insert_query_builder {
|
||||
|
|
@ -10,25 +12,22 @@ public:
|
|||
explicit insert_query_builder(const basic_schema &schema);
|
||||
|
||||
template<class EntityType>
|
||||
utils::result<executable_query, utils::error> build(const object::object_ptr<EntityType> &ptr) {
|
||||
utils::result<std::vector<executable_query>, query_build_error> build(const object::object_ptr<EntityType> &ptr) {
|
||||
const auto it = schema_.find(typeid(EntityType));
|
||||
if (it == schema_.end()) {
|
||||
return utils::failure(query_build_error::UnknownType);
|
||||
}
|
||||
|
||||
executable_query q = query::query::insert().into(it->second.table()).values(*ptr);
|
||||
return utils::ok(std::vector{q});
|
||||
}
|
||||
|
||||
template < class V >
|
||||
void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) {
|
||||
push(id);
|
||||
if (!is_root_entity()) {
|
||||
return;
|
||||
}
|
||||
entity_query_data_.pk_column_name = id;
|
||||
}
|
||||
|
||||
void on_revision(const char *id, uint64_t &/*rev*/);
|
||||
static void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) {}
|
||||
static void on_revision(const char *id, uint64_t &/*rev*/);
|
||||
|
||||
template<typename Type>
|
||||
void on_attribute(const char *id, Type &, const utils::field_attributes &/*attr*/ = utils::null_attributes)
|
||||
{
|
||||
push(id);
|
||||
}
|
||||
static void on_attribute(const char *id, Type &, const utils::field_attributes &/*attr*/ = utils::null_attributes) {}
|
||||
|
||||
template<class Pointer>
|
||||
void on_belongs_to(const char *id, Pointer &obj, const utils::foreign_attributes &attr) {
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ public:
|
|||
);
|
||||
}
|
||||
|
||||
const select_query_data &query_data() const;
|
||||
[[nodiscard]] const select_query_data &query_data() const;
|
||||
|
||||
private:
|
||||
template<class Pointer>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ add_library(matador-orm STATIC
|
|||
../../include/matador/query/criteria_evaluator.hpp
|
||||
../../include/matador/query/fk_value_extractor.hpp
|
||||
../../include/matador/query/generator.hpp
|
||||
../../include/matador/query/insert_query_builder.hpp
|
||||
../../include/matador/query/intermediates/executable_query.hpp
|
||||
../../include/matador/query/intermediates/fetchable_query.hpp
|
||||
../../include/matador/query/intermediates/query_alter_intermediate.hpp
|
||||
|
|
@ -115,6 +116,7 @@ add_library(matador-orm STATIC
|
|||
query/criteria/not_criteria.cpp
|
||||
query/criteria_evaluator.cpp
|
||||
query/generator.cpp
|
||||
query/insert_query_builder.cpp
|
||||
query/intermediates/executable_query.cpp
|
||||
query/intermediates/fetchable_query.cpp
|
||||
query/intermediates/query_alter_intermediate.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
#include "matador/query/insert_query_builder.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
insert_query_builder::insert_query_builder(const basic_schema& schema)
|
||||
: schema_(schema) {}
|
||||
|
||||
void insert_query_builder::on_revision(const char* /*id*/, uint64_t&) {}
|
||||
} // namespace matador::query
|
||||
|
|
@ -17,6 +17,7 @@ add_executable(OrmTests
|
|||
query/ColumnGeneratorTest.cpp
|
||||
query/CriteriaTests.cpp
|
||||
query/GeneratorTests.cpp
|
||||
query/InsertQueryBuilderTest.cpp
|
||||
query/QueryBuilderTest.cpp
|
||||
query/QueryFixture.cpp
|
||||
query/QueryFixture.hpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include "matador/object/object_ptr.hpp"
|
||||
|
||||
#include "matador/sql/backend_provider.hpp"
|
||||
#include "matador/sql/connection.hpp"
|
||||
#include "matador/sql/interface/connection_impl.hpp"
|
||||
|
||||
#include "matador/query/schema.hpp"
|
||||
|
||||
#include "matador/query/insert_query_builder.hpp"
|
||||
|
||||
#include "../backend/test_backend_service.hpp"
|
||||
|
||||
#include "../../models/airplane.hpp"
|
||||
#include "../../models/flight.hpp"
|
||||
|
||||
using namespace matador::object;
|
||||
using namespace matador::sql;
|
||||
using namespace matador::query;
|
||||
using namespace matador::utils;
|
||||
|
||||
TEST_CASE("insert query builder test", "[query][insert_query_builder]") {
|
||||
using namespace matador::test;
|
||||
backend_provider::instance().register_backend("noop", std::make_unique<orm::test_backend_service>());
|
||||
connection db("noop://noop.db");
|
||||
|
||||
schema scm;
|
||||
auto result = scm.attach<airplane>("airplanes")
|
||||
.and_then( [&scm] { return scm.attach<flight>("flights"); } );
|
||||
REQUIRE(result);
|
||||
|
||||
insert_query_builder iqb(scm);
|
||||
|
||||
const auto a380 = object_ptr(std::make_shared<airplane>(1, "Boeing", "A380" ));
|
||||
auto build_result = iqb.build<airplane>(a380);
|
||||
REQUIRE(build_result.is_ok());
|
||||
|
||||
const auto& stmts = *build_result;
|
||||
REQUIRE(stmts.size() == 1);
|
||||
|
||||
const auto sql = stmts.front().str(db);
|
||||
REQUIRE(sql == R"(INSERT INTO "airplanes" ("id", "brand", "model") VALUES (1, 'Boeing', 'A380'))");
|
||||
}
|
||||
Loading…
Reference in New Issue