Skip to content

Commit a2fac09

Browse files
Pierre-Luc Gagnéclaude
andcommitted
feat: add instance-based overload for create_index_on
Columns can now be passed as instances instead of template parameters: create_index_on(index_id<"idx">{}, table{}, col1{}, col2{}) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7c1a37e commit a2fac09

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

99
## [Unreleased]
1010

11+
### Added
12+
13+
- Instance-based overload for `create_index_on` — e.g. `create_index_on(index_id<"idx">{}, table{}, col1{}, col2{})` as an alternative to the template-only form
14+
1115
### Changed
1216

1317
- `col_ref` is now instance-based — `col_ref(col{})` replaces `col_ref<col>` for consistency with the rest of the API

lib/include/ds_mysql/sql_ddl.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2331,6 +2331,12 @@ template <ColumnDescriptor... Cols, fixed_string Name, ValidTable Table>
23312331
return ddl_detail::create_index_builder<Table, Cols...>{std::string(Name)};
23322332
}
23332333

2334+
template <fixed_string Name, ValidTable Table, ColumnDescriptor... Cols>
2335+
[[nodiscard]] ddl_detail::create_index_builder<Table, Cols...> create_index_on(index_id<Name> const&, Table const&,
2336+
Cols const&...) {
2337+
return ddl_detail::create_index_builder<Table, Cols...>{std::string(Name)};
2338+
}
2339+
23342340
template <fixed_string Name, ValidTable Table>
23352341
[[nodiscard]] ddl_detail::drop_index_builder<Table> drop_index_on(index_id<Name> const&, Table const&) {
23362342
return ddl_detail::drop_index_builder<Table>{std::string(Name)};

tests/unit/test_ddl.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,20 @@ suite<"DDL Features"> ddl_features_suite = [] {
16631663
expect(sql == "CREATE UNIQUE INDEX uq_test_table_name ON test_table (name);\n"s) << sql;
16641664
};
16651665

1666+
"create_index_on instance-based - generates CREATE INDEX"_test = [] {
1667+
auto const sql =
1668+
create_index_on(index_id<"idx_test_table_id_name">{}, test_table{}, test_table::id{}, test_table::name{})
1669+
.build_sql();
1670+
expect(sql == "CREATE INDEX idx_test_table_id_name ON test_table (id, name);\n"s) << sql;
1671+
};
1672+
1673+
"create_index_on instance-based.unique - generates CREATE UNIQUE INDEX"_test = [] {
1674+
auto const sql = create_index_on(index_id<"uq_test_table_name">{}, test_table{}, test_table::name{})
1675+
.unique()
1676+
.build_sql();
1677+
expect(sql == "CREATE UNIQUE INDEX uq_test_table_name ON test_table (name);\n"s) << sql;
1678+
};
1679+
16661680
"drop_index_on - generates DROP INDEX ON table"_test = [] {
16671681
auto const sql = drop_index_on(index_id<"idx_test_table_id_name">{}, test_table{}).build_sql();
16681682
expect(sql == "DROP INDEX idx_test_table_id_name ON test_table;\n"s) << sql;

0 commit comments

Comments
 (0)