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_;
}