⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tscli.c

📁 Mysql for Windows最新源码
💻 C
📖 第 1 页 / 共 5 页
字号:
"""	ROLLBACK WORK;"""	"	END;"	;	rollback_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE TEST_LOCK_WAIT () IS""""	w_id CHAR;""	BEGIN""""	w_id := TO_BINARY(1, 2);""	UPDATE WAREHOUSE SET W_YTD = W_YTD + 1 WHERE W_ID = w_id;"""	"	END;"	;	lock_wait_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE TEST_IBUF () IS""""	i INT;""	rnd INT;""	j INT;""	found INT;""""	DECLARE CURSOR desc_cursor IS""		SELECT IB_A""		FROM IBUF_TEST""			WHERE IB_A >= rnd AND IB_A < rnd + 50""			ORDER BY IB_A DESC;""""	BEGIN""""	PRINTF('Ibuf QUERY starts!!!!!!');""	rnd := RND(1, 1000);""""	FOR i IN 1 .. 50 LOOP""		INSERT INTO IBUF_TEST VALUES (rnd + i,""						RND_STR(RND(1, 2000)));""	END LOOP;""	IF (RND(1, 100) < 30) THEN""		PRINTF('Ibuf rolling back ---!!!');""		ROLLBACK WORK;""	END IF;""""""	IF (RND(1, 100) < 101) THEN""		rnd := RND(1, 1000);""		DELETE FROM IBUF_TEST WHERE IB_A >= rnd ""						AND IB_A <= rnd + 50;""	END IF;""""	rnd := RND(1, 1000);""	SELECT COUNT(*) INTO j""		FROM IBUF_TEST""		WHERE IB_A >= rnd AND IB_A < rnd + 50;""""	PRINTF('Count: ', j);""""	rnd := RND(1, 1000);""	UPDATE IBUF_TEST""		SET IB_B = RND_STR(RND(1, 2000))""		WHERE IB_A >= rnd AND IB_A < rnd + 50;""""	OPEN desc_cursor;""""	rnd := RND(1, 1000);""	found := 1;""	WHILE (found > 0) LOOP""""		FETCH desc_cursor INTO j;""""		IF (desc_cursor % NOTFOUND) THEN""			found := 0;""		END IF;""	END LOOP;""""	CLOSE desc_cursor;""""	IF (RND(1, 100) < 30) THEN""		PRINTF('Ibuf rolling back!!!');""		ROLLBACK WORK;""	ELSE""		COMMIT WORK;""	END IF;""""	PRINTF('Ibuf QUERY ends!!!!!!');""	END;"	;	ibuf_test_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE TEST_GROUP_COMMIT (w_id IN CHAR) IS""""	i INT;""""	BEGIN""""	FOR i IN 1 .. 200 LOOP""		UPDATE WAREHOUSE SET W_YTD = W_YTD + 1 WHERE W_ID = w_id;""		COMMIT WORK;""	END LOOP;""	END;"	;	test_group_commit_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE TEST_SINGLE_ROW_SELECT (""				i_id IN CHAR,""				i_name OUT CHAR) IS""	BEGIN""	SELECT I_NAME INTO i_name""	FROM ITEM""		WHERE I_ID = i_id""		CONSISTENT READ;""	END;"	;	test_single_row_select_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE JOIN_TEST () IS"""" 	n_rows INT;""	i INT;""""	BEGIN""""	FOR i IN 0 .. 0 LOOP""		SELECT COUNT(*) INTO n_rows""		FROM JTEST1, JTEST2""			WHERE JT2_A = JT1_B""			CONSISTENT READ;""		PRINTF(n_rows);""""		COMMIT WORK;""	END LOOP;""""	END;"	;	join_test_str = str;	/*-----------------------------------------------------------*/	str =	"	PROCEDURE TEST_ERRORS (switch IN CHAR) IS""""	count	INT;""	val	INT;""""	BEGIN""""	IF (switch = '01') THEN""		/* Test duplicate key error: run this first */""		ROW_PRINTF SELECT * FROM JTEST1;""		PRINTF('To insert first');""		INSERT INTO JTEST1 VALUES (1, 1);""		PRINTF('To insert second');""		INSERT INTO JTEST1 VALUES (2, 2);""	END IF;""""	IF (switch = '02') THEN""		/* Test duplicate key error: run this second */""		ROW_PRINTF SELECT * FROM JTEST1;""		PRINTF('To insert third');""		INSERT INTO JTEST1 VALUES (3, 3);""		ROW_PRINTF SELECT * FROM JTEST1;""		PRINTF('To insert fourth');""		INSERT INTO JTEST1 VALUES (1, 1);""	END IF;""""	IF (switch = '03') THEN""		/* Test duplicate key error: run this third */""		ROW_PRINTF SELECT * FROM JTEST1;""		PRINTF('Testing assert');""		SELECT COUNT(*) INTO count FROM JTEST1;""		ASSERT(count = 2);""	END IF;""""	IF (switch = '04') THEN""		/* Test duplicate key error: run this fourth */""		ROW_PRINTF SELECT * FROM JTEST1;""		PRINTF('Testing update');""		UPDATE JTEST1 SET JT1_A = 3 WHERE JT1_A = 2;" "		PRINTF('Testing update');""		UPDATE JTEST1 SET JT1_A = 1 WHERE JT1_A = 3;" "	END IF;"""	"	IF (switch = '05') THEN""		/* Test deadlock error: run this fifth in thread 1 */""		COMMIT WORK;""		PRINTF('Testing update in thread 1');""		UPDATE JTEST1 SET JT1_B = 3 WHERE JT1_A = 1;" "	END IF;""""	IF (switch = '06') THEN""		/* Test deadlock error: run this sixth in thread 2 */""		PRINTF('Testing update in thread 2');""		UPDATE JTEST1 SET JT1_B = 10 WHERE JT1_A = 2;" "		PRINTF('Testing update in thread 2');""		UPDATE JTEST1 SET JT1_B = 11 WHERE JT1_A = 1;" "		PRINTF('Update in thread 2 completed');""		SELECT JT1_B INTO val FROM JTEST1 WHERE JT1_A = 1;""		ASSERT(val = 11);""		SELECT JT1_B INTO val FROM JTEST1 WHERE JT1_A = 2;""		ASSERT(val = 10);"		"		COMMIT WORK;""	END IF;""""	IF (switch = '07') THEN""		/* Test deadlock error: run this seventh in thread 1 */""		PRINTF('Testing update in thread 1: deadlock');""		UPDATE JTEST1 SET JT1_B = 4 WHERE JT1_A = 2;" "	END IF;"""	"	IF (switch = '08') THEN""		/* Test deadlock error: run this eighth in thread 1 */""		PRINTF('Testing update in thread 1: commit');""		SELECT JT1_B INTO val FROM JTEST1 WHERE JT1_A = 1;""		ASSERT(val = 3);""		COMMIT WORK;""	END IF;"""	"	END;"	;	test_errors_str = str;	/*-----------------------------------------------------------*/	ret = SQLAllocEnv(&env);	ut_a(ret == SQL_SUCCESS);	ret = SQLAllocConnect(env, &conn);	ut_a(ret == SQL_SUCCESS);	ret = SQLAllocStmt(conn, &stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLAllocStmt(conn, &create_query);	ut_a(ret == SQL_SUCCESS);	ret = SQLAllocStmt(conn, &populate_query);	ut_a(ret == SQL_SUCCESS);	ret = SQLConnect(conn, (UCHAR*)cli_srv_endpoint_name,				(SWORD)ut_strlen(cli_srv_endpoint_name),				(UCHAR*)"use21", 5, (UCHAR*)"password", 8);	ut_a(ret == SQL_SUCCESS);	printf("Connection established\n");	/*-----------------------------------------------------------*/	ret = SQLPrepare(stat, (UCHAR*)create_str, ut_strlen(create_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	str = "{CREATE_TABLES()}";		ret = SQLPrepare(create_query, (UCHAR*)str, ut_strlen(str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(create_query);	ut_a(ret == SQL_SUCCESS);	/*-----------------------------------------------------------*/	ret = SQLPrepare(stat, (UCHAR*)populate_str, ut_strlen(populate_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)lock_wait_str,						ut_strlen(lock_wait_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)commit_str,						ut_strlen(commit_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)print_str,						ut_strlen(print_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)new_order_str,						ut_strlen(new_order_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)payment_str,						ut_strlen(payment_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)order_status_str,						ut_strlen(order_status_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)delivery_str,						ut_strlen(delivery_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)stock_level_str,						ut_strlen(stock_level_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)query_5_str,						ut_strlen(query_5_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)consistency_str,						ut_strlen(consistency_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)rollback_str, ut_strlen(rollback_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)join_test_str,						ut_strlen(join_test_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)test_errors_str,						ut_strlen(test_errors_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)test_single_row_select_str,				ut_strlen(test_single_row_select_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)test_group_commit_str,					ut_strlen(test_group_commit_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	ret = SQLPrepare(stat, (UCHAR*)ibuf_test_str,					ut_strlen(ibuf_test_str));	ut_a(ret == SQL_SUCCESS);	ret = SQLExecute(stat);	ut_a(ret == SQL_SUCCESS);	str = "{POPULATE_TABLES(?, ?)}";		ret = SQLPrepare(populate_query, (UCHAR*)str, ut_strlen(str));	ut_a(ret == SQL_SUCCESS);	ret = SQLBindParameter(populate_query, 1, SQL_PARAM_INPUT,				SQL_C_LONG, SQL_INTEGER, 0, 0,				(byte*)&n_warehouses_buf,				4, &n_warehouses_len);	ut_a(ret == SQL_SUCCESS);	n_warehouses_buf = n_warehouses;	n_warehouses_len = 4;	ret = SQLBindParameter(populate_query, 2, SQL_PARAM_INPUT,				SQL_C_LONG, SQL_INTEGER, 0, 0,				(byte*)&n_customers_d_buf,				4, &n_customers_d_len);	ut_a(ret == SQL_SUCCESS);	n_customers_d_buf = n_customers_d;	n_customers_d_len = 4;	ret = SQLExecute(populate_query);	ut_a(ret == SQL_SUCCESS);	/*-----------------------------------------------------------*/			printf("TPC-C test database initialized\n");	return(0);}/*********************************************************************Iterates an SQL query until it returns SQL_SUCCESS. If it returns othervalue, rolls back the trx, prints an error message, and tries again. */voidexecute_until_success(/*==================*/	HSTMT	query,		/* in: query */	HSTMT	rollback_query)	/* in: trx rollback query to run if error */{	RETCODE	ret;	UCHAR	sql_state[6];	SDWORD	native_error;	UCHAR	error_msg[512];	SWORD	error_msg_max	= 512;	SWORD	error_msg_len;	for (;;) {		ret = SQLExecute(query);		if (ret != SQL_SUCCESS) {			ut_a(ret == SQL_ERROR);						ret = SQLError(SQL_NULL_HENV, SQL_NULL_HDBC, query,					sql_state, &native_error, error_msg,					error_msg_max, &error_msg_len);			ut_a(ret == SQL_SUCCESS);			printf("%s\n", error_msg);			/* Roll back to release trx locks, and try again */			ret = SQLExecute(rollback_query);			ut_a(ret == SQL_SUCCESS);			os_thread_sleep(ut_rnd_gen_ulint() / 1000);		} else {			return;		}	}}/*********************************************************************Test for TPC-C. */ulinttest_client(/*=========*/	void*	arg)	/* in: user name as a null-terminated string */{	ulint	n_customers = 20;	ulint	n_items = 200;	ulint	n_lines;	bool	put_invalid_item;	HENV	env;	HDBC	conn;	RETCODE	ret;	HSTMT	commit_query;	HSTMT	new_order_query;	HSTMT	payment_query;	HSTMT	order_status_query;	HSTMT	delivery_query;	HSTMT	stock_level_query;	HSTMT	print_query;	HSTMT	lock_wait_query;	HSTMT	join_test_query;	HSTMT	test_group_commit_query;	HSTMT	rollback_query;	HSTMT	ibuf_query;	ulint	tm, oldtm;	char*	str;	byte	c_w_id_buf[2];	byte	c_d_id_buf[1];	byte	c_id_buf[3];	byte	ol_supply_w_ids_buf[30];	byte	ol_i_ids_buf[45];	byte	ol_quantities_buf[15];	byte	c_last_buf[51];	byte	c_credit_buf[3];	ulint	c_discount_buf;	ulint	w_tax_buf;	ulint	d_tax_buf;	ulint	o_ol_count_buf;	ulint	o_id_buf;	ulint	o_entry_d_buf;	ulint	total_buf;	byte	i_names_buf[361];	byte	s_quantities_buf[60];	byte	bg_buf[16];	byte	i_prices_buf[60];	byte	ol_amounts_buf[60];	SDWORD	c_w_id_len;	SDWORD	c_d_id_len;	SDWORD	c_id_len;	SDWORD	ol_supply_w_ids_len;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -