diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index a656e2fb388..d93b6b84f5f 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -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); }