Beispiel #1
0
long
mk_part(DSS_HUGE index, part_t *p)
{
  DSS_HUGE  temp;
  long      snum;
  DSS_HUGE  brnd;  
  static int bInit = 0;
  static char szFormat[100];
  static char szBrandFormat[100];

  if (!bInit) {
      TRACE( TRACE_ALWAYS, "Init mk_part ..\n");
      sprintf(szFormat, P_MFG_FMT, 1, HUGE_FORMAT + 1);
      sprintf(szBrandFormat, P_BRND_FMT, 2, HUGE_FORMAT + 1);
      bInit = 1;
  }
	       
  p->partkey = index;
  agg_str(&colors, (long)P_NAME_SCL, (long)P_NAME_SD, p->name); 
  RANDOM(temp, P_MFG_MIN, P_MFG_MAX, P_MFG_SD);
  sprintf(p->mfgr, szFormat, P_MFG_TAG, temp);
  RANDOM(brnd, P_BRND_MIN, P_BRND_MAX, P_BRND_SD);
  sprintf(p->brand, szBrandFormat, P_BRND_TAG, (temp * 10 + brnd));
  p->tlen = pick_str(&p_types_set, P_TYPE_SD, p->type);
  p->tlen = strlen(p_types_set.list[p->tlen].text);
  RANDOM(p->size, P_SIZE_MIN, P_SIZE_MAX, P_SIZE_SD);
  pick_str(&p_cntr_set, P_CNTR_SD, p->container);
  p->retailprice = rpb_routine(index);
  TEXT(P_CMNT_LEN, P_CMNT_SD, p->comment);
  p->clen = strlen(p->comment);
	
  for (snum = 0; snum < SUPP_PER_PART; snum++) {
    p->s[snum].partkey = p->partkey;
    PART_SUPP_BRIDGE( p->s[snum].suppkey, index, snum);
    RANDOM(p->s[snum].qty, PS_QTY_MIN, PS_QTY_MAX, PS_QTY_SD);
    RANDOM(p->s[snum].scost, PS_SCST_MIN, PS_SCST_MAX, PS_SCST_SD);
    TEXT(PS_CMNT_LEN, PS_CMNT_SD, p->s[snum].comment);
    p->s[snum].clen = strlen(p->s[snum].comment);
  }

  return (0);
}
Beispiel #2
0
long
mk_order(DSS_HUGE index, order_t * o, long upd_num)
{
	DSS_HUGE        lcnt;
	DSS_HUGE        rprice;
	long            ocnt;
	DSS_HUGE        tmp_date;
	DSS_HUGE        s_date;
	DSS_HUGE        r_date;
	DSS_HUGE        c_date;
	DSS_HUGE        clk_num;
	DSS_HUGE        supp_num;
	static char   **asc_date = NULL;
	char            tmp_str[2];
	char          **mk_ascdate PROTO((void));
	int             delta = 1;
	static int      bInit = 0;
	static char     szFormat[100];

	if (!bInit)
	{
		sprintf(szFormat, O_CLRK_FMT, 9, HUGE_FORMAT + 1);
		bInit = 1;
	}
	if (asc_date == NULL)
		asc_date = mk_ascdate();
	mk_sparse(index, &o->okey,
		  (upd_num == 0) ? 0 : 1 + upd_num / (10000 / UPD_PCT));
	if (scale >= 30000)
		RANDOM64(o->custkey, O_CKEY_MIN, O_CKEY_MAX, O_CKEY_SD);
	else
		RANDOM(o->custkey, O_CKEY_MIN, O_CKEY_MAX, O_CKEY_SD);
	while (o->custkey % CUST_MORTALITY == 0)
	{
		o->custkey += delta;
		o->custkey = MIN(o->custkey, O_CKEY_MAX);
		delta *= -1;
	}


	RANDOM(tmp_date, O_ODATE_MIN, O_ODATE_MAX, O_ODATE_SD);
	strcpy(o->odate, asc_date[tmp_date - STARTDATE]);

	pick_str(&o_priority_set, O_PRIO_SD, o->opriority);
	RANDOM(clk_num, 1, MAX((scale * O_CLRK_SCL), O_CLRK_SCL), O_CLRK_SD);
	sprintf(o->clerk, szFormat, O_CLRK_TAG, clk_num);
	TEXT(O_CMNT_LEN, O_CMNT_SD, o->comment);
	o->clen = (int)strlen(o->comment);
#ifdef DEBUG
	if (o->clen > O_CMNT_MAX)
		fprintf(stderr, "comment error: O%d\n", index);
#endif				/* DEBUG */
	o->spriority = 0;

	o->totalprice = 0;
	o->orderstatus = 'O';
	ocnt = 0;

	RANDOM(o->lines, O_LCNT_MIN, O_LCNT_MAX, O_LCNT_SD);
	for (lcnt = 0; lcnt < o->lines; lcnt++)
	{
		o->l[lcnt].okey = o->okey;;
		o->l[lcnt].lcnt = lcnt + 1;
		RANDOM(o->l[lcnt].quantity, L_QTY_MIN, L_QTY_MAX, L_QTY_SD);
		RANDOM(o->l[lcnt].discount, L_DCNT_MIN, L_DCNT_MAX, L_DCNT_SD);
		RANDOM(o->l[lcnt].tax, L_TAX_MIN, L_TAX_MAX, L_TAX_SD);
		pick_str(&l_instruct_set, L_SHIP_SD, o->l[lcnt].shipinstruct);
		pick_str(&l_smode_set, L_SMODE_SD, o->l[lcnt].shipmode);
		TEXT(L_CMNT_LEN, L_CMNT_SD, o->l[lcnt].comment);
		o->l[lcnt].clen = (int)strlen(o->l[lcnt].comment);
		if (scale >= 30000)
			RANDOM64(o->l[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD);
		else
			RANDOM(o->l[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD);
		rprice = rpb_routine(o->l[lcnt].partkey);
		RANDOM(supp_num, 0, 3, L_SKEY_SD);
		PART_SUPP_BRIDGE(o->l[lcnt].suppkey, o->l[lcnt].partkey, supp_num);
		o->l[lcnt].eprice = rprice * o->l[lcnt].quantity;

		o->totalprice +=
			((o->l[lcnt].eprice *
		     ((long) 100 - o->l[lcnt].discount)) / (long) PENNIES) *
			((long) 100 + o->l[lcnt].tax)
			/ (long) PENNIES;

		RANDOM(s_date, L_SDTE_MIN, L_SDTE_MAX, L_SDTE_SD);
		s_date += tmp_date;
		RANDOM(c_date, L_CDTE_MIN, L_CDTE_MAX, L_CDTE_SD);
		c_date += tmp_date;
		RANDOM(r_date, L_RDTE_MIN, L_RDTE_MAX, L_RDTE_SD);
		r_date += s_date;


		strcpy(o->l[lcnt].sdate, asc_date[s_date - STARTDATE]);
		strcpy(o->l[lcnt].cdate, asc_date[c_date - STARTDATE]);
		strcpy(o->l[lcnt].rdate, asc_date[r_date - STARTDATE]);


		if (julian(r_date) <= CURRENTDATE)
		{
			pick_str(&l_rflag_set, L_RFLG_SD, tmp_str);
			o->l[lcnt].rflag[0] = *tmp_str;
		}
		else
			o->l[lcnt].rflag[0] = 'N';

		if (julian(s_date) <= CURRENTDATE)
		{
			ocnt++;
			o->l[lcnt].lstatus[0] = 'F';
		}
		else
			o->l[lcnt].lstatus[0] = 'O';
	}

	if (ocnt > 0)
		o->orderstatus = 'P';
	if (ocnt == o->lines)
		o->orderstatus = 'F';

	return (0);
}