Merge branch 'master' of /home/git/concurrency-benchmarks
[c11concurrency-benchmarks.git] / silo / benchmarks / tpcc.h
1 #ifndef _NDB_BENCH_TPCC_H_
2 #define _NDB_BENCH_TPCC_H_
3
4 #include "../record/encoder.h"
5 #include "../record/inline_str.h"
6 #include "../macros.h"
7
8 #define CUSTOMER_KEY_FIELDS(x, y) \
9   x(int32_t,c_w_id) \
10   y(int32_t,c_d_id) \
11   y(int32_t,c_id)
12 #define CUSTOMER_VALUE_FIELDS(x, y) \
13   x(float,c_discount) \
14   y(inline_str_fixed<2>,c_credit) \
15   y(inline_str_8<16>,c_last) \
16   y(inline_str_8<16>,c_first) \
17   y(float,c_credit_lim) \
18   y(float,c_balance) \
19   y(float,c_ytd_payment) \
20   y(int32_t,c_payment_cnt) \
21   y(int32_t,c_delivery_cnt) \
22   y(inline_str_8<20>,c_street_1) \
23   y(inline_str_8<20>,c_street_2) \
24   y(inline_str_8<20>,c_city) \
25   y(inline_str_fixed<2>,c_state) \
26   y(inline_str_fixed<9>,c_zip) \
27   y(inline_str_fixed<16>,c_phone) \
28   y(uint32_t,c_since) \
29   y(inline_str_fixed<2>,c_middle) \
30   y(inline_str_16<500>,c_data)
31 DO_STRUCT(customer, CUSTOMER_KEY_FIELDS, CUSTOMER_VALUE_FIELDS)
32
33 #define CUSTOMER_NAME_IDX_KEY_FIELDS(x, y) \
34   x(int32_t,c_w_id) \
35   y(int32_t,c_d_id) \
36   y(inline_str_fixed<16>,c_last) \
37   y(inline_str_fixed<16>,c_first)
38 #define CUSTOMER_NAME_IDX_VALUE_FIELDS(x, y) \
39         x(int32_t,c_id)
40 DO_STRUCT(customer_name_idx, CUSTOMER_NAME_IDX_KEY_FIELDS, CUSTOMER_NAME_IDX_VALUE_FIELDS)
41
42 #define DISTRICT_KEY_FIELDS(x, y) \
43   x(int32_t,d_w_id) \
44   y(int32_t,d_id)
45 #define DISTRICT_VALUE_FIELDS(x, y) \
46   x(float,d_ytd) \
47   y(float,d_tax) \
48   y(int32_t,d_next_o_id) \
49   y(inline_str_8<10>,d_name) \
50   y(inline_str_8<20>,d_street_1) \
51   y(inline_str_8<20>,d_street_2) \
52   y(inline_str_8<20>,d_city) \
53   y(inline_str_fixed<2>,d_state) \
54   y(inline_str_fixed<9>,d_zip)
55 DO_STRUCT(district, DISTRICT_KEY_FIELDS, DISTRICT_VALUE_FIELDS)
56
57 #define HISTORY_KEY_FIELDS(x, y) \
58   x(int32_t,h_c_id) \
59   y(int32_t,h_c_d_id) \
60   y(int32_t,h_c_w_id) \
61   y(int32_t,h_d_id) \
62   y(int32_t,h_w_id) \
63   y(uint32_t,h_date)
64 #define HISTORY_VALUE_FIELDS(x, y) \
65   x(float,h_amount) \
66   y(inline_str_8<24>,h_data)
67 DO_STRUCT(history, HISTORY_KEY_FIELDS, HISTORY_VALUE_FIELDS)
68
69 #define ITEM_KEY_FIELDS(x, y) \
70   x(int32_t,i_id)
71 #define ITEM_VALUE_FIELDS(x, y) \
72   x(inline_str_8<24>,i_name) \
73   y(float,i_price) \
74   y(inline_str_8<50>,i_data) \
75   y(int32_t,i_im_id)
76 DO_STRUCT(item, ITEM_KEY_FIELDS, ITEM_VALUE_FIELDS)
77
78 #define NEW_ORDER_KEY_FIELDS(x, y) \
79   x(int32_t,no_w_id) \
80   y(int32_t,no_d_id) \
81   y(int32_t,no_o_id)
82 // need dummy b/c our btree cannot have empty values.
83 // we also size value so that it can fit a key
84 #define NEW_ORDER_VALUE_FIELDS(x, y) \
85   x(inline_str_fixed<12>,no_dummy)
86 DO_STRUCT(new_order, NEW_ORDER_KEY_FIELDS, NEW_ORDER_VALUE_FIELDS)
87
88 #define OORDER_KEY_FIELDS(x, y) \
89   x(int32_t,o_w_id) \
90   y(int32_t,o_d_id) \
91   y(int32_t,o_id)
92 #define OORDER_VALUE_FIELDS(x, y) \
93   x(int32_t,o_c_id) \
94   y(int32_t,o_carrier_id) \
95   y(int8_t,o_ol_cnt) \
96   y(bool,o_all_local) \
97   y(uint32_t,o_entry_d)
98 DO_STRUCT(oorder, OORDER_KEY_FIELDS, OORDER_VALUE_FIELDS)
99
100 #define OORDER_C_ID_IDX_KEY_FIELDS(x, y) \
101   x(int32_t,o_w_id) \
102   y(int32_t,o_d_id) \
103   y(int32_t,o_c_id) \
104   y(int32_t,o_o_id)
105 #define OORDER_C_ID_IDX_VALUE_FIELDS(x, y) \
106         x(uint8_t,o_dummy)
107 DO_STRUCT(oorder_c_id_idx, OORDER_C_ID_IDX_KEY_FIELDS, OORDER_C_ID_IDX_VALUE_FIELDS)
108
109 #define ORDER_LINE_KEY_FIELDS(x, y) \
110   x(int32_t,ol_w_id) \
111   y(int32_t,ol_d_id) \
112   y(int32_t,ol_o_id) \
113   y(int32_t,ol_number)
114 #define ORDER_LINE_VALUE_FIELDS(x, y) \
115   x(int32_t,ol_i_id) \
116   y(uint32_t,ol_delivery_d) \
117   y(float,ol_amount) \
118   y(int32_t,ol_supply_w_id) \
119   y(int8_t,ol_quantity)
120 DO_STRUCT(order_line, ORDER_LINE_KEY_FIELDS, ORDER_LINE_VALUE_FIELDS)
121
122 #define STOCK_KEY_FIELDS(x, y) \
123   x(int32_t,s_w_id) \
124   y(int32_t,s_i_id)
125 #define STOCK_VALUE_FIELDS(x, y) \
126   x(int16_t,s_quantity) \
127   y(float,s_ytd) \
128   y(int32_t,s_order_cnt) \
129   y(int32_t,s_remote_cnt)
130 DO_STRUCT(stock, STOCK_KEY_FIELDS, STOCK_VALUE_FIELDS)
131
132 #define STOCK_DATA_KEY_FIELDS(x, y) \
133   x(int32_t,s_w_id) \
134   y(int32_t,s_i_id)
135 #define STOCK_DATA_VALUE_FIELDS(x, y) \
136   x(inline_str_8<50>,s_data) \
137   y(inline_str_fixed<24>,s_dist_01) \
138   y(inline_str_fixed<24>,s_dist_02) \
139   y(inline_str_fixed<24>,s_dist_03) \
140   y(inline_str_fixed<24>,s_dist_04) \
141   y(inline_str_fixed<24>,s_dist_05) \
142   y(inline_str_fixed<24>,s_dist_06) \
143   y(inline_str_fixed<24>,s_dist_07) \
144   y(inline_str_fixed<24>,s_dist_08) \
145   y(inline_str_fixed<24>,s_dist_09) \
146   y(inline_str_fixed<24>,s_dist_10)
147 DO_STRUCT(stock_data, STOCK_DATA_KEY_FIELDS, STOCK_DATA_VALUE_FIELDS)
148
149 #define WAREHOUSE_KEY_FIELDS(x, y) \
150   x(int32_t,w_id)
151 #define WAREHOUSE_VALUE_FIELDS(x, y) \
152   x(float,w_ytd) \
153   y(float,w_tax) \
154   y(inline_str_8<10>,w_name) \
155   y(inline_str_8<20>,w_street_1) \
156   y(inline_str_8<20>,w_street_2) \
157   y(inline_str_8<20>,w_city) \
158   y(inline_str_fixed<2>,w_state) \
159   y(inline_str_fixed<9>,w_zip)
160 DO_STRUCT(warehouse, WAREHOUSE_KEY_FIELDS, WAREHOUSE_VALUE_FIELDS)
161
162 #endif