13template <auto ColumnPtr>
26 return "PRIMARY KEY (" + std::string(column_type::name) +
")";
34template <
auto... ColumnPtrs>
43 std::string result =
"PRIMARY KEY (";
44 result += get_column_names();
51 std::string get_column_names()
const {
54 (append_column_name<ColumnPtrs>(names, names.empty() ?
"" :
", "), ...);
59 template <auto ColumnPtr>
60 void append_column_name(std::string& names,
const std::string& separator)
const {
61 using column_type =
typename member_pointer_type<
decltype(ColumnPtr)>::type;
62 names += separator + std::string(column_type::name);
69template <
auto... ColumnPtrs>
71 if constexpr (
sizeof...(ColumnPtrs) == 1) {
76 }.template operator()<ColumnPtrs>(),
86template <
auto... ColumnPtrs>
Represents a composite primary key constraint on multiple columns.
std::string sql_definition() const
Get SQL definition for the composite PRIMARY KEY constraint.
composite_primary_key()=default
Default constructor.
Represents a primary key constraint on a table.
table_primary_key()=default
Default constructor.
std::string sql_definition() const
Get SQL definition for the PRIMARY KEY constraint.
decltype(make_pk< ColumnPtrs... >()) pk
Helper type alias for primary key constraints.
auto make_pk()
Helper function to create a primary key.
Helper to extract the class type from a member pointer.
Helper to extract the member type from a member pointer.