@@ -93,6 +93,24 @@ struct fsp_temporal_table {
9393 COLUMN_FIELD (opt_duration, std::optional<time_type<6 >>)
9494};
9595
96+ struct tagged_temporal_alias_table {
97+ struct id_tag {};
98+ using id = tagged_column_field<id_tag, uint32_t >;
99+ id id_;
100+
101+ struct created_at_tag {};
102+ using created_at = tagged_column_field<created_at_tag, datetime_type_default>;
103+ created_at created_at_;
104+
105+ struct updated_at_tag {};
106+ using updated_at = tagged_column_field<updated_at_tag, timestamp_type_default>;
107+ updated_at updated_at_;
108+
109+ struct duration_tag {};
110+ using duration = tagged_column_field<duration_tag, time_type_default>;
111+ duration duration_;
112+ };
113+
96114struct symbol_with_indexes {
97115 COLUMN_FIELD (id, int32_t )
98116 COLUMN_FIELD (exchange_id, std::optional<int32_t >)
@@ -269,6 +287,22 @@ suite<"DDL"> ddl_suite = [] {
269287 << sql;
270288 };
271289
290+ " tagged_column_field with temporal default aliases - emits DATETIME/TIMESTAMP/TIME" _test = [] {
291+ expect (sql_type_for<datetime_type_default>() == " DATETIME" s);
292+ expect (sql_type_for<timestamp_type_default>() == " TIMESTAMP" s);
293+ expect (sql_type_for<time_type_default>() == " TIME" s);
294+
295+ auto const sql = create_table<tagged_temporal_alias_table>().build_sql ();
296+ expect (sql ==
297+ " CREATE TABLE tagged_temporal_alias_table (\n "
298+ " id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,\n "
299+ " created_at DATETIME NOT NULL,\n "
300+ " updated_at TIMESTAMP NOT NULL,\n "
301+ " duration TIME NOT NULL\n "
302+ " );\n " s)
303+ << sql;
304+ };
305+
272306 " create_table with numeric sql formatting options - emits FLOAT/DOUBLE/DECIMAL definitions" _test = [] {
273307 auto const sql = create_table<numeric_format_table>().build_sql ();
274308 expect (sql ==
0 commit comments