column, placeholder and column_value generator progress
This commit is contained in:
@@ -6,9 +6,9 @@
|
||||
|
||||
#include "matador/sql/connection.hpp"
|
||||
#include "matador/sql/dialect.hpp"
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
|
||||
#include "matador/query/criteria.hpp"
|
||||
#include "matador/query/generator.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
|
||||
#include "matador/utils/basic_types.hpp"
|
||||
@@ -75,7 +75,7 @@ TEST_CASE_METHOD( QueryFixture, "Insert and select basic datatypes", "[query][da
|
||||
};
|
||||
|
||||
res = query::insert()
|
||||
.into("types", column_generator::generate<types>(repo, true))
|
||||
.into("types", generator::columns<types>(repo))
|
||||
.values(t)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -363,7 +363,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key", "[query][primary key]") {
|
||||
pk pk1{ 7, "george" };
|
||||
|
||||
res = query::insert()
|
||||
.into("pk", column_generator::generate<pk>(repo))
|
||||
.into("pk", generator::columns<pk>(repo))
|
||||
.values(pk1)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -392,7 +392,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||
pk pk1{ 7, "george" };
|
||||
|
||||
auto stmt = query::insert()
|
||||
.into("pk", column_generator::generate<pk>(repo))
|
||||
.into("pk", generator::columns<pk>(repo))
|
||||
.values<pk>()
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
+15
-16
@@ -2,9 +2,8 @@
|
||||
|
||||
#include "matador/object/attribute_definition.hpp"
|
||||
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
|
||||
#include "matador/query/criteria.hpp"
|
||||
#include "matador/query/generator.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
|
||||
#include "QueryFixture.hpp"
|
||||
@@ -58,14 +57,14 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with where clause", "[q
|
||||
george.image.emplace_back(37);
|
||||
|
||||
res = query::insert()
|
||||
.into("person", column_generator::generate<person>(repo, true))
|
||||
.into("person", generator::columns<person>(repo))
|
||||
.values(george)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
// fetch person as record
|
||||
auto result_record = query::select(column_generator::generate<person>(repo, true))
|
||||
auto result_record = query::select(generator::columns<person>(repo))
|
||||
.from("person")
|
||||
.where("id"_col == 7)
|
||||
.fetch_all(db);
|
||||
@@ -85,7 +84,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with where clause", "[q
|
||||
}
|
||||
|
||||
// fetch person as person
|
||||
auto result_person = query::select(column_generator::generate<person>(repo, true))
|
||||
auto result_person = query::select(generator::columns<person>(repo))
|
||||
.from("person")
|
||||
.where("id"_col == 7)
|
||||
.fetch_all<person>(db);
|
||||
@@ -171,7 +170,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key", "[query][for
|
||||
|
||||
for (const auto &plane: planes) {
|
||||
res = query::insert()
|
||||
.into("airplane", column_generator::generate<airplane>(repo, true))
|
||||
.into("airplane", generator::columns<airplane>(repo))
|
||||
.values(*plane)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -187,13 +186,13 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key", "[query][for
|
||||
flight f4711{4, planes.at(1), "hans"};
|
||||
|
||||
res = query::insert()
|
||||
.into("flight", column_generator::generate<flight>(repo, true))
|
||||
.into("flight", generator::columns<flight>(repo))
|
||||
.values(f4711)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
auto f = query::select(column_generator::generate<flight>(repo, true))
|
||||
auto f = query::select(generator::columns<flight>(repo))
|
||||
.from("flight")
|
||||
.fetch_one(db);
|
||||
REQUIRE(f.is_ok());
|
||||
@@ -234,7 +233,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
|
||||
|
||||
for (const auto &plane: planes) {
|
||||
res = query::insert()
|
||||
.into("airplane", column_generator::generate<airplane>(repo, true))
|
||||
.into("airplane", generator::columns<airplane>(repo))
|
||||
.values(*plane)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -262,7 +261,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
|
||||
REQUIRE(*res == 1);
|
||||
}
|
||||
|
||||
auto f = query::select(column_generator::generate<flight>(repo, true))
|
||||
auto f = query::select(generator::columns<flight>(repo))
|
||||
.from("flight")
|
||||
.fetch_one(db);
|
||||
REQUIRE(f.is_ok());
|
||||
@@ -324,7 +323,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
|
||||
|
||||
for (const auto &plane: planes) {
|
||||
res = query::insert()
|
||||
.into("airplane", column_generator::generate<airplane>(repo, true))
|
||||
.into("airplane", generator::columns<airplane>(repo))
|
||||
.values(*plane)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -347,14 +346,14 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
|
||||
|
||||
for (const auto &f: flights) {
|
||||
res = query::insert()
|
||||
.into("flight", column_generator::generate<flight>(repo, true))
|
||||
.into("flight", generator::columns<flight>(repo))
|
||||
.values(*f)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
}
|
||||
|
||||
auto f = query::select(column_generator::generate<flight>(repo, true))
|
||||
auto f = query::select(generator::columns<flight>(repo))
|
||||
.from("flight")
|
||||
.fetch_one(db);
|
||||
REQUIRE(f.is_ok());
|
||||
@@ -426,7 +425,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
|
||||
|
||||
for (const auto &i: ingredients) {
|
||||
res = query::insert()
|
||||
.into("ingredients", column_generator::generate<ingredient>(repo, true))
|
||||
.into("ingredients", generator::columns<ingredient>(repo))
|
||||
.values(i)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -441,7 +440,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
|
||||
|
||||
for (const auto &r: recipes) {
|
||||
res = query::insert()
|
||||
.into("recipes", column_generator::generate<recipe>(repo, true))
|
||||
.into("recipes", generator::columns<recipe>(repo))
|
||||
.values(r)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
@@ -461,7 +460,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
|
||||
|
||||
for (const auto & [recipe_id, ingredient_id]: recipe_ingredients) {
|
||||
res = query::insert()
|
||||
.into("recipe_ingredients", column_generator::generate(repo, "recipe_ingredients", true))
|
||||
.into("recipe_ingredients", generator::columns<recipe_ingredient>(repo))
|
||||
.values({recipe_id, ingredient_id})
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
#include "matador/object/attribute_definition.hpp"
|
||||
|
||||
#include "matador/sql/connection.hpp"
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
|
||||
#include "matador/query/criteria.hpp"
|
||||
#include "matador/query/generator.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
|
||||
#include "matador/object/object_ptr.hpp"
|
||||
@@ -47,19 +47,14 @@ protected:
|
||||
};
|
||||
};
|
||||
|
||||
// template<class Type>
|
||||
// std::vector<matador::utils::placeholder> to_placeholder() {
|
||||
// return placeholder_generator::generate<Type>();
|
||||
// }
|
||||
TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]") {
|
||||
using namespace matador::utils;
|
||||
REQUIRE(repo.attach<airplane>("airplane"));
|
||||
table ap{"airplane"};
|
||||
SECTION("Insert with prepared statement and placeholder") {
|
||||
auto stmt = query::insert()
|
||||
.into("airplane", generator::placeholder<airplane>())
|
||||
// .into("airplane", column_generator::generate<airplane>(repo, true))
|
||||
.values<airplane>()
|
||||
.into("airplane", generator::columns<airplane>(repo))
|
||||
.values(generator::placeholders<airplane>())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt.is_ok());
|
||||
|
||||
@@ -70,7 +65,7 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
|
||||
stmt->reset();
|
||||
}
|
||||
|
||||
auto result = query::select(column_generator::generate<airplane>(repo, true))
|
||||
auto result = query::select(generator::columns<airplane>(repo))
|
||||
.from(ap)
|
||||
.fetch_all<airplane>(db);
|
||||
|
||||
@@ -86,14 +81,14 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
|
||||
SECTION("Select with prepared statement") {
|
||||
for (const auto &plane: planes) {
|
||||
auto res = query::insert()
|
||||
.into("airplane", column_generator::generate<airplane>(repo, true))
|
||||
.into("airplane", generator::columns<airplane>(repo))
|
||||
.values(*plane)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
}
|
||||
|
||||
auto stmt = query::select(column_generator::generate<airplane>(repo, true))
|
||||
auto stmt = query::select(generator::columns<airplane>(repo))
|
||||
.from(ap)
|
||||
.where("brand"_col == _)
|
||||
.prepare(db);
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
#include "ColorEnumTraits.hpp"
|
||||
|
||||
#include "matador/sql/connection.hpp"
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
|
||||
#include "matador/query/generator.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
|
||||
#include "QueryFixture.hpp"
|
||||
@@ -32,13 +33,13 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
|
||||
location loc{1, "center", {1, 2, 3}, Color::Black};
|
||||
|
||||
auto res = query::insert()
|
||||
.into("location", column_generator::generate<location>(repo, true))
|
||||
.into("location", generator::columns<location>(repo))
|
||||
.values(loc)
|
||||
.execute(db);
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
auto result = query::select(column_generator::generate<location>(repo, true))
|
||||
auto result = query::select(generator::columns<location>(repo))
|
||||
.from("location")
|
||||
.fetch_one<location>(db);
|
||||
|
||||
@@ -54,7 +55,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
|
||||
location loc{1, "center", {1, 2, 3}, Color::Black};
|
||||
|
||||
auto stmt = query::insert()
|
||||
.into("location", column_generator::generate<location>(repo, true))
|
||||
.into("location", generator::columns<location>(repo))
|
||||
.values<location>()
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
@@ -63,7 +64,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
auto result = query::select(column_generator::generate<location>(repo, true))
|
||||
auto result = query::select(generator::columns<location>(repo))
|
||||
.from("location")
|
||||
.fetch_one<location>(db);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
#include "matador/query/generator.hpp"
|
||||
|
||||
#include "matador/object/repository.hpp"
|
||||
|
||||
#include "../test/models/product.hpp"
|
||||
@@ -10,6 +11,7 @@
|
||||
#include "matador/sql/table.hpp"
|
||||
|
||||
using namespace matador::sql;
|
||||
using namespace matador::query;
|
||||
using namespace matador::object;
|
||||
|
||||
TEST_CASE("Generate columns from object", "[column][generator]") {
|
||||
@@ -18,7 +20,7 @@ TEST_CASE("Generate columns from object", "[column][generator]") {
|
||||
auto result = s.attach<product>("product");
|
||||
REQUIRE( result );
|
||||
|
||||
auto columns = column_generator::generate<product>(s);
|
||||
auto columns = generator::columns<product>(s);
|
||||
|
||||
const std::vector<std::string> expected_columns = {
|
||||
"product_name",
|
||||
@@ -49,7 +51,7 @@ TEST_CASE("Generate columns for object with has many relation", "[column][genera
|
||||
.and_then( [&s] { return s.attach<order>("order"); } );
|
||||
REQUIRE(result);
|
||||
|
||||
auto columns = column_generator::generate<order>(s);
|
||||
auto columns = generator::columns<order>(s, generator::column_generator_options::GenerateAlias);
|
||||
|
||||
const auto order_table = std::make_shared<table>("order");
|
||||
const auto order_details_table = std::make_shared<table>("order_details");
|
||||
@@ -99,7 +101,7 @@ TEST_CASE("Generate columns for object with eager foreign key relation", "[colum
|
||||
{ authors_table, "distinguished", "c08" },
|
||||
{ books_table, "published_in", "c09" }
|
||||
};
|
||||
auto columns = column_generator::generate<book>(s);
|
||||
auto columns = generator::columns<book>(s, generator::column_generator_options::GenerateAlias);
|
||||
|
||||
REQUIRE(!columns.empty());
|
||||
REQUIRE(columns.size() == expected_columns.size());
|
||||
|
||||
Reference in New Issue
Block a user