@@ -18,14 +18,15 @@ const (
1818)
1919
2020type ddlManager struct {
21- parts int
22- warehouses int
23- partitionType int
24- useFK bool
21+ parts int
22+ warehouses int
23+ partitionType int
24+ useFK bool
25+ useClusteredIndex bool
2526}
2627
27- func newDDLManager (parts int , useFK bool , warehouses , partitionType int ) * ddlManager {
28- return & ddlManager {parts : parts , useFK : useFK , warehouses : warehouses , partitionType : partitionType }
28+ func newDDLManager (parts int , useFK bool , warehouses , partitionType int , useClusteredIndex bool ) * ddlManager {
29+ return & ddlManager {parts : parts , useFK : useFK , warehouses : warehouses , partitionType : partitionType , useClusteredIndex : useClusteredIndex }
2930}
3031
3132func (w * ddlManager ) createTableDDL (ctx context.Context , query string , tableName string ) error {
@@ -123,8 +124,16 @@ func (w *ddlManager) appendPartition(query string, partKeys string) string {
123124// createTables creates tables schema.
124125func (w * ddlManager ) createTables (ctx context.Context , driver string ) error {
125126 if driver == "mysql" {
127+
128+ var clusteredIndexType string
129+ if w .useClusteredIndex {
130+ clusteredIndexType = "CLUSTERED"
131+ } else {
132+ clusteredIndexType = "NONCLUSTERED"
133+ }
134+
126135 // Warehouse
127- query := `
136+ query := fmt . Sprintf ( `
128137CREATE TABLE IF NOT EXISTS warehouse (
129138 w_id INT NOT NULL,
130139 w_name VARCHAR(10),
@@ -135,8 +144,8 @@ CREATE TABLE IF NOT EXISTS warehouse (
135144 w_zip CHAR(9),
136145 w_tax DECIMAL(4, 4),
137146 w_ytd DECIMAL(12, 2),
138- PRIMARY KEY (w_id) /*T![clustered_index] CLUSTERED */
139- )`
147+ PRIMARY KEY (w_id) /*T![clustered_index] %s */
148+ )` , clusteredIndexType )
140149
141150 query = w .appendPartition (query , "w_id" )
142151
@@ -145,7 +154,7 @@ CREATE TABLE IF NOT EXISTS warehouse (
145154 }
146155
147156 // District
148- query = `
157+ query = fmt . Sprintf ( `
149158CREATE TABLE IF NOT EXISTS district (
150159 d_id INT NOT NULL,
151160 d_w_id INT NOT NULL,
@@ -158,8 +167,8 @@ CREATE TABLE IF NOT EXISTS district (
158167 d_tax DECIMAL(4, 4),
159168 d_ytd DECIMAL(12, 2),
160169 d_next_o_id INT,
161- PRIMARY KEY (d_w_id, d_id) /*T![clustered_index] CLUSTERED */
162- )`
170+ PRIMARY KEY (d_w_id, d_id) /*T![clustered_index] %s */
171+ )` , clusteredIndexType )
163172
164173 query = w .appendPartition (query , "d_w_id" )
165174
@@ -168,32 +177,32 @@ CREATE TABLE IF NOT EXISTS district (
168177 }
169178
170179 // Customer
171- query = `
180+ query = fmt . Sprintf ( `
172181CREATE TABLE IF NOT EXISTS customer (
173- c_id INT NOT NULL,
182+ c_id INT NOT NULL,
174183 c_d_id INT NOT NULL,
175- c_w_id INT NOT NULL,
176- c_first VARCHAR(16),
177- c_middle CHAR(2),
178- c_last VARCHAR(16),
179- c_street_1 VARCHAR(20),
180- c_street_2 VARCHAR(20),
181- c_city VARCHAR(20),
182- c_state CHAR(2),
183- c_zip CHAR(9),
184- c_phone CHAR(16),
185- c_since DATETIME,
186- c_credit CHAR(2),
187- c_credit_lim DECIMAL(12, 2),
188- c_discount DECIMAL(4,4),
189- c_balance DECIMAL(12,2),
190- c_ytd_payment DECIMAL(12,2),
191- c_payment_cnt INT,
192- c_delivery_cnt INT,
184+ c_w_id INT NOT NULL,
185+ c_first VARCHAR(16),
186+ c_middle CHAR(2),
187+ c_last VARCHAR(16),
188+ c_street_1 VARCHAR(20),
189+ c_street_2 VARCHAR(20),
190+ c_city VARCHAR(20),
191+ c_state CHAR(2),
192+ c_zip CHAR(9),
193+ c_phone CHAR(16),
194+ c_since DATETIME,
195+ c_credit CHAR(2),
196+ c_credit_lim DECIMAL(12, 2),
197+ c_discount DECIMAL(4,4),
198+ c_balance DECIMAL(12,2),
199+ c_ytd_payment DECIMAL(12,2),
200+ c_payment_cnt INT,
201+ c_delivery_cnt INT,
193202 c_data VARCHAR(500),
194- PRIMARY KEY(c_w_id, c_d_id, c_id) /*T![clustered_index] CLUSTERED */,
203+ PRIMARY KEY(c_w_id, c_d_id, c_id) /*T![clustered_index] %s */,
195204 INDEX idx_customer (c_w_id, c_d_id, c_last, c_first)
196- )`
205+ )` , clusteredIndexType )
197206
198207 query = w .appendPartition (query , "c_w_id" )
199208
@@ -221,21 +230,21 @@ CREATE TABLE IF NOT EXISTS history (
221230 return err
222231 }
223232
224- query = `
233+ query = fmt . Sprintf ( `
225234CREATE TABLE IF NOT EXISTS new_order (
226235 no_o_id INT NOT NULL,
227236 no_d_id INT NOT NULL,
228237 no_w_id INT NOT NULL,
229- PRIMARY KEY(no_w_id, no_d_id, no_o_id) /*T![clustered_index] CLUSTERED */
230- )`
238+ PRIMARY KEY(no_w_id, no_d_id, no_o_id) /*T![clustered_index] %s */
239+ )` , clusteredIndexType )
231240
232241 query = w .appendPartition (query , "no_w_id" )
233242 if err := w .createTableDDL (ctx , query , tableNewOrder ); err != nil {
234243 return err
235244 }
236245
237246 // because order is a keyword, so here we use orders instead
238- query = `
247+ query = fmt . Sprintf ( `
239248CREATE TABLE IF NOT EXISTS orders (
240249 o_id INT NOT NULL,
241250 o_d_id INT NOT NULL,
@@ -245,16 +254,16 @@ CREATE TABLE IF NOT EXISTS orders (
245254 o_carrier_id INT,
246255 o_ol_cnt INT,
247256 o_all_local INT,
248- PRIMARY KEY(o_w_id, o_d_id, o_id) /*T![clustered_index] CLUSTERED */,
257+ PRIMARY KEY(o_w_id, o_d_id, o_id) /*T![clustered_index] %s */,
249258 INDEX idx_order (o_w_id, o_d_id, o_c_id, o_id)
250- )`
259+ )` , clusteredIndexType )
251260
252261 query = w .appendPartition (query , "o_w_id" )
253262 if err := w .createTableDDL (ctx , query , tableOrders ); err != nil {
254263 return err
255264 }
256265
257- query = `
266+ query = fmt . Sprintf ( `
258267 CREATE TABLE IF NOT EXISTS order_line (
259268 ol_o_id INT NOT NULL,
260269 ol_d_id INT NOT NULL,
@@ -266,57 +275,57 @@ CREATE TABLE IF NOT EXISTS orders (
266275 ol_quantity INT,
267276 ol_amount DECIMAL(6, 2),
268277 ol_dist_info CHAR(24),
269- PRIMARY KEY(ol_w_id, ol_d_id, ol_o_id, ol_number) /*T![clustered_index] CLUSTERED */
270- )`
278+ PRIMARY KEY(ol_w_id, ol_d_id, ol_o_id, ol_number) /*T![clustered_index] %s */
279+ )` , clusteredIndexType )
271280
272281 query = w .appendPartition (query , "ol_w_id" )
273282 if err := w .createTableDDL (ctx , query , tableOrderLine ); err != nil {
274283 return err
275284 }
276285
277- query = `
286+ query = fmt . Sprintf ( `
278287CREATE TABLE IF NOT EXISTS stock (
279288 s_i_id INT NOT NULL,
280289 s_w_id INT NOT NULL,
281290 s_quantity INT,
282- s_dist_01 CHAR(24),
291+ s_dist_01 CHAR(24),
283292 s_dist_02 CHAR(24),
284293 s_dist_03 CHAR(24),
285- s_dist_04 CHAR(24),
286- s_dist_05 CHAR(24),
287- s_dist_06 CHAR(24),
288- s_dist_07 CHAR(24),
289- s_dist_08 CHAR(24),
290- s_dist_09 CHAR(24),
291- s_dist_10 CHAR(24),
292- s_ytd INT,
293- s_order_cnt INT,
294+ s_dist_04 CHAR(24),
295+ s_dist_05 CHAR(24),
296+ s_dist_06 CHAR(24),
297+ s_dist_07 CHAR(24),
298+ s_dist_08 CHAR(24),
299+ s_dist_09 CHAR(24),
300+ s_dist_10 CHAR(24),
301+ s_ytd INT,
302+ s_order_cnt INT,
294303 s_remote_cnt INT,
295304 s_data VARCHAR(50),
296- PRIMARY KEY(s_w_id, s_i_id) /*T![clustered_index] CLUSTERED */
297- )`
305+ PRIMARY KEY(s_w_id, s_i_id) /*T![clustered_index] %s */
306+ )` , clusteredIndexType )
298307
299308 query = w .appendPartition (query , "s_w_id" )
300309 if err := w .createTableDDL (ctx , query , tableStock ); err != nil {
301310 return err
302311 }
303312
304- query = `
313+ query = fmt . Sprintf ( `
305314CREATE TABLE IF NOT EXISTS item (
306315 i_id INT NOT NULL,
307316 i_im_id INT,
308317 i_name VARCHAR(24),
309318 i_price DECIMAL(5, 2),
310319 i_data VARCHAR(50),
311- PRIMARY KEY(i_id) /*T![clustered_index] CLUSTERED */
312- )`
320+ PRIMARY KEY(i_id) /*T![clustered_index] %s */
321+ )` , clusteredIndexType )
313322
314323 if err := w .createTableDDL (ctx , query , tableItem ); err != nil {
315324 return err
316325 }
317326
318327 if w .useFK {
319- query = `
328+ query = `
320329alter table district add constraint d_warehouse_fkey
321330 foreign key (d_w_id)
322331 references warehouse (w_id)`
@@ -446,26 +455,26 @@ CREATE TABLE IF NOT EXISTS district (
446455 // Customer
447456 query = `
448457CREATE TABLE IF NOT EXISTS customer (
449- c_id INT NOT NULL,
458+ c_id INT NOT NULL,
450459 c_d_id INT NOT NULL,
451- c_w_id INT NOT NULL,
452- c_first VARCHAR(16),
453- c_middle CHAR(2),
454- c_last VARCHAR(16),
455- c_street_1 VARCHAR(20),
456- c_street_2 VARCHAR(20),
457- c_city VARCHAR(20),
458- c_state CHAR(2),
459- c_zip CHAR(9),
460- c_phone CHAR(16),
461- c_since TIMESTAMP,
462- c_credit CHAR(2),
463- c_credit_lim DECIMAL(12, 2),
464- c_discount DECIMAL(4,4),
465- c_balance DECIMAL(12,2),
466- c_ytd_payment DECIMAL(12,2),
467- c_payment_cnt INT,
468- c_delivery_cnt INT,
460+ c_w_id INT NOT NULL,
461+ c_first VARCHAR(16),
462+ c_middle CHAR(2),
463+ c_last VARCHAR(16),
464+ c_street_1 VARCHAR(20),
465+ c_street_2 VARCHAR(20),
466+ c_city VARCHAR(20),
467+ c_state CHAR(2),
468+ c_zip CHAR(9),
469+ c_phone CHAR(16),
470+ c_since TIMESTAMP,
471+ c_credit CHAR(2),
472+ c_credit_lim DECIMAL(12, 2),
473+ c_discount DECIMAL(4,4),
474+ c_balance DECIMAL(12,2),
475+ c_ytd_payment DECIMAL(12,2),
476+ c_payment_cnt INT,
477+ c_delivery_cnt INT,
469478 c_data VARCHAR(500),
470479 PRIMARY KEY(c_w_id, c_d_id, c_id)
471480)`
@@ -557,18 +566,18 @@ CREATE TABLE IF NOT EXISTS stock (
557566 s_i_id INT NOT NULL,
558567 s_w_id INT NOT NULL,
559568 s_quantity INT,
560- s_dist_01 CHAR(24),
569+ s_dist_01 CHAR(24),
561570 s_dist_02 CHAR(24),
562571 s_dist_03 CHAR(24),
563- s_dist_04 CHAR(24),
564- s_dist_05 CHAR(24),
565- s_dist_06 CHAR(24),
566- s_dist_07 CHAR(24),
567- s_dist_08 CHAR(24),
568- s_dist_09 CHAR(24),
569- s_dist_10 CHAR(24),
570- s_ytd INT,
571- s_order_cnt INT,
572+ s_dist_04 CHAR(24),
573+ s_dist_05 CHAR(24),
574+ s_dist_06 CHAR(24),
575+ s_dist_07 CHAR(24),
576+ s_dist_08 CHAR(24),
577+ s_dist_09 CHAR(24),
578+ s_dist_10 CHAR(24),
579+ s_ytd INT,
580+ s_order_cnt INT,
572581 s_remote_cnt INT,
573582 s_data VARCHAR(50),
574583 PRIMARY KEY(s_w_id, s_i_id)
@@ -592,7 +601,7 @@ CREATE TABLE IF NOT EXISTS item (
592601 }
593602
594603 if w .useFK {
595- query = `
604+ query = `
596605alter table district add constraint d_warehouse_fkey
597606 foreign key (d_w_id)
598607 references warehouse (w_id)`
0 commit comments