📄 tscli.c
字号:
/************************************************************************Test for the client(c) 1996-1997 Innobase OyCreated 2/16/1996 Heikki Tuuri*************************************************************************/#include "ib_odbc.h"/*********************************************************************Test for TPC-C. */ulinttest_c(/*===*/ void* arg){ HSTMT* query; HSTMT* commit_query; HSTMT* new_order_query; HSTMT* payment_query; HSTMT* order_status_query; HSTMT* delivery_query; HSTMT* stock_level_query; HSTMT* print_query; ulint tm, oldtm; char* str; char* str1; char* str2; char* str3; char* str4; char* str5; char* str6; ulint i; UT_NOT_USED(arg); printf("-------------------------------------------------\n"); printf("TEST. CREATE TABLES FOR TPC-C\n"); /*------------------------------------------------------*/ str1 = " PROCEDURE CREATE_TABLES () IS"" BEGIN"" CREATE TABLE WAREHOUSE (W_ID CHAR, W_NAME CHAR,"" W_STREET_1 CHAR, W_STREET_2 CHAR,"" W_CITY CHAR,"" W_STATE CHAR, W_ZIP CHAR,"" W_TAX INT,"" W_YTD_HIGH INT,"" W_YTD INT);""" " CREATE UNIQUE CLUSTERED INDEX W_IND ON WAREHOUSE (W_ID);""" " CREATE TABLE DISTRICT (D_ID CHAR, D_W_ID CHAR,"" D_NAME CHAR,"" D_STREET_1 CHAR, D_STREET_2 CHAR,"" D_CITY CHAR,"" D_STATE CHAR, D_ZIP CHAR,"" D_TAX INT,"" D_YTD_HIGH INT,"" D_YTD INT,"" D_NEXT_O_ID INT);""" " CREATE UNIQUE CLUSTERED INDEX D_IND ON DISTRICT (D_W_ID, D_ID);""" " CREATE TABLE CUSTOMER (C_ID CHAR, C_D_ID CHAR, C_W_ID CHAR,"" C_FIRST CHAR, C_MIDDLE CHAR,"" C_LAST CHAR,"" C_STREET_1 CHAR, C_STREET_2 CHAR,"" C_CITY CHAR,"" C_STATE CHAR, C_ZIP CHAR,"" C_PHONE CHAR,"" C_SINCE_TIME INT,"" C_SINCE INT,"" C_CREDIT CHAR,"" C_CREDIT_LIM_HIGH INT,"" C_CREDIT_LIM INT,"" C_DISCOUNT INT,"" C_BALANCE_HIGH INT,"" C_BALANCE INT,"" C_YTD_PAYMENT_HIGH INT,"" C_YTD_PAYMENT INT,"" C_PAYMENT_CNT INT,"" C_DELIVERY_CNT INT,"" C_DATA CHAR);""" " CREATE UNIQUE CLUSTERED INDEX C_IND ON CUSTOMER (C_W_ID, C_D_ID,"" C_ID);""" " CREATE INDEX C_LAST_IND ON CUSTOMER (C_W_ID, C_D_ID, C_LAST,"" C_FIRST);""" " CREATE TABLE HISTORY (H_C_ID CHAR, H_C_D_ID CHAR, H_C_W_ID CHAR,"" H_D_ID CHAR, H_W_ID CHAR,"" H_DATE INT,"" H_AMOUNT INT,"" H_DATA CHAR);""" " CREATE CLUSTERED INDEX H_IND ON HISTORY (H_W_ID);""" " CREATE TABLE NEW_ORDER (NO_O_ID INT,"" NO_D_ID CHAR,"" NO_W_ID CHAR);""" " CREATE UNIQUE CLUSTERED INDEX NO_IND ON NEW_ORDER (NO_W_ID, NO_D_ID,"" NO_O_ID);" ; str2 = " CREATE TABLE ORDERS (O_ID INT, O_D_ID CHAR, O_W_ID CHAR,"" O_C_ID CHAR,"" O_ENTRY_D INT,"" O_CARRIER_ID INT,"" O_OL_CNT INT,"" O_ALL_LOCAL CHAR);""" " CREATE UNIQUE CLUSTERED INDEX O_IND ON ORDERS (O_W_ID, O_D_ID,"" O_ID);"" CREATE INDEX O_C_IND ON ORDERS (O_W_ID, O_D_ID, O_C_ID);""" " CREATE TABLE ORDER_LINE (OL_O_ID INT, OL_D_ID CHAR, OL_W_ID CHAR,"" OL_NUMBER CHAR,"" OL_I_ID CHAR,"" OL_SUPPLY_W_ID CHAR,"" OL_DELIVERY_D INT,"" OL_QUANTITY INT,"" OL_AMOUNT INT,"" OL_DIST_INFO CHAR);""" " CREATE UNIQUE CLUSTERED INDEX OL_IND ON ORDER_LINE"" (OL_W_ID, OL_D_ID, OL_O_ID, OL_NUMBER);""" " CREATE TABLE ITEM (I_ID CHAR, I_IM_ID CHAR, I_NAME CHAR,"" I_PRICE INT,"" I_DATA CHAR);""" " CREATE UNIQUE CLUSTERED INDEX I_IND ON ITEM (I_ID);""" " CREATE TABLE STOCK (S_I_ID CHAR,"" S_W_ID CHAR,"" S_QUANTITY INT,"" S_DIST_01 CHAR,"" S_DIST_02 CHAR,"" S_DIST_03 CHAR,"" S_DIST_04 CHAR,"" S_DIST_05 CHAR,"" S_DIST_06 CHAR,"" S_DIST_07 CHAR,"" S_DIST_08 CHAR,"" S_DIST_09 CHAR,"" S_DIST_10 CHAR,"" S_YTD INT,"" S_ORDER_CNT INT,"" S_REMOTE_CNT INT,"" S_DATA CHAR);""" " CREATE UNIQUE CLUSTERED INDEX S_IND ON STOCK (S_W_ID, S_I_ID);"" END;" ; str = ut_str_catenate(str1, str2); query = pars_sql(str); mem_free(str); tm = ut_clock(); printf("Wall time for test %lu milliseconds\n", tm - oldtm); /*-----------------------------------------------------------*/ printf("\n\nPopulate TPC-C tables\n\n"); str1 = " PROCEDURE POPULATE_TABLES () IS"""" i INT;"" j INT;"" k INT;"" t INT;"" string CHAR;"" rnd1 INT;"" rnd2 INT;"" n_items INT;"" n_warehouses INT;"" n_districts INT;"" n_customers INT;"""" BEGIN"""" n_items := 200;"" n_warehouses := 1;"" n_districts := 10;"" n_customers := 200;"""" PRINTF('Starting to populate ITEMs');"""" FOR i IN 1 .. n_items LOOP"" rnd1 := RND(26, 50);"" string := RND_STR(rnd1);"""" IF (RND(0, 9) = 0) THEN"" rnd2 := RND(0, rnd1 - 8);"" REPLSTR(string, 'ORIGINAL', rnd2, 8);"" COMMIT WORK;"" END IF;"""" INSERT INTO ITEM VALUES (TO_BINARY(i, 3),"" TO_BINARY(RND(1, 10000), 3),"" RND_STR(RND(14, 24)),"" RND(100, 10000),"" string);"" END LOOP;"""" FOR i IN 1 .. n_warehouses LOOP"" PRINTF('Starting to populate warehouse number ', i);"" INSERT INTO WAREHOUSE VALUES (TO_BINARY(i, 2),"" RND_STR(RND(6, 10)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(2),"" CONCAT(SUBSTR(TO_CHAR(RND(0, 9999)),"" 6, 4),"" '11111'),"" RND(0, 2000),"" 0,"" 0);"" FOR j IN 1 .. n_items LOOP"""" rnd1 := RND(26, 50);"" string := RND_STR(rnd1);"""" IF (RND(0, 9) = 0) THEN"" rnd2 := RND(0, rnd1 - 8);"" REPLSTR(string, 'ORIGINAL', rnd2, 8);"" COMMIT WORK;"" END IF; """" INSERT INTO STOCK VALUES (TO_BINARY(j, 3),"" TO_BINARY(i, 2),"" RND(10, 100),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" RND_STR(24),"" 0, 0, 0,"" string);"" END LOOP;" ; str2 =" FOR j IN 1 .. n_districts LOOP"""" COMMIT WORK;"" PRINTF('Starting to populate district number ', j);"" INSERT INTO DISTRICT VALUES (TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" RND_STR(RND(6, 10)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(2),"" CONCAT(SUBSTR("" TO_CHAR(RND(0, 9999)),"" 6, 4),"" '11111'),"" RND(0, 2000),"" 0,"" 0,"" 3001);"""" FOR k IN 1 .. n_customers LOOP"""" string := 'GC';"""" IF (RND(0, 9) = 7) THEN"" COMMIT WORK;"" string := 'BC';"" END IF;"" "" INSERT INTO CUSTOMER VALUES ("" TO_BINARY(k, 3),"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" RND_STR(RND(8, 16)),"" 'OE',"" CONCAT('NAME',"" TO_CHAR(k / 3)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(RND(10, 20)),"" RND_STR(2),"" CONCAT(SUBSTR("" TO_CHAR(RND(0, 9999)),"" 6, 4),"" '11111'),"" RND_STR(16),"" SYSDATE(), 0,"" string,"" 0, 5000000,"" RND(0, 5000),"" 0, 0, 0, 0, 0, 0,"" RND_STR(RND(300, 500)));" ; str3 =" INSERT INTO HISTORY VALUES ("" TO_BINARY(k, 3),"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" SYSDATE(),"" 1000,"" RND_STR(RND(12, 24)));"""" rnd1 := RND(5, 15);"""" INSERT INTO ORDERS VALUES ("" k,"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" TO_BINARY(k, 3),"" SYSDATE(),"" RND(1, 10),"" rnd1,"" '1');"""" FOR t IN 1 .. rnd1 LOOP"" INSERT INTO ORDER_LINE VALUES ("" k,"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2),"" TO_BINARY(t, 1),"" TO_BINARY("" RND(0, n_items - 1),"" 3),"" TO_BINARY(i, 2),"" SYSDATE(),"" RND(0, 99),"" RND(0, 9999),"" RND_STR(24));"" END LOOP;"" END LOOP;"" "" FOR k IN (2 * n_customers) / 3 .. n_customers LOOP"" "" INSERT INTO NEW_ORDER VALUES ("" k,"" TO_BINARY(j + 47, 1),"" TO_BINARY(i, 2));"" END LOOP;"" END LOOP;"" END LOOP; "" "" COMMIT WORK;"" END;" ; str4 = ut_str_catenate(str1, str2); str = ut_str_catenate(str4, str3); query = pars_sql(str); mem_free(str); mem_free(str4); tm = ut_clock(); printf("Wall time for test %lu milliseconds\n", tm - oldtm); /*-----------------------------------------------------------*/ str = " PROCEDURE PRINT_TABLES () IS"" BEGIN"""" /* PRINTF('Printing ITEM table:');"""" ROW_PRINTF"" SELECT *"" FROM ITEM;"""" PRINTF('Printing WAREHOUSE table:');"""" ROW_PRINTF"" SELECT *"" FROM WAREHOUSE;"""" PRINTF('Printing STOCK table:');"""" ROW_PRINTF"" SELECT *"" FROM STOCK;"""" PRINTF('Printing DISTRICT table:');"""" ROW_PRINTF"" SELECT *"" FROM DISTRICT;"""" PRINTF('Printing CUSTOMER table:');"""" ROW_PRINTF"" SELECT *"" FROM CUSTOMER;"""" PRINTF('Printing HISTORY table:');"""" ROW_PRINTF"" SELECT *"" FROM HISTORY;"""" PRINTF('Printing ORDERS table:');"""" ROW_PRINTF"" SELECT *"" FROM ORDERS;"""" PRINTF('Printing ORDER_LINE table:');"""" ROW_PRINTF"" SELECT *"" FROM ORDER_LINE"" WHERE OL_O_ID >= 3000; */"""" PRINTF('Printing NEW_ORDER table:');"""" ROW_PRINTF"" SELECT *"" FROM NEW_ORDER;"""" COMMIT WORK;"" END;" ; print_query = pars_sql(str); /*-----------------------------------------------------------*/ commit_query = pars_sql(" PROCEDURE COMMIT_TEST () IS"" "" BEGIN"" COMMIT WORK;"" END;" ); /*-----------------------------------------------------------*/ str1 = " PROCEDURE NEW_ORDER () IS"""" i INT;"" n_items INT;"" n_warehouses INT;"" n_districts INT;"" n_customers INT;"" w_tax INT;"" c_w_id CHAR;"" c_d_id CHAR;"" c_id CHAR;"" c_discount INT;"" c_last CHAR;"" c_credit CHAR;"" d_tax INT;"" o_id INT;"" o_ol_cnt INT;"" ol_i_id CHAR;"" o_entry_d INT;"" o_all_local CHAR;"" i_price INT;"" i_name CHAR;"" i_data CHAR;"" s_quantity INT;"" s_data CHAR;"" s_dist_01 CHAR;"" s_dist_02 CHAR;"" s_dist_03 CHAR;"" s_dist_04 CHAR;"" s_dist_05 CHAR;"" s_dist_06 CHAR;"" s_dist_07 CHAR;"" s_dist_08 CHAR;"" s_dist_09 CHAR;"" s_dist_10 CHAR;"" bg CHAR;"" ol_quantity INT;"" ol_amount INT;"" ol_supply_w_id CHAR;"" ol_dist_info CHAR;"" total INT;"""" DECLARE CURSOR district_cursor IS"" SELECT D_NEXT_O_ID, D_TAX"" FROM DISTRICT"" WHERE D_ID = c_d_id AND D_W_ID = c_w_id"" FOR UPDATE;"""" DECLARE CURSOR stock_cursor IS"" SELECT S_QUANTITY, S_DATA,"" S_DIST_01, S_DIST_02, S_DIST_03, S_DIST_04,"" S_DIST_05, S_DIST_06, S_DIST_07, S_DIST_08,"" S_DIST_09, S_DIST_10"" FROM STOCK"" WHERE S_W_ID = ol_supply_w_id AND S_I_ID = ol_i_id"" FOR UPDATE;" ; str2 = " BEGIN"" "" n_items := 200;"" n_warehouses := 1;"" n_districts := 10;"" n_customers := 200;"" "" c_w_id := TO_BINARY(RND(1, n_warehouses), 2);"" c_d_id := TO_BINARY(RND(1, n_districts) + 47, 1);"" c_id := TO_BINARY(RND(1, n_customers), 3);"""" o_ol_cnt := RND(5, 15);"" o_all_local := '1';"" bg := 'GGGGGGGGGGGGGGG';"" total := 0;"" "" SELECT W_TAX INTO w_tax"" FROM WAREHOUSE"" WHERE W_ID = c_w_id;"""" OPEN district_cursor;"""" FETCH district_cursor INTO o_id, d_tax;"""" /* PRINTF('C-warehouse id ', BINARY_TO_NUMBER(c_w_id),"" ' C-district id ', c_d_id,"" ' order id ', o_id, ' linecount ', o_ol_cnt); */"""" UPDATE DISTRICT SET D_NEXT_O_ID = o_id + 1"" WHERE CURRENT OF district_cursor;"""" CLOSE district_cursor;"""" SELECT C_DISCOUNT, C_LAST, C_CREDIT INTO c_discount, c_last, c_credit"" FROM CUSTOMER"" WHERE C_W_ID = c_w_id AND C_D_ID = c_d_id AND C_ID = c_id;""" ; str3 =" FOR i IN 1 .. o_ol_cnt LOOP"""
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -