Exemplo n.º 1
0
long
mk_part(long index, part_t *p)
	{
	long      temp;
	long      snum;
	long      brnd;
	
	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, P_MFG_FMT, P_MFG_TAG, temp);
	RANDOM(brnd, P_BRND_MIN, P_BRND_MAX, P_BRND_SD);
	sprintf(p->brand, P_BRND_FMT,
		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);
	RPRICE_BRIDGE( p->retailprice, index);
	p->clen = TEXT(P_CMNT_LEN, P_CMNT_SD, 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);
		p->s[snum].clen = TEXT(PS_CMNT_LEN, PS_CMNT_SD, p->s[snum].comment);
		}
	return (0);
	}
Exemplo n.º 2
0
long
mk_cust(DSS_HUGE n_cust, customer_t * c)
{
	DSS_HUGE        i;
	static int      bInit = 0;
	static char     szFormat[100];

	if (!bInit)
	{
		sprintf(szFormat, C_NAME_FMT, 9, HUGE_FORMAT + 1);
		bInit = 1;
	}
	c->custkey = n_cust;
	sprintf(c->name, szFormat, C_NAME_TAG, n_cust);
	V_STR(C_ADDR_LEN, C_ADDR_SD, c->address);
	c->alen = (int)strlen(c->address);
	RANDOM(i, 0, (nations.count - 1), C_NTRG_SD);
	c->nation_code = i;
	gen_phone(i, c->phone, (long) C_PHNE_SD);
	RANDOM(c->acctbal, C_ABAL_MIN, C_ABAL_MAX, C_ABAL_SD);
	pick_str(&c_mseg_set, C_MSEG_SD, c->mktsegment);
	TEXT(C_CMNT_LEN, C_CMNT_SD, c->comment);
	c->clen = (int)strlen(c->comment);

	return (0);
}
Exemplo n.º 3
0
/*
 * agg_str(set, count) build an aggregated string from count unique
 * selections taken from set
 */
int
agg_str(distribution *set, long count, long col, char *dest)
{
    int used[128],
        picked = 0,
        length = 0,
        i;
    long slot;
    char *pos;

    used[0] = -1;
    pos = dest;

    do
        {
        slot = pick_str(set, (int)col, pos);
        for (i=0; i < picked; i++)
        if (used[i] == slot)
            break;
        if (i < picked)
            continue;
        used[picked++] = slot;
        i = strlen(set->list[slot].text);
        pos += i;
        length += i;
        *pos = ' ';
        pos++;
        } while (--count > 0);
    *(pos - 1) = '\0';

    return (length);
}
Exemplo n.º 4
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);
}
Exemplo n.º 5
0
/*
 * embed a randomly selected member of distribution d in alpha-numeric
 * noise of a length rendomly selected between min and max at a random
 * position
 */
void e_str(distribution *d, int min, int max, int stream, char *dest) {
  char strtmp[MAXAGG_LEN + 1];
  long loc;
  int len;

  a_rnd(min, max, stream, dest);
  pick_str(d, stream, strtmp);
  len = strlen(strtmp);
  RANDOM(loc, 0, (strlen(dest) - 1 - len), stream);
  strncpy(dest + loc, strtmp, len);

  return;
}
Exemplo n.º 6
0
long mk_part(long index, part_t *p)
{
	long      mfgr,cat,brnd;
        static int bInit = 0;
        static char szFormat[100];
        static char szBrandFormat[100];

        if (!bInit) {
          TRACE( TRACE_ALWAYS, "Init mk_part ..\n");
          bInit = 1;
        }

	p->partkey = index;
	agg_str(&colors, (long)P_NAME_SCL, (long)P_NAME_SD, p->name);
	
	/*extract color from substring of p->name*/
        p->clen =gen_color(p->name,p->color); 
	
	
	RANDOM(mfgr, P_MFG_MIN, P_MFG_MAX, P_MFG_SD);
	sprintf(p->mfgr, "%s%ld", "MFGR#", mfgr);

        RANDOM(cat, P_CAT_MIN, P_CAT_MAX, P_CAT_SD);
        sprintf(p->category, "%s%ld", p->mfgr,cat);
	
	RANDOM(brnd, P_BRND_MIN, P_BRND_MAX, P_BRND_SD);
	sprintf(p->brand,"%s%ld",p->category,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);
	
	
	return (0);
}
Exemplo n.º 7
0
long 
mk_cust(long n_cust, customer_t *c)
	{
	long i;
	
	c->custkey = n_cust;
	sprintf(c->name, C_NAME_FMT, C_NAME_TAG, n_cust);
	c->alen = V_STR(C_ADDR_LEN, C_ADDR_SD, c->address);
	RANDOM(i, 0, (nations.count - 1), C_NTRG_SD);
	c->nation_code = i;
	gen_phone(i, c->phone, (long)C_PHNE_SD);
	RANDOM(c->acctbal, C_ABAL_MIN, C_ABAL_MAX, C_ABAL_SD);
	pick_str(&c_mseg_set, C_MSEG_SD, c->mktsegment);
	c->clen = TEXT(C_CMNT_LEN, C_CMNT_SD, c->comment);
	
	return (0);
	}
