@ -1548,8 +1548,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
* 64 bit 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 .
@ -1561,7 +1562,7 @@ init(bool is_no_vacuum)
* fields in these table declarations were intended to comply with that .
* The pgbench_accounts table complies with that because the " filler "
* column is set to blank - padded empty string . But for all other tables
* the column defaults to NULL and so don ' t actually take any space . We
* the columns default to NULL and so don ' t actually take any space . We
* could fix that by giving them non - null default values . However , that
* would completely break comparability of pgbench results with prior
* versions . Since pgbench has never pretended to be fully TPC - B compliant
@ -1569,42 +1570,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 st ruct 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 * DDLAFTER s[ ] = {
static const char * const DDLINDEXe s[ ] = {
" 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 " ,
@ -1632,16 +1634,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 )
{
@ -1649,13 +1652,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 ) ;
}
@ -1665,14 +1671,17 @@ init(bool is_no_vacuum)
for ( i = 0 ; i < nbranches * scale ; i + + )
{
/* "filler" column defaults to NULL */
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 + + )
{
/* "filler" column defaults to NULL */
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 ) ;
}
@ -1702,7 +1711,9 @@ init(bool is_no_vacuum)
int64 j = k + 1 ;
/* "filler" column defaults to blank padded empty string */
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 " ) ;
@ -1774,11 +1785,11 @@ init(bool is_no_vacuum)
* create indexes
*/
fprintf ( stderr , " set primary keys... \n " ) ;
for ( i = 0 ; i < lengthof ( DDLAFTER s ) ; i + + )
for ( i = 0 ; i < lengthof ( DDLINDEXe s ) ; i + + )
{
char buffer [ 256 ] ;
strn cpy ( buffer , DDLAFTER s [ i ] , 256 ) ;
strl cpy ( buffer , DDLINDEXe s [ i ] , sizeof ( buffer ) ) ;
if ( index_tablespace ! = NULL )
{
@ -1786,7 +1797,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 ) ;
}
@ -1806,7 +1817,6 @@ init(bool is_no_vacuum)
}
}
fprintf ( stderr , " done. \n " ) ;
PQfinish ( con ) ;
}