Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
6ae76714
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6ae76714
编写于
10月 07, 2005
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gni
上级
a84429a1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
60 addition
and
27 deletion
+60
-27
contrib/pgbench/pgbench.c
contrib/pgbench/pgbench.c
+60
-27
未找到文件。
contrib/pgbench/pgbench.c
浏览文件 @
6ae76714
/*
* $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.4
0 2005/10/04 17:10:55 teodor
Exp $
* $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.4
1 2005/10/07 15:31:49 tgl
Exp $
*
* pgbench: a simple benchmark program for PostgreSQL
* written by Tatsuo Ishii
...
...
@@ -40,7 +40,6 @@
#endif
/* ! WIN32 */
#include <ctype.h>
#include <search.h>
extern
char
*
optarg
;
extern
int
optind
;
...
...
@@ -90,6 +89,17 @@ char *login = NULL;
char
*
pwd
=
NULL
;
char
*
dbName
;
/* variable definitions */
typedef
struct
{
char
*
name
;
/* variable name */
char
*
value
;
/* its value */
}
Variable
;
/*
* structures used in custom query mode
*/
typedef
struct
{
PGconn
*
con
;
/* connection handle to DB */
...
...
@@ -99,23 +109,12 @@ typedef struct
int
ecnt
;
/* error count */
int
listen
;
/* 0 indicates that an async query has
* been sent */
void
*
variables
;
Variable
*
variables
;
/* array of variable definitions */
int
nvariables
;
struct
timeval
txn_begin
;
/* used for measuring latencies */
int
use_file
;
/* index in sql_files for this client */
}
CState
;
/*
* structures used in custom query mode
*/
/* variable definitions */
typedef
struct
{
char
*
name
;
/* variable name */
char
*
value
;
/* its value */
}
Variable
;
/*
* queries read from files
*/
...
...
@@ -180,7 +179,7 @@ usage(void)
static
int
getrand
(
int
min
,
int
max
)
{
return
(
min
+
(
int
)
(
max
*
1
.
0
*
rand
()
/
(
RAND_MAX
+
1
.
0
)
+
0
.
5
)
);
return
min
+
(
int
)
(((
max
-
min
)
*
(
double
)
random
())
/
MAX_RANDOM_VALUE
+
0
.
5
);
}
/* set up a connection to the backend */
...
...
@@ -256,7 +255,8 @@ check(CState * state, PGresult *res, int n, int good)
static
int
compareVariables
(
const
void
*
v1
,
const
void
*
v2
)
{
return
strcmp
(((
Variable
*
)
v1
)
->
name
,
((
Variable
*
)
v2
)
->
name
);
return
strcmp
(((
const
Variable
*
)
v1
)
->
name
,
((
const
Variable
*
)
v2
)
->
name
);
}
static
char
*
...
...
@@ -264,9 +264,17 @@ getVariable(CState * st, char *name)
{
Variable
key
=
{
name
},
*
var
;
var
=
tfind
(
&
key
,
&
st
->
variables
,
compareVariables
);
/* On some versions of Solaris, bsearch of zero items dumps core */
if
(
st
->
nvariables
<=
0
)
return
NULL
;
var
=
(
Variable
*
)
bsearch
((
void
*
)
&
key
,
(
void
*
)
st
->
variables
,
st
->
nvariables
,
sizeof
(
Variable
),
compareVariables
);
if
(
var
!=
NULL
)
return
(
*
(
Variable
**
)
var
)
->
value
;
return
var
->
value
;
else
return
NULL
;
}
...
...
@@ -276,30 +284,55 @@ putVariable(CState * st, char *name, char *value)
{
Variable
key
=
{
name
},
*
var
;
var
=
tfind
(
&
key
,
&
st
->
variables
,
compareVariables
);
/* On some versions of Solaris, bsearch of zero items dumps core */
if
(
st
->
nvariables
>
0
)
var
=
(
Variable
*
)
bsearch
((
void
*
)
&
key
,
(
void
*
)
st
->
variables
,
st
->
nvariables
,
sizeof
(
Variable
),
compareVariables
);
else
var
=
NULL
;
if
(
var
==
NULL
)
{
if
((
var
=
malloc
(
sizeof
(
Variable
)))
==
NULL
)
Variable
*
newvars
;
if
(
st
->
variables
)
newvars
=
(
Variable
*
)
realloc
(
st
->
variables
,
(
st
->
nvariables
+
1
)
*
sizeof
(
Variable
));
else
newvars
=
(
Variable
*
)
malloc
(
sizeof
(
Variable
));
if
(
newvars
==
NULL
)
return
false
;
st
->
variables
=
newvars
;
var
=
&
newvars
[
st
->
nvariables
];
var
->
name
=
NULL
;
var
->
value
=
NULL
;
if
((
var
->
name
=
strdup
(
name
))
==
NULL
||
(
var
->
value
=
strdup
(
value
))
==
NULL
||
tsearch
(
var
,
&
st
->
variables
,
compareVariables
)
==
NULL
)
||
(
var
->
value
=
strdup
(
value
))
==
NULL
)
{
free
(
var
->
name
);
free
(
var
->
value
);
free
(
var
);
return
false
;
}
st
->
nvariables
++
;
qsort
((
void
*
)
st
->
variables
,
st
->
nvariables
,
sizeof
(
Variable
),
compareVariables
);
}
else
{
free
((
*
(
Variable
**
)
var
)
->
value
);
if
(((
*
(
Variable
**
)
var
)
->
value
=
strdup
(
value
))
==
NULL
)
if
((
value
=
strdup
(
value
))
==
NULL
)
return
false
;
free
(
var
->
value
);
var
->
value
=
value
;
}
return
true
;
...
...
@@ -783,7 +816,7 @@ process_commands(char *buf)
return
NULL
;
}
if
((
max
=
atoi
(
my_commands
->
argv
[
3
]))
<
min
||
max
>
RAND_MAX
)
if
((
max
=
atoi
(
my_commands
->
argv
[
3
]))
<
min
||
max
>
MAX_RANDOM_VALUE
)
{
fprintf
(
stderr
,
"%s: invalid maximum number %s
\n
"
,
my_commands
->
argv
[
0
],
my_commands
->
argv
[
3
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录