Skip to content

Commit cb292db

Browse files
author
Pierre-Luc Gagné
committed
Structure example as it should be in a real implementation
1 parent 88bff63 commit cb292db

3 files changed

Lines changed: 44 additions & 48 deletions

File tree

README.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,23 @@ using namespace ds_mysql;
2727

2828
// 1. Define your table as a C++ struct
2929
struct product {
30-
using id = column_field<struct id_tag, uint32_t>;
31-
using sku = column_field<struct sku_tag, varchar_field<64>>;
32-
using name = column_field<struct name_tag, varchar_field<255>>;
33-
using price = column_field<struct price_tag, double>;
30+
struct id_tag {};
31+
struct sku_tag {};
32+
struct name_tag {};
33+
struct price_tag {};
34+
35+
using id = column_field<id_tag, uint32_t>;
36+
using sku = column_field<sku_tag, varchar_field<64>>;
37+
using name = column_field<name_tag, varchar_field<255>>;
38+
using price = column_field<price_tag, double>;
3439

3540
id id_;
3641
sku sku_;
3742
name name_;
3843
price price_;
3944
};
4045

41-
// 2. Register the table name
42-
template <> struct table_name_for<product> {
43-
static constexpr table_name value() noexcept { return table_name{"product"}; }
44-
};
45-
46-
// 3. Connect and query
46+
// 2. Connect and query
4747
auto db = mysql_database::connect(mysql_config{
4848
host_name{"127.0.0.1"},
4949
database_name{"my_db"},
@@ -87,7 +87,7 @@ ctest --preset release
8787
### Build Options
8888

8989
| Option | Default | Description |
90-
|--------|---------|-------------|
90+
| ------ | ------- | ----------- |
9191
| `BUILD_TESTING` | ON | Build unit and integration tests |
9292
| `BUILD_INTEGRATION_TESTS` | ON | Build MySQL integration tests |
9393
| `BUILD_EXAMPLES` | ON | Build example programs |
@@ -221,6 +221,7 @@ Automatically fetched via CMake FetchContent:
221221
- [dotenv-cpp](https://github.com/laserpants/dotenv-cpp)`.env` file loading (integration tests only)
222222

223223
System dependencies:
224+
224225
- MySQL client library (`libmysqlclient-dev` on Ubuntu)
225226

226227
## License

examples/basic_query.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,21 @@
4242
// ===================================================================
4343

4444
struct product {
45-
using id = ds_mysql::column_field<struct id_tag, uint32_t>;
46-
using sku = ds_mysql::column_field<struct sku_tag, ds_mysql::varchar_field<64>>;
47-
using name = ds_mysql::column_field<struct name_tag, ds_mysql::varchar_field<255>>;
48-
using price = ds_mysql::column_field<struct price_tag, double>;
49-
using stock = ds_mysql::column_field<struct stock_tag, uint32_t>;
50-
using description = ds_mysql::column_field<struct description_tag, std::optional<ds_mysql::varchar_field<512>>>;
51-
using created_at = ds_mysql::column_field<struct created_at_tag, ds_mysql::sql_datetime>;
45+
struct id_tag {};
46+
struct sku_tag {};
47+
struct name_tag {};
48+
struct price_tag {};
49+
struct stock_tag {};
50+
struct description_tag {};
51+
struct created_at_tag {};
52+
53+
using id = ds_mysql::column_field<id_tag, uint32_t>;
54+
using sku = ds_mysql::column_field<sku_tag, ds_mysql::varchar_field<64>>;
55+
using name = ds_mysql::column_field<name_tag, ds_mysql::varchar_field<255>>;
56+
using price = ds_mysql::column_field<price_tag, double>;
57+
using stock = ds_mysql::column_field<stock_tag, uint32_t>;
58+
using description = ds_mysql::column_field<description_tag, std::optional<ds_mysql::varchar_field<512>>>;
59+
using created_at = ds_mysql::column_field<created_at_tag, ds_mysql::sql_datetime>;
5260

5361
id id_;
5462
sku sku_;
@@ -59,15 +67,6 @@ struct product {
5967
created_at created_at_;
6068
};
6169

62-
// ===================================================================
63-
// Teach ds_mysql the table name for product.
64-
// ===================================================================
65-
66-
template <>
67-
struct ds_mysql::table_name_for<product> {
68-
static constexpr ds_mysql::table_name value() noexcept { return ds_mysql::table_name{"product"}; }
69-
};
70-
7170
// ===================================================================
7271
// Read connection config from environment variables.
7372
// ===================================================================

examples/schema_generation.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@
2727
// ===================================================================
2828

2929
struct user {
30-
using id = ds_mysql::column_field<struct id_tag, uint32_t>;
31-
using username = ds_mysql::column_field<struct username_tag, ds_mysql::varchar_field<64>>;
32-
using email = ds_mysql::column_field<struct email_tag, ds_mysql::varchar_field<255>>;
33-
using is_active = ds_mysql::column_field<struct is_active_tag, bool>;
34-
using created_at = ds_mysql::column_field<struct created_at_tag, ds_mysql::sql_datetime>;
30+
struct id_tag {};
31+
struct username_tag {};
32+
struct email_tag {};
33+
struct is_active_tag {};
34+
struct created_at_tag {};
35+
36+
using id = ds_mysql::column_field<id_tag, uint32_t>;
37+
using username = ds_mysql::column_field<username_tag, ds_mysql::varchar_field<64>>;
38+
using email = ds_mysql::column_field<email_tag, ds_mysql::varchar_field<255>>;
39+
using is_active = ds_mysql::column_field<is_active_tag, bool>;
40+
using created_at = ds_mysql::column_field<created_at_tag, ds_mysql::sql_datetime>;
3541

3642
id id_;
3743
username username_;
@@ -40,22 +46,17 @@ struct user {
4046
created_at created_at_;
4147
};
4248

43-
template <>
44-
struct ds_mysql::table_name_for<user> {
45-
static constexpr ds_mysql::table_name value() noexcept { return ds_mysql::table_name{"user"}; }
46-
};
47-
4849
// ===================================================================
4950
// Define an 'order_row' table with a numeric precision override
5051
// ===================================================================
5152

5253
struct order_row {
53-
using id = ds_mysql::column_field<struct order_id_tag, uint32_t>;
54-
using user_id = ds_mysql::column_field<struct user_id_tag, uint32_t>;
55-
using amount = ds_mysql::column_field<struct amount_tag, double>;
56-
using fee = ds_mysql::column_field<struct fee_tag, std::optional<double>>;
57-
using status = ds_mysql::column_field<struct status_tag, ds_mysql::varchar_field<32>>;
58-
using created_at = ds_mysql::column_field<struct order_created_at_tag, ds_mysql::sql_datetime>;
54+
struct order_id_tag {}; using id = ds_mysql::column_field<order_id_tag, uint32_t>;
55+
struct user_id_tag {}; using user_id = ds_mysql::column_field<user_id_tag, uint32_t>;
56+
struct amount_tag {}; using amount = ds_mysql::column_field<amount_tag, double>;
57+
struct fee_tag {}; using fee = ds_mysql::column_field<fee_tag, std::optional<double>>;
58+
struct status_tag {}; using status = ds_mysql::column_field<status_tag, ds_mysql::varchar_field<32>>;
59+
struct order_created_at_tag {}; using created_at = ds_mysql::column_field<order_created_at_tag, ds_mysql::sql_datetime>;
5960

6061
id id_;
6162
user_id user_id_;
@@ -65,11 +66,6 @@ struct order_row {
6566
created_at created_at_;
6667
};
6768

68-
template <>
69-
struct ds_mysql::table_name_for<order_row> {
70-
static constexpr ds_mysql::table_name value() noexcept { return ds_mysql::table_name{"order_row"}; }
71-
};
72-
7369
// Override 'amount' (index 2) to use DECIMAL(18,6) instead of DOUBLE
7470
template <>
7571
struct ds_mysql::field_schema<order_row, 2> {

0 commit comments

Comments
 (0)