예제 #1
0
int main(int argc, char *argv[])
{
    struct stat st;

    /* For getoptlong(). */
    int c;

    init_common();

    if (argc < 2) {
        printf("Usage: %s -w # [-c #] [-i #] [-o #] [-s #] [-n #] [-d <str>]\n",
               argv[0]);
        printf("\n");
        printf("-w #\n");
        printf("\twarehouse cardinality\n");
        printf("-c #\n");
        printf("\tcustomer cardinality, default %d\n", CUSTOMER_CARDINALITY);
        printf("-i #\n");
        printf("\titem cardinality, default %d\n", ITEM_CARDINALITY);
        printf("-o #\n");
        printf("\torder cardinality, default %d\n", ORDER_CARDINALITY);
        printf("-n #\n");
        printf("\tnew-order cardinality, default %d\n", NEW_ORDER_CARDINALITY);
        printf("-d <path>\n");
        printf("\toutput path of data files\n");
        printf("--drizzle\n");
        printf("\tformat data for Drizzle\n");
        printf("--mysql\n");
        printf("--nuodb\n");
        printf("\tformat data for NuoDB\n");
        printf("\tformat data for MySQL\n");
        printf("--pgsql\n");
        printf("\tformat data for PostgreSQL\n");
        printf("--sapdb\n");
        printf("\tformat data for SAP DB\n");
        printf("--direct\n");
        printf("\tdon't generate flat files, load directly into database\n");
        return 1;
    }

    /* Parse command line arguments. */
    while (1) {
        int option_index = 0;
        static struct option long_options[] = {
            { "direct", no_argument, &mode_load, MODE_DIRECT },
            { "pgsql", no_argument, &mode_string, MODE_PGSQL },
            { "sapdb", no_argument, &mode_string, MODE_SAPDB },
            { "mysql", no_argument, &mode_string, MODE_MYSQL },
            { "nuodb", no_argument, &mode_string, MODE_NUODB },
            { "drizzle", no_argument, &mode_string, MODE_DRIZZLE },
            { 0, 0, 0, 0 }
        };

        c = getopt_long(argc, argv, "c:d:i:n:o:w:",
                        long_options, &option_index);
        if (c == -1) {
            break;
        }

        switch (c) {
        case 0:
            break;
        case 'c':
            customers = atoi(optarg);
            break;
        case 'd':
            strcpy(output_path, optarg);
            break;
        case 'i':
            items = atoi(optarg);
            break;
        case 'n':
            new_orders = atoi(optarg);
            break;
        case 'o':
            orders = atoi(optarg);
            break;
        case 'w':
            warehouses = atoi(optarg);
            break;
        default:
            printf("?? getopt returned character code 0%o ??\n", c);
            return 2;
        }
    }

    if (warehouses == 0) {
        printf("-w must be used\n");
        return 3;
    }

    if (strlen(output_path) > 0 && ((stat(output_path, &st) < 0) ||
                                    (st.st_mode & S_IFMT) != S_IFDIR)) {
        printf("Output directory of data files '%s' not exists\n", output_path);
        return 3;
    }

    /* Verify that datagen supports a direct load for the selected database. */
    if (mode_load == MODE_DIRECT) {
        switch (mode_string) {
        case MODE_SAPDB:
        case MODE_MYSQL:
        case MODE_NUODB:
        case MODE_DRIZZLE:
            printf("the rdbms select does not support direct loading\n");
            return 4;
        }
    }

    /* Set the correct delimiter. */
    if (mode_string == MODE_SAPDB) {
        delimiter = ',';
        strcpy(null_str, "\"NULL\"");
    } else if (mode_string == MODE_PGSQL || mode_string == MODE_MYSQL ||
               mode_string == MODE_DRIZZLE || mode_string == MODE_NUODB) {
        delimiter = '\t';
        strcpy(null_str, "");
    }

    printf("warehouses = %d\n", warehouses);
    printf("districts = %d\n", DISTRICT_CARDINALITY);
    printf("customers = %d\n", customers);
    printf("items = %d\n", items);
    printf("orders = %d\n", orders);
    printf("stock = %d\n", items);
    printf("new_orders = %d\n", new_orders);
    printf("\n");

    if (strlen(output_path) > 0) {
        printf("Output directory of data files: %s\n",output_path);
    } else {
        printf("Output directory of data files: current directory\n");
    }
    printf("\n");

    printf("Generating data files for %d warehouse(s)...\n", warehouses);

    gen_items();
    gen_warehouses();
    gen_stock();
    gen_districts();
    gen_customers();
    gen_history();
    gen_orders();
    gen_new_orders();

    return 0;
}
예제 #2
0
int main(int argc, char* argv[]) {
  struct stat st;

  /* For getoptlong(). */
  int c;

  init_common();

  if (argc < 2) {
    printf("Usage: %s -w # [-c #] [-i #] [-o #] [-s #] [-n #] [-d <str>]\n", argv[0]);
    printf("\n");
    printf("-w #\n");
    printf("\twarehouse cardinality\n");
    printf("-c #\n");
    printf("\tcustomer cardinality, default %d\n", CUSTOMER_CARDINALITY);
    printf("-i #\n");
    printf("\titem cardinality, default %d\n", ITEM_CARDINALITY);
    printf("-o #\n");
    printf("\torder cardinality, default %d\n", ORDER_CARDINALITY);
    printf("-n #\n");
    printf("\tnew-order cardinality, default %d\n", NEW_ORDER_CARDINALITY);
    printf("-d <path>\n");
    printf("\toutput path of data files\n");
    printf("--sapdb\n");
    printf("\tformat data for SAP DB\n");
    printf("--pgsql\n");
    printf("\tformat data for PostgreSQL\n");
    printf("--mysql\n");
    printf("\tformat data for MySQL\n");
    printf("--hyrise\n");  // patched for hyrise
    printf("\tformat data for HYRISE\n");  // SB270911
    return 1;
  }

  /* Parse command line arguments. */
  while (1) {
    int option_index = 0;
    static struct option long_options[] = {
        {"pgsql", no_argument, &mode_string, MODE_PGSQL},
        {"sapdb", no_argument, &mode_string, MODE_SAPDB},
        {"mysql", no_argument, &mode_string, MODE_MYSQL},
        {"hyrise", no_argument, &mode_string, MODE_HYRISE},  // patched for hyrise, SB270911
        {0, 0, 0, 0}};

    c = getopt_long(argc, argv, "c:d:i:n:o:w:", long_options, &option_index);
    if (c == -1) {
      break;
    }

    switch (c) {
      case 0:
        break;
      case 'c':
        customers = atoi(optarg);
        break;
      case 'd':
        strcpy(output_path, optarg);
        break;
      case 'i':
        items = atoi(optarg);
        break;
      case 'n':
        new_orders = atoi(optarg);
        break;
      case 'o':
        orders = atoi(optarg);
        break;
      case 'w':
        warehouses = atoi(optarg);
        break;
      default:
        printf("?? getopt returned character code 0%o ??\n", c);
        return 2;
    }
  }

  if (warehouses == 0) {
    printf("-w must be used\n");
    return 3;
  }

  if (strlen(output_path) > 0 && ((stat(output_path, &st) < 0) || (st.st_mode & S_IFMT) != S_IFDIR)) {
    printf("Output directory of data files '%s' not exists\n", output_path);
    return 3;
  }

  /* Set the correct delimiter. */
  if (mode_string == MODE_SAPDB) {
    delimiter = ',';
    strcpy(null_str, "\"nullptr\"");
  } else if (mode_string == MODE_PGSQL || mode_string == MODE_MYSQL) {
    delimiter = '\t';
    strcpy(null_str, "");
  } else if (mode_string == MODE_HYRISE) {  // patched for hyrise
    delimiter = '|';  //
    strcpy(null_str, "");  //
    loadHyriseLayouts();  // SB270911
  }

  printf("warehouses = %d\n", warehouses);
  printf("districts = %d\n", DISTRICT_CARDINALITY);
  printf("customers = %d\n", customers);
  printf("items = %d\n", items);
  printf("orders = %d\n", orders);
  printf("stock = %d\n", items);
  printf("new_orders = %d\n", new_orders);
  printf("\n");

  if (strlen(output_path) > 0) {
    printf("Output directory of data files: %s\n", output_path);
  } else {
    printf("Output directory of data files: current directory\n");
  }
  printf("\n");

  printf("Generating data files for %d warehouse(s)...\n", warehouses);

  gen_items();
  gen_warehouses();
  gen_stock();
  gen_districts();
  gen_customers();
  gen_history();
  gen_orders();
  gen_new_orders();

  return 0;
}
int main(int argc, char *argv[])
{
	FILE *sequence_sql;
	FILE *p;
	char pwd[256];
	char cmd[256];

	path[0] = '\0';

	if (process_options(argc, argv) == 0)
	{
		usage();
		return 1;
	}
        if (rdbms == SAPDB)
	{
		strcpy(field_deco, "\"");
		delimiter =  ',';
		strcpy(sequence_file, "../scripts/sapdb/create_sequence.sql");
		strcpy(exec_sql, "sql_execute");
	}
	else if (rdbms == PGSQL)
	{
		strcpy(field_deco, "");
		delimiter =  '\\';
		strcpy(sequence_file, "../scripts/pgsql/create_sequence.sql");
		strcpy(exec_sql, "");
	}

	if (items != 1000 && items != 10000 && items != 100000 &&
		items != 1000000 && items != 10000000)
	{
		printf("%d is an invalid item scale factor:\n", items);
		printf("\t1000\n");
		printf("\t10000\n");
		printf("\t100000\n");
		printf("\t1000000\n");
		printf("\t10000000\n");
		return 2;
	}

	p = popen("pwd", "r");
	fscanf(p, "%s", pwd);
	printf("%s\n", pwd);
	if (strcmp(path, ".") == 0 || path[0] == '\0' )
	{
		strcpy(path, pwd);
	}

	printf("item scale factor %10d\n", items);
	printf("user scale factor %10d\n", ebs);
	printf("data files are in %10s\n", path);

	printf("generating sequence creation file: %s\n", sequence_file);
	sequence_sql = fopen(sequence_file, "w");
	if (sequence_sql == NULL)
	{
		printf("cannot open %s\n", sequence_file);
		return 3;
	}
	if (rdbms == SAPDB)
	{
		fprintf(sequence_sql, "sql_connect dbt,dbt\n");
		fprintf(sequence_sql,
			"%s CREATE SEQUENCE custid INCREMENT BY 1 START WITH %d\n",
			exec_sql,
			2880 * ebs + 1);
	fprintf(sequence_sql,
			"%s CREATE SEQUENCE addrid INCREMENT BY 1 START WITH %d\n",
			exec_sql,
			ebs * 2880 * 2 + 1);
	fprintf(sequence_sql,
			"%s CREATE SEQUENCE scid INCREMENT BY 1 START WITH %d\n",
			exec_sql,
			(int) ((double) ebs * 2880.0 * 0.9 + 1.0));
	}
	else
	{
		fprintf(sequence_sql,
			"%s CREATE SEQUENCE custid INCREMENT 1 START %d;\n",
			exec_sql,
			2880 * ebs + 1);
		fprintf(sequence_sql, "commit;");
		fprintf(sequence_sql,
			"%s CREATE SEQUENCE addrid INCREMENT 1 START %d;\n",
			exec_sql,
			ebs * 2880 * 2 + 1);
		fprintf(sequence_sql, "commit;");
		fprintf(sequence_sql,
			"%s CREATE SEQUENCE scid INCREMENT 1 START %d;\n",
			exec_sql,
			(int) ((double) ebs * 2880.0 * 0.9 + 1.0));
		fprintf(sequence_sql, "commit;");
	}
	fclose(sequence_sql);

	dpath = (char *) malloc(sizeof(char) * 64);
	strcpy(dpath, "../wgen/grammar.tpcw");

	init_common();
	load_dists();
	printf("generating data files...\n");

	if (flag_item == 1) 
	{
		gen_items();
		sprintf(cmd, "ln -fs %s/item.data /tmp/item.data\n", path);
		popen(cmd, "r");
	}

	if (flag_cust == 1)
	{
		gen_customers();
		sprintf(cmd, "ln -fs %s/customer.data /tmp/customer.data", path);
		popen(cmd, "r");
	}

	if (flag_author == 1) 
	{
		gen_authors();
		sprintf(cmd, "ln -fs %s/author.data /tmp/author.data", path);
		popen(cmd, "r");
	}

	if (flag_address == 1)
	{
		gen_addresses();
		sprintf(cmd, "ln -fs %s/address.data /tmp/address.data", path);
		popen(cmd, "r");
	}

	if (flag_order == 1)
	{
		gen_orders();
		sprintf(cmd, "ln -fs %s/orders.data /tmp/orders.data", path);
		popen(cmd, "r");
		sprintf(cmd, "ln -fs %s/order_line.data /tmp/order_line.data",
			path);
		popen(cmd, "r");
		sprintf(cmd, "ln -fs %s/cc_xacts.data /tmp/cc_xacts.data", path);
		popen(cmd, "r");
	}

	if (rdbms == SAPDB)
	{
		sprintf(cmd, "ln -fs %s/country.data /tmp/country.data", pwd);
	}
	else if (rdbms == PGSQL)
	{
		sprintf(cmd, "ln -fs %s/country.data.pgsql /tmp/country.data", pwd);
	}
	popen(cmd, "r");

	free(dpath);
	return 0;
}