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

📄 tsbtr97.c

📁 Mysql for Windows最新源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************Test for the B-tree(c) 1996-1997 Innobase OyCreated 2/16/1996 Heikki Tuuri*************************************************************************/#include "os0proc.h"#include "sync0sync.h"#include "ut0mem.h"#include "mem0mem.h"#include "mem0pool.h"#include "data0data.h"#include "data0type.h"#include "dict0dict.h"#include "buf0buf.h"#include "buf0flu.h"#include "os0file.h"#include "os0thread.h"#include "fil0fil.h"#include "fsp0fsp.h"#include "rem0rec.h"#include "rem0cmp.h"#include "mtr0mtr.h"#include "log0log.h"#include "log0recv.h"#include "page0page.h"#include "page0cur.h"#include "trx0trx.h"#include "dict0boot.h"#include "trx0sys.h"#include "dict0crea.h"#include "btr0btr.h"#include "btr0pcur.h"#include "btr0cur.h"#include "btr0sea.h"#include "rem0rec.h"#include "srv0srv.h"#include "que0que.h"#include "com0com.h"#include "usr0sess.h"#include "lock0lock.h"#include "trx0roll.h"#include "trx0purge.h"#include "row0ins.h"#include "row0upd.h"#include "row0row.h"#include "row0del.h"#include "lock0lock.h"#include "ibuf0ibuf.h"os_file_t	files[1000];mutex_t		ios_mutex;ulint		ios;ulint		n[10];mutex_t		incs_mutex;ulint		incs;byte		bigbuf[1000000];#define N_SPACES	2#define N_FILES		1#define FILE_SIZE	512 	/* must be > 512 */#define POOL_SIZE	500#define	COUNTER_OFFSET	1500#define N_LOG_GROUPS	2	#define N_LOG_FILES	3#define LOG_FILE_SIZE	500#define LOOP_SIZE	150#define	N_THREADS	5#define	COUNT		1ulint zero = 0;buf_block_t*	bl_arr[POOL_SIZE];ulint	dummy = 0;byte	rnd_buf[256 * 256];/************************************************************************Io-handler thread function. */ulinthandler_thread(/*===========*/	void*	arg){	ulint	segment;	ulint	i;		segment = *((ulint*)arg);	printf("Io handler thread %lu starts\n", segment);	for (i = 0;; i++) {		fil_aio_wait(segment);		mutex_enter(&ios_mutex);		ios++;		mutex_exit(&ios_mutex);			}	return(0);}/*************************************************************************Creates or opens the log files. */voidcreate_log_files(void)/*==================*/{	bool		ret;	ulint		i, k;	char		name[20];	printf("--------------------------------------------------------\n");	printf("Create or open log files\n");	strcpy(name, "logfile00");	for (k = 0; k < N_LOG_GROUPS; k++) {	    for (i = 0; i < N_LOG_FILES; i++) {		name[6] = (char)((ulint)'0' + k);		name[7] = (char)((ulint)'0' + i);			files[i] = os_file_create(name, OS_FILE_CREATE, OS_FILE_AIO,									&ret);		if (ret == FALSE) {			ut_a(os_file_get_last_error() ==						OS_FILE_ALREADY_EXISTS);				files[i] = os_file_create(				name, OS_FILE_OPEN, OS_FILE_AIO, &ret);			ut_a(ret);		} else {			ut_a(os_file_set_size(files[i],						8192 * LOG_FILE_SIZE, 0));		}		ret = os_file_close(files[i]);		ut_a(ret);		if (i == 0) {			fil_space_create(name, k + 100, FIL_LOG);		}		ut_a(fil_validate());		fil_node_create(name, LOG_FILE_SIZE, k + 100);	    }	    	    fil_space_create(name, k + 200, FIL_LOG);	    	    	    log_group_init(k, N_LOG_FILES, LOG_FILE_SIZE * UNIV_PAGE_SIZE,							k + 100, k + 200);	}}/*************************************************************************Creates the files for the file system test and inserts them to the filesystem. */voidcreate_files(void)/*==============*/{	bool		ret;	ulint		i, k, j, c;	char		name[20];	os_thread_t	thr[10];	os_thread_id_t	id[10];	printf("--------------------------------------------------------\n");	printf("Create or open database files\n");		strcpy(name, "tsfile00");	for (k = 0; k < 2 * N_SPACES; k += 2) {	for (i = 0; i < N_FILES; i++) {		name[6] = (char)((ulint)'0' + k);		name[7] = (char)((ulint)'0' + i);			files[i] = os_file_create(name, OS_FILE_CREATE,						OS_FILE_NORMAL, &ret);		if (ret == FALSE) {			ut_a(os_file_get_last_error() ==						OS_FILE_ALREADY_EXISTS);				files[i] = os_file_create(				name, OS_FILE_OPEN, OS_FILE_NORMAL, &ret);			ut_a(ret);		} else {			ut_a(os_file_set_size(files[i],					UNIV_PAGE_SIZE * FILE_SIZE, 0));			/* Initialize the file contents to a random value */									for (j = 0; j < FILE_SIZE; j++) {				for (c = 0; c < UNIV_PAGE_SIZE; c++) {					rnd_buf[c] = 0xFF;						/*(byte)						(ut_rnd_gen_ulint() % 256); */				}				os_file_write(files[i], rnd_buf,						UNIV_PAGE_SIZE * j, 0,						UNIV_PAGE_SIZE);			}		}		ret = os_file_close(files[i]);		ut_a(ret);		if (i == 0) {			fil_space_create(name, k, FIL_TABLESPACE);		}		ut_a(fil_validate());		fil_node_create(name, FILE_SIZE, k);	}	}	ios = 0;	mutex_create(&ios_mutex);	mutex_set_level(&ios_mutex, SYNC_NO_ORDER_CHECK);		for (i = 0; i < 9; i++) {		n[i] = i;		thr[i] = os_thread_create(handler_thread, n + i, id + i);	}}/************************************************************************Inits space headers of spaces 0 and 2. */voidinit_spaces(void)/*=============*/{	mtr_t	mtr;	mtr_start(&mtr);	fsp_header_init(0, FILE_SIZE * N_FILES, &mtr);			fsp_header_init(2, FILE_SIZE * N_FILES, &mtr);	mtr_commit(&mtr);}/*********************************************************************Test for table creation. */ulinttest1(/*==*/	void*	arg){	sess_t*		sess;	com_endpoint_t*	com_endpoint;	mem_heap_t*	heap;	dict_index_t*	index;		dict_table_t*	table;	que_fork_t*	fork;	que_thr_t*	thr;	trx_t*		trx;	UT_NOT_USED(arg);	printf("-------------------------------------------------\n");	printf("TEST 1. CREATE TABLE WITH 3 COLUMNS AND WITH 3 INDEXES\n");	heap = mem_heap_create(512);	com_endpoint = (com_endpoint_t*)heap;	/* This is a dummy non-NULL						value */	mutex_enter(&kernel_mutex);		sess = sess_open(ut_dulint_zero, com_endpoint, (byte*)"user1", 6);		trx = sess->trx;	mutex_exit(&kernel_mutex);	ut_a(trx_start(trx, ULINT_UNDEFINED));		table = dict_mem_table_create("TS_TABLE1", 0, 3);	dict_mem_table_add_col(table, "COL1", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL2", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL3", DATA_VARCHAR,						DATA_ENGLISH, 100, 0);	/*------------------------------------*/	/* CREATE TABLE */	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = tab_create_graph_create(fork, thr, table, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);	dict_table_print_by_name("SYS_TABLES");	dict_table_print_by_name("SYS_COLUMNS");	/*-------------------------------------*/	/* CREATE CLUSTERED INDEX */		index = dict_mem_index_create("TS_TABLE1", "IND1", 0,					/*DICT_UNIQUE |*/ DICT_CLUSTERED, 1);	dict_mem_index_add_field(index, "COL1", 0);	ut_a(mem_heap_validate(index->heap));	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = ind_create_graph_create(fork, thr, index, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);/*	dict_table_print_by_name("SYS_INDEXES");	dict_table_print_by_name("SYS_FIELDS"); */	/*-------------------------------------*/	/* CREATE SECONDARY INDEX */		index = dict_mem_index_create("TS_TABLE1", "IND2", 0, 0, 1);	dict_mem_index_add_field(index, "COL2", 0);	ut_a(mem_heap_validate(index->heap));	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = ind_create_graph_create(fork, thr, index, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);/*	dict_table_print_by_name("SYS_INDEXES");	dict_table_print_by_name("SYS_FIELDS"); */	/*-------------------------------------*/	/* CREATE ANOTHER SECONDARY INDEX */		index = dict_mem_index_create("TS_TABLE1", "IND3", 0, 0, 1);	dict_mem_index_add_field(index, "COL2", 0);	ut_a(mem_heap_validate(index->heap));	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = ind_create_graph_create(fork, thr, index, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);#ifdef notdefined	/*-------------------------------------*/	/* CREATE YET ANOTHER SECONDARY INDEX */		index = dict_mem_index_create("TS_TABLE1", "IND4", 0, 0, 1);	dict_mem_index_add_field(index, "COL2", 0);	ut_a(mem_heap_validate(index->heap));	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = ind_create_graph_create(fork, thr, index, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);#endif/*	dict_table_print_by_name("SYS_INDEXES");	dict_table_print_by_name("SYS_FIELDS"); */	/* COMMIT */	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = commit_node_create(fork, thr, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);		que_run_threads(thr);		return(0);}/*********************************************************************Another test for table creation. */ulinttest1_5(/*====*/	void*	arg){	sess_t*		sess;	com_endpoint_t*	com_endpoint;	mem_heap_t*	heap;	dict_index_t*	index;		dict_table_t*	table;	que_fork_t*	fork;	que_thr_t*	thr;	trx_t*		trx;	UT_NOT_USED(arg);	printf("-------------------------------------------------\n");	printf("TEST 1.5. CREATE TABLE WITH 3 COLUMNS AND WITH 1 INDEX\n");	heap = mem_heap_create(512);	com_endpoint = (com_endpoint_t*)heap;	/* This is a dummy non-NULL						value */	mutex_enter(&kernel_mutex);		sess = sess_open(ut_dulint_zero, com_endpoint, (byte*)"user1", 6);		trx = sess->trx;	mutex_exit(&kernel_mutex);	ut_a(trx_start(trx, ULINT_UNDEFINED));		table = dict_mem_table_create("TS_TABLE2", 0, 3);	dict_mem_table_add_col(table, "COL1", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL2", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL3", DATA_VARCHAR,						DATA_ENGLISH, 100, 0);	/*------------------------------------*/	/* CREATE TABLE */	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = tab_create_graph_create(fork, thr, table, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);/*	dict_table_print_by_name("SYS_TABLES");	dict_table_print_by_name("SYS_COLUMNS"); */	/*-------------------------------------*/	/* CREATE CLUSTERED INDEX */		index = dict_mem_index_create("TS_TABLE2", "IND1", 0,					DICT_CLUSTERED | DICT_UNIQUE, 1);	dict_mem_index_add_field(index, "COL1", 0);	ut_a(mem_heap_validate(index->heap));	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);	thr->child = ind_create_graph_create(fork, thr, index, heap);	mutex_enter(&kernel_mutex);		que_graph_publish(fork, trx->sess);	trx->graph = fork;	ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0));		mutex_exit(&kernel_mutex);	que_run_threads(thr);/*	dict_table_print_by_name("SYS_INDEXES");	dict_table_print_by_name("SYS_FIELDS"); */	return(0);}/*********************************************************************Another test for table creation. */ulinttest1_6(/*====*/	void*	arg){	sess_t*		sess;	com_endpoint_t*	com_endpoint;	mem_heap_t*	heap;	dict_index_t*	index;		dict_table_t*	table;	que_fork_t*	fork;	que_thr_t*	thr;	trx_t*		trx;	UT_NOT_USED(arg);	printf("-------------------------------------------------\n");	printf("TEST 1.6. CREATE TABLE WITH 3 COLUMNS AND WITH 1 INDEX\n");	heap = mem_heap_create(512);	com_endpoint = (com_endpoint_t*)heap;	/* This is a dummy non-NULL						value */	mutex_enter(&kernel_mutex);		sess = sess_open(ut_dulint_zero, com_endpoint, (byte*)"user1", 6);		trx = sess->trx;	mutex_exit(&kernel_mutex);	ut_a(trx_start(trx, ULINT_UNDEFINED));		table = dict_mem_table_create("TS_TABLE3", 0, 3);	dict_mem_table_add_col(table, "COL1", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL2", DATA_VARCHAR,						DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL3", DATA_VARCHAR,						DATA_ENGLISH, 100, 0);	/*------------------------------------*/	/* CREATE TABLE */	fork = que_fork_create(NULL, NULL, QUE_FORK_EXECUTE, heap);	fork->trx = trx;	thr = que_thr_create(fork, fork, heap);

⌨️ 快捷键说明

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