/*
* corresponds to A.6 in appendix A
*/
/*
* ==================================================================+ | Load
* TPCC tables
* +==================================================================
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <mysql.h>
#include "spt_proc.h"
#include "tpc.h"
#define NNULL ((void *)0)
//#undef NULL
MYSQL *mysql;
MYSQL_STMT *stmt[11];
/* Global SQL Variables */
char timestamp[81];
long count_ware;
int fd, seed;
int particle_flg = 0; /* "1" means particle mode */
int part_no = 0; /* 1:items 2:warehouse 3:customer 4:orders */
long min_ware = 1;
long max_ware;
/* Global Variables */
int i;
int option_debug = 0; /* 1 if generating debug output */
int is_local = 1; /* "1" mean local */
#define DB_STRING_MAX 51
#include "parse_port.h"
int
try_stmt_execute(MYSQL_STMT *mysql_stmt)
{
int ret = mysql_stmt_execute(mysql_stmt);
if (ret) {
printf("\n%d, %s, %s\n", mysql_errno(mysql), mysql_sqlstate(mysql), mysql_error(mysql) );
mysql_rollback(mysql);
}
return ret;
}
/*
* ==================================================================+ |
* main() | ARGUMENTS | Warehouses n [Debug] [Help]
* +==================================================================
*/
void
main(argc, argv)
int argc;
char *argv[];
{
char arg[2];
char *ptr;
char connect_string[DB_STRING_MAX];
char db_string[DB_STRING_MAX];
char db_user[DB_STRING_MAX];
char db_password[DB_STRING_MAX];
int port= 3306;
int i;
MYSQL* resp;
/* initialize */
count_ware = 0;
printf("*************************************\n");
printf("*** ###easy### TPC-C Data Loader ***\n");
printf("*************************************\n");
/* Parse args */
if (argc != 9) {
if (argc != 6) {
fprintf(stderr,
"\n usage: tpcc_load [server] [DB] [user] [pass] [warehouse]\n"
" OR\n"
" tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]\n\n"
" * [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS\n"
);
exit(1);
}
}else{
particle_flg = 1;
}
if ( strlen(argv[1]) >= DB_STRING_MAX ) {
fprintf(stderr, "\n server phrase is too long\n");
exit(1);
}
if ( strlen(argv[2]) >= DB_STRING_MAX ) {
fprintf(stderr, "\n DBname phrase is too long\n");
exit(1);
}
if ( strlen(argv[3]) >= DB_STRING_MAX ) {
fprintf(stderr, "\n user phrase is too long\n");
exit(1);
}
if ( strlen(argv[4]) >= DB_STRING_MAX ) {
fprintf(stderr, "\n pass phrase is too long\n");
exit(1);
}
if ((count_ware = atoi(argv[5])) <= 0) {
fprintf(stderr, "\n expecting positive number of warehouses\n");
exit(1);
}
//strcpy(connect_string, argv[1]);
parse_host(connect_string, argv[1]);
port= parse_port(argv[1]);
strcpy( db_string, argv[2] );
strcpy( db_user, argv[3] );
strcpy( db_password, argv[4] );
if(strcmp(connect_string,"l")==0){
is_local = 1;
}else{
is_local = 0;
}
if(particle_flg==1){
part_no = atoi(argv[6]);
min_ware = atoi(argv[7]);
max_ware = atoi(argv[8]);
}else{
min_ware = 1;
max_ware = count_ware;
}
printf("<Parameters>\n");
if(is_local==0)printf(" [server]: %s\n", connect_string);
if(is_local==0)printf(" [port]: %d\n", port);
printf(" [DBname]: %s\n", db_string);
printf(" [user]: %s\n", db_user);
printf(" [pass]: %s\n", db_password);
printf(" [warehouse]: %d\n", count_ware);
if(particle_flg==1){
printf(" [part(1-4)]: %d\n", part_no);
printf(" [MIN WH]: %d\n", min_ware);
printf(" [MAX WH]: %d\n", max_ware);
}
fd = open("/dev/urandom", O_RDONLY);
if (fd == -1) {
fd = open("/dev/random", O_RDONLY);
if (fd == -1) {
struct timeval tv;
gettimeofday(&tv, NNULL);
seed = (tv.tv_sec ^ tv.tv_usec) * tv.tv_sec * tv.tv_usec ^ tv.tv_sec;
}else{
read(fd, &seed, sizeof(seed));
close(fd);
}
}else{
read(fd, &seed, sizeof(seed));
close(fd);
}
SetSeed(seed);
/* Initialize timestamp (for date columns) */
gettimestamp(timestamp, STRFTIME_FORMAT, TIMESTAMP_LEN);
/* EXEC SQL WHENEVER SQLERROR GOTO Error_SqlCall; */
mysql = mysql_init(NULL);
if(!mysql) goto Error_SqlCall;
if(is_local==1){
/* exec sql connect :connect_string; */
resp = mysql_real_connect(mysql, "localhost", db_user, db_password, db_string, port, NULL, 0);
}else{
/* exec sql connect :connect_string USING :db_string; */
resp = mysql_real_connect(mysql, connect_string, db_user, db_password, db_string, port, NULL, 0);
}
if(resp) {
mysql_autocommit(mysql, 0);
mysql_query(mysql, "SET UNIQUE_CHECKS=0");
mysql_query(mysql, "SET FOREIGN_KEY_CHECKS=0");
} else {
goto Error_SqlCall_close;
}
for( i=0; i<11; i++ ){
stmt[i] = mysql_stmt_init(mysql);
if(!stmt[i]) goto Error_SqlCall_close;
}
if( mysql_stmt_prepare(stmt[0],
"INSERT INTO item values(?,?,?,?,?)",
34) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[1],
"INSERT INTO warehouse values(?,?,?,?,?,?,?,?,?)",
47) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[2],
"INSERT INTO stock values(?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?)",
59) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[3],
"INSERT INTO district values(?,?,?,?,?,?,?,?,?,?,?)",
50) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[4],
"INSERT INTO customer values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, 10.0, 1, 0,?)",
76) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[5],
"INSERT INTO history values(?,?,?,?,?,?,?,?)",
43) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[6],
"INSERT INTO orders values(?,?,?,?,?,NULL,?, 1)",
46) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[7],
"INSERT INTO new_orders values(?,?,?)",
36) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[8],
"INSERT INTO orders values(?,?,?,?,?,?,?, 1)",
43) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[9],
"INSERT INTO order_line values(?,?,?,?,?,?, NULL,?,?,?)",
54) ) goto Error_SqlCall_close;
if( mysql_stmt_prepare(stmt[10],
"INSERT INTO order_line values(?,?,?,?,?,?,?,?,?,?)",
50) ) goto Error_SqlCall_close;
/* exec sql begin transaction; */
printf("TPCC Data Load Started...\n");
if(particle_flg==0){
LoadItems();
LoadWare();
LoadCust();
LoadOrd();
}else if(particle_flg==1){
switch(part_no){
case 1:
LoadItems();
break;
case 2:
LoadWare();
break;
case 3:
LoadCust();
break;
case 4:
LoadOrd();
break;
default:
printf("Unknown part_no\n");
printf("1:ITEMS 2:WAREHOUSE 3:CUSTOMER 4:ORDERS\n");
}
}
/* EXEC SQL COMMIT WORK; */
if( mysql_commit(mysql) ) goto Error_SqlCall;
for( i=0; i<11; i++ ){
mysql_stmt_close(stmt[i]);
}
/* EXEC SQL DISCONNECT; */
mysql_close(mysql);
printf("\n...DATA LOADING COMPLETED SUCCESSFULLY.\n");
exit(0);
Error_SqlCall_close:
Error_SqlCall:
Error(0);
}
/*
* ==================================================================+ |
* ROUTINE NAME | LoadItems | DESCRIPTION | Loads the Item table |
* ARGUMENTS | none
* +==================================================================
*/
void
LoadItems()
{
int i_id;
int i_im_id;
char i_name[25];
float i_price;
char i_data[51];
int idatasiz;
int orig[MAXITEMS+1];
int pos;
没有合适的资源?快使用搜索试试~ 我知道了~
tpcc-mysql.tar.gz
需积分: 32 39 下载量 9 浏览量
2013-06-03
08:33:37
上传
评论 1
收藏 173KB GZ 举报
温馨提示
共69个文件
sh:22个
c:13个
sql:8个
tpcc-mysql是开源的TPC-C测试工具,其完全遵循TPC-C标准. TPC-C是TPC协会制定的,用来测试典型的复杂OLTP(在线事务处理)系统的性能.
资源推荐
资源详情
资源评论
收起资源包目录
tpcc-mysql.tar.gz (69个子文件)
tpcc-mysql
.bzr
branch
lock
branch.conf 84B
last-revision 62B
tags 0B
format 34B
checkout
lock
conflicts 27B
dirstate 12KB
format 40B
repository
lock
upload
indices
3d8cebfb7ea3ee4632d4f66ac9ac4807.rix 4KB
3d8cebfb7ea3ee4632d4f66ac9ac4807.six 60B
3d8cebfb7ea3ee4632d4f66ac9ac4807.iix 4KB
3d8cebfb7ea3ee4632d4f66ac9ac4807.tix 15KB
obsolete_packs
pack-names 114B
packs
3d8cebfb7ea3ee4632d4f66ac9ac4807.pack 128KB
format 49B
branch-format 35B
README 147B
branch-lock
src
support.c 4KB
sequence.h 89B
slev.c 5KB
ordstat.c 10KB
spt_proc.c 497B
tpc.h 2KB
load.c 35KB
rthist.c 3KB
trans_if.h 688B
parse_port.h 617B
Makefile 578B
payment.c 17KB
sequence.c 1KB
rthist.h 142B
driver.c 10KB
neword.c 16KB
delivery.c 8KB
spt_proc.h 123B
main.c 23KB
scripts
virident_stat.sh 167B
anal.full.sh 2KB
multi-instances
runX.sh 4KB
memlock.c 644B
analyze_checkpoint.sh 114B
analyze_dirty.sh 297B
run_no_backup.sh 2KB
analyze_modified.sh 103B
analyze_checkpoint_xtradb1.sh 162B
parse_trx.py 3KB
run.sh 1KB
2instances
run.sh 2KB
analyze_flushed.sh 154B
analyze_min.sh 258B
analyze_checkpoint_xtradb.sh 85B
analyze_evicted.sh 155B
analyzeR.sh 452B
runX.sh 3KB
memlock 7KB
innodb_stat.sh 116B
remote
runX.sh 4KB
analyze_flushed_innodb.sh 97B
flashcache_stat.sh 101B
analyze.sh 363B
schema2
count.sql 317B
drop_cons.sql 763B
create_table.sql 3KB
add_fkey_idx.sql 1KB
count.sql 317B
drop_cons.sql 763B
README 851B
create_table.sql 3KB
add_fkey_idx.sql 2KB
load.sh 477B
共 69 条
- 1
资源评论
LKK
- 粉丝: 24
- 资源: 269
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功