static void mk_detail (void *row, int bPrint) { int nTemp; struct W_STORE_RETURNS_TBL ReturnRow; struct W_STORE_SALES_TBL *r; tdef *pT = getSimpleTdefsByNumber(STORE_SALES); if (row == NULL) r = &g_w_store_sales; else r = row; nullSet(&pT->kNullBitMap, SS_NULLS); /* * items need to be unique within an order * use a sequence within the permutation */ if (++nItemIndex > nItemCount) nItemIndex = 1; r->ss_sold_item_sk = matchSCDSK(getPermutationEntry(pItemPermutation, nItemIndex), r->ss_sold_date_sk, ITEM); r->ss_sold_promo_sk = mk_join (SS_SOLD_PROMO_SK, PROMOTION, 1); set_pricing(SS_PRICING, &r->ss_pricing); /** * having gone to the trouble to make the sale, now let's see if it gets returned */ genrand_integer(&nTemp, DIST_UNIFORM, 0, 99, 0, SR_IS_RETURNED); if (nTemp < SR_RETURN_PCT) { mk_w_store_returns(&ReturnRow, 1); if (bPrint) pr_w_store_returns(&ReturnRow); } if (bPrint) pr_w_store_sales(NULL); return; }
static void mk_detail (void *row, int bPrint) { static int *pItemPermutation, nItemCount, bInit = 0; struct W_WEB_SALES_TBL *r; int nShipLag, nTemp; struct W_WEB_RETURNS_TBL w_web_returns; tdef *pT = getSimpleTdefsByNumber(WEB_SALES); if (!bInit) { jDate = skipDays(WEB_SALES, &kNewDateIndex); pItemPermutation = makePermutation(NULL, nItemCount = (int)getIDCount(ITEM), WS_PERMUTATION); bInit = 1; } if (row == NULL) r = &g_w_web_sales; else r = row; nullSet(&pT->kNullBitMap, WS_NULLS); /* orders are shipped some number of days after they are ordered, * and not all lineitems ship at the same time */ genrand_integer (&nShipLag, DIST_UNIFORM, WS_MIN_SHIP_DELAY, WS_MAX_SHIP_DELAY, 0, WS_SHIP_DATE_SK); r->ws_ship_date_sk = r->ws_sold_date_sk + nShipLag; if (++nItemIndex > nItemCount) nItemIndex = 1; r->ws_item_sk = matchSCDSK(getPermutationEntry(pItemPermutation, nItemIndex), r->ws_sold_date_sk, ITEM); /* the web page needs to be valid for the sale date */ r->ws_web_page_sk = mk_join (WS_WEB_PAGE_SK, WEB_PAGE, r->ws_sold_date_sk); r->ws_web_site_sk = mk_join (WS_WEB_SITE_SK, WEB_SITE, r->ws_sold_date_sk); r->ws_ship_mode_sk = mk_join (WS_SHIP_MODE_SK, SHIP_MODE, 1); r->ws_warehouse_sk = mk_join (WS_WAREHOUSE_SK, WAREHOUSE, 1); r->ws_promo_sk = mk_join (WS_PROMO_SK, PROMOTION, 1); set_pricing(WS_PRICING, &r->ws_pricing); /** * having gone to the trouble to make the sale, now let's see if it gets returned */ if (!is_set("FILTER") || is_set("_CHILD_ONLY")) { genrand_integer(&nTemp, DIST_UNIFORM, 0, 99, 0, WR_IS_RETURNED); if (nTemp < WR_RETURN_PCT) { mk_w_web_returns(&w_web_returns, 1); if (bPrint) pr_w_web_returns(&w_web_returns); } } /** * now we print out the order and lineitem together as a single row */ if (bPrint && (!is_set("FILTER") || !is_set("_CHILD_ONLY"))) pr_w_web_sales(NULL); return; }