query/include/matador/query/meta_table_macro.hpp

30 lines
982 B
C++

#ifndef MATADOR_META_TABLE_MACRO_HPP
#define MATADOR_META_TABLE_MACRO_HPP
#include "matador/utils/macro_map.hpp"
#include "matador/query/table_column.hpp"
#include "matador/query/table.hpp"
#define FIELD(FIELD_NAME) const matador::query::table_column& FIELD_NAME;
#define INIT_FIELD(FIELD_NAME) , FIELD_NAME(*column_by_name(*this, #FIELD_NAME))
#define FIELD_STRING(FIELD_NAME) #FIELD_NAME,
#define META_TABLE(TABLE_NAME, VARIABLE_NAME, ...) \
namespace matador::query::meta { \
namespace internal { \
class TABLE_NAME##_table : public typed_table<TABLE_NAME##_table> { \
public: \
TABLE_NAME##_table()\
: TABLE_NAME##_table("") \
{} \
TABLE_NAME##_table(const std::string& alias) \
: typed_table(#TABLE_NAME, alias, {MAP(FIELD_STRING, __VA_ARGS__)}) \
MAP(INIT_FIELD, __VA_ARGS__) \
{} \
MAP(FIELD, __VA_ARGS__) \
}; } \
static const internal:: TABLE_NAME##_table VARIABLE_NAME; \
}
#endif //MATADOR_META_TABLE_MACRO_HPP