Ejemplo n.º 1
0
void tpcc_wl::init_tab_dist(uint64_t wid) {
	for (uint64_t did = 1; did <= DIST_PER_WARE; did++) {
		row_t * row;
		uint64_t row_id;
		t_district->get_new_row(row, 0, row_id);
		row->set_primary_key(did);
		
		row->set_value(D_ID, did);
		row->set_value(D_W_ID, wid);
		char name[10];
		MakeAlphaString(6, 10, name);
		row->set_value(D_NAME, name);
		char street[20];
        MakeAlphaString(10, 20, street);
		row->set_value(D_STREET_1, street);
        MakeAlphaString(10, 20, street);
		row->set_value(D_STREET_2, street);
        MakeAlphaString(10, 20, street);
		row->set_value(D_CITY, street);
		char state[2];
		MakeAlphaString(2, 2, state); /* State */
		row->set_value(D_STATE, state);
		char zip[9];
    	MakeNumberString(9, 9, zip); /* Zip */
		row->set_value(D_ZIP, zip);
    	double tax = (double)URand(0L,200L)/1000.0;
    	double w_ytd=30000.00;
		row->set_value(D_TAX, tax);
		row->set_value(D_YTD, w_ytd);
		row->set_value(D_NEXT_O_ID, 3001);
		
		index_insert(i_district, distKey(did, wid), row, wh_to_part(wid));
	}
}
Ejemplo n.º 2
0
void tpcc_wl::init_tab_wh(uint32_t wid) {
	assert(wid >= 1 && wid <= g_num_wh);
	row_t * row;
	uint64_t row_id;
	t_warehouse->get_new_row(row, 0, row_id);
	row->set_primary_key(wid);

	row->set_value(W_ID, wid);
	char name[10];
    MakeAlphaString(6, 10, name, wid-1);
	row->set_value(W_NAME, name);
	char street[20];
    MakeAlphaString(10, 20, street, wid-1);
	row->set_value(W_STREET_1, street);
    MakeAlphaString(10, 20, street, wid-1);
	row->set_value(W_STREET_2, street);
    MakeAlphaString(10, 20, street, wid-1);
	row->set_value(W_CITY, street);
	char state[2];
	MakeAlphaString(2, 2, state, wid-1); /* State */
	row->set_value(W_STATE, state);
	char zip[9];
   	MakeNumberString(9, 9, zip, wid-1); /* Zip */
	row->set_value(W_ZIP, zip);
   	double tax = (double)URand(0L,200L,wid-1)/1000.0;
   	double w_ytd=300000.00;
	row->set_value(W_TAX, tax);
	row->set_value(W_YTD, w_ytd);
	
	index_insert(i_warehouse, wid, row, wh_to_part(wid));
	return;
}
Ejemplo n.º 3
0
void
MakeAddress(char *str1, char *str2, char *city, char *state, char *zip)
{
    MakeAlphaString(10,20,str1); /* Street 1*/
    MakeAlphaString(10,20,str2); /* Street 2*/
    MakeAlphaString(10,20,city); /* City */
    MakeAlphaString(2,2,state);  /* State */
    MakeNumberString(9,9,zip);   /* Zip */
}
Ejemplo n.º 4
0
void tpcc_wl::init_tab_order(uint64_t did, uint64_t wid) {
	uint64_t perm[g_cust_per_dist]; 
	init_permutation(perm, wid); /* initialize permutation of customer numbers */
	for (UInt32 oid = 1; oid <= g_cust_per_dist; oid++) {
		row_t * row;
		uint64_t row_id;
		t_order->get_new_row(row, 0, row_id);
		row->set_primary_key(oid);
		uint64_t o_ol_cnt = 1;
		uint64_t cid = perm[oid - 1]; //get_permutation();
		row->set_value(O_ID, oid);
		row->set_value(O_C_ID, cid);
		row->set_value(O_D_ID, did);
		row->set_value(O_W_ID, wid);
		uint64_t o_entry = 2013;
		row->set_value(O_ENTRY_D, o_entry);
		if (oid < 2101)
			row->set_value(O_CARRIER_ID, URand(1, 10, wid-1));
		else 
			row->set_value(O_CARRIER_ID, 0);
		o_ol_cnt = URand(5, 15, wid-1);
		row->set_value(O_OL_CNT, o_ol_cnt);
		row->set_value(O_ALL_LOCAL, 1);
		
		// ORDER-LINE	
#if !TPCC_SMALL
		for (uint32_t ol = 1; ol <= o_ol_cnt; ol++) {
			t_orderline->get_new_row(row, 0, row_id);
			row->set_value(OL_O_ID, oid);
			row->set_value(OL_D_ID, did);
			row->set_value(OL_W_ID, wid);
			row->set_value(OL_NUMBER, ol);
			row->set_value(OL_I_ID, URand(1, 100000, wid-1));
			row->set_value(OL_SUPPLY_W_ID, wid);
			if (oid < 2101) {
				row->set_value(OL_DELIVERY_D, o_entry);
				row->set_value(OL_AMOUNT, 0);
			} else {
				row->set_value(OL_DELIVERY_D, 0);
				row->set_value(OL_AMOUNT, (double)URand(1, 999999, wid-1)/100);
			}
			row->set_value(OL_QUANTITY, 5);
			char ol_dist_info[24];
	        MakeAlphaString(24, 24, ol_dist_info, wid-1);
			row->set_value(OL_DIST_INFO, ol_dist_info);
		}
#endif
		// NEW ORDER
		if (oid > 2100) {
			t_neworder->get_new_row(row, 0, row_id);
			row->set_value(NO_O_ID, oid);
			row->set_value(NO_D_ID, did);
			row->set_value(NO_W_ID, wid);
		}
	}
}
Ejemplo n.º 5
0
void tpcc_wl::init_tab_stock(uint64_t wid) {
	
	for (UInt32 sid = 1; sid <= g_max_items; sid++) {
		row_t * row;
		uint64_t row_id;
		t_stock->get_new_row(row, 0, row_id);
		row->set_primary_key(sid);
		row->set_value(S_I_ID, sid);
		row->set_value(S_W_ID, wid);
		row->set_value(S_QUANTITY, URand(10, 100));
		row->set_value(S_REMOTE_CNT, 0);
#if !TPCC_SMALL
		char s_dist[25];
		char row_name[10] = "S_DIST_";
		for (int i = 1; i <= 10; i++) {
			if (i < 10) {
				row_name[7] = '0';
				row_name[8] = i + '0';
			} else {
				row_name[7] = '1';
				row_name[8] = '0';
			}
			row_name[9] = '\0';
			MakeAlphaString(24, 24, s_dist);
			row->set_value(row_name, s_dist);
		}
		row->set_value(S_YTD, 0);
		row->set_value(S_ORDER_CNT, 0);
		char s_data[50];
		int len = MakeAlphaString(26, 50, s_data);
		if (rand() % 100 < 10) {
			int idx = URand(0, len - 8);
			strcpy(&s_data[idx], "original");
		}
		row->set_value(S_DATA, s_data);
#endif
		index_insert(i_stock, stockKey(sid, wid), row, wh_to_part(wid));
	}
}
Ejemplo n.º 6
0
// TODO ITEM table is assumed to be in partition 0
void tpcc_wl::init_tab_item() {
	for (UInt32 i = 1; i <= g_max_items; i++) {
		row_t * row;
		uint64_t row_id;
		t_item->get_new_row(row, 0, row_id);
		row->set_primary_key(i);
		row->set_value(I_ID, i);
		row->set_value(I_IM_ID, URand(1L,10000L, 0));
		char name[24];
		MakeAlphaString(14, 24, name, 0);
		row->set_value(I_NAME, name);
		row->set_value(I_PRICE, URand(1, 100, 0));
		char data[50];
    	MakeAlphaString(26, 50, data, 0);
		// TODO in TPCC, "original" should start at a random position
		if (RAND(10, 0) == 0) 
			strcpy(data, "original");		
		row->set_value(I_DATA, data);
		
		index_insert(i_item, i, row, 0);
	}
}
Ejemplo n.º 7
0
void tpcc_wl::init_tab_wh() {
	if (WL_VERB)
		printf("[init] workload table.\n");
	for (UInt32 wid = 1; wid <= g_num_wh; wid ++) {
		row_t * row;
		uint64_t row_id;
		t_warehouse->get_new_row(row, 0, row_id);
		row->set_primary_key(wid);

		row->set_value(W_ID, wid);
		char name[10];
        MakeAlphaString(6, 10, name);
		row->set_value(W_NAME, name);
		char street[20];
        MakeAlphaString(10, 20, street);
		row->set_value(W_STREET_1, street);
        MakeAlphaString(10, 20, street);
		row->set_value(W_STREET_2, street);
        MakeAlphaString(10, 20, street);
		row->set_value(W_CITY, street);
		char state[2];
		MakeAlphaString(2, 2, state); /* State */
		row->set_value(W_STATE, state);
		char zip[9];
    	MakeNumberString(9, 9, zip); /* Zip */
		row->set_value(W_ZIP, zip);
    	double tax = (double)URand(0L,200L)/1000.0;
    	double w_ytd=300000.00;
		row->set_value(W_TAX, tax);
		row->set_value(W_YTD, w_ytd);

		index_insert(i_warehouse, wid, row, wh_to_part(wid));
	}
	
	return;
}
Ejemplo n.º 8
0
void tpcc_wl::init_tab_hist(uint64_t c_id, uint64_t d_id, uint64_t w_id) {
	row_t * row;
	uint64_t row_id;
	t_history->get_new_row(row, 0, row_id);
	row->set_primary_key(0);
	row->set_value(H_C_ID, c_id);
	row->set_value(H_C_D_ID, d_id);
	row->set_value(H_D_ID, d_id);
	row->set_value(H_C_W_ID, w_id);
	row->set_value(H_W_ID, w_id);
	row->set_value(H_DATE, 0);
	row->set_value(H_AMOUNT, 10.0);
#if !TPCC_SMALL
	char h_data[24];
	MakeAlphaString(12, 24, h_data);
	row->set_value(H_DATA, h_data);
#endif

}
Ejemplo n.º 9
0
/*
 *  Loads the Orders table 
 *  Also loads the Order_Line table on the fly 
 *
 *  w_id - warehouse id 
 *  d_id - district id
 */
