Beispiel #1
0
int
load_state(long sf, long procs, long step)
{
    FILE *ufp;
    int i;
    char fname[256];
    char line[1024];

    if (sf == 0 || step == 0)
        return(0);

    seed_name(line, sf, procs, step);
    sprintf(fname, "%s%c%s",
        env_config(SEED_TAG, SEED_DFLT),
        PATH_SEP, line);
    ufp = fopen(fname, "r");
    OPEN_CHECK(ufp, fname);

    for (i=0; i <= MAX_STREAM; i++ )
         if (fscanf(ufp, "%ld\n", Seed + i) != 1)
            return(MAX_STREAM);

    fclose(ufp);

    return(0);
}
Beispiel #2
0
FILE     *
tbl_open(int tbl, char *mode)
{
    char      prompt[256];
    char      fullpath[256];
    FILE     *f;
    struct stat fstats;
    int      retcode;


    if (*tdefs[tbl].name == PATH_SEP)
        strcpy(fullpath, tdefs[tbl].name);
    else
        sprintf(fullpath, "%s%c%s",
            env_config(PATH_TAG, PATH_DFLT), PATH_SEP, tdefs[tbl].name);

    retcode = stat(fullpath, &fstats);
    if (retcode && (errno != ENOENT))
        {
        fprintf(stderr, "stat(%s) failed.\n", fullpath);
        exit(-1);
        }
    if (S_ISREG(fstats.st_mode) && !force && *mode != 'r' )
        {
        sprintf(prompt, "Do you want to overwrite %s ?", fullpath);
        if (!yes_no(prompt))
            exit(0);
        }

    if (S_ISFIFO(fstats.st_mode))
        {
        retcode =
            open(fullpath, ((*mode == 'r')?O_RDONLY:O_WRONLY)|O_CREAT);
        f = fdopen(retcode, mode);
        }
    else{

#ifdef LINUX
      /* allow large files on Linux */
      /*use open to first to get the in fd and apply regular fdopen*/

	/*cheng: Betty mentioned about write mode problem here, added 066*/
      retcode =
		  open(fullpath, ((*mode == 'r')?O_RDONLY:O_WRONLY)|O_CREAT|O_LARGEFILE,0644);
        f = fdopen(retcode, mode);
#else
        f = fopen(fullpath, mode);
#endif

    }
    OPEN_CHECK(f, fullpath);
    if (header && columnar && tdefs[tbl].header != NULL)
        tdefs[tbl].header(f);

    return (f);
}
Beispiel #3
0
FILE     *
tbl_open(int tbl, char *mode)
{
    char      prompt[256];
    char      fullpath[256];
    #ifdef MYRIAD_NO_OUTPUT
    strcpy(fullpath, "/dev/null");
    #endif /* MYRIAD_NO_OUTPUT */
    FILE     *f;
    struct stat fstats;
    int      retcode;

    // DO NOT CREATE FILES FOR THE TABLES
    #ifndef MYRIAD_NO_OUTPUT
    if (*tdefs[tbl].name == PATH_SEP)
        strcpy(fullpath, tdefs[tbl].name);
    else
        sprintf(fullpath, "%s%c%s",
            env_config(PATH_TAG, PATH_DFLT), PATH_SEP, tdefs[tbl].name);
    #endif /* MYRIAD_NO_OUTPUT */
    retcode = stat(fullpath, &fstats);
    if (retcode) {
		if (errno != ENOENT) {
			fprintf(stderr, "stat(%s) failed.\n", fullpath);
			exit(-1);
		} else
			f = fopen(fullpath, mode);  // create and open the file
	} else {
		/* note this code asumes we are writing but tests if mode == r -jrg */
		if (S_ISREG(fstats.st_mode) && !force && *mode != 'r' ) {
			sprintf(prompt, "Do you want to overwrite %s ?", fullpath);
			if (!yes_no(prompt))
				exit(0);
			f = fopen(fullpath, mode);
		} else if (S_ISFIFO(fstats.st_mode))
			{
			retcode =
				open(fullpath, ((*mode == 'r')?O_RDONLY:O_WRONLY)|O_CREAT, 0664);
			f = fdopen(retcode, mode);
			}
		else
			f = fopen(fullpath, mode);
	}
    OPEN_CHECK(f, fullpath);

    return (f);
}
Beispiel #4
0
FILE *
print_prep(int table, int update)
{
  char upath[128];
  FILE *res;

  if (updates)
    {
      if (update > 0) /* updates */
        if ( insert_segments )
          {
            int this_segment;
            if(strcmp(tdefs[table].name,"orders.tbl"))
              this_segment=++insert_orders_segment;
            else 
              this_segment=++insert_lineitem_segment;
            sprintf(upath, "%s%c%s.u%d.%d", 
                    env_config(PATH_TAG, PATH_DFLT),
                    PATH_SEP, tdefs[table].name, update%10000,this_segment);
          }
        else
          {
            sprintf(upath, "%s%c%s.u%d",
                    env_config(PATH_TAG, PATH_DFLT),
                    PATH_SEP, tdefs[table].name, update);
          }
      else /* deletes */
        if ( delete_segments )
          {
            ++delete_segment;
            sprintf(upath, "%s%cdelete.u%d.%d",
                    env_config(PATH_TAG, PATH_DFLT), PATH_SEP, -update%10000,
                    delete_segment);
          }
        else
          {
            sprintf(upath, "%s%cdelete.%d",
                    env_config(PATH_TAG, PATH_DFLT), PATH_SEP, -update);
          }
      return(fopen(upath, "w"));
    }
  res = tbl_open(table, "w");
  OPEN_CHECK(res, tdefs[table].name);
  return(res);
}
Beispiel #5
0
FILE     *
tbl_open(int tbl, char *mode)
{
    /* char      prompt[256]; */
    char      fullpath[256];
    FILE     *f;
    struct stat fstats;
    int      retcode;


    if (*tdefs[tbl].name == PATH_SEP)
        strcpy(fullpath, tdefs[tbl].name);
    else
        sprintf(fullpath, "%s%c%s",
            env_config(PATH_TAG, PATH_DFLT), PATH_SEP, tdefs[tbl].name);

    retcode = stat(fullpath, &fstats);
    if (retcode && (errno != ENOENT))
        {
        fprintf(stderr, "stat(%s) failed.\n", fullpath);
        exit(-1);
        }
    /*if (S_ISREG(fstats.st_mode) && !force && *mode != 'r' )
        {
         sprintf(prompt, "Do you want to overwrite %s ?", fullpath);
        if (!yes_no(prompt))
            exit(0);
        } */

    if (S_ISFIFO(fstats.st_mode))
        {
        f = fopen(fullpath, mode);
        }
    else
        {
        retcode =
            open(fullpath, ((*mode == 'r')?O_RDONLY:O_WRONLY)|O_CREAT, 0664);
        f = fdopen(retcode, mode);
        }
    OPEN_CHECK(f, fullpath);
    if (header && columnar && tdefs[tbl].header != NULL)
        tdefs[tbl].header(f);

    return (f);
}
Beispiel #6
0
/*
 * store_state() -- store the data set configuration details so that
 * appropriate update sets can be generated
 */
