void mupip_cvtgbl(void) { unsigned short fn_len, len; char fn[256]; unsigned char buff[7]; uint4 begin, end; int i, format; uint4 cli_status; gtm_int64_t begin_i8, end_i8; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; /* If an online rollback occurs when we are loading up the database with new globals and takes us back to a prior logical * state, then we should not continue with the load. The reason being that the application might rely on certain globals to * be present before loading others and that property could be voilated if online rollback takes the database back to a * completely different logical state. Set the variable issue_DBROLLEDBACK_anyways that forces the restart logic to issue * an rts_error the first time it detects an online rollback (that takes the database to a prior logical state). */ TREF(issue_DBROLLEDBACK_anyways) = TRUE; is_replicator = TRUE; skip_dbtriggers = TRUE; fn_len = SIZEOF(fn); if (cli_present("STDIN")) { /* User wants to load from standard input */ assert(SIZEOF(fn) > sys_input.len); memcpy(fn, sys_input.addr, sys_input.len); fn_len = sys_input.len; assert(-1 != fcntl(fileno(stdin), F_GETFD)); /* Check if both file name and -STDIN specified. */ if (cli_get_str("FILE", fn, &fn_len)) mupip_exit(ERR_MUPCLIERR); } else if (!cli_get_str("FILE", fn, &fn_len)) /* User wants to read from a file. */ mupip_exit(ERR_MUPCLIERR); /* Neither -STDIN nor file name specified. */ if (mupip_error_occurred) exit(-1); file_input_init(fn, fn_len); mu_outofband_setup(); if ((cli_status = cli_present("BEGIN")) == CLI_PRESENT) { if (!cli_get_int64("BEGIN", &begin_i8)) mupip_exit(ERR_MUPCLIERR); if (1 > begin_i8) mupip_exit(ERR_LOADBGSZ); else if (MAXUINT4 < begin_i8) mupip_exit(ERR_LOADBGSZ2); begin = (uint4) begin_i8; } else { begin = 1; begin_i8 = 1; } if ((cli_status = cli_present("END")) == CLI_PRESENT) { if (!cli_get_int64("END", &end_i8)) mupip_exit(ERR_MUPCLIERR); if (1 > end_i8) mupip_exit(ERR_LOADEDSZ); else if (MAXUINT4 < end_i8) mupip_exit(ERR_LOADEDSZ2); if (end_i8 < begin_i8) mupip_exit(ERR_LOADEDBG); end = (uint4) end_i8; } else end = MAXUINT4; if ((cli_status = cli_present("FILL_FACTOR")) == CLI_PRESENT) { assert(SIZEOF(gv_fillfactor) == SIZEOF(int4)); if (!cli_get_int("FILL_FACTOR", (int4 *)&gv_fillfactor)) gv_fillfactor = MAX_FILLFACTOR; if (gv_fillfactor < MIN_FILLFACTOR) gv_fillfactor = MIN_FILLFACTOR; else if (gv_fillfactor > MAX_FILLFACTOR) gv_fillfactor = MAX_FILLFACTOR; } else gv_fillfactor = MAX_FILLFACTOR; if (cli_present("FORMAT") == CLI_PRESENT) { len = SIZEOF("FORMAT"); if (!cli_get_str("FORMAT", (char *)buff, &len)) go_load(begin, end); else { lower_to_upper(buff, buff, len); if (!memcmp(buff, "ZWR", len)) go_load(begin, end); else if (!memcmp(buff, "BINARY", len)) bin_load(begin, end); else if (!memcmp(buff, "GO", len)) go_load(begin, end); else if (!memcmp(buff, "GOQ", len)) goq_load(); else { util_out_print("Illegal format for load",TRUE); mupip_exit(ERR_MUPCLIERR); } } } else go_load(begin, end); if (mupip_error_occurred) { util_out_print("Error occurred during loading",TRUE); exit(-1); } else mupip_exit(SS_NORMAL); }
void mupip_cvtgbl(void) { char fn[MAX_FN_LEN + 1], *line1_ptr, *line3_ptr; gtm_int64_t begin_i8, end_i8; int dos, i, file_format, line1_len, line3_len, utf8; uint4 begin, cli_status, end, max_rec_size; unsigned char buff[MAX_ONERROR_VALUE_LEN]; unsigned short fn_len, len; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; assert(MAX_ONERROR_VALUE_LEN > MAX_FORMAT_VALUE_LEN); /* so the buff[] definition above is good for FORMAT and ONERROR */ /* If an online rollback occurs when we are loading up the database with new globals and takes us back to a prior logical * state, then we should not continue with the load. The reason being that the application might rely on certain globals to * be present before loading others and that property could be violated if online rollback takes the database back to a * completely different logical state. Set the variable issue_DBROLLEDBACK_anyways that forces the restart logic to issue * an rts_error the first time it detects an online rollback (that takes the database to a prior logical state). */ TREF(issue_DBROLLEDBACK_anyways) = TRUE; is_replicator = TRUE; skip_dbtriggers = TRUE; fn_len = SIZEOF(fn); if (cli_present("STDIN")) { /* User wants to load from standard input */ assert(SIZEOF(fn) > sys_input.len); memcpy(fn, sys_input.addr, sys_input.len); fn_len = sys_input.len; assert(-1 != fcntl(fileno(stdin), F_GETFD)); /* Check if both file name and -STDIN specified. */ if (cli_get_str("FILE", fn, &fn_len)) mupip_exit(ERR_MUPCLIERR); } else if (!cli_get_str("FILE", fn, &fn_len)) /* User wants to read from a file. */ mupip_exit(ERR_MUPCLIERR); /* Neither -STDIN nor file name specified. */ file_input_init(fn, fn_len, IOP_EOL); if (mupip_error_occurred) EXIT(-1); mu_outofband_setup(); if ((cli_status = cli_present("BEGIN")) == CLI_PRESENT) { if (!cli_get_int64("BEGIN", &begin_i8)) mupip_exit(ERR_MUPCLIERR); if (1 > begin_i8) mupip_exit(ERR_LOADBGSZ); else if (MAXUINT4 < begin_i8) mupip_exit(ERR_LOADBGSZ2); begin = (uint4) begin_i8; } else { begin = 1; begin_i8 = 1; } if ((cli_status = cli_present("END")) == CLI_PRESENT) { if (!cli_get_int64("END", &end_i8)) mupip_exit(ERR_MUPCLIERR); if (1 > end_i8) mupip_exit(ERR_LOADEDSZ); else if (MAXUINT4 < end_i8) mupip_exit(ERR_LOADEDSZ2); if (end_i8 < begin_i8) mupip_exit(ERR_LOADEDBG); end = (uint4) end_i8; } else end = MAXUINT4; if ((cli_status = cli_present("FILL_FACTOR")) == CLI_PRESENT) { assert(SIZEOF(gv_fillfactor) == SIZEOF(int4)); if (!cli_get_int("FILL_FACTOR", (int4 *)&gv_fillfactor)) gv_fillfactor = MAX_FILLFACTOR; if (gv_fillfactor < MIN_FILLFACTOR) gv_fillfactor = MIN_FILLFACTOR; else if (gv_fillfactor > MAX_FILLFACTOR) gv_fillfactor = MAX_FILLFACTOR; } else gv_fillfactor = MAX_FILLFACTOR; if (cli_present("ONERROR") == CLI_PRESENT) { len = SIZEOF(buff); if (!cli_get_str("ONERROR", (char *)buff, &len)) { assert(FALSE); onerror = ONERROR_PROCEED; } else { lower_to_upper(buff, buff, len); if (!memcmp(buff, "STOP", len)) onerror = ONERROR_STOP; else if (!memcmp(buff, "PROCEED", len)) onerror = ONERROR_PROCEED; else if (!memcmp(buff, "INTERACTIVE", len)) { if (isatty(0)) /*if stdin is a terminal*/ onerror = ONERROR_INTERACTIVE; else onerror = ONERROR_STOP; } else { util_out_print("Illegal ONERROR parameter for load",TRUE); mupip_exit(ERR_MUPCLIERR); } } } else onerror = ONERROR_PROCEED; /* Default: Proceed on error */ file_format = get_load_format(&line1_ptr, &line3_ptr, &line1_len, &line3_len, &max_rec_size, &utf8, &dos); /* from header */ if (MU_FMT_GOQ == file_format) mupip_exit(ERR_LDBINFMT); if (BADZCHSET == utf8) mupip_exit(ERR_MUNOFINISH); if (cli_present("FORMAT") == CLI_PRESENT) { /* If the command speficies a format see if it matches the label */ len = SIZEOF(buff); if (!cli_get_str("FORMAT", (char *)buff, &len)) go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size, file_format, utf8, dos); else { lower_to_upper(buff, buff, len); if (!memcmp(buff, "ZWR", len)) { /* If the label did not determine a format let them specify ZWR and they can sort out the result */ if ((MU_FMT_ZWR == file_format) || (MU_FMT_UNRECOG == file_format)) go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size, MU_FMT_ZWR, utf8, dos); else mupip_exit(ERR_LDBINFMT); } else if (!memcmp(buff, "BINARY", len)) { if (MU_FMT_BINARY == file_format) bin_load(begin, end, line1_ptr, line1_len); else mupip_exit(ERR_LDBINFMT); } else if (!memcmp(buff, "GO", len)) { /* If the label did not determine a format let them specify GO and they can sort out the result */ if ((MU_FMT_GO == file_format) || (MU_FMT_UNRECOG == file_format)) go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size, MU_FMT_GO, utf8, dos); else mupip_exit(ERR_LDBINFMT); } else if (!memcmp(buff, "GOQ", len)) { /* get_load_format doesn't recognize GOQ labels' */ if (MU_FMT_UNRECOG == file_format) goq_load(); else mupip_exit(ERR_LDBINFMT); } else { util_out_print("Illegal file format for load",TRUE); mupip_exit(ERR_MUPCLIERR); } } } else { if (MU_FMT_BINARY == file_format) bin_load(begin, end, line1_ptr, line1_len); else if ((MU_FMT_ZWR == file_format) || (MU_FMT_GO == file_format)) go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size, file_format, utf8, dos); else { assert(MU_FMT_UNRECOG == file_format); mupip_exit(ERR_LDBINFMT); } } mupip_exit(mupip_error_occurred ? ERR_MUNOFINISH : SS_NORMAL); }