/* * Routine: * Purpose: * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: None */ int mk_s_catalog(void *pDest, ds_key_t kIndex) { struct S_CATALOG_TBL *r; static int bInit = 0; int nDateDelta; static date_t dtStartMin, dtStartMax; if (pDest == NULL) r = &g_s_catalog; else r = pDest; if (!bInit) { memset(&g_s_catalog, 0, sizeof(struct S_CATALOG_TBL)); strtodt(&dtStartMin, "1999-01-01"); strtodt(&dtStartMax, "2002-12-31"); bInit = 1; } r->s_catalog_number = kIndex; genrand_date(&r->s_catalog_start_date, DIST_UNIFORM, &dtStartMin, &dtStartMax, NULL, S_CATALOG_START_DATE); genrand_integer(&nDateDelta, DIST_UNIFORM, S_CATALOG_DURATION_MIN, S_CATALOG_DURATION_MAX, 0, S_CATALOG_END_DATE); jtodt(&r->s_catalog_end_date, r->s_catalog_start_date.julian + nDateDelta); gen_text(r->s_catalog_catalog_desc, S_CATALOG_DESC_MIN, S_CATALOG_DESC_MAX, S_CATALOG_DESC); genrand_integer(&r->s_catalog_catalog_type, DIST_UNIFORM, 1, S_CATALOG_TYPE_COUNT, 0, S_CATALOG_TYPE); return(0); }
/* * Routine: * Purpose: * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: None */ int mk_master(void *pDest, ds_key_t kIndex) { static int bInit = 0; struct S_PURCHASE_TBL *r; if (pDest == NULL) r = &g_s_purchase; else r = pDest; if (!bInit) { memset(&g_s_purchase, 0, sizeof(struct S_PURCHASE_TBL)); bInit = 1; } r->kID = kIndex + getUpdateBase(S_PURCHASE); r->kStoreID = mk_join(S_PURCHASE_STORE_ID, STORE, 1); r->kCustomerID = mk_join(S_PURCHASE_CUSTOMER_ID, CUSTOMER, 1); jtodt(&r->dtPurchaseDate, getUpdateDate(S_PURCHASE, kIndex)); genrand_integer(&r->nRegister, DIST_UNIFORM, 1, 17, 0, S_PURCHASE_REGISTER); genrand_integer(&r->nClerk, DIST_UNIFORM, 101, 300, 0, S_PURCHASE_CLERK); gen_text(&r->szComment[0], (int)(RS_S_PURCHASE_COMMENT * 0.6), RS_S_PURCHASE_COMMENT, S_PURCHASE_COMMENT); return(0); }
AttributePtr gen_text(NodePtr root, BindingsPtr bindings) { if (!bindings->rules_defined()) { throw Exception("no print rules defined"); } const Rules& rules(bindings->get_rules()); if (!rules.print_rules_defined()) { throw Exception("no print rules defined"); } const RuleTable& print_rules(rules.get_print_rule_table()); return gen_text(print_rules, root, bindings); }
static struct libscols_line * add_line( struct libscols_table *tb, struct libscols_line *parent, const char *prefix) { char buf[BUFSIZ]; struct libscols_line *ln = scols_table_new_line(tb, parent); if (!ln) err(EXIT_FAILURE, "failed to create output line"); if (scols_line_set_data(ln, COL_NAME, gen_text(prefix, "N", buf, 15))) goto fail; if (scols_line_set_data(ln, COL_DESC, gen_text(prefix, "D", buf, 10))) goto fail; if (scols_line_set_data(ln, COL_FOO, gen_text(prefix, "U", buf, 55))) goto fail; if (scols_line_set_data(ln, COL_LIKE, "1")) goto fail; if (scols_line_set_data(ln, COL_TEXT, gen_text(prefix, "T", buf, 50))) goto fail; return ln; fail: scols_unref_table(tb); err(EXIT_FAILURE, "faild to create output line"); }
/* * Routine: * Purpose: * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: None */ int mk_s_reason(void *pDest, ds_key_t kIndex) { static int bInit = 0; struct S_REASON_TBL *r; if (pDest == NULL) r = &g_s_reason; else r = pDest; if (!bInit) { memset(&g_s_reason, 0, sizeof(struct S_REASON_TBL)); bInit = 1; } r->kID = kIndex; gen_text(r->szDesc, 1, RS_S_REASON_DESC, S_REASON_DESC); row_stop(S_REASON); return(0); }
/* * Routine: * Purpose: * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: * 20031022 jms RNGUsage for descrition is an estimate */ int mk_s_class(void *pDest, ds_key_t kIndex) { struct S_CLASS_TBL *r; static int bInit = 0; if (pDest == NULL) r = &g_s_class; else r = pDest; if (!bInit) { memset(&g_s_class, 0, sizeof(struct S_CLASS_TBL)); bInit = 1; } r->id = kIndex; r->subcat_id = mk_join(S_CLASS_SUBCAT_ID, S_SUBCATEGORY, 1); gen_text(r->desc, S_CLASS_DESC_MIN, RS_CLASS_DESC, S_CLASS_DESC); row_stop(S_CLASS); return(0); }
/* * mk_item */ int mk_w_item (void* row, ds_key_t index) { int32_t res = 0; /* begin locals declarations */ decimal_t dMinPrice, dMaxPrice, dMarkdown; static decimal_t dMinMarkdown, dMaxMarkdown; int32_t bUseSize, bFirstRecord = 0, nFieldChangeFlags, nMin, nMax, nIndex, nTemp; char *cp; struct W_ITEM_TBL *r; static int32_t bInit = 0; struct W_ITEM_TBL *rOldValues = &g_OldValues; char *szMinPrice = NULL, *szMaxPrice = NULL; tdef *pT = getSimpleTdefsByNumber(ITEM); if (row == NULL) r = &g_w_item; else r = row; if (!bInit) { /* some fields are static throughout the data set */ strtodec(&dMinMarkdown, MIN_ITEM_MARKDOWN_PCT); strtodec(&dMaxMarkdown, MAX_ITEM_MARKDOWN_PCT); bInit = 1; } memset(r, 0, sizeof(struct W_ITEM_TBL)); /* build the new value */ nullSet(&pT->kNullBitMap, I_NULLS); r->i_item_sk = index; nIndex = pick_distribution(&nMin, "i_manager_id", 2, 1, I_MANAGER_ID); dist_member(&nMax, "i_manager_id", nIndex, 3); genrand_key(&r->i_manager_id, DIST_UNIFORM, (ds_key_t)nMin, (ds_key_t)nMax, 0, I_MANAGER_ID); /* if we have generated the required history for this business key and generate a new one * then reset associated fields (e.g., rec_start_date minimums) */ if (setSCDKeys(I_ITEM_ID, index, r->i_item_id, &r->i_rec_start_date_id, &r->i_rec_end_date_id)) { /* * some fields are not changed, even when a new version of the row is written */ bFirstRecord = 1; } /* * this is where we select the random number that controls if a field changes from * one record to the next. */ nFieldChangeFlags = next_random(I_SCD); /* the rest of the record in a history-keeping dimension can either be a new data value or not; * use a random number and its bit pattern to determine which fields to replace and which to retain */ gen_text (r->i_item_desc, 1, RS_I_ITEM_DESC, I_ITEM_DESC); changeSCD(SCD_CHAR, &r->i_item_desc, &rOldValues->i_item_desc, &nFieldChangeFlags, bFirstRecord); nIndex = pick_distribution(&szMinPrice, "i_current_price", 2, 1, I_CURRENT_PRICE); dist_member(&szMaxPrice, "i_current_price", nIndex, 3); strtodec(&dMinPrice, szMinPrice); strtodec(&dMaxPrice, szMaxPrice); genrand_decimal(&r->i_current_price, DIST_UNIFORM, &dMinPrice, &dMaxPrice, NULL, I_CURRENT_PRICE); changeSCD(SCD_INT, &r->i_current_price, &rOldValues->i_current_price, &nFieldChangeFlags, bFirstRecord); genrand_decimal(&dMarkdown, DIST_UNIFORM, &dMinMarkdown, &dMaxMarkdown, NULL, I_WHOLESALE_COST); decimal_t_op(&r->i_wholesale_cost, OP_MULT, &r->i_current_price, &dMarkdown); changeSCD(SCD_DEC, &r->i_wholesale_cost, &rOldValues->i_wholesale_cost, &nFieldChangeFlags, bFirstRecord); hierarchy_item (I_CATEGORY, &r->i_category_id, &r->i_category, index); /* * changeSCD(SCD_INT, &r->i_category_id, &rOldValues->i_category_id, &nFieldChangeFlags, bFirstRecord); */ hierarchy_item (I_CLASS, &r->i_class_id, &r->i_class, index); changeSCD(SCD_KEY, &r->i_class_id, &rOldValues->i_class_id, &nFieldChangeFlags, bFirstRecord); cp = &r->i_brand[0]; hierarchy_item (I_BRAND, &r->i_brand_id, &cp, index); changeSCD(SCD_KEY, &r->i_brand_id, &rOldValues->i_brand_id, &nFieldChangeFlags, bFirstRecord); /* some categories have meaningful sizes, some don't */ if (r->i_category_id) { dist_member(&bUseSize, "categories", (int)r->i_category_id, 3); pick_distribution (&r->i_size, "sizes", 1, bUseSize + 2, I_SIZE); changeSCD(SCD_PTR, &r->i_size, &rOldValues->i_size, &nFieldChangeFlags, bFirstRecord); } else { bUseSize = 0; r->i_size = NULL; } nIndex = pick_distribution(&nMin, "i_manufact_id", 2, 1, I_MANUFACT_ID); genrand_integer(&nTemp, DIST_UNIFORM, nMin, dist_member(NULL, "i_manufact_id", nIndex, 3), 0, I_MANUFACT_ID); r->i_manufact_id = nTemp; changeSCD(SCD_KEY, &r->i_manufact_id, &rOldValues->i_manufact_id, &nFieldChangeFlags, bFirstRecord); mk_word (r->i_manufact, "syllables", (int) r->i_manufact_id, RS_I_MANUFACT, ITEM); changeSCD(SCD_CHAR, &r->i_manufact, &rOldValues->i_manufact, &nFieldChangeFlags, bFirstRecord); gen_charset(r->i_formulation, DIGITS, RS_I_FORMULATION, RS_I_FORMULATION, I_FORMULATION); embed_string(r->i_formulation, "colors", 1, 2, I_FORMULATION); changeSCD(SCD_CHAR, &r->i_formulation, &rOldValues->i_formulation, &nFieldChangeFlags, bFirstRecord); pick_distribution (&r->i_color, "colors", 1, 2, I_COLOR); changeSCD(SCD_PTR, &r->i_color, &rOldValues->i_color, &nFieldChangeFlags, bFirstRecord); pick_distribution (&r->i_units, "units", 1, 1, I_UNITS); changeSCD(SCD_PTR, &r->i_units, &rOldValues->i_units, &nFieldChangeFlags, bFirstRecord); pick_distribution (&r->i_container, "container", 1, 1, ITEM); changeSCD(SCD_PTR, &r->i_container, &rOldValues->i_container, &nFieldChangeFlags, bFirstRecord); mk_word (r->i_product_name, "syllables", (int) index, RS_I_PRODUCT_NAME, ITEM); r->i_promo_sk = mk_join(I_PROMO_SK, PROMOTION, 1); genrand_integer(&nTemp, DIST_UNIFORM, 1, 100, 0, I_PROMO_SK); if (nTemp > I_PROMO_PERCENTAGE) r->i_promo_sk = -1; /* * if this is the first of a set of revisions, then baseline the old values */ if (bFirstRecord) memcpy(&g_OldValues, r, sizeof(struct W_ITEM_TBL)); if (index == 1) memcpy(&g_OldValues, r, sizeof(struct W_ITEM_TBL)); return (res); }