pdbench/MayBMS-tpch/uncertain-tpch/dss.h

807 lines
22 KiB
C

/*
* $Id: dss.h,v 1.13 2007/03/21 04:05:15 olteanu Exp $
*
* Revision History
* ===================
* $Log: dss.h,v $
* Revision 1.13 2007/03/21 04:05:15 olteanu
* *** empty log message ***
*
* Revision 1.12 2007/03/21 01:42:57 olteanu
* *** empty log message ***
*
* Revision 1.11 2007/03/19 21:07:58 olteanu
* *** empty log message ***
*
* Revision 1.10 2007/03/18 13:04:49 olteanu
* *** empty log message ***
*
* Revision 1.9 2007/03/16 22:40:17 olteanu
* *** empty log message ***
*
* Revision 1.8 2007/03/16 21:30:50 olteanu
* *** empty log message ***
*
* Revision 1.7 2007/03/15 18:49:36 olteanu
* *** empty log message ***
*
* Revision 1.6 2007/03/15 13:35:25 olteanu
* *** empty log message ***
*
* Revision 1.5 2007/03/15 12:31:50 olteanu
* *** empty log message ***
*
* Revision 1.4 2007/03/14 21:03:01 olteanu
* *** empty log message ***
*
* Revision 1.3 2007/03/14 20:19:06 olteanu
* *** empty log message ***
*
* Revision 1.2 2007/03/14 17:57:11 olteanu
* *** empty log message ***
*
* Revision 1.1.1.1 2007/03/14 15:01:09 olteanu
*
*
* Revision 1.2 2007/03/11 16:16:40 jansen
* -m max_placeholders
*
* Revision 1.1.1.1 2007/03/01 18:11:56 olteanu
*
*
* Revision 1.9 2006/07/31 17:23:09 jms
* fix to parallelism problem
*
* Revision 1.8 2006/03/09 18:55:29 jms
* remove vestigial cvs merge marker
*
* Revision 1.7 2005/10/28 03:05:05 jms
* up maximum scale to 100TB
*
* Revision 1.6 2005/10/28 02:55:26 jms
* add release.h changes
*
* Revision 1.5 2005/10/27 18:13:03 jms
* a_rnd() prototype correction
*
* Revision 1.4 2005/10/25 17:58:59 jms
* update version stamp
*
* Revision 1.3 2005/03/04 19:48:39 jms
* Changes from Doug Johnson to address very large scale factors
*
* Revision 1.2 2005/01/03 20:08:58 jms
* change line terminations
*
* Revision 1.1.1.1 2004/11/24 23:31:46 jms
* re-establish external server
*
* Revision 1.5 2004/04/08 17:34:15 jms
* cleanup SOLARIS/SUN ifdefs; now all use SUN
*
* Revision 1.4 2004/04/07 20:17:29 jms
* bug #58 (join fails between order/lineitem)
*
* Revision 1.3 2004/03/16 14:37:53 jms
* update version and copyright date; correct comment typo
*
* Revision 1.2 2004/02/18 14:07:20 jms
* change to version 2.1.0
*
* Revision 1.1.1.1 2003/08/08 21:50:33 jms
* recreation after CVS crash
*
* Revision 1.3 2003/08/08 21:35:26 jms
* first integration of rng64 for o_custkey and l_partkey
*
* Revision 1.2 2003/08/07 17:58:34 jms
* Convery RNG to 64bit space as preparation for new large scale RNG
*
* Revision 1.1.1.1 2003/04/03 18:54:21 jms
* initial checkin
*
*
*/
/*
* general definitions and control information for the DSS code
* generator; if it controls the data set, it's here
*/
#ifndef DSS_H
#define DSS_H
#ifdef TPCH
#define NAME "TPC-H"
#endif
#ifdef TPCR
#define NAME "TPC-R"
#endif
#ifndef NAME
#error Benchmark version must be defined in config.h
#endif
#define TPC "Transaction Processing Performance Council"
#define C_DATES "1994 - 2005"
#include "config.h"
#include "shared.h"
#include <stdio.h>
#include <stdlib.h>
#define NONE -1
#define PART 0
#define PSUPP 1
#define SUPP 2
#define CUST 3
#define ORDER 4
#define LINE 5
#define ORDER_LINE 6
#define PART_PSUPP 7
#define NATION 8
#define REGION 9
#define UPDATE 10
#define MAX_TABLE 11
#define ONE_STREAM 1
#define ADD_AT_END 2
#define PART_p_PARTKEY 10
#define PART_p_NAME 11
#define PART_p_MFGR 12
#define PART_p_BRAND 13
#define PART_p_TYPE 14
#define PART_p_SIZE 15
#define PART_p_CONTAINER 16
#define PART_p_RETAILPRICE 17
#define PART_p_COMMENT 18
#define SUPP_s_SUPPKEY 19
#define SUPP_s_NAME 20
#define SUPP_s_ADDRESS 21
#define SUPP_s_NATIONKEY 22
#define SUPP_s_PHONE 23
#define SUPP_s_ACCTBAL 24
#define SUPP_s_COMMENT 25
#define PSUPP_ps_PARTKEY 26
#define PSUPP_ps_SUPPKEY 27
#define PSUPP_ps_AVAILQTY 28
#define PSUPP_ps_SUPPLYCOST 29
#define PSUPP_ps_COMMENT 30
#define CUST_c_CUSTKEY 31
#define CUST_c_NAME 32
#define CUST_c_ADDRESS 33
#define CUST_c_NATIONKEY 34
#define CUST_c_PHONE 35
#define CUST_c_ACCTBAL 36
#define CUST_c_MKTSEGMENT 37
#define CUST_c_COMMENT 38
#define ORDERS_o_ORDERKEY 39
#define ORDERS_o_CUSTKEY 40
#define ORDERS_o_ORDERSTATUS 41
#define ORDERS_o_TOTALPRICE 42
#define ORDERS_o_ORDERDATE 43
#define ORDERS_o_ORDERPRIORITY 44
#define ORDERS_o_CLERK 45
#define ORDERS_o_SHIPPRIORITY 46
#define ORDERS_o_COMMENT 47
#define LINEITEM_l_ORDERKEY 48
#define LINEITEM_l_PARTKEY 49
#define LINEITEM_l_SUPPKEY 50
#define LINEITEM_l_LINENUMBER 51
#define LINEITEM_l_QUANTITY 52
#define LINEITEM_l_EXTENDEDPRICE 53
#define LINEITEM_l_DISCOUNT 54
#define LINEITEM_l_TAX 55
#define LINEITEM_l_RETURNFLAG 56
#define LINEITEM_l_LINESTATUS 57
#define LINEITEM_l_SHIPDATE 58
#define LINEITEM_l_COMMITDATE 59
#define LINEITEM_l_RECEIPTDATE 60
#define LINEITEM_l_SHIPINSTRUCT 61
#define LINEITEM_l_SHIPMODE 62
#define LINEITEM_l_COMMENT 63
#define NATION_n_NATIONKEY 64
#define NATION_n_NAME 65
#define NATION_n_REGIONKEY 66
#define NATION_n_COMMENT 67
#define REGION_r_REGIONKEY 68
#define REGION_r_NAME 69
#define REGION_r_COMMENT 70
#ifdef MAX
#undef MAX
#endif
#ifdef MIN
#undef MIN
#endif
#define MAX(a,b) ((a > b )?a:b)
#define MIN(A,B) ( (A) < (B) ? (A) : (B))
#define INTERNAL_ERROR(p) {fprintf(stderr,"%s", p);abort();}
#define LN_CNT 4
static char lnoise[4] = {'|', '/', '-', '\\' };
#define LIFENOISE(n, var) \
if (verbose > 0) fprintf(stderr, "%c\b", lnoise[(var%LN_CNT)])
#define MALLOC_CHECK(var) \
if ((var) == NULL) \
{ \
fprintf(stderr, "Malloc failed at %s:%d\n", \
__FILE__, __LINE__); \
exit(1);\
}
#define OPEN_CHECK(var, path) \
if ((var) == NULL) \
{ \
fprintf(stderr, "Open failed for %s at %s:%d\n", \
path, __FILE__, __LINE__); \
exit(1);\
}
#ifndef MAX_CHILDREN
#define MAX_CHILDREN 1000
#endif
/*
* macros that control sparse keys
*
* refer to Porting.Notes for a complete explanation
*/
#ifndef BITS_PER_LONG
#define BITS_PER_LONG 32
#define MAX_LONG 0x7FFFFFFF
#endif /* BITS_PER_LONG */
#define SPARSE_BITS 2
#define SPARSE_KEEP 3
#define MK_SPARSE(key, seq) \
(((((key>>3)<<2)|(seq & 0x0003))<<3)|(key & 0x0007))
#define RANDOM(tgt, lower, upper, stream) dss_random(&tgt, lower, upper, stream)
#define RANDOM64(tgt, lower, upper, stream) dss_random64(&tgt, lower, upper, stream)
struct _Placeholder
{
unsigned table;
long tid;
unsigned column;
};
typedef struct _Placeholder Placeholder;
typedef struct
{
long weight;
char *text;
} set_member;
typedef struct
{
int count;
int max;
set_member *list;
long *permute;
} distribution;
/*
* some handy access functions
*/
#define DIST_SIZE(d) d->count
#define DIST_MEMBER(d, i) ((set_member *)((d)->list + i))->text
typedef struct
{
char *name;
char *comment;
DSS_HUGE base;
int (*header) ();
int (*loader[2]) ();
long (*gen_seed)();
int (*verify) ();
int child;
DSS_HUGE vtotal;
} tdef;
typedef struct SEED_T {
long table;
DSS_HUGE value;
DSS_HUGE usage;
DSS_HUGE boundary;
#ifdef RNG_TEST
DSS_HUGE nCalls;
#endif
} seed_t;
#if defined(__STDC__)
#define PROTO(s) s
#else
#define PROTO(s) ()
#endif
/* bm_utils.c */
char *env_config PROTO((char *var, char *dflt));
long yes_no PROTO((char *prompt));
void a_rnd PROTO((int min, int max, int column, char *dest));
int tx_rnd PROTO((long min, long max, long column, char *tgt));
long julian PROTO((long date));
long unjulian PROTO((long date));
FILE *tbl_open PROTO((int tbl, char *mode));
long dssncasecmp PROTO((char *s1, char *s2, int n));
long dsscasecmp PROTO((char *s1, char *s2));
int pick_str PROTO((distribution * s, int c, char *target));
void agg_str PROTO((distribution *set, long count, long col, char *dest));
void read_dist PROTO((char *path, char *name, distribution * target));
void embed_str PROTO((distribution *d, int min, int max, int stream, char *dest));
#ifndef STDLIB_HAS_GETOPT
int getopt PROTO((int arg_cnt, char **arg_vect, char *oprions));
#endif /* STDLIB_HAS_GETOPT */
DSS_HUGE set_state PROTO((int t, long scale, long procs, long step, DSS_HUGE *e));
/* rnd.c */
DSS_HUGE NextRand PROTO((DSS_HUGE nSeed));
DSS_HUGE UnifInt PROTO((DSS_HUGE nLow, DSS_HUGE nHigh, long nStream));
void dss_random(DSS_HUGE *tgt, DSS_HUGE min, DSS_HUGE max, long seed);
void row_start(int t);
void row_stop(int t);
void dump_seeds(int t);
/* text.c */
#define MAX_GRAMMAR_LEN 12 /* max length of grammar component */
#define MAX_SENT_LEN 256 /* max length of populated sentence */
#define RNG_PER_SENT 27 /* max number of RNG calls per sentence */
void dbg_text PROTO((char * t, int min, int max, int s));
#ifdef DECLARER
#define EXTERN
#else
#define EXTERN extern
#endif /* DECLARER */
EXTERN distribution nations;
EXTERN distribution nations2;
EXTERN distribution regions;
EXTERN distribution o_priority_set;
EXTERN distribution l_instruct_set;
EXTERN distribution l_smode_set;
EXTERN distribution l_category_set;
EXTERN distribution l_rflag_set;
EXTERN distribution c_mseg_set;
EXTERN distribution colors;
EXTERN distribution p_types_set;
EXTERN distribution p_cntr_set;
/* distributions that control text generation */
EXTERN distribution articles;
EXTERN distribution nouns;
EXTERN distribution adjectives;
EXTERN distribution adverbs;
EXTERN distribution prepositions;
EXTERN distribution verbs;
EXTERN distribution terminators;
EXTERN distribution auxillaries;
EXTERN distribution np;
EXTERN distribution vp;
EXTERN distribution grammar;
EXTERN long scale;
EXTERN int refresh;
EXTERN int resume;
EXTERN long verbose;
EXTERN long force;
EXTERN long header;
EXTERN long columnar;
EXTERN long direct;
EXTERN long updates;
EXTERN long table;
EXTERN long children;
EXTERN long fnames;
EXTERN int gen_sql;
EXTERN int gen_rng;
EXTERN char *db_name;
EXTERN int step;
EXTERN int set_seeds;
EXTERN int validate;
EXTERN char *d_path;
/* added for segmented updates */
EXTERN int insert_segments;
EXTERN int delete_segments;
EXTERN int insert_orders_segment;
EXTERN int insert_lineitem_segment;
EXTERN int delete_segment;
/* added by olteanu for U-relations */
EXTERN double placeholders_ratio; /* in (0,1) */
EXTERN double Zipf_component_ratio; /* in (0,1) */
EXTERN int max_placeholders; /* default: 8 */
EXTERN DSS_HUGE tid_line;
EXTERN DSS_HUGE tid_partsupp;
EXTERN Placeholder** placeholder_set;
EXTERN long placeholders_size;
EXTERN long placeholders_idx;
EXTERN long crt_cid;
EXTERN double stat_max_lworlds;
EXTERN double stat_avg_lworlds;
EXTERN double stat_total_amount_worlds;
EXTERN long upper;
EXTERN long threshold;
EXTERN FILE *part_p_partkey;
EXTERN FILE *part_p_name;
EXTERN FILE *part_p_mfgr;
EXTERN FILE *part_p_brand;
EXTERN FILE *part_p_type;
EXTERN FILE *part_p_size;
EXTERN FILE *part_p_container;
EXTERN FILE *part_p_retailprice;
EXTERN FILE *part_p_comment;
EXTERN FILE *supp_s_suppkey;
EXTERN FILE *supp_s_name;
EXTERN FILE *supp_s_address;
EXTERN FILE *supp_s_nationkey;
EXTERN FILE *supp_s_phone;
EXTERN FILE *supp_s_acctbal;
EXTERN FILE *supp_s_comment;
EXTERN FILE *psupp_ps_partkey;
EXTERN FILE *psupp_ps_suppkey;
EXTERN FILE *psupp_ps_availqty;
EXTERN FILE *psupp_ps_supplycost;
EXTERN FILE *psupp_ps_comment;
EXTERN FILE *cust_c_custkey;
EXTERN FILE *cust_c_name;
EXTERN FILE *cust_c_address;
EXTERN FILE *cust_c_nationkey;
EXTERN FILE *cust_c_phone;
EXTERN FILE *cust_c_acctbal;
EXTERN FILE *cust_c_mktsegment;
EXTERN FILE *cust_c_comment;
EXTERN FILE *orders_o_orderkey;
EXTERN FILE *orders_o_custkey;
EXTERN FILE *orders_o_orderstatus;
EXTERN FILE *orders_o_totalprice;
EXTERN FILE *orders_o_orderdate;
EXTERN FILE *orders_o_orderpriority;
EXTERN FILE *orders_o_clerk;
EXTERN FILE *orders_o_shippriority;
EXTERN FILE *orders_o_comment;
EXTERN FILE *lineitem_l_orderkey;
EXTERN FILE *lineitem_l_partkey;
EXTERN FILE *lineitem_l_suppkey;
EXTERN FILE *lineitem_l_linenumber;
EXTERN FILE *lineitem_l_quantity;
EXTERN FILE *lineitem_l_extendedprice;
EXTERN FILE *lineitem_l_discount;
EXTERN FILE *lineitem_l_tax;
EXTERN FILE *lineitem_l_returnflag;
EXTERN FILE *lineitem_l_linestatus;
EXTERN FILE *lineitem_l_shipdate;
EXTERN FILE *lineitem_l_commitdate;
EXTERN FILE *lineitem_l_receiptdate;
EXTERN FILE *lineitem_l_shipinstruct;
EXTERN FILE *lineitem_l_shipmode;
EXTERN FILE *lineitem_l_comment;
EXTERN FILE *nation_n_nationkey;
EXTERN FILE *nation_n_name;
EXTERN FILE *nation_n_regionkey;
EXTERN FILE *nation_n_comment;
EXTERN FILE *region_r_regionkey;
EXTERN FILE *region_r_name;
EXTERN FILE *region_r_comment;
/* finished addition by olteanu for U-relations */
#ifndef DECLARER
extern tdef tdefs[];
#endif /* DECLARER */
/*
* defines global constants for WSD generation
*/
#define PLACEHOLDERS_INIT 1000000
#define PLACEHOLDERS_LIMIT 10000000
#define SWAP_SIZE 2239
#define SHUFFLE_ITE_RATIO 1
#define LOCAL_WORLDS_RATIO_INIT 0.25
#define PLACEHOLDERS_RATIO_INIT 0.01
#define ZIPF_COMP_RATIO_INIT 0.1
#define MAX_PLACEHOLDERS_INIT 8
#define ONE_WORLD 0
#define TUPLE_LEVEL 0
#define COUNT_ONLY 0
/*****************************************************************
** table level defines use the following naming convention: t_ccc_xxx
** with: t, a table identifier
** ccc, a column identifier
** xxx, a limit type
****************************************************************
*/
/*
* defines which control the parts table
*/
#define P_SIZE 126
#define P_NAME_SCL 5
#define P_MFG_TAG "Manufacturer#"
#define P_MFG_FMT "%%s%%0%d%s"
#define P_MFG_MIN 1
#define P_MFG_MAX 5
#define P_BRND_TAG "Brand#"
#define P_BRND_FMT "%%s%%0%d%s"
#define P_BRND_MIN 1
#define P_BRND_MAX 5
#define P_SIZE_MIN 1
#define P_SIZE_MAX 50
#define P_MCST_MIN 100
#define P_MCST_MAX 99900
#define P_MCST_SCL 100.0
#define P_RCST_MIN 90000
#define P_RCST_MAX 200000
#define P_RCST_SCL 100.0
/*
* defines which control the suppliers table
*/
#define S_SIZE 145
#define S_NAME_TAG "Supplier#"
#define S_NAME_FMT "%%s%%0%d%s"
#define S_ABAL_MIN -99999
#define S_ABAL_MAX 999999
#define S_CMNT_MAX 101
#define S_CMNT_BBB 10 /* number of BBB comments/SF */
#define BBB_DEADBEATS 50 /* % that are complaints */
#define BBB_BASE "Customer "
#define BBB_COMPLAIN "Complaints"
#define BBB_COMMEND "Recommends"
#define BBB_CMNT_LEN 19
#define BBB_BASE_LEN 9
#define BBB_TYPE_LEN 10
/*
* defines which control the partsupp table
*/
#define PS_SIZE 145
#define PS_SKEY_MIN 0
#define PS_SKEY_MAX ((tdefs[SUPP].base - 1) * scale)
#define PS_SCST_MIN 100
#define PS_SCST_MAX 100000
#define PS_QTY_MIN 1
#define PS_QTY_MAX 9999
/*
* defines which control the customers table
*/
#define C_SIZE 165
#define C_NAME_TAG "Customer#"
#define C_NAME_FMT "%%s%%0%d%s"
#define C_MSEG_MAX 5
#define C_ABAL_MIN -99999
#define C_ABAL_MAX 999999
/*
* defines which control the order table
*/
#define O_SIZE 109
#define O_CKEY_MIN 1
#define O_CKEY_MAX (tdefs[CUST].base * scale)
#define O_ODATE_MIN STARTDATE
#define O_ODATE_MAX (STARTDATE + TOTDATE - \
(L_SDTE_MAX + L_RDTE_MAX) - 1)
#define O_CLRK_TAG "Clerk#"
#define O_CLRK_FMT "%%s%%0%d%s"
#define O_CLRK_SCL 1000
#define O_LCNT_MIN 1
#define O_LCNT_MAX 7
/*
* defines which control the lineitem table
*/
#define L_SIZE 144L
#define L_QTY_MIN 1
#define L_QTY_MAX 50
#define L_TAX_MIN 0
#define L_TAX_MAX 8
#define L_DCNT_MIN 0
#define L_DCNT_MAX 10
#define L_PKEY_MIN 1
#define L_PKEY_MAX (tdefs[PART].base * scale)
#define L_SDTE_MIN 1
#define L_SDTE_MAX 121
#define L_CDTE_MIN 30
#define L_CDTE_MAX 90
#define L_RDTE_MIN 1
#define L_RDTE_MAX 30
/*
* defines which control the time table
*/
#define T_SIZE 30
#define T_START_DAY 3 /* wednesday ? */
#define LEAP(y) ((!(y % 4) && (y % 100))?1:0)
/*******************************************************************
*******************************************************************
***
*** general or inter table defines
***
*******************************************************************
*******************************************************************/
#define SUPP_PER_PART 4
#define ORDERS_PER_CUST 10 /* sync this with CUST_MORTALITY */
#define CUST_MORTALITY 3 /* portion with have no orders */
#define NATIONS_MAX 90 /* limited by country codes in phone numbers */
#define PHONE_FMT "%02d-%03d-%03d-%04d"
#define STARTDATE 92001
#define CURRENTDATE 95168
#define ENDDATE 98365
#define TOTDATE 2557
#define UPD_PCT 10
#define MAX_STREAM 56 /* increased by olteanu; 47 previously */
#define V_STR_LOW 0.4
#define PENNIES 100 /* for scaled int money arithmetic */
#define Q11_FRACTION (double)0.0001
/*
* max and min SF in GB; Larger SF will require changes to the build routines
*/
#define MIN_SCALE 1.0
#define MAX_SCALE 100000.0
/*
* beyond this point we need to allow for BCD calculations
*/
#define MAX_32B_SCALE 1000.0
#define LONG2HUGE(src, dst) *dst = (DSS_HUGE)src
#define HUGE2LONG(src, dst) *dst = (long)src
#define HUGE_SET(src, dst) *dst = *src
#define HUGE_MUL(op1, op2) *op1 *= op2
#define HUGE_DIV(op1, op2) *op1 /= op2
#define HUGE_ADD(op1, op2, dst) *dst = *op1 + op2
#define HUGE_SUB(op1, op2, dst) *dst = *op1 - op2
#define HUGE_MOD(op1, op2) *op1 % op2
#define HUGE_CMP(op1, op2) (*op1 == *op2)?0:(*op1 < *op2)-1:1
/******** environmental variables and defaults ***************/
#define DIST_TAG "DSS_DIST" /* environment var to override ... */
#define DIST_DFLT "dists.dss" /* default file to hold distributions */
#define PATH_TAG "DSS_PATH" /* environment var to override ... */
#define PATH_DFLT "." /* default directory to hold tables */
#define CONFIG_TAG "DSS_CONFIG" /* environment var to override ... */
#define CONFIG_DFLT "." /* default directory to config files */
#define ADHOC_TAG "DSS_ADHOC" /* environment var to override ... */
#define ADHOC_DFLT "adhoc.dss" /* default file name for adhoc vars */
/******* output macros ********/
#ifndef SEPARATOR
#define SEPARATOR '|' /* field spearator for generated flat files */
#endif
/* Data type flags for a single print routine */
#define DT_STR 0
#ifndef MVS
#define DT_VSTR DT_STR
#else
#define DT_VSTR 1
#endif /* MVS */
#define DT_INT 2
#define DT_HUGE 3
#define DT_KEY 4
#define DT_MONEY 5
#define DT_CHR 6
int dbg_print(int dt, FILE *tgt, void *data, int len, int eol);
#define PR_STR(f, str, len) dbg_print(DT_STR, f, (void *)str, len, 1)
#define PR_VSTR(f, str, len) dbg_print(DT_VSTR, f, (void *)str, len, 1)
#define PR_VSTR_LAST(f, str, len) dbg_print(DT_VSTR, f, (void *)str, len, 0)
#define PR_INT(f, str) dbg_print(DT_INT, f, (void *)str, 0, 1)
#define PR_HUGE(f, str) dbg_print(DT_HUGE, f, (void *)str, 0, 1)
#define PR_KEY(f, str) dbg_print(DT_KEY, f, (void *)str, 0, -1)
#define PR_MONEY(f, str) dbg_print(DT_MONEY, f, (void *)str, 0, 1)
#define PR_CHR(f, str) dbg_print(DT_CHR, f, (void *)str, 0, 1)
#define PR_STRT(fp) /* any line prep for a record goes here */
#define PR_END(fp) fprintf(fp, "\n") /* finish the record here */
#ifdef MDY_DATE
#define PR_DATE(tgt, yr, mn, dy) \
sprintf(tgt, "%02d-%02d-19%02d", mn, dy, yr)
#else
#define PR_DATE(tgt, yr, mn, dy) \
sprintf(tgt, "19%02d-%02d-%02d", yr, mn, dy)
#endif /* DATE_FORMAT */
/*
* verification macros
*/
#define VRF_STR(t, d) {char *xx = d; while (*xx) tdefs[t].vtotal += *xx++;}
#define VRF_INT(t,d) tdefs[t].vtotal += d
#define VRF_HUGE(t,d) tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1))
/* assume float is a 64 bit quantity */
#define VRF_MONEY(t,d) tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1))
#define VRF_CHR(t,d) tdefs[t].vtotal += d
#define VRF_STRT(t)
#define VRF_END(t)
/*********** distribuitons currently defined *************/
#define UNIFORM 0
/*
* seed indexes; used to separate the generation of individual columns
*/
#define P_MFG_SD 0
#define P_BRND_SD 1
#define P_TYPE_SD 2
#define P_SIZE_SD 3
#define P_CNTR_SD 4
#define P_RCST_SD 5
#define PS_QTY_SD 7
#define PS_SCST_SD 8
#define O_SUPP_SD 10
#define O_CLRK_SD 11
#define O_ODATE_SD 13
#define L_QTY_SD 14
#define L_DCNT_SD 15
#define L_TAX_SD 16
#define L_SHIP_SD 17
#define L_SMODE_SD 18
#define L_PKEY_SD 19
#define L_SKEY_SD 20
#define L_SDTE_SD 21
#define L_CDTE_SD 22
#define L_RDTE_SD 23
#define L_RFLG_SD 24
#define C_NTRG_SD 27
#define C_PHNE_SD 28
#define C_ABAL_SD 29
#define C_MSEG_SD 30
#define S_NTRG_SD 33
#define S_PHNE_SD 34
#define S_ABAL_SD 35
#define P_NAME_SD 37
#define O_PRIO_SD 38
#define HVAR_SD 39
#define O_CKEY_SD 40
#define N_CMNT_SD 41
#define R_CMNT_SD 42
#define O_LCNT_SD 43
#define BBB_JNK_SD 44
#define BBB_TYPE_SD 45
#define BBB_CMNT_SD 46
#define BBB_OFFSET_SD 47
#define WSD_PLACEHOLDERS 48
#define SUPP_PLACEHOLDERS 49
#define PART_PLACEHOLDERS 50
#define ORDERS_PLACEHOLDERS 51
#define LINE_PLACEHOLDERS 52
#define NATION_PLACEHOLDERS 53
#define REGION_PLACEHOLDERS 54
#define CUST_PLACEHOLDERS 55
#define PSUPP_PLACEHOLDERS 56
#endif /* DSS_H */