int
store_state(long sf, long procs, long step)
{
    FILE *ufp;
    int i;
    char fname[256], seed[9];

    seed_name(seed, sf, procs, step);
    sprintf(fname, "%s%c%s",
        env_config(SEED_TAG, SEED_DFLT), PATH_SEP, seed);
    ufp = fopen(fname, "w");
    OPEN_CHECK(ufp, fname);

    for (i=0; i <= MAX_STREAM; i++)
        if (fprintf(ufp, "%ld\n ", Seed[i]) == EOF)
            return(1);

    fclose(ufp);

    return(0);
}
Beispiel #7
0
/*
* load a distribution from a flat file into the target structure;
* should be rewritten to allow multiple dists in a file
*/
void
read_dist(char *path, char *name, distribution *target)
{
FILE     *fp;
char      line[256],
         token[256],
        *c;
long      weight,
         count = 0,
         name_set = 0;

    if (d_path == NULL)
		{
		sprintf(line, "%s%c%s", 
			env_config(CONFIG_TAG, CONFIG_DFLT), PATH_SEP, path);
		fp = fopen(line, "r");
		OPEN_CHECK(fp, line);
		}
	else
		{
		fp = fopen(d_path, "r");
		OPEN_CHECK(fp, d_path);
		}
    while (fgets(line, sizeof(line), fp) != NULL)
        {
        if ((c = strchr(line, '\n')) != NULL)
            *c = '\0';
        if ((c = strchr(line, '#')) != NULL)
            *c = '\0';
        if (*line == '\0')
            continue;

        if (!name_set)
            {
            if (dsscasecmp(strtok(line, "\n\t "), "BEGIN"))
                continue;
            if (dsscasecmp(strtok(NULL, "\n\t "), name))
                continue;
            name_set = 1;
            continue;
            }
        else
            {
            if (!dssncasecmp(line, "END", 3))
                {
                fclose(fp);
                return;
                }
            }

        if (sscanf(line, "%[^|]|%ld", token, &weight) != 2)
            continue;

        if (!dsscasecmp(token, "count"))
            {
            target->count = weight;
            target->list =
                (set_member *)
                    malloc((size_t)(weight * sizeof(set_member)));
            MALLOC_CHECK(target->list);
            target->max = 0;
            continue;
            }
        target->list[count].text =
            (char *) malloc((size_t)(strlen(token) + 1));
        MALLOC_CHECK(target->list[count].text);
        strcpy(target->list[count].text, token);
        target->max += weight;
        target->list[count].weight = target->max;

        count += 1;
        } /* while fgets() */

    if (count != target->count)
        {
        fprintf(stderr, "Read error on dist '%s'\n", name);
        fclose(fp);
        exit(1);
        }
	target->permute = (long *)NULL;
    fclose(fp);
    return;
}
Beispiel #8
0
void
varsub(int qnum, int vnum, int flags)
{
    static char param[11][128];
    static FILE *lfp = NULL;
    char *ptr;
    int i = 0,
        size[10],
        tmp_date;

    if (vnum == 0)
    {
        if ((flags & DFLT) == 0)
        {
            switch(qnum)
            {
            case 1:
                sprintf(param[1], "%d", UnifInt((long)60,(long)120,(long)qnum));
                param[2][0] = '\0';
                break;
            case 2:
                sprintf(param[1], "%d",
                        UnifInt((long)P_SIZE_MIN, (long)P_SIZE_MAX, qnum));
                pick_str(&p_types_set, qnum, param[3]);
                ptr = param[3] + strlen(param[3]);
                while (*(ptr - 1) != ' ') ptr--;
                strcpy(param[2], ptr);
                pick_str(&regions, qnum, param[3]);
                param[4][0] = '\0';
                break;
            case 3:
                pick_str(&c_mseg_set, qnum, param[1]);
                /*
                 * pick a random offset within the month of march and add the
                 * appropriate magic numbers to position the output functions
                 * at the start of March '95
                 */
                tmp_date = UnifInt((long)0, (long)30, (long)qnum);
                strcpy(param[2], *(asc_date + tmp_date + 1155));
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[2]); i++);
                    sprintf(param[2],"%ld", julian(i + STARTDATE));
                }
                param[3][0] = '\0';
                break;
            case 4:
                tmp_date = UnifInt(1,58,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 5:
                pick_str(&regions, qnum, param[1]);
                tmp_date = UnifInt((long)93,(long)97,(long)qnum);
                if (oldtime) sprintf(param[2],"%ld", tmp_date);
                else sprintf(param[2], "19%d-01-01", tmp_date);
                param[3][0] = '\0';
                break;
            case 6:
                tmp_date = UnifInt(93,97,qnum);
                if (oldtime)
                    sprintf(param[1],"%ld001", tmp_date);
                else
                    sprintf(param[1], "19%d-01-01", tmp_date);
                sprintf(param[2], "0.0%d", UnifInt(2, 9, qnum));
                sprintf(param[3], "%d", UnifInt((long)24, (long)25, (long)qnum));
                param[4][0] = '\0';
                break;
            case 7:
                tmp_date = pick_str(&nations2, qnum, param[1]);
                while (pick_str(&nations2, qnum, param[2]) == tmp_date);
                param[3][0] = '\0';
                break;
            case 8:
                tmp_date = pick_str(&nations2, qnum, param[1]);
                tmp_date = nations.list[tmp_date].weight;
                strcpy(param[2], regions.list[tmp_date].text);
                pick_str(&p_types_set, qnum, param[3]);
                param[4][0] = '\0';
                break;
            case 9:
                pick_str(&colors, qnum, param[1]);
                param[2][0] = '\0';
                break;
            case 10:
                tmp_date = UnifInt(1,24,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 11:
                pick_str(&nations2, qnum, param[1]);
                sprintf(param[2], "%11.10f", Q11_FRACTION / flt_scale );
                param[3][0] = '\0';
                break;
            case 12:
                tmp_date = pick_str(&l_smode_set, qnum, param[1]);
                while (tmp_date == pick_str(&l_smode_set, qnum, param[2]));
                tmp_date = UnifInt(93,97,qnum);
                if (oldtime) sprintf(param[3],"%d", tmp_date*1000 + 1);
                else sprintf(param[3], "19%d-01-01", tmp_date);
                param[4][0] = '\0';
                break;
            case 13:
                sprintf(param[1], O_CLRK_FMT, O_CLRK_TAG,
                        UnifInt((long)1,
                                (long) MAX((scale * O_CLRK_SCL), O_CLRK_SCL),
                                (long)qnum));

                param[2][0] = '\0';
                break;
            case 14:
                tmp_date = UnifInt(1,60,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 15:
                tmp_date = UnifInt(1,58,qnum);
                sprintf(param[1],"19%02d-%02d-01",
                        93 + tmp_date/12, tmp_date%12 + 1);
                if (oldtime)
                {
                    for (i=0; strcmp(*(asc_date + i), param[1]); i++);
                    sprintf(param[1],"%ld", julian(i + STARTDATE));
                }
                param[2][0] = '\0';
                break;
            case 16:
                sprintf(param[1], "Brand#%d%d",
                        UnifInt(1, 5, qnum),
                        UnifInt(1, 5, qnum));
                pick_str(&p_types_set, qnum, param[2]);
                ptr = param[2] + strlen(param[2]);
                while (*(--ptr) != ' ');
                *ptr = '\0';
                i=0;
next:
                size[i] = UnifInt(1, 50, qnum);
                tmp_date = 0;
                while (tmp_date < i)
                    if (size[i] == size[tmp_date])
                        goto next;
                    else
                        tmp_date++;
                sprintf(param[i + 3], "%d", size[i]);
                if (++i <= TYPE_CNT)
                    goto next;
                param[i + 2][0] = '\0';
                break;
            case 17:
                sprintf(param[1], "Brand#%ld%ld",
                        UnifInt(1, 5, qnum),
                        UnifInt(1, 5, qnum));
                pick_str(&p_cntr_set, qnum, param[2]);
                param[3][0] = '\0';
                break;
            case 18:
            case 19:
                break;
            default:
                fprintf(stderr,
                        "No variable definitions available for query %d\n",
                        qnum);
            }
        }

        if (flags & LOG)
        {
            if (lfp == NULL)
            {
                lfp = fopen(lfile, "a");
                OPEN_CHECK(lfp, lfile);
            }
            fprintf(lfp, "%d", qnum);
            for (i=1; i <= 10; i++)
                if (flags & DFLT)
                {
                    if (defaults[i - 1] == NULL)
                        break;
                    else
                        fprintf(lfp, "\t%s", defaults[i - 1]);
                }
                else
                {
                    if (param[i][0] == '\0')
                        break;
                    else
                        fprintf(lfp, "\t%s", param[i]);
                }
            fprintf(lfp, "\n");
        }
    }
    else
    {
        if (flags & DFLT)
        {
            /* to allow -d to work at all scale factors */
            if (qnum == 11 && vnum == 2)
                fprintf(ofp, "%11.10f", Q11_FRACTION/flt_scale);
            else if (defaults[qnum - 1][vnum - 1])
                fprintf(ofp, "%s", defaults[qnum - 1][vnum - 1]);
            else
                fprintf(stderr,
                        "Bad default request (q: %d, p: %d)\n",
                        qnum, vnum);
        }
        else
        {
            if (param[vnum])
                fprintf(ofp, "%s", param[vnum]);
            else
                fprintf(stderr, "Bad parameter request (q: %d, p: %d)\n",
                        qnum, vnum);
        }
    }
    return;
}
Beispiel #9
0
void
varsub(int qnum, int vnum, int flags)
{
    static char param[11][128];
    static char formats[23][128];
    static FILE *lfp = NULL;
    static int bInit = 0;
    long *lptr;
    char *ptr;
    int i = 0;
    DSS_HUGE tmp_date, tmp1, tmp2;
	
    if (!bInit)
    {
        sprintf(formats[4], "19%s-%s-01", HUGE_DATE_FORMAT, HUGE_DATE_FORMAT);
        sprintf(formats[5], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[6], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[7], "0.%s", HUGE_DATE_FORMAT); /* used by q6 */
        sprintf(formats[10], "19%s-%s-01", HUGE_DATE_FORMAT, HUGE_DATE_FORMAT);
        sprintf(formats[12], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[14], "19%s-01-01", HUGE_DATE_FORMAT);
        sprintf(formats[15], "19%s-01-01", HUGE_DATE_FORMAT);
	sprintf(formats[16], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
	sprintf(formats[17], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
	sprintf(formats[19], "Brand#%s%s", HUGE_FORMAT, HUGE_FORMAT);
        sprintf(formats[20], "19%s-01-01", HUGE_DATE_FORMAT);
        bInit = 1;
    }

    if (vnum == 0)
    {
		if ((flags & DFLT) == 0)
		{
			switch(qnum)
			{
			case 1:
				sprintf(param[1], HUGE_FORMAT, UnifInt((DSS_HUGE)60,(DSS_HUGE)120,qnum));
				param[2][0] = '\0';
				break;
			case 2:
				sprintf(param[1], HUGE_FORMAT,
					UnifInt((DSS_HUGE)P_SIZE_MIN, (DSS_HUGE)P_SIZE_MAX, qnum));
				pick_str(&p_types_set, qnum, param[3]);
				ptr = param[3] + strlen(param[3]);
				while (*(ptr - 1) != ' ') ptr--;
				strcpy(param[2], ptr);
				pick_str(&regions, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 3:
				pick_str(&c_mseg_set, qnum, param[1]);
				/*
				* pick a random offset within the month of march and add the
				* appropriate magic numbers to position the output functions 
				* at the start of March '95
				*/
            RANDOM(tmp_date, 0, 30, qnum);
				strcpy(param[2], *(asc_date + tmp_date + 1155));
				param[3][0] = '\0';
				break;
			case 4:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)58,qnum);
				sprintf(param[1],formats[4],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 5:
				pick_str(&regions, qnum, param[1]);
				tmp_date = UnifInt((DSS_HUGE)93, (DSS_HUGE)97,qnum);
				sprintf(param[2], formats[5], tmp_date);
				param[3][0] = '\0';
				break;
			case 6:
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[1], formats[6], tmp_date);
				sprintf(param[2], formats[7], 
                                    UnifInt((DSS_HUGE)2, (DSS_HUGE)9, qnum));
				sprintf(param[3], HUGE_FORMAT, UnifInt((DSS_HUGE)24, (DSS_HUGE)25, qnum));
				param[4][0] = '\0';
				break;
			case 7:
				tmp_date = pick_str(&nations2, qnum, param[1]);
				while (pick_str(&nations2, qnum, param[2]) == tmp_date);
				param[3][0] = '\0';
				break;
			case 8:
				tmp_date = pick_str(&nations2, qnum, param[1]);
				tmp_date = nations.list[tmp_date].weight;
				strcpy(param[2], regions.list[tmp_date].text);
				pick_str(&p_types_set, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 9:
				pick_str(&colors, qnum, param[1]);
				param[2][0] = '\0';
				break;
			case 10:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)24,qnum);
				sprintf(param[1],formats[10],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 11:
				pick_str(&nations2, qnum, param[1]);
				sprintf(param[2], "%11.10f", Q11_FRACTION / flt_scale );
				param[3][0] = '\0';
				break;
			case 12:
				tmp_date = pick_str(&l_smode_set, qnum, param[1]);
				while (tmp_date == pick_str(&l_smode_set, qnum, param[2]));
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[3], formats[12], tmp_date);
				param[4][0] = '\0';
				break;
			case 13:
				pick_str(&q13a, qnum, param[1]);
				pick_str(&q13b, qnum, param[2]);
				param[3][0] = '\0';
				break;
			case 14:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)60,qnum);
				sprintf(param[1],formats[14],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 15:
				tmp_date = UnifInt((DSS_HUGE)1,(DSS_HUGE)58,qnum);
				sprintf(param[1],formats[15],
					93 + tmp_date/12, tmp_date%12 + 1);
				param[2][0] = '\0';
				break;
			case 16:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[16], tmp1, tmp2);
				pick_str(&p_types_set, qnum, param[2]);
				ptr = param[2] + strlen(param[2]);
				while (*(--ptr) != ' ');
				*ptr = '\0';
				lptr = &sizes[0];
				for (i=3; i <= MAX_PARAM; i++)
				{
					sprintf(param[i], "%ld", *permute(lptr,50,qnum) + 1);
					lptr = (long *)NULL;
				}
					break;
			case 17:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[17], tmp1, tmp2);
				pick_str(&p_cntr_set, qnum, param[2]);
				param[3][0] = '\0';
				break;
			case 18:
				sprintf(param[1], HUGE_FORMAT, UnifInt((DSS_HUGE)312, (DSS_HUGE)315, qnum));
				param[2][0] = '\0';
				break;
			case 19:
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[1], formats[19], tmp1, tmp2);
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[2], formats[19], tmp1, tmp2);
				tmp1 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum); 
				tmp2 = UnifInt((DSS_HUGE)1, (DSS_HUGE)5, qnum);
				sprintf(param[3], formats[19], tmp1, tmp2);
				sprintf(param[4], HUGE_FORMAT, UnifInt((DSS_HUGE)1, (DSS_HUGE)10, qnum));
				sprintf(param[5], HUGE_FORMAT, UnifInt((DSS_HUGE)10, (DSS_HUGE)20, qnum));
				sprintf(param[6], HUGE_FORMAT, UnifInt((DSS_HUGE)20, (DSS_HUGE)30, qnum));
				param[7][0] = '\0';
				break;
			case 20:
				pick_str(&colors, qnum, param[1]);
				tmp_date = UnifInt((DSS_HUGE)93,(DSS_HUGE)97,qnum);
				sprintf(param[2], formats[20], tmp_date);
				pick_str(&nations2, qnum, param[3]);
				param[4][0] = '\0';
				break;
			case 21:
				pick_str(&nations2, qnum, param[1]);
				param[2][0] = '\0';
				break;
			case 22:
				lptr = &ccode[0];
				for (i=0; i <= 7; i++)
				{
					sprintf(param[i+1], "%ld", 10 + *permute(lptr,25, qnum));
					lptr = (long *)NULL;
				}
				param[8][0] = '\0';
				break;
			case 23:
			case 24:
                break;
			default:
				fprintf(stderr, 
					"No variable definitions available for query %d\n", 
                    qnum);
				return;
        }
    }
	
    if (flags & LOG)
	{
        if (lfp == NULL)
		{
            lfp = fopen(lfile, "a");
            OPEN_CHECK(lfp, lfile);
		}
        fprintf(lfp, "%d", qnum);
        for (i=1; i <= 10; i++)
            if (flags & DFLT)
			{
				if (defaults[qnum - 1][i - 1] == NULL)
					break;
				else
					fprintf(lfp, "\t%s", defaults[qnum - 1][i - 1]);
			}
            else
			{
				if (param[i][0] == '\0')
					break;
				else
					fprintf(lfp, "\t%s", param[i]);
			}
			fprintf(lfp, "\n");
	}
    }
    else
	{
        if (flags & DFLT)   
		{
            /* to allow -d to work at all scale factors */
            if (qnum == 11 && vnum == 2)
                fprintf(ofp, "%11.10f", Q11_FRACTION/flt_scale);
            else
                if (defaults[qnum - 1][vnum - 1])
                    fprintf(ofp, "%s", defaults[qnum - 1][vnum - 1]);
                else
					fprintf(stderr, 
					"Bad default request (q: %d, p: %d)\n",
					qnum, vnum);
		}
        else        
		{
            if (param[vnum] && vnum <= MAX_PARAM)
                fprintf(ofp, "%s", param[vnum]);
            else
				fprintf(stderr, "Bad parameter request (q: %d, p: %d)\n",
				qnum, vnum);
		}
	}
    return;
}
Beispiel #10
0
main(int ac, char **av)
{
    int i;
    FILE *ifp;
    char line[LINE_SIZE];

    prog = av[0];
    flt_scale = (double)1.0;
    flags = 0;
	d_path = NULL;
    process_options(ac, av);
    if (flags & VERBOSE)
        fprintf(ofp, 
	    "-- TPC %s Parameter Substitution (Version %d.%d.%d%s)\n",
            NAME, VERSION, RELEASE, MODIFICATION, PATCH);

    setup();

    if (!(flags & DFLT))        /* perturb the RNG */
	    {
	    if (!(flags & SEED))
                rndm = (long)((unsigned)time(NULL) * DSS_PROC);
		if (rndm < 0)
			rndm += 2147483647;
		Seed[0].value = rndm;
		for (i=1; i <= QUERIES_PER_SET; i++)
			{
			Seed[0].value = NextRand(Seed[0].value);
			Seed[i].value = Seed[0].value;
			}
		printf("-- using %ld as a seed to the RNG\n", rndm);
		}
    else
        printf("-- using default substitutions\n");
    
    if (flags & INIT)           /* init stream with ifile */
        {
        ifp = fopen(ifile, "r");
	OPEN_CHECK(ifp, ifile);
        while (fgets(line, LINE_SIZE, ifp) != NULL)
            fprintf(stdout, "%s", line);
        }

    if (snum >= 0)
        if (optind < ac)
            for (i=optind; i < ac; i++)
                {
                char qname[10];
                sprintf(qname, "%d", SEQUENCE(snum, atoi(av[i])));
                qsub(qname, flags);
                }
        else
            for (i=1; i <= QUERIES_PER_SET; i++)
                {
                char qname[10];
                sprintf(qname, "%d", SEQUENCE(snum, i));
                qsub(qname, flags);
                }
    else
        if (optind < ac)
            for (i=optind; i < ac; i++)
                qsub(av[i], flags);   
        else
            for (i=1; i <= QUERIES_PER_SET; i++)
                {
                char qname[10];
                sprintf(qname, "%d", i);
                qsub(qname, flags);
                }
    
    if (flags & TERMINATE)      /* terminate stream with tfile */
        {
        ifp = fopen(tfile, "r");
        if (ifp == NULL)
	OPEN_CHECK(ifp, tfile);
        while (fgets(line, LINE_SIZE, ifp) != NULL)
            fprintf(stdout, "%s", line);
        }

    return(0);
}
Beispiel #11
0
/*
 * FUNCTION qsub(char *qtag, int flags)
 *
 * based on the settings of flags, and the template file $QDIR/qtag.sql
 * make the following substitutions to turn a query template into EQT
 *
 *  String      Converted to            Based on
 *  ======      ============            ===========
 *  first line  database <db_name>;      -n from command line
 *  second line set explain on;         -x from command line
 *   :<number>  parameter <number>
 *  :k          set number
 *  :o          output to outpath/qnum.snum    
 *                                      -o from command line, SET_OUTPUT
 *  :s          stream number
 *  :b          BEGIN WORK;             -a from command line, START_TRAN
 *  :e          COMMIT WORK;            -a from command line, END_TRAN
 *  :q          query number
 *  :n<number>                          sets rowcount to be returned
 */
