Exemplo n.º 1
0
/* Clause 4.3.3.1 */
void gen_stock() {
  FILE* output;
  int i, j, k;
  char a_string[128];
  char filename[1024] = "\0";

  srand(0);
  printf("Generating stock table data...\n");

  if (strlen(output_path) > 0) {
    strcpy(filename, output_path);
    strcat(filename, "/");
  }
  strcat(filename, STOCK_DATA);
  output = fopen(filename, "w");
  if (output == nullptr) {
    printf("cannot open %s\n", STOCK_DATA);
    return;
  }

  // patched for hyrise - SB270911
  if (mode_string == MODE_HYRISE) {
    gen_table_header(output, "stock");
  }

  for (i = 0; i < warehouses; i++) {
    for (j = 0; j < items; j++) {
      /* s_i_id */
      FPRINTF(output, "%d", j + 1);
      METAPRINTF((output, "%c", delimiter));

      /* s_w_id */
      FPRINTF(output, "%d", i + 1);
      METAPRINTF((output, "%c", delimiter));

      /* s_quantity */
      FPRINTF(output, "%d", get_random(90) + 10);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_01 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_02 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_03 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_04 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_05 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_06 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_07 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_08 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_09 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_dist_10 */
      get_l_string(a_string, 24, 24);
      FPRINTF(output, "%s", a_string);
      METAPRINTF((output, "%c", delimiter));

      /* s_ytd */
      FPRINTF2(output, "0");
      METAPRINTF((output, "%c", delimiter));

      /* s_order_cnt */
      FPRINTF2(output, "0");
      METAPRINTF((output, "%c", delimiter));

      /* s_remote_cnt */
      FPRINTF2(output, "0");
      METAPRINTF((output, "%c", delimiter));

      /* s_data */
      get_a_string(a_string, 26, 50);
      if (get_percentage() < .10) {
        k = get_random(strlen(a_string) - 8);
        strncpy(a_string + k, "ORIGINAL", 8);
      }
      escape_me(a_string);
      FPRINTF(output, "%s", a_string);

      METAPRINTF((output, "\n"));
    }
  }
  fclose(output);
  printf("Finished stock table data...\n");
  return;
}
Exemplo n.º 2
0
/* Clause 4.3.3.1 */
void gen_warehouses() {
  FILE* output;
  int i;
  char a_string[48];
  char filename[1024] = "\0";

  srand(0);
  printf("Generating warehouse table data...\n");

  if (strlen(output_path) > 0) {
    strcpy(filename, output_path);
    strcat(filename, "/");
  }
  strcat(filename, WAREHOUSE_DATA);

  output = fopen(filename, "w");
  if (output == nullptr) {
    printf("cannot open %s\n", WAREHOUSE_DATA);
    return;
  }

  // patched for hyrise - SB270911
  if (mode_string == MODE_HYRISE) {
    gen_table_header(output, "warehouse");
  }

  for (i = 0; i < warehouses; i++) {
    /* w_id */
    FPRINTF(output, "%d", i + 1);
    METAPRINTF((output, "%c", delimiter));

    /* w_name */
    get_a_string(a_string, 6, 10);
    escape_me(a_string);
    FPRINTF(output, "%s", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_street_1 */
    get_a_string(a_string, 10, 20);
    escape_me(a_string);
    FPRINTF(output, "%s", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_street_2 */
    get_a_string(a_string, 10, 20);
    escape_me(a_string);
    FPRINTF(output, "%s", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_city */
    get_a_string(a_string, 10, 20);
    escape_me(a_string);
    FPRINTF(output, "%s", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_state */
    get_l_string(a_string, 2, 2);
    FPRINTF(output, "%s", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_zip */
    get_n_string(a_string, 4, 4);
    FPRINTF(output, "%s11111", a_string);
    METAPRINTF((output, "%c", delimiter));

    /* w_tax */
    FPRINTF(output, "0.%04d", get_random(2000));
    METAPRINTF((output, "%c", delimiter));

    /* w_ytd */
    FPRINTF2(output, "300000.00");

    METAPRINTF((output, "\n"));
  }
  fclose(output);
  printf("Finished warehouse table data...\n");
  return;
}
Exemplo n.º 3
0
/* Clause 4.3.3.1 */
void gen_customers() {
  FILE* output;
  int i, j, k;
  char a_string[1024];
  struct tm* tm1;
  time_t t1;
  char filename[1024] = "\0";

  srand(0);
  printf("Generating customer table data...\n");

  if (strlen(output_path) > 0) {
    strcpy(filename, output_path);
    strcat(filename, "/");
  }
  strcat(filename, CUSTOMER_DATA);
  output = fopen(filename, "w");
  if (output == nullptr) {
    printf("cannot open %s\n", CUSTOMER_DATA);
    return;
  }

  // patched for hyrise - SB270911
  if (mode_string == MODE_HYRISE) {
    gen_table_header(output, "customer");
  }

  for (i = 0; i < warehouses; i++) {
    for (j = 0; j < DISTRICT_CARDINALITY; j++) {
      for (k = 0; k < customers; k++) {
        /* c_id */
        FPRINTF(output, "%d", k + 1);
        METAPRINTF((output, "%c", delimiter));

        /* c_d_id */
        FPRINTF(output, "%d", j + 1);
        METAPRINTF((output, "%c", delimiter));

        /* c_w_id */
        FPRINTF(output, "%d", i + 1);
        METAPRINTF((output, "%c", delimiter));

        /* c_first */
        get_a_string(a_string, 8, 16);
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_middle */
        FPRINTF2(output, "OE");
        METAPRINTF((output, "%c", delimiter));

        /* c_last Clause 4.3.2.7 */
        if (k < 1000) {
          get_c_last(a_string, k);
        } else {
          get_c_last(a_string, get_nurand(255, 0, 999));
        }
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_street_1 */
        get_a_string(a_string, 10, 20);
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_street_2 */
        get_a_string(a_string, 10, 20);
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_city */
        get_a_string(a_string, 10, 20);
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_state */
        get_l_string(a_string, 2, 2);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_zip */
        get_n_string(a_string, 4, 4);
        FPRINTF(output, "%s11111", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_phone */
        get_n_string(a_string, 16, 16);
        FPRINTF(output, "%s", a_string);
        METAPRINTF((output, "%c", delimiter));

        /* c_since */
        /*
         * Milliseconds are not calculated.  This
         * should also be the time when the data is
         * loaded, I think.
         */
        time(&t1);
        tm1 = localtime(&t1);
        print_timestamp(output, tm1);
        METAPRINTF((output, "%c", delimiter));

        /* c_credit */
        if (get_percentage() < .10) {
          FPRINTF2(output, "BC");
        } else {
          FPRINTF2(output, "GC");
        }
        METAPRINTF((output, "%c", delimiter));

        /* c_credit_lim */
        FPRINTF2(output, "50000.00");
        METAPRINTF((output, "%c", delimiter));

        /* c_discount */
        FPRINTF(output, "0.%04d", get_random(5000));
        METAPRINTF((output, "%c", delimiter));

        /* c_balance */
        FPRINTF2(output, "-10.00");
        METAPRINTF((output, "%c", delimiter));

        /* c_ytd_payment */
        FPRINTF2(output, "10.00");
        METAPRINTF((output, "%c", delimiter));

        /* c_payment_cnt */
        FPRINTF2(output, "1");
        METAPRINTF((output, "%c", delimiter));

        /* c_delivery_cnt */
        FPRINTF2(output, "0");
        METAPRINTF((output, "%c", delimiter));

        /* c_data */
        get_a_string(a_string, 300, 500);
        escape_me(a_string);
        FPRINTF(output, "%s", a_string);

        METAPRINTF((output, "\n"));
      }
    }
  }
  fclose(output);
  printf("Finished customer table data...\n");
  return;
}
Exemplo n.º 4
0
/* Clause 4.3.3.1 */
void gen_orders() {
  FILE* order, *order_line;
  int i, j, k, l;
  char a_string[64];
  struct tm* tm1;
  time_t t1;
  char filename[1024] = "\0";

  struct node_t {
    int value;
    struct node_t* next;
  };
  struct node_t* head;
  struct node_t* current;
  struct node_t* prev;
  struct node_t* new_node;
  int iter;

  int o_ol_cnt;

  srand(0);
  printf("Generating order and order-line table data...\n");

  if (strlen(output_path) > 0) {
    strcpy(filename, output_path);
    strcat(filename, "/");
  }
  strcat(filename, ORDER_DATA);
  order = fopen(filename, "w");
  if (order == nullptr) {
    printf("cannot open %s\n", ORDER_DATA);
    return;
  }

  filename[0] = '\0';
  if (strlen(output_path) > 0) {
    strcpy(filename, output_path);
    strcat(filename, "/");
  }
  strcat(filename, ORDER_LINE_DATA);
  order_line = fopen(filename, "w");
  if (order_line == nullptr) {
    printf("cannot open %s\n", ORDER_LINE_DATA);
    return;
  }

  // patched for hyrise - SB270911
  if (mode_string == MODE_HYRISE) {
    gen_table_header(order, "order");
    gen_table_header(order_line, "order_line");
  }

  for (i = 0; i < warehouses; i++) {
    for (j = 0; j < DISTRICT_CARDINALITY; j++) {
      /*
       * Create a random list of numbers from 1 to customers for o_c_id.
       */
      head = (struct node_t*)malloc(sizeof(struct node_t));
      head->value = 1;
      head->next = nullptr;
      for (k = 2; k <= customers; k++) {
        current = prev = head;

        /* Find a random place in the list to insert a number. */
        iter = get_random(k - 1);
        while (iter > 0) {
          prev = current;
          current = current->next;
          --iter;
        }

        /* Insert the number. */
        new_node = (struct node_t*)malloc(sizeof(struct node_t));
        if (current == prev) {
          /* Insert at the head of the list. */
          new_node->next = head;
          head = new_node;
        } else if (current == nullptr) {
          /* Insert at the tail of the list. */
          prev->next = new_node;
          new_node->next = nullptr;
        } else {
          /* Insert somewhere in the middle of the list. */
          prev->next = new_node;
          new_node->next = current;
        }
        new_node->value = k;
      }

      current = head;
      for (k = 0; k < orders; k++) {
        /* o_id */
        FPRINTF(order, "%d", k + 1);
        METAPRINTF((order, "%c", delimiter));

        /* o_d_id */
        FPRINTF(order, "%d", j + 1);
        METAPRINTF((order, "%c", delimiter));

        /* o_w_id */
        FPRINTF(order, "%d", i + 1);
        METAPRINTF((order, "%c", delimiter));

        /* o_c_id */
        FPRINTF(order, "%d", current->value);
        METAPRINTF((order, "%c", delimiter));
        current = current->next;

        /* o_entry_d */
        /*
         * Milliseconds are not calculated.  This
         * should also be the time when the data is
         * loaded, I think.
         */
        time(&t1);
        tm1 = localtime(&t1);
        print_timestamp(order, tm1);
        METAPRINTF((order, "%c", delimiter));

        /* o_carrier_id */
        if (k < 2101) {
          FPRINTF(order, "%d", get_random(9) + 1);
        } else {
          METAPRINTF((order, "%s", null_str));
        }
        METAPRINTF((order, "%c", delimiter));

        /* o_ol_cnt */
        o_ol_cnt = get_random(10) + 5;
        FPRINTF(order, "%d", o_ol_cnt);
        METAPRINTF((order, "%c", delimiter));

        /* o_all_local */
        FPRINTF2(order, "1");

        METAPRINTF((order, "\n"));

        /*
         * Generate data in the order-line table for
         * this order.
         */
        for (l = 0; l < o_ol_cnt; l++) {
          /* ol_o_id */
          FPRINTF(order_line, "%d", k + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_d_id */
          FPRINTF(order_line, "%d", j + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_w_id */
          FPRINTF(order_line, "%d", i + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_number */
          FPRINTF(order_line, "%d", l + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_i_id */
          FPRINTF(order_line, "%d", get_random(ITEM_CARDINALITY - 1) + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_supply_w_id */
          FPRINTF(order_line, "%d", i + 1);
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_delivery_d */
          if (k < 2101) {
            /*
             * Milliseconds are not
             * calculated.  This should
             * also be the time when the
             * data is loaded, I think.
             */
            time(&t1);
            tm1 = localtime(&t1);
            print_timestamp(order_line, tm1);
          } else {
            METAPRINTF((order_line, "%s", null_str));
          }
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_quantity */
          FPRINTF2(order_line, "5");
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_amount */
          if (k < 2101) {
            FPRINTF2(order_line, "0.00");
          } else {
            FPRINTF(order_line, "%f", (double)(get_random(999998) + 1) / 100.0);
          }
          METAPRINTF((order_line, "%c", delimiter));

          /* ol_dist_info */
          get_l_string(a_string, 24, 24);
          FPRINTF(order_line, "%s", a_string);

          METAPRINTF((order_line, "\n"));
        }
      }
      while (head != nullptr) {
        current = head;
        head = head->next;
        free(current);
      }
    }
  }
  fclose(order);
  fclose(order_line);
  printf("Finished order and order-line table data...\n");
  return;
}
Exemplo n.º 5
0
/* Clause 4.3.3.1 */
void gen_orders()
{
	FILE *order, *order_line;
	int i, j, k, l;
	char a_string[64];
	struct tm *tm1;
	time_t t1;
	char filename[1024] = "\0";

	struct node_t {
		int value;
		struct node_t *next;
	};
	struct node_t *head;
	struct node_t *current;
	struct node_t *prev;
	struct node_t *new_node;
	int iter;

	int o_ol_cnt;

	srand(0);
	printf("Generating order and order-line table data...\n");

	if (mode_load == MODE_FLAT) {
		if (strlen(output_path) > 0) {
			strcpy(filename, output_path);
			strcat(filename, "/");
		}
		strcat(filename, ORDER_DATA);
		order = fopen(filename, "w");
		if (order == NULL) {
			printf("cannot open %s\n", ORDER_DATA);
			return;
		}

		filename[0] = '\0';
		if (strlen(output_path) > 0) {
			strcpy(filename, output_path);
			strcat(filename, "/");
		}
		strcat(filename, ORDER_LINE_DATA);
		order_line = fopen(filename, "w");
		if (order_line == NULL) {
			printf("cannot open %s\n", ORDER_LINE_DATA);
			return;
		}
	} else if (mode_load == MODE_DIRECT) {
		switch (mode_string) {
		case MODE_PGSQL:
			order = popen("psql", "w");
			if (order == NULL) {
				printf("error cannot open pipe for direct load\n");
				return;
			}
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order) != EOF) ;

			fprintf(order, "BEGIN;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order) != EOF) ;

			fprintf(order,
					"COPY orders FROM STDIN DELIMITER '%c' NULL '%s';\n",
					delimiter, null_str);
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order) != EOF) ;

			order_line = popen("psql", "w");
			if (order_line == NULL) {
				printf("error cannot open pipe for direct load\n");
				return;
			}
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order_line) != EOF) ;

			fprintf(order_line, "BEGIN;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order_line) != EOF) ;

			fprintf(order_line,
					"COPY order_line FROM STDIN DELIMITER '%c' NULL '%s';\n",
					delimiter, null_str);
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order_line) != EOF) ;
			break;
		}
	} else {
		printf("error unknown load mode: %d\n", mode_load);
	}

	for (i = 0; i < warehouses; i++) {
		for (j = 0; j < DISTRICT_CARDINALITY; j++) {
			/*
			 * Create a random list of numbers from 1 to customers for o_c_id.
			 */
			head = (struct node_t *) malloc(sizeof(struct node_t));
			head->value = 1;
			head->next = NULL;
			for (k = 2; k <= customers; k++) {
				current = prev = head;

				/* Find a random place in the list to insert a number. */
				iter = get_random(k - 1);
				while (iter > 0) {
					prev = current;
					current = current->next;
					--iter;
				}

				/* Insert the number. */
				new_node = (struct node_t *) malloc(sizeof(struct node_t));
				if (current == prev) {
					/* Insert at the head of the list. */
					new_node->next = head;
					head = new_node;
				} else if (current == NULL) {
					/* Insert at the tail of the list. */
					prev->next = new_node;
					new_node->next = NULL;
				} else {
					/* Insert somewhere in the middle of the list. */
					prev->next = new_node;
					new_node->next = current;
				}
				new_node->value = k;
			}

			current = head;
			for (k = 0; k < orders; k++) {
				/* o_id */
				FPRINTF(order, "%d", k + 1);
				METAPRINTF((order, "%c", delimiter));

				/* o_d_id */
				FPRINTF(order, "%d", j + 1);
				METAPRINTF((order, "%c", delimiter));

				/* o_w_id */
				FPRINTF(order, "%d", i + 1);
				METAPRINTF((order, "%c", delimiter));

				/* o_c_id */
				FPRINTF(order, "%d", current->value);
				METAPRINTF((order, "%c", delimiter));
				current = current->next;

				/* o_entry_d */
				/*
				 * Milliseconds are not calculated.  This
				 * should also be the time when the data is
				 * loaded, I think.
				 */
				time(&t1);
				tm1 = localtime(&t1);
				print_timestamp(order, tm1);
				METAPRINTF((order, "%c", delimiter));

				/* o_carrier_id */
				if (mode_string == MODE_DRIZZLE) {
					/*
					 * FIXME: Not to spec but Drizzle doesn't handle null
					 * value for when reading from a file for now
					 */
					FPRINTF(order, "%d", get_random(9) + 1);
				}
				else {
					if (k < 2101) {
						FPRINTF(order, "%d", get_random(9) + 1);
					} else {
						METAPRINTF((order, "%s", null_str));
					}
				}
				METAPRINTF((order, "%c", delimiter));

				/* o_ol_cnt */
				o_ol_cnt = get_random(10) + 5;
				FPRINTF(order, "%d", o_ol_cnt);
				METAPRINTF((order, "%c", delimiter));

				/* o_all_local */
				FPRINTF2(order, "1");

				METAPRINTF((order, "\n"));

				/*
				 * Generate data in the order-line table for
				 * this order.
				 */
				for (l = 0; l < o_ol_cnt; l++) {
					/* ol_o_id */
					FPRINTF(order_line, "%d", k + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_d_id */
					FPRINTF(order_line, "%d", j + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_w_id */
					FPRINTF(order_line, "%d", i + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_number */
					FPRINTF(order_line, "%d", l + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_i_id */
					FPRINTF(order_line, "%d",
							get_random(ITEM_CARDINALITY - 1) + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_supply_w_id */
					FPRINTF(order_line, "%d", i + 1);
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_delivery_d */
					if (mode_string == MODE_DRIZZLE) {
						/*
						 * FIXME: Not to spec but Drizzle doesn't handle null
						 * value for when reading from a file for now
						 */
						time(&t1);
						tm1 = localtime(&t1);
						print_timestamp(order_line, tm1);
					}
					else  {
						if (k < 2101) {
						/*
						 * Milliseconds are not
						 * calculated.  This should
						 * also be the time when the
						 * data is loaded, I think.
						 */
							time(&t1);
							tm1 = localtime(&t1);
							print_timestamp(order_line, tm1);
						} else {
							METAPRINTF((order_line, "%s", null_str));
						}
					}
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_quantity */
					FPRINTF2(order_line, "5");
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_amount */
					if (k < 2101) {
						FPRINTF2(order_line, "0.00");
					} else {
						FPRINTF(order_line, "%f",
								(double) (get_random(999998) + 1) / 100.0);
					}
					METAPRINTF((order_line, "%c", delimiter));

					/* ol_dist_info */
					get_l_string(a_string, 24, 24);
					FPRINTF(order_line, "%s", a_string);

					METAPRINTF((order_line, "\n"));
				}
			}
			while (head != NULL) {
				current = head;
				head = head->next;
				free(current);
			}
		}
	}

	if (mode_load == MODE_FLAT) {
		fclose(order);
		fclose(order_line);
	} else {
		switch (mode_string) {
		case MODE_PGSQL:
			fprintf(order, "\\.\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order) != EOF) ;
			fprintf(order_line, "\\.\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order_line) != EOF) ;

			fprintf(order, "COMMIT;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order) != EOF) ;
			fprintf(order_line, "COMMIT;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(order_line) != EOF) ;

			pclose(order);
			pclose(order_line);
			break;
		}
	}
	printf("Finished order and order-line table data...\n");
	return;
}
Exemplo n.º 6
0
/* Clause 4.3.3.1 */
void gen_districts()
{
	FILE *output;
	int i, j;
	char a_string[48];
	char filename[1024] = "\0";

	srand(0);
	printf("Generating district table data...\n");

	if (mode_load == MODE_FLAT) {
		if (strlen(output_path) > 0) {
			strcpy(filename, output_path);
			strcat(filename, "/");
		}
		strcat(filename, DISTRICT_DATA);
		output = fopen(filename, "w");
		if (output == NULL) {
			printf("cannot open %s\n", DISTRICT_DATA);
			return;
		}
	} else if (mode_load == MODE_DIRECT) {
		switch (mode_string) {
		case MODE_PGSQL:
			output = popen("psql", "w");
			if (output == NULL) {
				printf("error cannot open pipe for direct load\n");
				return;
			}
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "BEGIN;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output,
					"COPY district FROM STDIN DELIMITER '%c' NULL '%s';\n",
					delimiter, null_str);
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;
			break;
		}
	} else {
		printf("error unknown load mode: %d\n", mode_load);
	}

	for (i = 0; i < warehouses; i++) {
		for (j = 0; j < DISTRICT_CARDINALITY; j++) {
			/* d_id */
			FPRINTF(output, "%d", j + 1);
			METAPRINTF((output, "%c", delimiter));

			/* d_w_id */
			FPRINTF(output, "%d", i + 1);
			METAPRINTF((output, "%c", delimiter));

			/* d_name */
			get_a_string(a_string, 6, 10);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_street_1 */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_street_2 */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_city */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_state */
			get_l_string(a_string, 2, 2);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_zip */
			get_n_string(a_string, 4, 4);
			FPRINTF(output, "%s11111", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_tax */
			FPRINTF(output, "0.%04d", get_random(2000));
			METAPRINTF((output, "%c", delimiter));

			/* d_ytd */
			FPRINTF2(output, "30000.00");
			METAPRINTF((output, "%c", delimiter));

			/* d_next_o_id */
			FPRINTF2(output, "3001");

			METAPRINTF((output, "\n"));
		}
	}

	if (mode_load == MODE_FLAT) {
		fclose(output);
	} else {
		switch (mode_string) {
		case MODE_PGSQL:
			fprintf(output, "\\.\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "COMMIT;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			pclose(output);
			break;
		}
	}

	printf("Finished district table data...\n");
	return;
}
Exemplo n.º 7
0
/* Clause 4.3.3.1 */
void gen_customers()
{
	FILE *output;
	int i, j, k;
	char a_string[1024];
	struct tm *tm1;
	time_t t1;
	char filename[1024] = "\0";

	srand(0);
	printf("Generating customer table data...\n");

	if (mode_load == MODE_FLAT) {
		if (strlen(output_path) > 0) {
			strcpy(filename, output_path);
			strcat(filename, "/");
		}
		strcat(filename, CUSTOMER_DATA);
		output = fopen(filename, "w");
		if (output == NULL) {
			printf("cannot open %s\n", CUSTOMER_DATA);
			return;
		}
	} else if (mode_load == MODE_DIRECT) {
		switch (mode_string) {
		case MODE_PGSQL:
			output = popen("psql", "w");
			if (output == NULL) {
				printf("error cannot open pipe for direct load\n");
				return;
			}
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "BEGIN;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output,
					"COPY customer FROM STDIN DELIMITER '%c' NULL '%s';\n",
					delimiter, null_str);
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;
			break;
		}
	} else {
		printf("error unknown load mode: %d\n", mode_load);
	}

	for (i = 0; i < warehouses; i++) {
		for (j = 0; j < DISTRICT_CARDINALITY; j++) {
			for (k = 0; k < customers; k++) {
				/* c_id */
				FPRINTF(output, "%d", k + 1);
				METAPRINTF((output, "%c", delimiter));

				/* c_d_id */
				FPRINTF(output, "%d", j + 1);
				METAPRINTF((output, "%c", delimiter));

				/* c_w_id */
				FPRINTF(output, "%d", i + 1);
				METAPRINTF((output, "%c", delimiter));

				/* c_first */
				get_a_string(a_string, 8, 16);
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_middle */
				FPRINTF2(output, "OE");
				METAPRINTF((output, "%c", delimiter));

				/* c_last Clause 4.3.2.7 */
				if (k < 1000) {
					get_c_last(a_string, k);
				} else {
					get_c_last(a_string, get_nurand(255, 0, 999));
				}
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_street_1 */
				get_a_string(a_string, 10, 20);
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_street_2 */
				get_a_string(a_string, 10, 20);
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_city */
				get_a_string(a_string, 10, 20);
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_state */
				get_l_string(a_string, 2, 2);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_zip */
				get_n_string(a_string, 4, 4);
				FPRINTF(output, "%s11111", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_phone */
				get_n_string(a_string, 16, 16);
				FPRINTF(output, "%s", a_string);
				METAPRINTF((output, "%c", delimiter));

				/* c_since */
				/*
				 * Milliseconds are not calculated.  This
				 * should also be the time when the data is
				 * loaded, I think.
				 */
				time(&t1);
				tm1 = localtime(&t1);
				print_timestamp(output, tm1);
				METAPRINTF((output, "%c", delimiter));

				/* c_credit */
				if (get_percentage() < .10) {
					FPRINTF2(output, "BC");
				} else {
					FPRINTF2(output, "GC");
				}
				METAPRINTF((output, "%c", delimiter));

				/* c_credit_lim */
				FPRINTF2(output, "50000.00");
				METAPRINTF((output, "%c", delimiter));

				/* c_discount */
				FPRINTF(output, "0.%04d", get_random(5000));
				METAPRINTF((output, "%c", delimiter));

				/* c_balance */
				FPRINTF2(output, "-10.00");
				METAPRINTF((output, "%c", delimiter));

				/* c_ytd_payment */
				FPRINTF2(output, "10.00");
				METAPRINTF((output, "%c", delimiter));

				/* c_payment_cnt */
				FPRINTF2(output, "1");
				METAPRINTF((output, "%c", delimiter));

				/* c_delivery_cnt */
				FPRINTF2(output, "0");
				METAPRINTF((output, "%c", delimiter));

				/* c_data */
				get_a_string(a_string, 300, 500);
				escape_me(a_string);
				FPRINTF(output, "%s", a_string);

				METAPRINTF((output, "\n"));
			}
		}
	}

	if (mode_load == MODE_FLAT) {
		fclose(output);
	} else {
		switch (mode_string) {
		case MODE_PGSQL:
			fprintf(output, "\\.\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "COMMIT;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			pclose(output);
			break;
		}
	}

	printf("Finished customer table data...\n");
	return;
}
Exemplo n.º 8
0
/* Clause 4.3.3.1 */
void gen_stock()
{
	FILE *output;
	int i, j, k;
	char a_string[128];
	char filename[1024] = "\0";

	srand(0);
	printf("Generating stock table data...\n");

	if (mode_load == MODE_FLAT) {
		if (strlen(output_path) > 0) {
			strcpy(filename, output_path);
			strcat(filename, "/");
		}
		strcat(filename, STOCK_DATA);
		output = fopen(filename, "w");
		if (output == NULL) {
			printf("cannot open %s\n", STOCK_DATA);
			return;
		}
	} else if (mode_load == MODE_DIRECT) {
		switch (mode_string) {
		case MODE_PGSQL:
			output = popen("psql", "w");
			if (output == NULL) {
				printf("error cannot open pipe for direct load\n");
				return;
			}
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "BEGIN;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output,
					"COPY stock FROM STDIN DELIMITER '%c' NULL '%s';\n",
					delimiter, null_str);
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;
			break;
		}
	} else {
		printf("error unknown load mode: %d\n", mode_load);
	}

	for (i = 0; i < warehouses; i++) {
		for (j = 0; j < items; j++) {
			/* s_i_id */
			FPRINTF(output, "%d", j + 1);
			METAPRINTF((output, "%c", delimiter));

			/* s_w_id */
			FPRINTF(output, "%d", i + 1);
			METAPRINTF((output, "%c", delimiter));

			/* s_quantity */
			FPRINTF(output, "%d", get_random(90) + 10);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_01 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_02 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_03 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_04 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_05 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_06 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_07 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_08 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_09 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_dist_10 */
			get_l_string(a_string, 24, 24);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* s_ytd */
			FPRINTF2(output, "0");
			METAPRINTF((output, "%c", delimiter));

			/* s_order_cnt */
			FPRINTF2(output, "0");
			METAPRINTF((output, "%c", delimiter));

			/* s_remote_cnt */
			FPRINTF2(output, "0");
			METAPRINTF((output, "%c", delimiter));

			/* s_data */
			get_a_string(a_string, 26, 50);
			if (get_percentage() < .10) {
				k = get_random(strlen(a_string) - 8);
				strncpy(a_string + k, "ORIGINAL", 8);
			}
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);

			METAPRINTF((output, "\n"));
		}
	}

	if (mode_load == MODE_FLAT) {
		fclose(output);
	} else {
		switch (mode_string) {
		case MODE_PGSQL:
			fprintf(output, "\\.\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			fprintf(output, "COMMIT;\n");
			/* FIXME: Handle properly instead of blindly reading the output. */
			while (fgetc(output) != EOF) ;

			pclose(output);
			break;
		}
	}

	printf("Finished stock table data...\n");
	return;
}
Exemplo n.º 9
0
/* Clause 4.3.3.1 */
void gen_districts()
{
	FILE *output;
	int i, j;
	char a_string[48];
	char filename[1024] = "\0";

	srand(0);
	printf("Generating district table data...\n");

	if (strlen(output_path) > 0) {
		strcpy(filename, output_path);
		strcat(filename, "/");
	}
	strcat(filename, DISTRICT_DATA);
	output = fopen(filename, "w");
	if (output == NULL) {
		printf("cannot open %s\n", DISTRICT_DATA);
		return;
	}

	for (i = 0; i < warehouses; i++) {
		for (j = 0; j < DISTRICT_CARDINALITY; j++) {
			/* d_id */
			FPRINTF(output, "%d", j + 1);
			METAPRINTF((output, "%c", delimiter));

			/* d_w_id */
			FPRINTF(output, "%d", i + 1);
			METAPRINTF((output, "%c", delimiter));

			/* d_name */
			get_a_string(a_string, 6, 10);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_street_1 */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_street_2 */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_city */
			get_a_string(a_string, 10, 20);
			escape_me(a_string);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_state */
			get_l_string(a_string, 2, 2);
			FPRINTF(output, "%s", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_zip */
			get_n_string(a_string, 4, 4);
			FPRINTF(output, "%s11111", a_string);
			METAPRINTF((output, "%c", delimiter));

			/* d_tax */
			FPRINTF(output, "0.%04d", get_random(2000));
			METAPRINTF((output, "%c", delimiter));

			/* d_ytd */
			FPRINTF2(output, "30000.00");
			METAPRINTF((output, "%c", delimiter));

			/* d_next_o_id */
			FPRINTF2(output, "3001");

			METAPRINTF((output, "\n"));
		}
	}
	fclose(output);
	printf("Finished district table data...\n");
	return;
}