Skip to content

Commit 40bfff0

Browse files
author
Pierre-Luc Gagné
committed
Add temporal default aliases and test tagged usage
1 parent ae1694a commit 40bfff0

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

lib/include/ds_mysql/sql_temporal.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ class time_type {
103103
uint32_t fractional_second_precision_;
104104
};
105105

106+
using datetime_type_default = datetime_type<>;
107+
using timestamp_type_default = timestamp_type<>;
108+
using time_type_default = time_type<>;
109+
106110
// ===================================================================
107111
// Type detection traits
108112
// ===================================================================

tests/unit/test_ddl.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
96114
struct 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

Comments
 (0)