diff --git a/demo/main.cpp b/demo/main.cpp index 7adeb42..a47a8ab 100644 --- a/demo/main.cpp +++ b/demo/main.cpp @@ -154,6 +154,11 @@ QUERY_HELPER( payload, PAYLOAD, id ) QUERY_HELPER( temporary_table, TEMPORARY_TABLE, id ); +QUERY_HELPER(customer, CUSTOMER, id, name, email, address) +QUERY_HELPER(product, PRODUCT, id, title, description, price, category) +QUERY_HELPER(category, CATEGORY, id, title, description) +QUERY_HELPER(cart, CART, id, items, owner) + int main() { using namespace matador::sql; using namespace matador::object; diff --git a/include/matador/query/column.hpp b/include/matador/query/column.hpp index bf2c924..6939232 100644 --- a/include/matador/query/column.hpp +++ b/include/matador/query/column.hpp @@ -34,6 +34,8 @@ public: [[nodiscard]] std::shared_ptr table() const; void table(const std::shared_ptr& t); + operator const std::string&() const; + private: std::shared_ptr table_; std::string name; diff --git a/include/matador/query/key_value_generator.hpp b/include/matador/query/key_value_generator.hpp index b31f9d9..149ccc0 100644 --- a/include/matador/query/key_value_generator.hpp +++ b/include/matador/query/key_value_generator.hpp @@ -4,7 +4,6 @@ #include "matador/query/fk_value_extractor.hpp" #include "matador/query/internal/column_value_pair.hpp" -#include "matador/utils/foreign_attributes.hpp" #include "matador/utils/primary_key_attribute.hpp" #include diff --git a/include/matador/query/table.hpp b/include/matador/query/table.hpp index 9d7fde5..fe2fbd4 100644 --- a/include/matador/query/table.hpp +++ b/include/matador/query/table.hpp @@ -15,8 +15,7 @@ public: table() = default; table(const char *name); // NOLINT(*-explicit-constructor) table(std::string name); // NOLINT(*-explicit-constructor) - table(const char *name, std::string as); // NOLINT(*-explicit-constructor) - table(std::string name, std::string as); // NOLINT(*-explicit-constructor) + table(std::string name, std::string as); table(std::string name, std::string as, const std::vector &columns); table& as(const std::string &a); @@ -31,7 +30,9 @@ public: [[nodiscard]] const std::string& alias() const; [[nodiscard]] const std::vector& columns() const; - operator const std::vector&() const; + [[nodiscard]] column column(const std::string &name) const; + + operator const std::vector&() const; private: friend class column; @@ -39,7 +40,7 @@ private: std::string alias_; std::string schema_name_; - std::vector columns_; + std::vector columns_; }; table operator ""_tab(const char *name, size_t len); diff --git a/include/matador/sql/query_macro.hpp b/include/matador/sql/query_macro.hpp index 437c906..ddebbb4 100644 --- a/include/matador/sql/query_macro.hpp +++ b/include/matador/sql/query_macro.hpp @@ -9,7 +9,7 @@ #include #include -#define FIELD(x) const column x{*this, #x, ""}; +#define FIELD(x) const matador::query::column x{*this, #x, ""}; #define QUERY_HELPER(C, V, ...) \ namespace matador::query::meta { \ diff --git a/source/orm/query/builder.cpp b/source/orm/query/builder.cpp index 818936c..c550051 100644 --- a/source/orm/query/builder.cpp +++ b/source/orm/query/builder.cpp @@ -18,7 +18,7 @@ table_builder& table_builder::as( std::string table_alias ) { } table_builder::operator class query::table() const { - return {table_name, alias}; + return {table_name, alias, {}}; } constraint_builder& constraint_builder::constraint( std::string name ) { diff --git a/source/orm/query/column.cpp b/source/orm/query/column.cpp index c7f9c1a..dd5d5ed 100644 --- a/source/orm/query/column.cpp +++ b/source/orm/query/column.cpp @@ -98,4 +98,9 @@ std::shared_ptr
column::table() const { void column::table( const std::shared_ptr& t ) { table_ = t; } + +column::operator const std::string&() const { + return name; +} + } \ No newline at end of file diff --git a/source/orm/query/table.cpp b/source/orm/query/table.cpp index d01dc08..1753993 100644 --- a/source/orm/query/table.cpp +++ b/source/orm/query/table.cpp @@ -10,17 +10,12 @@ table::table(std::string name) : name_(std::move(name)) {} -table::table(const char *name, std::string as) -: name_(name) -, alias_(std::move(as)) -{} - table::table(std::string name, std::string as) : name_(std::move(name)) , alias_(std::move(as)) {} -table::table( std::string name, std::string as, const std::vector& columns ) +table::table( std::string name, std::string as, const std::vector& columns ) : name_(std::move(name)) , alias_(std::move(as)) , columns_(columns) {} @@ -54,7 +49,11 @@ const std::vector& table::columns() const { return columns_; } -table::operator const std::vector&() const { +column table::column( const std::string& name ) const { + return {*this, name}; +} + +table::operator const std::vector&() const { return columns_; }