int
Orders(long d_id, long w_id)
{

    long    o_id;
    long    o_c_id;
    long    o_d_id;
    long    o_w_id;
    long    o_carrier_id;
    long    o_ol_cnt;
    long    ol;
    long    ol_i_id;
    long    ol_supply_w_id;
    long    ol_quantity;
    long    ol_amount;
    char    ol_dist_info[25];
    float   i_price;
    float   c_discount;
    
    int     err;
    DBT     key, data;
    
    ORDER_PRIMARY_KEY     o_key;
    ORDER_PRIMARY_DATA    o_data;

    ORDERLINE_PRIMARY_KEY  ol_key;
    ORDERLINE_PRIMARY_DATA ol_data;

    NEWORDER_PRIMARY_KEY   no_key;


    printf("Loading Orders for D=%ld, W= %ld\n", d_id, w_id);

    o_d_id=d_id;
    o_w_id=w_id;
    InitPermutation();           /* initialize permutation of customer numbers */


    for (o_id=1; o_id<=ORD_PER_DIST; o_id++) 
    {
	memset(&o_key, 0, sizeof(ORDER_PRIMARY_KEY));
	memset(&o_data, 0, sizeof(ORDER_PRIMARY_DATA));

	o_key.O_D_ID = o_d_id;
	o_key.O_W_ID = o_w_id;	
	o_key.O_ID = o_id;
	
	/* Generate Order Data */
	o_c_id = GetPermutation();
	o_carrier_id = random1(1L,10L); 
	o_ol_cnt=random1(5L,15L); 
  
	o_data.O_C_ID = o_c_id;
	o_data.O_ALL_LOCAL = 1;
	o_data.O_OL_CNT = o_ol_cnt;
	memcpy(&o_data.O_ENTRY_D, timestamp, 26);


	if (o_id > 2100)         /* the last 900 orders have not been delivered) */
	{
	    memset(&no_key, 0, sizeof(NEWORDER_PRIMARY_KEY));

	    o_data.O_CARRIER_ID = 0;
	    
	    memset(&key, 0, sizeof(DBT));
	    key.data = &o_key;
	    key.size = sizeof(ORDER_PRIMARY_KEY);

	    memset(&data, 0, sizeof(DBT));
	    data.data = &o_data;
	    data.size = sizeof(ORDER_PRIMARY_DATA);
	    
	    if((err=dbp_order->put(dbp_order, 0, &key, &data, 0)))
	    {
		db_error("DB->put", err);
		return -1;
	    }
	 
	    no_key.NO_O_ID = o_id;
	    no_key.NO_D_ID = o_d_id;
	    no_key.NO_W_ID = o_w_id;
	    
	    memset(&key, 0, sizeof(DBT));
	    key.data = &no_key;
	    key.size = sizeof(NEWORDER_PRIMARY_KEY);

	    memset(&data, 0, sizeof(DBT));
	    
	    if((err=dbp_neworder->put(dbp_neworder, 0, &key, &data, 0)))
	    {
		db_error("DB->put", err);
		return -1;
	    }
	}
	else
	{
	    o_data.O_CARRIER_ID = o_carrier_id;
        
	    memset(&key, 0, sizeof(DBT));
	    key.data = &o_key;
	    key.size = sizeof(ORDER_PRIMARY_KEY);

	    memset(&data, 0, sizeof(DBT));
	    data.data = &o_data;
	    data.size = sizeof(ORDER_PRIMARY_DATA);
	    
	    if((err=dbp_order->put(dbp_order, 0, &key, &data, 0)))
	    {
		db_error("DB->put", err);
		return -1;
	    }

	}

	if ( option_debug )
	    printf( "OID = %ld, CID = %ld, DID = %ld, WID = %ld\n",
		    o_id, o_c_id, o_d_id, o_w_id);
      
	for (ol=1; ol<=o_ol_cnt; ol++) 
	{
	    memset(&ol_key, 0, sizeof(ORDERLINE_PRIMARY_KEY));
	    memset(&ol_data, 0, sizeof(ORDERLINE_PRIMARY_DATA));

	    /* Generate Order Line Data */
	    ol_i_id=random1(1L,MAXITEMS); 
	    ol_supply_w_id=o_w_id; 
	    ol_quantity=5; 
	    ol_amount=0.0;

	    MakeAlphaString(24,24,ol_dist_info);

	    ol_key.OL_W_ID = o_w_id;
	    ol_key.OL_D_ID = o_d_id;
	    ol_key.OL_O_ID = o_id;
	    ol_key.OL_NUMBER = ol;

	    ol_data.OL_I_ID = ol_i_id;
	    ol_data.OL_SUPPLY_W_ID = o_w_id;
	    ol_data.OL_QUANTITY = ol_quantity;
	    memcpy(&ol_data.OL_DIST_INFO, &ol_dist_info, 25);

	    
	    if (o_id > 2100)
	    {
		ol_data.OL_AMOUNT = ol_amount;

		memset(&key, 0, sizeof(DBT));
		key.data = &ol_key;
		key.size = sizeof(ORDERLINE_PRIMARY_KEY);

		memset(&data, 0, sizeof(DBT));
		data.data = &ol_data;
		data.size = sizeof(ORDERLINE_PRIMARY_DATA);

		if((err=dbp_orderline->put(dbp_orderline, 0, &key, &data, 0)))
		{
		    db_error("DB->put", err);
		    return -1;
		}
	    }
	    else
	    {
		const int dt_size = 26;
		char datetime[dt_size];
		time_t t_clock;

		if((int)time(&t_clock) == -1)
		{
		    error("time");
		    exit(1);
		}
		ctime_r(&t_clock, (char*)datetime);


		ol_data.OL_AMOUNT =(float)(random1(10L, 10000L))/100.0; 
		memcpy(&ol_data.OL_DELIVERY_D, datetime, dt_size);
		
		memset(&key, 0, sizeof(DBT));
		key.data = &ol_key;
		key.size = sizeof(ORDERLINE_PRIMARY_KEY);

		memset(&data, 0, sizeof(DBT));
		data.data = &ol_data;
		data.size = sizeof(ORDERLINE_PRIMARY_DATA);

		if((err=dbp_orderline->put(dbp_orderline, 0, &key, &data, 0)))
		{
		    db_error("DB->put", err);
		    return -1;
		}
	    }

	    if ( option_debug )
		printf( "OL = %ld, IID = %ld, QUAN = %ld, AMT = %8.2f\n",
			ol, ol_i_id, ol_quantity, ol_data.OL_AMOUNT);

      }
	if ( !(o_id % 100) ) {
	    printf(".");
	    
	    if ( !(o_id % 1000) ) printf(" %ld\n",o_id);
	}
    }

    printf("Orders Done.\n");
    return 0;
}
Ejemplo n.º 10
0
/*
 * Loads Customer Table
 * Also inserts corresponding history record
 *
 * id   - customer id
 * d_id - district id
 * w_id - warehouse id
 */
