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); }
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); }
/* * 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); }
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); }
/* * 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; }
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); }
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); }
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); }
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(®ions, 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(®ions, 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; }
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(®ions, 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(®ions, 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; }
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); }
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); }
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); }