mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Fix non-C89-compatible coding in pgbench.
C89 says that compound initializers may only contain constant expressions; a restriction violated by commit 89d00cbe. While we've had no actual field complaints about this, C89 is still the project standard, and it's not saving all that much code to break compatibility here. So let's adhere to the old restriction. In passing, replace a bunch of hardwired constants "256" with sizeof(target-variable), just because the latter is more readable and less breakable. And const-ify where possible. Back-patch to 9.3 where the nonportable code was added. Andres Freund and Tom Lane
This commit is contained in:
parent
d6a9767404
commit
777d07d7a3
@ -1444,8 +1444,9 @@ disconnect_all(CState *state, int length)
|
||||
static void
|
||||
init(bool is_no_vacuum)
|
||||
{
|
||||
/* The scale factor at/beyond which 32bit integers are incapable of storing
|
||||
* 64bit values.
|
||||
/*
|
||||
* The scale factor at/beyond which 32-bit integers are insufficient for
|
||||
* storing TPC-B account IDs.
|
||||
*
|
||||
* Although the actual threshold is 21474, we use 20000 because it is easier to
|
||||
* document and remember, and isn't that far away from the real threshold.
|
||||
@ -1463,42 +1464,43 @@ init(bool is_no_vacuum)
|
||||
*/
|
||||
struct ddlinfo
|
||||
{
|
||||
char *table;
|
||||
char *cols;
|
||||
const char *table; /* table name */
|
||||
const char *smcols; /* column decls if accountIDs are 32 bits */
|
||||
const char *bigcols; /* column decls if accountIDs are 64 bits */
|
||||
int declare_fillfactor;
|
||||
};
|
||||
struct ddlinfo DDLs[] = {
|
||||
static const struct ddlinfo DDLs[] = {
|
||||
{
|
||||
"pgbench_history",
|
||||
scale >= SCALE_32BIT_THRESHOLD
|
||||
? "tid int,bid int,aid bigint,delta int,mtime timestamp,filler char(22)"
|
||||
: "tid int,bid int,aid int,delta int,mtime timestamp,filler char(22)",
|
||||
"tid int,bid int,aid int,delta int,mtime timestamp,filler char(22)",
|
||||
"tid int,bid int,aid bigint,delta int,mtime timestamp,filler char(22)",
|
||||
0
|
||||
},
|
||||
{
|
||||
"pgbench_tellers",
|
||||
"tid int not null,bid int,tbalance int,filler char(84)",
|
||||
"tid int not null,bid int,tbalance int,filler char(84)",
|
||||
1
|
||||
},
|
||||
{
|
||||
"pgbench_accounts",
|
||||
scale >= SCALE_32BIT_THRESHOLD
|
||||
? "aid bigint not null,bid int,abalance int,filler char(84)"
|
||||
: "aid int not null,bid int,abalance int,filler char(84)",
|
||||
"aid int not null,bid int,abalance int,filler char(84)",
|
||||
"aid bigint not null,bid int,abalance int,filler char(84)",
|
||||
1
|
||||
},
|
||||
{
|
||||
"pgbench_branches",
|
||||
"bid int not null,bbalance int,filler char(88)",
|
||||
"bid int not null,bbalance int,filler char(88)",
|
||||
1
|
||||
}
|
||||
};
|
||||
static char *DDLAFTERs[] = {
|
||||
static const char *const DDLINDEXes[] = {
|
||||
"alter table pgbench_branches add primary key (bid)",
|
||||
"alter table pgbench_tellers add primary key (tid)",
|
||||
"alter table pgbench_accounts add primary key (aid)"
|
||||
};
|
||||
static char *DDLKEYs[] = {
|
||||
static const char *const DDLKEYs[] = {
|
||||
"alter table pgbench_tellers add foreign key (bid) references pgbench_branches",
|
||||
"alter table pgbench_accounts add foreign key (bid) references pgbench_branches",
|
||||
"alter table pgbench_history add foreign key (bid) references pgbench_branches",
|
||||
@ -1526,16 +1528,17 @@ init(bool is_no_vacuum)
|
||||
{
|
||||
char opts[256];
|
||||
char buffer[256];
|
||||
struct ddlinfo *ddl = &DDLs[i];
|
||||
const struct ddlinfo *ddl = &DDLs[i];
|
||||
const char *cols;
|
||||
|
||||
/* Remove old table, if it exists. */
|
||||
snprintf(buffer, 256, "drop table if exists %s", ddl->table);
|
||||
snprintf(buffer, sizeof(buffer), "drop table if exists %s", ddl->table);
|
||||
executeStatement(con, buffer);
|
||||
|
||||
/* Construct new create table statement. */
|
||||
opts[0] = '\0';
|
||||
if (ddl->declare_fillfactor)
|
||||
snprintf(opts + strlen(opts), 256 - strlen(opts),
|
||||
snprintf(opts + strlen(opts), sizeof(opts) - strlen(opts),
|
||||
" with (fillfactor=%d)", fillfactor);
|
||||
if (tablespace != NULL)
|
||||
{
|
||||
@ -1543,13 +1546,16 @@ init(bool is_no_vacuum)
|
||||
|
||||
escape_tablespace = PQescapeIdentifier(con, tablespace,
|
||||
strlen(tablespace));
|
||||
snprintf(opts + strlen(opts), 256 - strlen(opts),
|
||||
snprintf(opts + strlen(opts), sizeof(opts) - strlen(opts),
|
||||
" tablespace %s", escape_tablespace);
|
||||
PQfreemem(escape_tablespace);
|
||||
}
|
||||
snprintf(buffer, 256, "create%s table %s(%s)%s",
|
||||
|
||||
cols = (scale >= SCALE_32BIT_THRESHOLD) ? ddl->bigcols : ddl->smcols;
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "create%s table %s(%s)%s",
|
||||
unlogged_tables ? " unlogged" : "",
|
||||
ddl->table, ddl->cols, opts);
|
||||
ddl->table, cols, opts);
|
||||
|
||||
executeStatement(con, buffer);
|
||||
}
|
||||
@ -1558,13 +1564,16 @@ init(bool is_no_vacuum)
|
||||
|
||||
for (i = 0; i < nbranches * scale; i++)
|
||||
{
|
||||
snprintf(sql, 256, "insert into pgbench_branches(bid,bbalance) values(%d,0)", i + 1);
|
||||
snprintf(sql, sizeof(sql),
|
||||
"insert into pgbench_branches(bid,bbalance) values(%d,0)",
|
||||
i + 1);
|
||||
executeStatement(con, sql);
|
||||
}
|
||||
|
||||
for (i = 0; i < ntellers * scale; i++)
|
||||
{
|
||||
snprintf(sql, 256, "insert into pgbench_tellers(tid,bid,tbalance) values (%d,%d,0)",
|
||||
snprintf(sql, sizeof(sql),
|
||||
"insert into pgbench_tellers(tid,bid,tbalance) values (%d,%d,0)",
|
||||
i + 1, i / ntellers + 1);
|
||||
executeStatement(con, sql);
|
||||
}
|
||||
@ -1593,7 +1602,9 @@ init(bool is_no_vacuum)
|
||||
{
|
||||
int64 j = k + 1;
|
||||
|
||||
snprintf(sql, 256, INT64_FORMAT "\t" INT64_FORMAT "\t%d\t\n", j, k / naccounts + 1, 0);
|
||||
snprintf(sql, sizeof(sql),
|
||||
INT64_FORMAT "\t" INT64_FORMAT "\t%d\t\n",
|
||||
j, k / naccounts + 1, 0);
|
||||
if (PQputline(con, sql))
|
||||
{
|
||||
fprintf(stderr, "PQputline failed\n");
|
||||
@ -1665,11 +1676,11 @@ init(bool is_no_vacuum)
|
||||
* create indexes
|
||||
*/
|
||||
fprintf(stderr, "set primary keys...\n");
|
||||
for (i = 0; i < lengthof(DDLAFTERs); i++)
|
||||
for (i = 0; i < lengthof(DDLINDEXes); i++)
|
||||
{
|
||||
char buffer[256];
|
||||
|
||||
strncpy(buffer, DDLAFTERs[i], 256);
|
||||
strlcpy(buffer, DDLINDEXes[i], sizeof(buffer));
|
||||
|
||||
if (index_tablespace != NULL)
|
||||
{
|
||||
@ -1677,7 +1688,7 @@ init(bool is_no_vacuum)
|
||||
|
||||
escape_tablespace = PQescapeIdentifier(con, index_tablespace,
|
||||
strlen(index_tablespace));
|
||||
snprintf(buffer + strlen(buffer), 256 - strlen(buffer),
|
||||
snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer),
|
||||
" using index tablespace %s", escape_tablespace);
|
||||
PQfreemem(escape_tablespace);
|
||||
}
|
||||
@ -1697,7 +1708,6 @@ init(bool is_no_vacuum)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fprintf(stderr, "done.\n");
|
||||
PQfinish(con);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user