int 
Customer(long d_id, long w_id )
{
    long    c_id;
    long    c_d_id;
    long    c_w_id;
    char    c_first[17];
    char    c_middle[3];
    char    c_last[17];
    char    c_street_1[21];
    char    c_street_2[21];
    char    c_city[21];
    char    c_state[3];
    char    c_zip[10];
    char    c_phone[17];
    char    c_since[12];
    char    c_credit[3];
    long    c_credit_lim;
    float   c_discount;
    float   c_balance;
    char    c_data[501];
    float   h_amount;
    char    h_data[25];
    int     err;

    
    printf("Loading Customer for DID=%ld, WID=%ld\n",d_id,w_id);

    for (c_id=1; c_id<=CUST_PER_DIST; c_id++) 
    {
	DBT     key, data;
	CUSTOMER_PRIMARY_KEY  c_key;
	CUSTOMER_PRIMARY_DATA c_primdata;
	HISTORY_PRIMARY_KEY  h_key;

	memset(&c_key, 0, sizeof(CUSTOMER_PRIMARY_KEY));
	memset(&c_primdata, 0, sizeof(CUSTOMER_PRIMARY_DATA));
	
	memset(&h_key, 0, sizeof(HISTORY_PRIMARY_KEY));

	/* Generate Customer Data */
	c_d_id=d_id;
	c_w_id=w_id;
	
	MakeAlphaString( 8, 16, c_first );
	
	c_middle[0]='O'; c_middle[1]='E'; c_middle[2] = '\0';
	
	if (c_id <= 1000)
	    Lastname(c_id-1,c_last);
	else
	    Lastname(NURand(255,0,999),c_last);
	
	MakeAddress( c_street_1, c_street_2, c_city, c_state, c_zip );
	MakeNumberString( 16, 16, c_phone );
	
	if (random1(0L,1L)) 
	    c_credit[0]='G';
	else 
	    c_credit[0]='B';
	
	c_credit[1]='C'; c_credit[2]='\0'; 
	c_credit_lim=50000;
	c_discount=((float)random1(0L,50L))/100.0; 
	c_balance= -10.0;
	MakeAlphaString(300,500,c_data);
	
	/* Prepare for putting into the database */
	c_key.C_W_ID = c_w_id;
	c_key.C_D_ID = c_d_id;
	c_key.C_ID = c_id;
	
	memcpy(&c_primdata.C_FIRST, &c_first, 17);
	memcpy(&c_primdata.C_MIDDLE, &c_middle, 3);
	memcpy(&c_primdata.C_LAST, &c_last, 17);
	memcpy(&c_primdata.C_STREET_1, &c_street_1, 21);
	memcpy(&c_primdata.C_STREET_2, &c_street_2, 21);
	memcpy(&c_primdata.C_CITY, &c_city, 21);
	memcpy(&c_primdata.C_STATE, &c_state, 3);
	memcpy(&c_primdata.C_ZIP, &c_zip, 10);
	memcpy(&c_primdata.C_PHONE, &c_phone, 17);
	memcpy(&c_primdata.C_DATA, &c_data, 501);
	memcpy(&c_primdata.C_CREDIT, &c_credit, 3);
	
	memcpy(c_primdata.C_CREDIT, &c_credit, 3);	
	c_primdata.C_DISCOUNT = c_discount;
	c_primdata.C_BALANCE = c_balance;

	memset(&key, 0, sizeof(DBT));
	key.data = &c_key;
	key.size = sizeof(CUSTOMER_PRIMARY_KEY);

	memset(&data, 0, sizeof(DBT));
	data.data = &c_primdata;
	data.size = sizeof(CUSTOMER_PRIMARY_DATA);
	
	if((err=dbp_customer->put(dbp_customer, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    return -1;
	}
  
	h_amount = 10.0;
	MakeAlphaString(12,24,h_data);

	memset(&key, 0, sizeof(DBT));
	key.data = &h_key;
	key.size = sizeof(HISTORY_PRIMARY_KEY);
	memset(&data, 0, sizeof(DBT));

	h_key.H_C_ID = c_id;
	h_key.H_C_D_ID = c_d_id;
	h_key.H_C_W_ID = c_w_id;
	h_key.H_W_ID = c_w_id;
	h_key.H_D_ID = c_d_id;
	h_key.H_AMOUNT = h_amount;
	memcpy(&h_key.H_DATE, &timestamp, 26);
	memcpy(&h_key.H_DATA, &h_data, 24);

	if((err=dbp_history->put(dbp_history, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    return -1;
	}
	
	if ( option_debug )
	    printf( "CID = %ld, LST = %s, P# = %s\n",
		    c_id, c_last, c_phone );
	if ( !(c_id % 100) ) 
	{
	    printf(".");
	    if ( !(c_id % 1000) ) printf(" %ld\n",c_id);
	}
    }  
    printf("Customer Done.\n");

  return 0;

}
Ejemplo n.º 11
0
/*
 * Loads the District table 
 *      w_id - warehouse id 
 */
int
District(long w_id)
{
    long    d_id;
    long    d_w_id;
    char    d_name[11];
    char    d_street_1[21];
    char    d_street_2[21];
    char    d_city[21];
    char    d_state[3];
    char    d_zip[10];
    float   d_tax;
    float   d_ytd;
    long    d_next_o_id;
    
    DBT     key, data;
    DISTRICT_PRIMARY_KEY d_key;
    DISTRICT_PRIMARY_DATA d_data;

    int err;

    printf("Loading District\n");

    
    for (d_id=1; d_id<=DIST_PER_WARE; d_id++) 
    {
	memset(&d_key, 0, sizeof(DISTRICT_PRIMARY_KEY));
	memset(&d_data, 0, sizeof(DISTRICT_PRIMARY_DATA));

	d_w_id=w_id;
	d_ytd=30000.0;
	d_next_o_id=3001L;
	
	d_key.D_W_ID = d_w_id;
	d_key.D_ID = d_id;
    
	d_data.D_YTD = d_ytd;
	d_data.D_NEXT_O_ID = d_next_o_id;
		
	/* Generate District Data */
	MakeAlphaString(6L,10L,d_name);
	MakeAddress( d_street_1, d_street_2, d_city, d_state, d_zip );
	d_tax=((float)random1(10L,20L))/100.0; 
	
	memcpy(&d_data.D_NAME, &d_name, 11);
	memcpy(&d_data.D_STREET_1, &d_street_1, 21);
	memcpy(&d_data.D_STREET_2, &d_street_2, 21);
	memcpy(&d_data.D_CITY, &d_city, 21);
	memcpy(&d_data.D_STATE, &d_state, 3);
	memcpy(&d_data.D_ZIP, &d_zip, 10);

	d_data.D_TAX = d_tax;
	
	memset(&key, 0, sizeof(DBT));
	key.data = &d_key;
	key.size = sizeof(DISTRICT_PRIMARY_KEY);

	memset(&data, 0, sizeof(DBT));
	data.data = &d_data;
	data.size = sizeof(DISTRICT_PRIMARY_DATA);


	if((err=dbp_district->put(dbp_district, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    return -1;
	}

      if ( option_debug )
	  printf( "DID = %ld, WID = %ld, Name = %10s, Tax = %5.2f\n",
		  d_id, d_w_id, d_name, d_tax );

    }
    
    return 0;
}
Ejemplo n.º 12
0
/*
 * Loads the Stock table
 *
 * w_id - warehouse id 
 */
int
Stock(long w_id)
{
    long    s_i_id;
    long    s_w_id;
    long    s_quantity;
    char    s_dist_01[25];
    char    s_dist_02[25];
    char    s_dist_03[25];
    char    s_dist_04[25];
    char    s_dist_05[25];
    char    s_dist_06[25];
    char    s_dist_07[25];
    char    s_dist_08[25];
    char    s_dist_09[25];
    char    s_dist_10[25];
    char    s_data[51];
    
    int     sdatasiz;
    long    orig[MAXITEMS];
    long    pos;
    int     i, err;
    
    DBT     key, data;
    STOCK_PRIMARY_DATA s_primdata;
    STOCK_PRIMARY_KEY s_key;

    
    printf("Loading Stock Wid=%ld\n",w_id);
    s_w_id=w_id;
    
    memset(orig, 0, MAXITEMS * sizeof(long));
    
    for (i=0; i<MAXITEMS/10; i++) 
    {
      do
      {
         pos=random1(0L,MAXITEMS);
      } while (orig[pos]);
      orig[pos] = 1;
    }

    for (s_i_id=1; s_i_id<=MAXITEMS; s_i_id++) 
    {
	memset(&s_key, 0, sizeof(STOCK_PRIMARY_KEY));
	memset(&s_primdata, 0, sizeof(STOCK_PRIMARY_DATA));
      
	s_key.S_W_ID = s_w_id;
	s_key.S_I_ID = s_i_id;

	/* Generate Stock Data */
	s_quantity=random1(10L,100L);
	MakeAlphaString(24,24,s_dist_01);
	MakeAlphaString(24,24,s_dist_02);
	MakeAlphaString(24,24,s_dist_03);
	MakeAlphaString(24,24,s_dist_04);
	MakeAlphaString(24,24,s_dist_05);
	MakeAlphaString(24,24,s_dist_06);
	MakeAlphaString(24,24,s_dist_07);
	MakeAlphaString(24,24,s_dist_08);
	MakeAlphaString(24,24,s_dist_09);
	MakeAlphaString(24,24,s_dist_10);
	sdatasiz=MakeAlphaString(26,50,s_data);

	memcpy(s_primdata.S_DIST_01, &s_dist_01, 25);
	memcpy(s_primdata.S_DIST_02, &s_dist_02, 25);
	memcpy(s_primdata.S_DIST_03, &s_dist_03, 25);
	memcpy(s_primdata.S_DIST_04, &s_dist_04, 25);
	memcpy(s_primdata.S_DIST_05, &s_dist_05, 25);
	memcpy(s_primdata.S_DIST_06, &s_dist_06, 25);
	memcpy(s_primdata.S_DIST_07, &s_dist_07, 25);
	memcpy(s_primdata.S_DIST_08, &s_dist_08, 25);
	memcpy(s_primdata.S_DIST_09, &s_dist_09, 25);
	memcpy(s_primdata.S_DIST_10, &s_dist_10, 25);

	if (orig[s_i_id-1])
	{
	    pos=random1(0L,sdatasiz-8);
	    s_data[pos]='o'; 
	    s_data[pos+1]='r'; 
	    s_data[pos+2]='i'; 
	    s_data[pos+3]='g'; 
	    s_data[pos+4]='i'; 
	    s_data[pos+5]='n'; 
	    s_data[pos+6]='a'; 
	    s_data[pos+7]='l'; 
	}
  
	s_primdata.S_QUANTITY = s_quantity;

	memcpy(s_primdata.S_DATA, &s_data, 51);
	s_primdata.S_YTD = 0;
	s_primdata.S_ORDER_CNT = 0;
	s_primdata.S_REMOTE_CNT = 0;
	
	memset(&key, 0, sizeof(DBT));
	key.data = &s_key;
	key.size = sizeof(STOCK_PRIMARY_KEY);

	memset(&data, 0, sizeof(DBT));
	data.data = &s_primdata;
	data.size = sizeof(STOCK_PRIMARY_DATA);
	
	if((err=dbp_stock->put(dbp_stock, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    return -1;
	}
	
	if ( option_debug )
	    printf( "SID = %ld, WID = %ld, Quan = %ld\n",
		    s_i_id, s_w_id, s_quantity );
	if ( !(s_i_id % 100) ) 
	{
	    printf(".");
	    if ( !(s_i_id % 5000) ) printf(" %ld\n",s_i_id);
	}
    }

    printf(" Stock Done.\n");
    
    return 0;
}
Ejemplo n.º 13
0
/*
 * Loads the Warehouse table
 * Loads Stock, District as Warehouses are created
 */
void 
LoadWare(void)
{
    long    w_id;
    char    w_name[11];
    char    w_street_1[21];
    char    w_street_2[21];
    char    w_city[21];
    char    w_state[3];
    char    w_zip[10];
    float   w_tax;
    float   w_ytd;

    DB     *dbp;
    char   *name = WAREHOUSE_INDEX_NAME;
    char   *stock_name = STOCK_INDEX_NAME;
    char   *district_name = DISTRICT_INDEX_NAME;

    int err;

    if(create_db(db_env, &dbp, DB_WH_PAGE_SIZE,  0) || open_db(dbp, name, 0)) 
	return;

    if(create_db(db_env, &dbp_stock, DB_COMMON_PAGE_SIZE, 0) || open_db(dbp_stock, stock_name, 0)) 
	goto done;

    if(create_db(db_env, &dbp_district, DB_DS_PAGE_SIZE, 0)) 
	goto done;

    if((err = dbp_district->set_bt_compare(dbp_district, district_comparison_func)))
    {
	db_error("DB->set_bt_compare", err);
	goto done;
    }
    
    if(open_db(dbp_district, district_name, 0)) 
    {
	goto done;
    }

    printf("Loading Warehouse \n");
    for (w_id=1L; w_id<=count_ware; w_id++) 
    { 
	DBT key, data;
	WAREHOUSE_PRIMARY_KEY w_key;
	WAREHOUSE_PRIMARY_DATA w_data;

	memset(&w_key, 0, sizeof(WAREHOUSE_PRIMARY_KEY));
	memset(&w_data, 0, sizeof(WAREHOUSE_PRIMARY_DATA));

	/* Generate Warehouse Data */
	MakeAlphaString( 6, 10, w_name);
	MakeAddress( w_street_1, w_street_2, w_city, w_state, w_zip );
	w_tax=((float)random1(10L,20L))/100.0; 
	w_ytd=3000000.00;

	w_key.W_ID = w_id;

	memcpy(&w_data.W_NAME, &w_name, 11);
	memcpy(&w_data.W_STREET_1, &w_street_1, 21);
	memcpy(&w_data.W_STREET_2, &w_street_2, 21);
	memcpy(&w_data.W_CITY, &w_city, 21);
	memcpy(&w_data.W_STATE, &w_state, 3);
	memcpy(&w_data.W_ZIP, &w_zip, 10);
	w_data.W_TAX = w_tax;
	w_data.W_YTD = w_ytd;
  
	/* Initialize the key */
	memset(&key, 0, sizeof(key));
	key.data = &w_key;
	key.size = sizeof(WAREHOUSE_PRIMARY_KEY);

	/* Initialize the data */
	memset(&data, 0, sizeof(data));
	data.data = &w_data;
	data.size = sizeof(WAREHOUSE_PRIMARY_DATA);

	if ( option_debug )
	    printf( "WID = %ld, Name= %16s, Tax = %5.2f\n",
		    w_id, w_name, w_tax );

	if((err=dbp->put(dbp, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    goto done;
	}

	/** Make Rows associated with Warehouse **/
	if(Stock(w_id) || District(w_id))
	{
	    goto done;
	}
    }


 done:
    if(dbp)
	dbp->close(dbp, 0);
    if(dbp_stock)
	dbp_stock->close(dbp_stock, 0);
    if(dbp_district)
	dbp_district->close(dbp_district, 0);
}
Ejemplo n.º 14
0
/*
 * Loads the Item table
 */
void 
LoadItems(void)
{
    long    i_id;
    char    i_name[25];
    char    i_data[51];
    float   i_price;
    int     idatasiz, orig[MAXITEMS], i, err, pos;
    DB *db, *db_sec;


    /* Create/open a new Berkeley DB for the Item index */
    if(create_db(db_env, &db, DB_COMMON_PAGE_SIZE, 0) || open_db(db, ITEM_INDEX_NAME, 0))
    {
	exit(1);
    }

    printf("Loading Item \n");
    
    for (i=0; i<MAXITEMS; i++) 
    {
	orig[i]=0;
    }

    for (i=0; i<MAXITEMS/10; i++) 
    {
	do
	{
	    pos = random1(0L,MAXITEMS);
	} while (orig[pos]);
	orig[pos] = 1;
    }
    
    for (i_id=1; i_id<=MAXITEMS; i_id++) 
    {
	DBT key, data;
	ITEM_PRIMARY_KEY i_key;
	ITEM_PRIMARY_DATA i_primdata;

	memset(&i_key, 0, sizeof(ITEM_PRIMARY_KEY));
	memset(&i_primdata, 0, sizeof(ITEM_PRIMARY_DATA));
    
	/* Generate Item Data */
	MakeAlphaString( 14, 24, i_name);
	i_price=((float) random1(100L,10000L))/100.0;
	idatasiz=MakeAlphaString(26,50,i_data);
	
	if (orig[i_id-1])
	{
	    pos = random1(0,idatasiz-8);

	    i_data[pos]= 'o'; 
	    i_data[pos+1] = 'r'; 
	    i_data[pos+2] = 'i'; 
	    i_data[pos+3] = 'g'; 
	    i_data[pos+4] = 'i'; 
	    i_data[pos+5] = 'n'; 
	    i_data[pos+6] = 'a'; 
	    i_data[pos+7] = 'l'; 
	}
  
	if ( option_debug )
	{
	    printf( "IID = %ld, Name= %16s, Price = %5.2f\n",
		    i_id, i_name, i_price );
	}
	
	/* Initialize the key */
	memset(&key, 0, sizeof(key));
	i_key.I_ID = i_id;
	key.data = &i_key;
	key.size = sizeof(ITEM_PRIMARY_KEY);

	/* Initialize the data */
	memset(&data, 0, sizeof(data));
	i_primdata.I_IM_ID = 0;
	i_primdata.I_PRICE = i_price;
	strncpy(i_primdata.I_NAME, i_name, 25);
	strncpy(i_primdata.I_DATA, i_data, 51);
	data.data = &i_primdata;
	data.size = sizeof(ITEM_PRIMARY_DATA);

	if((err=db->put(db, 0, &key, &data, 0)))
	{
	    db_error("DB->put", err);
	    goto done;
	}

	if ( !(i_id % 100) ) 
	{
	    printf(".");
	    if ( !(i_id % 5000) ) printf(" %ld\n",i_id);
	}
    }
    
    printf("Item Done. \n");

 done:
    if((err = db->close(db, 0)))
    {
	db_error("DB->close", err);
    }
    return;

}
Ejemplo n.º 15
0
void tpcc_wl::init_tab_order(uint64_t did, uint64_t wid) {
	init_permutation(); /* initialize permutation of customer numbers */
	for (UInt32 oid = 1; oid <= g_cust_per_dist; oid++) {
		row_t * row;
		uint64_t row_id;
		t_order->get_new_row(row, 0, row_id);
		row->set_primary_key(oid);
		uint64_t o_ol_cnt = 1;
		uint64_t cid = get_permutation();
		row->set_value(O_ID, oid);
		row->set_value(O_C_ID, cid);
		row->set_value(O_D_ID, did);
		row->set_value(O_W_ID, wid);
		uint64_t o_entry = 2013;
		row->set_value(O_ENTRY_D, o_entry);
		if (oid < 2101)
			row->set_value(O_CARRIER_ID, URand(1, 10));
		else 
			row->set_value(O_CARRIER_ID, 0);
		o_ol_cnt = URand(5, 15);
		row->set_value(O_OL_CNT, o_ol_cnt);
		row->set_value(O_ALL_LOCAL, 1);
		
		// Insert to indexes
//		uint64_t key = custKey(cid, did, wid);
//		index_insert(i_order_wdc, key, row, wh_to_part(wid));

//		key = orderPrimaryKey(wid, did, oid);
//		index_insert(i_order_wdo, key, row, wh_to_part(wid));

		// ORDER-LINE	
#if !TPCC_SMALL
		for (int ol = 1; ol <= o_ol_cnt; ol++) {
			t_orderline->get_new_row(row, 0, row_id);
			row->set_value(OL_O_ID, oid);
			row->set_value(OL_D_ID, did);
			row->set_value(OL_W_ID, wid);
			row->set_value(OL_NUMBER, ol);
			row->set_value(OL_I_ID, URand(1, 100000));
			row->set_value(OL_SUPPLY_W_ID, wid);
			if (oid < 2101) {
				row->set_value(OL_DELIVERY_D, o_entry);
				row->set_value(OL_AMOUNT, 0);
			} else {
				row->set_value(OL_DELIVERY_D, 0);
				row->set_value(OL_AMOUNT, (double)URand(1, 999999)/100);
			}
			row->set_value(OL_QUANTITY, 5);
			char ol_dist_info[24];
	        MakeAlphaString(24, 24, ol_dist_info);
			row->set_value(OL_DIST_INFO, ol_dist_info);

//			uint64_t key = orderlineKey(wid, did, oid);
//			index_insert(i_orderline, key, row, wh_to_part(wid));
			
//			key = distKey(did, wid);
//			index_insert(i_orderline_wd, key, row, wh_to_part(wid));
		}
#endif
		// NEW ORDER
		if (oid > 2100) {
			t_neworder->get_new_row(row, 0, row_id);
			row->set_value(NO_O_ID, oid);
			row->set_value(NO_D_ID, did);
			row->set_value(NO_W_ID, wid);
		}
	}
}
Ejemplo n.º 16
0
void tpcc_wl::init_tab_cust(uint64_t did, uint64_t wid) {
	assert(g_cust_per_dist >= 1000);
	for (UInt32 cid = 1; cid <= g_cust_per_dist; cid++) {
		row_t * row;
		uint64_t row_id;
		t_customer->get_new_row(row, 0, row_id);
		row->set_primary_key(cid);

		row->set_value(C_ID, cid);		
		row->set_value(C_D_ID, did);
		row->set_value(C_W_ID, wid);
		char c_last[LASTNAME_LEN];
		if (cid <= 1000)
			Lastname(cid - 1, c_last);
		else
			Lastname(NURand(255,0,999), c_last);
		row->set_value(C_LAST, c_last);
#if !TPCC_SMALL
		char * tmp = "OE";
		row->set_value(C_MIDDLE, tmp);
		char c_first[FIRSTNAME_LEN];
		MakeAlphaString(FIRSTNAME_MINLEN, sizeof(c_first), c_first);
		row->set_value(C_FIRST, c_first);
		char street[20];
        MakeAlphaString(10, 20, street);
		row->set_value(C_STREET_1, street);
        MakeAlphaString(10, 20, street);
		row->set_value(C_STREET_2, street);
        MakeAlphaString(10, 20, street);
		row->set_value(C_CITY, street); 
		char state[2];
		MakeAlphaString(2, 2, state); /* State */
		row->set_value(C_STATE, state);
		char zip[9];
    	MakeNumberString(9, 9, zip); /* Zip */
		row->set_value(C_ZIP, zip);
		char phone[16];
  		MakeNumberString(16, 16, phone); /* Zip */
		row->set_value(C_PHONE, phone);
		row->set_value(C_SINCE, 0);
		row->set_value(C_CREDIT_LIM, 50000);
		row->set_value(C_DELIVERY_CNT, 0);
		char c_data[500];
        MakeAlphaString(300, 500, c_data);
		row->set_value(C_DATA, c_data);

#endif
		if (RAND(10) == 0) {
			char tmp[] = "GC";
			row->set_value(C_CREDIT, tmp);
		} else {
			char tmp[] = "BC";
			row->set_value(C_CREDIT, tmp);
		}
		row->set_value(C_DISCOUNT, (double)RAND(5000) / 10000);
		row->set_value(C_BALANCE, -10.0);
		row->set_value(C_YTD_PAYMENT, 10.0);
		row->set_value(C_PAYMENT_CNT, 1);
		uint64_t key;
		key = custNPKey(c_last, did, wid);
		index_insert(i_customer_last, key, row, wh_to_part(wid));
		key = custKey(cid, did, wid);
		index_insert(i_customer_id, key, row, wh_to_part(wid));
	}
}