Exemplo n.º 8
0
long mk_cust(long n_cust, customer_t *c)
{
        long i;
        static int bInit = 0;
	
        while (!bInit) {
          TRACE( TRACE_ALWAYS, "Init mk_cust ..\n");
          bInit = 1;
        }

        c->custkey = n_cust;
	sprintf(c->name, C_NAME_FMT, C_NAME_TAG, n_cust);
	c->alen = V_STR(C_ADDR_LEN, C_ADDR_SD, c->address);
        RANDOM(i, 0, nations.count-1, C_NTRG_SD);
	strcpy(c->nation_name,nations.list[i].text);
	strcpy(c->region_name,regions.list[nations.list[i].weight].text);
	gen_city(c->city,c->nation_name);
	gen_phone(i, c->phone, (long)C_PHNE_SD);
        pick_str(&c_mseg_set, C_MSEG_SD, c->mktsegment);
	return (0);
 }
Exemplo n.º 9
0
void
varsub(int qnum, int vnum, int flags)
{
    static char param[11][128];
    static FILE *lfp = NULL;
    char *ptr;
    int i = 0,
        size[10],
        tmp_date;

    if (vnum == 0)
    {
        if ((flags & DFLT) == 0)
        {
            switch(qnum)
            {
            case 1:
                sprintf(param[1], "%d", UnifInt((long)60,(long)120,(long)qnum));
                param[2][0] = '\0';
                break;
            case 2:
                sprintf(param[1], "%d",
                        UnifInt((long)P_SIZE_MIN, (long)P_SIZE_MAX, qnum));
                pick_str(&p_types_set, qnum, param[3]);
                ptr = param[3] + strlen(param[3]);
                while (*(ptr - 1) != ' ') ptr--;
                strcpy(param[2], ptr);
                pick_str(&regions, qnum, param[3]);
                param[4][0] = '\0';
                break;
            case 3:
                pick_str(&c_mseg_set, qnum, param[1]);
                /*
                 * pick a random offset within the month of march and add the
                 * appropriate magic numbers to position the output functions
                 * at the start of March '95
                 */
                tmp_date = UnifInt((long)0, (long)30, (long)qnum);
                strcpy(param[2], *(asc_date + tmp_date + 1155));
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[2]); i++);
                    sprintf(param[2],"%ld", julian(i + STARTDATE));
                }
                param[3][0] = '\0';
                break;
            case 4:
                tmp_date = UnifInt(1,58,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 5:
                pick_str(&regions, qnum, param[1]);
                tmp_date = UnifInt((long)93,(long)97,(long)qnum);
                if (oldtime) sprintf(param[2],"%ld", tmp_date);
                else sprintf(param[2], "19%d-01-01", tmp_date);
                param[3][0] = '\0';
                break;
            case 6:
                tmp_date = UnifInt(93,97,qnum);
                if (oldtime)
                    sprintf(param[1],"%ld001", tmp_date);
                else
                    sprintf(param[1], "19%d-01-01", tmp_date);
                sprintf(param[2], "0.0%d", UnifInt(2, 9, qnum));
                sprintf(param[3], "%d", UnifInt((long)24, (long)25, (long)qnum));
                param[4][0] = '\0';
                break;
            case 7:
                tmp_date = pick_str(&nations2, qnum, param[1]);
                while (pick_str(&nations2, qnum, param[2]) == tmp_date);
                param[3][0] = '\0';
                break;
            case 8:
                tmp_date = pick_str(&nations2, qnum, param[1]);
                tmp_date = nations.list[tmp_date].weight;
                strcpy(param[2], regions.list[tmp_date].text);
                pick_str(&p_types_set, qnum, param[3]);
                param[4][0] = '\0';
                break;
            case 9:
                pick_str(&colors, qnum, param[1]);
                param[2][0] = '\0';
                break;
            case 10:
                tmp_date = UnifInt(1,24,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 11:
                pick_str(&nations2, qnum, param[1]);
                sprintf(param[2], "%11.10f", Q11_FRACTION / flt_scale );
                param[3][0] = '\0';
                break;
            case 12:
                tmp_date = pick_str(&l_smode_set, qnum, param[1]);
                while (tmp_date == pick_str(&l_smode_set, qnum, param[2]));
                tmp_date = UnifInt(93,97,qnum);
                if (oldtime) sprintf(param[3],"%d", tmp_date*1000 + 1);
                else sprintf(param[3], "19%d-01-01", tmp_date);
                param[4][0] = '\0';
                break;
            case 13:
                sprintf(param[1], O_CLRK_FMT, O_CLRK_TAG,
                        UnifInt((long)1,
                                (long) MAX((scale * O_CLRK_SCL), O_CLRK_SCL),
                                (long)qnum));

                param[2][0] = '\0';
                break;
            case 14:
                tmp_date = UnifInt(1,60,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 15:
                tmp_date = UnifInt(1,58,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 16:
                sprintf(param[1], "Brand#%d%d",
                        UnifInt(1, 5, qnum),
                        UnifInt(1, 5, qnum));
                pick_str(&p_types_set, qnum, param[2]);
                ptr = param[2] + strlen(param[2]);
                while (*(--ptr) != ' ');
                *ptr = '\0';
                i=0;
next:
                size[i] = UnifInt(1, 50, qnum);
                tmp_date = 0;
                while (tmp_date < i)
                    if (size[i] == size[tmp_date])
                        goto next;
                    else
                        tmp_date++;
                sprintf(param[i + 3], "%d", size[i]);
                if (++i <= TYPE_CNT)
                    goto next;
                param[i + 2][0] = '\0';
                break;
            case 17:
                sprintf(param[1], "Brand#%ld%ld",
                        UnifInt(1, 5, qnum),
                        UnifInt(1, 5, qnum));
                pick_str(&p_cntr_set, qnum, param[2]);
                param[3][0] = '\0';
                break;
            case 18:
            case 19:
                break;
            default:
                fprintf(stderr,
                        "No variable definitions available for query %d\n",
                        qnum);
            }
        }

        if (flags & LOG)
        {
            if (lfp == NULL)
            {
                lfp = fopen(lfile, "a");
                OPEN_CHECK(lfp, lfile);
            }
            fprintf(lfp, "%d", qnum);
            for (i=1; i <= 10; i++)
                if (flags & DFLT)
                {
                    if (defaults[i - 1] == NULL)
                        break;
                    else
                        fprintf(lfp, "\t%s", defaults[i - 1]);
                }
                else
                {
                    if (param[i][0] == '\0')
                        break;
                    else
                        fprintf(lfp, "\t%s", param[i]);
                }
            fprintf(lfp, "\n");
        }
    }
    else
    {
        if (flags & DFLT)
        {
            /* to allow -d to work at all scale factors */
            if (qnum == 11 && vnum == 2)
                fprintf(ofp, "%11.10f", Q11_FRACTION/flt_scale);
            else if (defaults[qnum - 1][vnum - 1])
                fprintf(ofp, "%s", defaults[qnum - 1][vnum - 1]);
            else
                fprintf(stderr,
                        "Bad default request (q: %d, p: %d)\n",
                        qnum, vnum);
        }
        else
        {
            if (param[vnum])
                fprintf(ofp, "%s", param[vnum]);
            else
                fprintf(stderr, "Bad parameter request (q: %d, p: %d)\n",
                        qnum, vnum);
        }
    }
    return;
}
Exemplo n.º 10
0
void
varsub(int qnum, int vnum, int flags)
{
    static char param[11][128];
    static char formats[23][128];
    static FILE *lfp = NULL;
    static int bInit = 0;
    long *lptr;
    char *ptr;
    int i = 0;
    DSS_HUGE tmp_date, tmp1, tmp2;
	
    if (!bInit)
    {
        sprintf(formats[4], "19%s-%s-01", HUGE_DATE_FORMAT, HUGE_DATE_FORMAT);
        sprintf(formats[5], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[6], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[7], "0.%s", HUGE_DATE_FORMAT); /* used by q6 */
        sprintf(formats[10], "19%s-%s-01", HUGE_DATE_FORMAT, HUGE_DATE_FORMAT);
        sprintf(formats[12], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[14], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[15], "19%s-01-01", HUGE_DATE_FORMAT);
	sprintf(formats[16], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
	sprintf(formats[17], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
	sprintf(formats[19], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
        sprintf(formats[20], "19%s-01-01", HUGE_DATE_FORMAT);
        bInit = 1;
    }

    if (vnum == 0)
    {
		if ((flags & DFLT) == 0)
		{
			switch(qnum)
			{
			case 1:
				sprintf(param[1], HUGE_FORMAT, UnifInt((DSS_HUGE)60,(DSS_HUGE)120,qnum));
				param[2][0] = '\0';
				break;
			case 2:
				sprintf(param[1], HUGE_FORMAT,
					UnifInt((DSS_HUGE)P_SIZE_MIN, (DSS_HUGE)P_SIZE_MAX, qnum));
				pick_str(&p_types_set, qnum, param[3]);
				ptr = param[3] + strlen(param[3]);
				while (*(ptr - 1) != ' ') ptr--;
				strcpy(param[2], ptr);
				pick_str(&regions, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 3:
				pick_str(&c_mseg_set, qnum, param[1]);
				/*
				* pick a random offset within the month of march and add the
				* appropriate magic numbers to position the output functions 
				* at the start of March '95
				*/
            RANDOM(tmp_date, 0, 30, qnum);
				strcpy(param[2], *(asc_date + tmp_date + 1155));
				param[3][0] = '\0';
				break;
			case 4:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)58,qnum);
				sprintf(param[1],formats[4],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 5:
				pick_str(&regions, qnum, param[1]);
				tmp_date = UnifInt((DSS_HUGE)93, (DSS_HUGE)97,qnum);
				sprintf(param[2], formats[5], tmp_date);
				param[3][0] = '\0';
				break;
			case 6:
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[1], formats[6], tmp_date);
				sprintf(param[2], formats[7], 
                                    UnifInt((DSS_HUGE)2, (DSS_HUGE)9, qnum));
				sprintf(param[3], HUGE_FORMAT, UnifInt((DSS_HUGE)24, (DSS_HUGE)25, qnum));
				param[4][0] = '\0';
				break;
			case 7:
				tmp_date = pick_str(&nations2, qnum, param[1]);
				while (pick_str(&nations2, qnum, param[2]) == tmp_date);
				param[3][0] = '\0';
				break;
			case 8:
				tmp_date = pick_str(&nations2, qnum, param[1]);
				tmp_date = nations.list[tmp_date].weight;
				strcpy(param[2], regions.list[tmp_date].text);
				pick_str(&p_types_set, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 9:
				pick_str(&colors, qnum, param[1]);
				param[2][0] = '\0';
				break;
			case 10:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)24,qnum);
				sprintf(param[1],formats[10],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 11:
				pick_str(&nations2, qnum, param[1]);
				sprintf(param[2], "%11.10f", Q11_FRACTION / flt_scale );
				param[3][0] = '\0';
				break;
			case 12:
				tmp_date = pick_str(&l_smode_set, qnum, param[1]);
				while (tmp_date == pick_str(&l_smode_set, qnum, param[2]));
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[3], formats[12], tmp_date);
				param[4][0] = '\0';
				break;
			case 13:
				pick_str(&q13a, qnum, param[1]);
				pick_str(&q13b, qnum, param[2]);
				param[3][0] = '\0';
				break;
			case 14:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)60,qnum);
				sprintf(param[1],formats[14],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 15:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)58,qnum);
				sprintf(param[1],formats[15],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 16:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[16], tmp1, tmp2);
				pick_str(&p_types_set, qnum, param[2]);
				ptr = param[2] + strlen(param[2]);
				while (*(--ptr) != ' ');
				*ptr = '\0';
				lptr = &sizes[0];
				for (i=3; i <= MAX_PARAM; i++)
				{
					sprintf(param[i], "%ld", *permute(lptr,50,qnum) + 1);
					lptr = (long *)NULL;
				}
					break;
			case 17:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[17], tmp1, tmp2);
				pick_str(&p_cntr_set, qnum, param[2]);
				param[3][0] = '\0';
				break;
			case 18:
				sprintf(param[1], HUGE_FORMAT, UnifInt((DSS_HUGE)312, (DSS_HUGE)315, qnum));
				param[2][0] = '\0';
				break;
			case 19:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[19], tmp1, tmp2);
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[2], formats[19], tmp1, tmp2);
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[3], formats[19], tmp1, tmp2);
				sprintf(param[4], HUGE_FORMAT, UnifInt((DSS_HUGE)1, (DSS_HUGE)10, qnum));
				sprintf(param[5], HUGE_FORMAT, UnifInt((DSS_HUGE)10, (DSS_HUGE)20, qnum));
				sprintf(param[6], HUGE_FORMAT, UnifInt((DSS_HUGE)20, (DSS_HUGE)30, qnum));
				param[7][0] = '\0';
				break;
			case 20:
				pick_str(&colors, qnum, param[1]);
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[2], formats[20], tmp_date);
				pick_str(&nations2, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 21:
				pick_str(&nations2, qnum, param[1]);
				param[2][0] = '\0';
				break;
			case 22:
				lptr = &ccode[0];
				for (i=0; i <= 7; i++)
				{
					sprintf(param[i+1], "%ld", 10 + *permute(lptr,25, qnum));
					lptr = (long *)NULL;
				}
				param[8][0] = '\0';
				break;
			case 23:
			case 24:
                break;
			default:
				fprintf(stderr, 
					"No variable definitions available for query %d\n", 
                    qnum);
				return;
        }
    }
	
    if (flags & LOG)
	{
        if (lfp == NULL)
		{
            lfp = fopen(lfile, "a");
            OPEN_CHECK(lfp, lfile);
		}
        fprintf(lfp, "%d", qnum);
        for (i=1; i <= 10; i++)
            if (flags & DFLT)
			{
				if (defaults[qnum - 1][i - 1] == NULL)
					break;
				else
					fprintf(lfp, "\t%s", defaults[qnum - 1][i - 1]);
			}
            else
			{
				if (param[i][0] == '\0')
					break;
				else
					fprintf(lfp, "\t%s", param[i]);
			}
			fprintf(lfp, "\n");
	}
    }
    else
	{
        if (flags & DFLT)   
		{
            /* to allow -d to work at all scale factors */
            if (qnum == 11 && vnum == 2)
                fprintf(ofp, "%11.10f", Q11_FRACTION/flt_scale);
            else
                if (defaults[qnum - 1][vnum - 1])
                    fprintf(ofp, "%s", defaults[qnum - 1][vnum - 1]);
                else
					fprintf(stderr, 
					"Bad default request (q: %d, p: %d)\n",
					qnum, vnum);
		}
        else        
		{
            if (param[vnum] && vnum <= MAX_PARAM)
                fprintf(ofp, "%s", param[vnum]);
            else
				fprintf(stderr, "Bad parameter request (q: %d, p: %d)\n",
				qnum, vnum);
		}
	}
    return;
}
Exemplo n.º 11
0
long
mk_order(long index, order_t *o, long upd_num)
	{
	long      lcnt;
	long      rprice;
	long      ocnt;
	long      tmp_date;
	long      s_date;
	long      r_date;
	long      c_date;
	long      clk_num;
	long      supp_num;
	static char **asc_date = NULL;
	char tmp_str[2];
	char **mk_ascdate PROTO((void));
	int delta = 1;
	
	if (asc_date == NULL)
        asc_date = mk_ascdate();
	mk_sparse (index, o->okey,
		(upd_num == 0) ? 0 : 1 + upd_num / (10000 / refresh));
    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, O_CLRK_FMT,
        O_CLRK_TAG,
        clk_num);
    o->clen = TEXT(O_CMNT_LEN, O_CMNT_SD, 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++)
		{
        HUGE_SET(o->okey, o->l[lcnt].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);
        o->l[lcnt].clen = TEXT(L_CMNT_LEN, L_CMNT_SD, o->l[lcnt].comment);
        RANDOM(o->l[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD);
        RPRICE_BRIDGE( rprice, 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);
}
Exemplo n.º 12
0
long
mk_order(long index, order_t *o, long upd_num)
	{
	long      lcnt;
	long      rprice;
	long      ocnt;
	long      tmp_date;
	long      c_date;
	long      clk_num;
	//long      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];
	
        while (!bInit) {
          TRACE( TRACE_ALWAYS, "Init mk_order ..\n");
          // sprintf(szFormat, O_CLRK_FMT, 9, HUGE_FORMAT + 1);
          bInit = 1;
        }

	if (asc_date == NULL) {
	    asc_date = mk_ascdate();
	  }

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

	//mk_sparse (index, o->okey,
	//	(upd_num == 0) ? 0 : 1 + upd_num / (10000 / refresh));
	mk_sparse (index, o->okey, 0);

	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;
	    }

	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);
	o->spriority = 0;
	
	o->totalprice = 0;
	ocnt = 0;
	
	RANDOM(o->lines, O_LCNT_MIN, O_LCNT_MAX, O_LCNT_SD);
	for (lcnt = 0; lcnt < o->lines; lcnt++)
	    {
		
		HUGE_SET(o->okey, o->lineorders[lcnt].okey);
		o->lineorders[lcnt].linenumber = lcnt + 1;
		o->lineorders[lcnt].custkey = o->custkey;
		RANDOM(o->lineorders[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD);
		RANDOM(o->lineorders[lcnt].suppkey, L_SKEY_MIN, L_SKEY_MAX, L_SKEY_SD);
				
		RANDOM(o->lineorders[lcnt].quantity, L_QTY_MIN, L_QTY_MAX, L_QTY_SD);
		RANDOM(o->lineorders[lcnt].discount, L_DCNT_MIN, L_DCNT_MAX, L_DCNT_SD);
		RANDOM(o->lineorders[lcnt].tax, L_TAX_MIN, L_TAX_MAX, L_TAX_SD);

		strcpy(o->lineorders[lcnt].orderdate,o->odate);

		strcpy(o->lineorders[lcnt].opriority,o->opriority);
		o->lineorders[lcnt].ship_priority = o->spriority;

		RANDOM(c_date, L_CDTE_MIN, L_CDTE_MAX, L_CDTE_SD);
		c_date += tmp_date;        
		strcpy(o->lineorders[lcnt].commit_date, asc_date[c_date - STARTDATE]);

		pick_str(&l_smode_set, L_SMODE_SD, o->lineorders[lcnt].shipmode);
		
		RPRICE_BRIDGE( rprice, o->lineorders[lcnt].partkey);
		o->lineorders[lcnt].extended_price = rprice * o->lineorders[lcnt].quantity;
		o->lineorders[lcnt].revenue = o->lineorders[lcnt].extended_price * ((long)100-o->lineorders[lcnt].discount)/(long)PENNIES;
		
		//round off problem with linux if use 0.6
		o->lineorders[lcnt].supp_cost = 6 * rprice /10;
		
		o->totalprice +=
		    ((o->lineorders[lcnt].extended_price * 
		      ((long)100 - o->lineorders[lcnt].discount)) / (long)PENNIES ) *
		    ((long)100 + o->lineorders[lcnt].tax)
		    / (long)PENNIES;
	    }
	
	for (lcnt = 0; lcnt < o->lines; lcnt++)
	    {
		o->lineorders[lcnt].order_totalprice = o->totalprice;
	    }

	/*
	for (uint i=0; i<TOTDATE; i++) {
	  printf("%d-%s\n",i,asc_date[i]);
	  free (asc_date[i]);
	}
	free(asc_date);
	asc_date=NULL;
	*/

	return (0);
	}
Exemplo n.º 13
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;
  char **asc_date = NULL;
  char tmp_str[2];
  char **mk_ascdate PROTO((void));
  int delta = 1;
  static int bInit = 0;
  static char szFormat[100];
	
  while (!bInit) {
    TRACE( TRACE_ALWAYS, "Init mk_order ..\n");
    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 / arefresh));
  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 = 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 = 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;
        o->l[lcnt].rflag = tmp_str[0];
    }
    else {
        //o->l[lcnt].rflag[0] = 'N';
        o->l[lcnt].rflag = 'N';
    }
		
    if (julian(s_date) <= CURRENTDATE)  {
        ocnt++;
        //o->l[lcnt].lstatus[0] = 'F';
        o->l[lcnt].lstatus = 'F';
    }
    else {
        //o->l[lcnt].lstatus[0] = 'O';
        o->l[lcnt].lstatus = 'O';
    }
  }
	
  if (ocnt > 0) {
    o->orderstatus = 'P';
  }

  if (ocnt == o->lines) {
    o->orderstatus = 'F';
  }

  
  for (uint i=0; i<TOTDATE; i++) {
      free (asc_date[i]);
  }
  free(asc_date);
	
  return (0);
}