From 4fa34b94ecb002cadaec66ca1fdaa6c5b879a171 Mon Sep 17 00:00:00 2001 From: "Dr. Patrick Urbanke" Date: Sat, 22 Mar 2025 15:48:30 +0100 Subject: [PATCH] Began writing to_create_table(...) --- include/sqlgen/parsing/is_primary_key.hpp | 24 +++++++++ include/sqlgen/parsing/to_create_table.hpp | 59 ++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 include/sqlgen/parsing/is_primary_key.hpp create mode 100644 include/sqlgen/parsing/to_create_table.hpp 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