diff --git a/include/sqlgen/parsing/is_primary_key.hpp b/include/sqlgen/parsing/is_primary_key.hpp new file mode 100644 index 0000000..a80cf0a --- /dev/null +++ b/include/sqlgen/parsing/is_primary_key.hpp @@ -0,0 +1,24 @@ +#ifndef SQLGEN_PARSING_IS_PRIMARY_KEY_HPP_ +#define SQLGEN_PARSING_IS_PRIMARY_KEY_HPP_ + +#include + +#include "../PrimaryKey.hpp" + +namespace sqlgen::parsing { + +template +class is_primary_key; + +template +class is_primary_key : public std::false_type {}; + +template +class is_primary_key> : public std::true_type {}; + +template +constexpr bool is_primary_key_v = is_primary_key>::value; + +} // namespace sqlgen::parsing + +#endif diff --git a/include/sqlgen/parsing/to_create_table.hpp b/include/sqlgen/parsing/to_create_table.hpp new file mode 100644 index 0000000..cd4a2b3 --- /dev/null +++ b/include/sqlgen/parsing/to_create_table.hpp @@ -0,0 +1,59 @@ +#ifndef SQLGEN_PARSING_TO_CREATE_TABLE_HPP_ +#define SQLGEN_PARSING_TO_CREATE_TABLE_HPP_ + +#include +#include +#include +#include +#include + +#include "../dynamic/Column.hpp" +#include "../dynamic/CreateTable.hpp" +#include "../dynamic/Table.hpp" +#include "../dynamic/Type.hpp" + +namespace sqlgen::parsing { + +namespace internal { + +template +std::string to_name() { + using Name = typename FieldType::Name; + return Name().str(); +} + +template +dynamic::Type to_type() { + // TODO +} + +template +dynamic::Column to_column() { + return dynamic::Column{.name = to_name(), + .type = to_type()}; +} + +template +std::vector make_columns(std::integer_sequence) { + return std::vector( + {to_column>()...}); +} + +} // namespace internal + +template + requires std::is_class_v> && + std::is_aggregate_v> +dynamic::CreateTable to_create_table() { + using NamedTupleType = rfl::name_tuple_t>; + using Fields = typename NamedTupleType::Fields; + return dynamic::CreateTable{ + .table = dynamic::Table{.name = /*TODO*/}, + .columns = internal::make_columns( + std::make_integer_sequence>), + .if_not_exists = true}; +} + +} // namespace sqlgen::parsing + +#endif