void
qsub(char *qtag, int flags)
{
static char *line = NULL,
    *qpath = NULL;
FILE *qfp;
char *cptr,
    *mark,
    *qroot = NULL;

    qnum = atoi(qtag);
    if (line == NULL)
        {
        line = malloc(BUFSIZ);
        qpath = malloc(BUFSIZ);
        MALLOC_CHECK(line);
        MALLOC_CHECK(qpath);
        }

    qroot = env_config(QDIR_TAG, QDIR_DFLT);
    sprintf(qpath, "%s%c%s.sql", 
		qroot, PATH_SEP, qtag);
    qfp = fopen(qpath, "r");
    OPEN_CHECK(qfp, qpath);

    rowcnt = rowcnt_dflt[qnum];
    varsub(qnum, 0, flags); /* set the variables */
    if (flags & DFLT_NUM)
        fprintf(ofp, SET_ROWCOUNT, rowcnt);
    while (fgets(line, BUFSIZ, qfp) != NULL)
        {
        if (!(flags & COMMENT))
            strip_comments(line);
        mark = line;
        while ((cptr = strchr(mark, VTAG)) != NULL)
            {
            *cptr = '\0';
             cptr++;
            fprintf(ofp,"%s", mark);
            switch(*cptr)
                {
                case 'b':
                case 'B':
                    if (!(flags & ANSI))
                        fprintf(ofp,"%s\n", START_TRAN);
                    cptr++;
                    break;
                case 'c':
                case 'C':
                    if (flags & DBASE)
                        fprintf(ofp, SET_DBASE, db_name);
                    cptr++;
                    break;
                case 'e':
                case 'E':
                    if (!(flags & ANSI))
                        fprintf(ofp,"%s\n", END_TRAN);
                    cptr++;
                    break;
                case 'n':
                case 'N':
                    if (!(flags & DFLT_NUM))
                        {
                        rowcnt=atoi(++cptr);
                        while (isdigit(*cptr) || *cptr == ' ') cptr++;
                        fprintf(ofp, SET_ROWCOUNT, rowcnt);
                        }
                    continue;
                case 'o':
                case 'O':
                    if (flags & OUTPUT)
                        fprintf(ofp,"%s '%s/%s.%d'", SET_OUTPUT, osuff, 
                            qtag, (snum < 0)?0:snum);
                    cptr++;
                    break;
                case 'q':
                case 'Q':
                    fprintf(ofp,"%s", qtag);
                    cptr++;
                    break;
                case 's':
                case 'S':
                    fprintf(ofp,"%d", (snum < 0)?0:snum);
                    cptr++;
                    break;
                case 'X':
                case 'x':
                    if (flags & EXPLAIN)
                        fprintf(ofp, "%s\n", GEN_QUERY_PLAN);
                    cptr++;
                    break;
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
                    varsub(qnum, atoi(cptr), flags & DFLT);
                    while (isdigit(*++cptr));
                    break;
                default:
		    fprintf(stderr, "-- unknown flag '%c%c' ignored\n", 
                        VTAG, *cptr);
		    cptr++;
		    break;
                }
            mark=cptr;
            }
        fprintf(ofp,"%s", mark);
        }
    fclose(qfp);
    fflush(stdout);
    return;
}