From: Adriano d. S. F. <asf...@us...> - 2008-06-18 01:46:22
|
Build Version : T2.5.0.20402 Firebird 2.5 Alpha 1 (writeBuildNum.sh,v 1.20563 2008/06/18 01:43:39 asfernandes ) Update of /cvsroot/firebird/firebird2/src/gpre In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv31030/src/gpre Modified Files: Tag: B2_5_ExtEngines ada.cpp c_cxx.cpp cmd.cpp cme.cpp cmp.cpp cob.cpp exp.cpp fbrmclib.cpp ftn.cpp gpre.cpp gpre_meta.epp par.cpp pas.cpp rmc.cpp sqe.cpp sql.cpp Log Message: Sync with HEAD Index: ada.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/ada.cpp,v retrieving revision 1.52 retrieving revision 1.52.2.1 diff -b -U3 -r1.52 -r1.52.2.1 --- ada.cpp 16 Jan 2008 07:07:37 -0000 1.52 +++ ada.cpp 18 Jun 2008 01:43:29 -0000 1.52.2.1 @@ -2781,7 +2781,7 @@ "isc_%d\t: firebird.blob_handle;\t-- blob handle --", blob->blb_ident); SSHORT blob_subtype = blob->blb_const_to_type; - if (!(blob_subtype)) { + if (!blob_subtype) { const ref* reference = blob->blb_reference; if (reference) { const gpre_fld* field = reference->ref_field; @@ -3687,7 +3687,7 @@ trname = "gds_trans"; return trname; } - else + return (request) ? request->req_trans : "gds_trans"; } Index: c_cxx.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/c_cxx.cpp,v retrieving revision 1.69 retrieving revision 1.69.2.1 diff -b -U3 -r1.69 -r1.69.2.1 --- c_cxx.cpp 17 Feb 2008 15:47:43 -0000 1.69 +++ c_cxx.cpp 18 Jun 2008 01:43:30 -0000 1.69.2.1 @@ -587,9 +587,7 @@ else value = reference->ref_value; - if (!slice_flag && - reference->ref_value && - (reference->ref_flags & REF_array_elem)) + if (!slice_flag && reference->ref_value && (reference->ref_flags & REF_array_elem)) { field = field->fld_array; } @@ -615,8 +613,7 @@ fprintf(gpreGlob.out_file, "isc_vtof (%s, %s, %d);", value, variable, field->fld_length); } - else if (!reference->ref_master - || (reference->ref_flags & REF_literal)) + else if (!reference->ref_master || (reference->ref_flags & REF_literal)) { fprintf(gpreGlob.out_file, "%s = %s;", variable, value); } @@ -2497,8 +2494,7 @@ PAT args; args.pat_blob = blob; args.pat_vector1 = status_vector(action); - args.pat_condition = !(action->act_error - || (action->act_flags & ACT_sql)); + args.pat_condition = !(action->act_error || (action->act_flags & ACT_sql)); args.pat_ident1 = blob->blb_len_ident; args.pat_ident2 = blob->blb_buff_ident; args.pat_string1 = global_status_name; @@ -2682,8 +2678,7 @@ PAT args; args.pat_blob = blob; args.pat_vector1 = status_vector(action); - args.pat_condition = !(action->act_error - || (action->act_flags & ACT_sql)); + args.pat_condition = !(action->act_error || (action->act_flags & ACT_sql)); args.pat_ident1 = blob->blb_len_ident; args.pat_ident2 = blob->blb_buff_ident; args.pat_string1 = global_status_name; @@ -3319,8 +3314,7 @@ { gpre_fld* field = reference->ref_field; if (field->fld_flags & FLD_blob) - printa(column, "%s = isc_blob_null;", - gen_name(name, reference, true)); + printa(column, "%s = isc_blob_null;", gen_name(name, reference, true)); } } Index: cmd.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/cmd.cpp,v retrieving revision 1.42 retrieving revision 1.42.2.1 diff -b -U3 -r1.42 -r1.42.2.1 --- cmd.cpp 2 Feb 2008 16:57:11 -0000 1.42 +++ cmd.cpp 18 Jun 2008 01:43:31 -0000 1.42.2.1 @@ -1839,7 +1839,7 @@ return false; } - if (!(select->rse_boolean)) { + if (!select->rse_boolean) { CPR_error("Invalid view WITH CHECK OPTION - no WHERE clause"); return false; } @@ -2139,7 +2139,7 @@ static void grant_revoke_privileges( gpre_req* request, const act* action) { - TEXT privileges[5]; + TEXT privileges[7]; TEXT* p = privileges; const prv* priv_block = (PRV) action->act_object; @@ -2182,7 +2182,7 @@ if ((priv_block->prv_privileges & PRV_grant_option) && ((action->act_type == ACT_dyn_grant) || - (!(request->req_database->dbb_flags & DBB_v3)))) + !(request->req_database->dbb_flags & DBB_v3))) { put_numeric(request, isc_dyn_grant_options, 1); } @@ -2220,7 +2220,7 @@ if ((priv_block->prv_privileges & PRV_grant_option) && ((action->act_type == ACT_dyn_grant) || - (!(request->req_database->dbb_flags & DBB_v3)))) + !(request->req_database->dbb_flags & DBB_v3))) { put_numeric(request, isc_dyn_grant_options, 1); } @@ -2242,7 +2242,7 @@ if ((priv_block->prv_privileges & PRV_grant_option) && ((action->act_type == ACT_dyn_grant) || - (!(request->req_database->dbb_flags & DBB_v3)))) + !(request->req_database->dbb_flags & DBB_v3))) { put_numeric(request, isc_dyn_grant_options, 1); } Index: cme.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/cme.cpp,v retrieving revision 1.43.2.1 retrieving revision 1.43.2.2 diff -b -U3 -r1.43.2.1 -r1.43.2.2 --- cme.cpp 17 Mar 2008 01:07:58 -0000 1.43.2.1 +++ cme.cpp 18 Jun 2008 01:43:31 -0000 1.43.2.2 @@ -257,8 +257,7 @@ return; case nod_agg_count: - if ((node->nod_arg[0]) && - !(request->req_database->dbb_flags & DBB_v3)) + if (node->nod_arg[0] && !(request->req_database->dbb_flags & DBB_v3)) { if (node->nod_arg[1]) request->add_byte(blr_agg_count_distinct); @@ -316,8 +315,7 @@ // case nod_agg_total: - if ((node->nod_arg[1]) && - !(request->req_database->dbb_flags & DBB_v3)) + if (node->nod_arg[1] && !(request->req_database->dbb_flags & DBB_v3)) { request->add_byte(blr_agg_total_distinct); } @@ -327,8 +325,7 @@ return; case nod_agg_average: - if ((node->nod_arg[1]) && - !(request->req_database->dbb_flags & DBB_v3)) + if (node->nod_arg[1] && !(request->req_database->dbb_flags & DBB_v3)) { request->add_byte(blr_agg_average_distinct); } @@ -564,7 +561,7 @@ reference = (ref*) node->nod_arg[0]; if (!(tmp_field = reference->ref_field)) CPR_error("CME_get_dtype: node type not supported"); - if (!(tmp_field->fld_dtype) || !(tmp_field->fld_length)) + if (!tmp_field->fld_dtype || !tmp_field->fld_length) PAR_error("Inappropriate self-reference of field"); assign_dtype(f, tmp_field); @@ -1162,8 +1159,7 @@ { if (gpreGlob.sw_ids) { - if ((context->ctx_alias) && - !(request->req_database->dbb_flags & DBB_v3)) + if (context->ctx_alias && !(request->req_database->dbb_flags & DBB_v3)) { request->add_byte(blr_rid2); } @@ -1175,8 +1171,7 @@ } else { - if ((context->ctx_alias) && - !(request->req_database->dbb_flags & DBB_v3)) + if (context->ctx_alias && !(request->req_database->dbb_flags & DBB_v3)) { request->add_byte(blr_relation2); } @@ -1185,8 +1180,7 @@ CMP_stuff_symbol(request, relation->rel_symbol); } - if ((context->ctx_alias) && - !(request->req_database->dbb_flags & DBB_v3)) + if (context->ctx_alias && !(request->req_database->dbb_flags & DBB_v3)) { request->add_cstring(context->ctx_alias); } @@ -2396,7 +2390,7 @@ if (field.fld_dtype == dtype_blob) { // When there was already an other data type, raise immediate error - if ((! all_blob) || (! all_same_sub_type)) { + if (!all_blob || !all_same_sub_type) { CPR_error("Incompatible data types"); return; } Index: cmp.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/cmp.cpp,v retrieving revision 1.35.10.1 retrieving revision 1.35.10.2 diff -b -U3 -r1.35.10.1 -r1.35.10.2 --- cmp.cpp 17 Mar 2008 01:07:58 -0000 1.35.10.1 +++ cmp.cpp 18 Jun 2008 01:43:32 -0000 1.35.10.2 @@ -93,7 +93,7 @@ void CMP_check( gpre_req* request, SSHORT min_reqd) { int length = request->req_blr - request->req_base; - if (!(min_reqd) && (length < request->req_length - 100)) + if (!min_reqd && (length < request->req_length - 100)) return; const int n = ((length + min_reqd + 100) > request->req_length * 2) ? Index: cob.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/cob.cpp,v retrieving revision 1.65 retrieving revision 1.65.2.1 diff -b -U3 -r1.65 -r1.65.2.1 --- cob.cpp 16 Jan 2008 07:07:37 -0000 1.65 +++ cob.cpp 18 Jun 2008 01:43:32 -0000 1.65.2.1 @@ -684,7 +684,7 @@ else single_quote = false; } - if (!open_quote && (*p == ',')) + if (!open_quote && *p == ',') break; } /* if p == s, this is a call with no commas. back up to a blank */ @@ -703,7 +703,7 @@ else single_quote = false; } - if (!open_quote && (*p == ' ')) + if (!open_quote && *p == ' ') break; } q--; @@ -730,7 +730,7 @@ else single_quote = false; } - if (!open_quote && (*p == ' ')) + if (!open_quote && *p == ' ') break; } q--; @@ -1491,10 +1491,11 @@ // If blobs are present, zero out all of the blob handles. After this // point, the handles are the user's responsibility - if (action->act_request-> - req_flags & (REQ_sql_blob_open | REQ_sql_blob_create)) + if (action->act_request->req_flags & (REQ_sql_blob_open | REQ_sql_blob_create)) + { printa(names[COLUMN], false, "MOVE 0 TO %s%d", names[isc_a_pos], action->act_request->req_blobs->blb_ident); + } } @@ -3126,7 +3127,7 @@ request->req_ident); const char* string_type; - if (!(gpreGlob.sw_raw)) { + if (!gpreGlob.sw_raw) { printa(names[COMMENT], false, " "); printa(names[COMMENT], false, "FORMATTED REQUEST BLR FOR %s%d = ", names[isc_a_pos], request->req_ident); @@ -3537,9 +3538,11 @@ { const gpre_fld* field = reference->ref_field; if (field->fld_flags & FLD_blob) + { printa(names[COLUMN], true, "CALL \"isc_qtoq\" USING %s, %s", names[isc_blob_null_pos], gen_name(name, reference, true)); } + } } @@ -3638,7 +3641,7 @@ c < tpb_hunk.bytewise_tpb + sizeof(SLONG); c++) { *c = *text++; - if (!(--char_len)) + if (!--char_len) break; } @@ -4209,7 +4212,7 @@ trname = names[isc_trans_pos]; return trname; } - else + return (request) ? request->req_trans : names[isc_trans_pos]; } Index: exp.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/exp.cpp,v retrieving revision 1.40.2.1 retrieving revision 1.40.2.2 diff -b -U3 -r1.40.2.1 -r1.40.2.2 --- exp.cpp 17 Mar 2008 01:07:58 -0000 1.40.2.1 +++ exp.cpp 18 Jun 2008 01:43:33 -0000 1.40.2.2 @@ -1116,15 +1116,15 @@ else array_node->nod_arg[i] = index_node; - if ((dimension->dim_next) && (!MSC_match(KW_COMMA))) + if (dimension->dim_next && !MSC_match(KW_COMMA)) CPR_s_error("Adequate number of subscripts for this array reference."); } // Match the parenthesis or bracket - if ((paren) && (!MSC_match(KW_RIGHT_PAREN))) + if (paren && !MSC_match(KW_RIGHT_PAREN)) CPR_s_error("Missing parenthesis for array reference."); - else if ((bracket) && !MSC_match(KW_R_BRCKET)) + else if (bracket && !MSC_match(KW_R_BRCKET)) CPR_s_error("Missing right bracket for array reference."); } @@ -1315,7 +1315,7 @@ if (node) return node; - if (!(MSC_match(KW_NOT))) + if (!MSC_match(KW_NOT)) return par_relational(request); return MSC_unary(nod_not, par_not(request)); @@ -1405,7 +1405,7 @@ return node; const gpre_sym* symbol = gpreGlob.token_global.tok_symbol; - if (!symbol || (symbol->sym_type != SYM_context)) + if (!symbol || symbol->sym_type != SYM_context) return par_native_value(request, field); return par_field(request); Index: fbrmclib.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/fbrmclib.cpp,v retrieving revision 1.5 retrieving revision 1.5.2.1 diff -b -U3 -r1.5 -r1.5.2.1 --- fbrmclib.cpp 16 Jan 2008 07:07:37 -0000 1.5 +++ fbrmclib.cpp 18 Jun 2008 01:43:33 -0000 1.5.2.1 @@ -799,6 +799,18 @@ return (0); } +EXPORT RM_ENTRY(rmc_dsql_allocate_statement) +{ + ClearParamPool(); + ISC_STATUS *stat = AllocStatusPool(); + isc_dsql_allocate_statement(stat, + (isc_db_handle *)arg_vector[1].a_address, + (isc_tr_handle *)arg_vector[2].a_address); + StatusToCobol(&arg_vector[0], stat); + + return (0); +} + EXPORT RM_ENTRY(rmc_dsql_alloc_statement2) { ClearParamPool(); @@ -1612,6 +1624,7 @@ { "isc_embed_dsql_open", rmc_embed_dsql_open, "rmc_embed_dsql_open" }, { "isc_embed_dsql_open2", rmc_embed_dsql_open2, "rmc_embed_dsql_open2" }, { "isc_embed_dsql_prepare", rmc_embed_dsql_prepare, "rmc_embed_dsql_prepare" }, + { "isc_dsql_allocate_statement", rmc_dsql_allocate_statement, "rmc_dsql_allocate_statement" }, { "isc_dsql_alloc_statement2", rmc_dsql_alloc_statement2, "rmc_dsql_alloc_statement2" }, { "isc_dsql_execute_m", rmc_dsql_execute_m, "rmc_dsql_execute_m" }, { "isc_dsql_free_statement", rmc_dsql_free_statement, "rmc_dsql_free_statement" }, Index: ftn.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/ftn.cpp,v retrieving revision 1.61 retrieving revision 1.61.2.1 diff -b -U3 -r1.61 -r1.61.2.1 --- ftn.cpp 16 Jan 2008 07:07:37 -0000 1.61 +++ ftn.cpp 18 Jun 2008 01:43:34 -0000 1.61.2.1 @@ -2356,7 +2356,7 @@ for (const ref* reference = port->por_references; reference; reference = reference->ref_next) { - if (reference-> ref_flags & REF_fetch_array) + if (reference->ref_flags & REF_fetch_array) gen_get_or_put_slice(action, reference, true); } } @@ -2915,7 +2915,7 @@ gen_raw(reference->ref_sdl, REQ_slice, reference->ref_sdl_length, begin_i, end_i); } - if (!(gpreGlob.sw_raw)) { + if (!gpreGlob.sw_raw) { printa(COMMENT, " "); if (PRETTY_print_sdl(reference->ref_sdl, gen_blr, 0, 0)) CPR_error("internal error during SDL generation"); @@ -3482,7 +3482,7 @@ c < tpb_hunk.bytewise_tpb + sizeof(SLONG); c++) { *c = *text++; - if (!(--length)) + if (!--length) break; } if (length) @@ -3947,8 +3947,9 @@ static USHORT next_label(void) { - UCHAR* byte; - for (byte = gpreGlob.fortran_labels; *byte == 255; byte++); + UCHAR* byte = gpreGlob.fortran_labels; + while (*byte == 255) + ++byte; USHORT label = ((byte - gpreGlob.fortran_labels) << 3); @@ -3994,7 +3995,7 @@ trname = "GDS__TRANS"; return trname; } - else + return (request) ? request->req_trans : "GDS__TRANS"; } Index: gpre.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/gpre.cpp,v retrieving revision 1.87 retrieving revision 1.87.2.1 diff -b -U3 -r1.87 -r1.87.2.1 --- gpre.cpp 16 Jan 2008 07:07:37 -0000 1.87 +++ gpre.cpp 18 Jun 2008 01:43:34 -0000 1.87.2.1 @@ -372,7 +372,7 @@ ext_tab++) { strcpy(spare_file_name, file_name); - if (!(file_rename(spare_file_name, ext_tab->in, NULL))) + if (!file_rename(spare_file_name, ext_tab->in, NULL)) break; } @@ -829,7 +829,7 @@ } } - if (!(strcmp(out_file_name, file_name))) { + if (!strcmp(out_file_name, file_name)) { fprintf(stderr, "gpre: output file %s would duplicate input\n", out_file_name); @@ -1228,7 +1228,7 @@ switch (gpreGlob.sw_sql_dialect) { case SQL_DIALECT_V5: - if (!(isQuoted(token->tok_type))) + if (!isQuoted(token->tok_type)) CPR_error("Can only tag quoted strings with character set"); else token->tok_charset = symbol; @@ -2236,8 +2236,8 @@ //IF symbol is null AND it is not a quoted string AND -e switch was specified //THEN search again using HSH_lookup2(). //* - if ((gpreGlob.token_global.tok_symbol == NULL) && (!isQuoted(gpreGlob.token_global.tok_type)) - && gpreGlob.sw_case) + if (gpreGlob.token_global.tok_symbol == NULL && !isQuoted(gpreGlob.token_global.tok_type) && + gpreGlob.sw_case) { gpreGlob.token_global.tok_symbol = symbol = HSH_lookup2(gpreGlob.token_global.tok_string); if (symbol && symbol->sym_type == SYM_keyword) @@ -2750,7 +2750,8 @@ if (gpreGlob.sw_language == lang_fortran && line_position == 1 && (c == 'C' || c == 'c' || c == '*')) { - while ((c = nextchar()) != '\n' && c != EOF); + while ((c = nextchar()) != '\n' && c != EOF) + ; continue; } #endif @@ -2770,7 +2771,8 @@ (isAnsiCobol(gpreGlob.sw_cob_dialect) && line_position == 7 && c != '\t' && c != ' ' && c != '-'))) { - while ((c = nextchar()) != '\n' && c != EOF); + while ((c = nextchar()) != '\n' && c != EOF) + ; continue; } #endif @@ -2788,7 +2790,8 @@ if (c2 != '-') return_char(c2); else { - while ((c = nextchar()) != '\n' && c != EOF); + while ((c = nextchar()) != '\n' && c != EOF) + ; last_position = position - 1; continue; } @@ -2803,7 +2806,8 @@ SSHORT next = nextchar(); if (next != '*') { if (isLangCpp(gpreGlob.sw_language) && next == '/') { - while ((c = nextchar()) != '\n' && c != EOF); + while ((c = nextchar()) != '\n' && c != EOF) + ; // empty loop continue; } return_char(next); @@ -2847,14 +2851,16 @@ return_char(next); return c; } - while ((c = nextchar()) != EOF && c != '\n'); + while ((c = nextchar()) != EOF && c != '\n') + ; continue; } // skip PASCAL comments - both types if (c == '{' && gpreGlob.sw_language == lang_pascal) { - while ((c = nextchar()) != EOF && c != '}'); + while ((c = nextchar()) != EOF && c != '}') + ; continue; } Index: gpre_meta.epp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/gpre_meta.epp,v retrieving revision 1.56 retrieving revision 1.56.2.1 diff -b -U3 -r1.56 -r1.56.2.1 --- gpre_meta.epp 16 Jan 2008 07:07:37 -0000 1.56 +++ gpre_meta.epp 18 Jun 2008 01:43:34 -0000 1.56.2.1 @@ -1448,8 +1448,10 @@ return; if (!database->dbb_handle) + { if (!MET_database(database, false)) CPR_exit(FINI_ERROR); + } if (database->dbb_transaction) { // we must have already loaded this one Index: par.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/par.cpp,v retrieving revision 1.66.2.1 retrieving revision 1.66.2.2 diff -b -U3 -r1.66.2.1 -r1.66.2.2 --- par.cpp 17 Mar 2008 01:08:00 -0000 1.66.2.1 +++ par.cpp 18 Jun 2008 01:43:34 -0000 1.66.2.2 @@ -499,7 +499,7 @@ TEXT* string; for (;;) { - if (MSC_match(KW_FILENAME) && (!isQuoted(gpreGlob.token_global.tok_type))) + if (MSC_match(KW_FILENAME) && !isQuoted(gpreGlob.token_global.tok_type)) CPR_s_error("quoted file name"); if (isQuoted(gpreGlob.token_global.tok_type)) { @@ -1042,7 +1042,7 @@ while (true) { // find a relation name, or maybe a list of them - if ((!parse_sql) && terminator()) + if (!parse_sql && terminator()) break; do { @@ -1094,7 +1094,7 @@ } } } - if (!(MSC_match(KW_COMMA))) + if (!MSC_match(KW_COMMA)) break; } } @@ -1203,7 +1203,7 @@ for (const dbd* const end = gpreGlob.global_db_list + gpreGlob.global_db_count; list < end; list++) { - if (!(strcmp(name, list->dbb_name))) + if (!strcmp(name, list->dbb_name)) return; } } @@ -1609,7 +1609,7 @@ static act* par_case() { - if ((gpreGlob.sw_language == lang_pascal) && (!routine_decl)) + if (gpreGlob.sw_language == lang_pascal && !routine_decl) gpreGlob.cur_routine->act_count++; return NULL; @@ -1636,7 +1636,7 @@ static act* par_derived_from() { - if ((gpreGlob.sw_language != lang_c) && (!isLangCpp(gpreGlob.sw_language))) { + if (gpreGlob.sw_language != lang_c && !isLangCpp(gpreGlob.sw_language)) { return (NULL); } @@ -2270,7 +2270,7 @@ static act* par_on() { - if (!(MSC_match(KW_ERROR))) + if (!MSC_match(KW_ERROR)) return NULL; return par_on_error(); @@ -2999,7 +2999,7 @@ if ((gpreGlob.sw_language == lang_fortran) && (act_op == ACT_commit_retain_context)) { - if (!(MSC_match(KW_TRANSACTION_HANDLE))) + if (!MSC_match(KW_TRANSACTION_HANDLE)) return NULL; } else @@ -3168,12 +3168,14 @@ act* action = MSC_action(0, ACT_routine); action->act_flags |= ACT_mark; - while (!(MSC_match(KW_SEMI_COLON))) - if (!(match_parentheses())) + while (!MSC_match(KW_SEMI_COLON)) + { + if (!match_parentheses()) PAR_get_token(); + } if (MSC_match(KW_OPTIONS) && MSC_match(KW_LEFT_PAREN)) { - while (!(MSC_match(KW_RIGHT_PAREN))) { + while (!MSC_match(KW_RIGHT_PAREN)) { if (MSC_match(KW_EXTERN) || MSC_match(KW_FORWARD)) action->act_flags |= ACT_decl; else Index: pas.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/pas.cpp,v retrieving revision 1.53 retrieving revision 1.53.2.1 diff -b -U3 -r1.53 -r1.53.2.1 --- pas.cpp 16 Jan 2008 07:07:37 -0000 1.53 +++ pas.cpp 18 Jun 2008 01:43:34 -0000 1.53.2.1 @@ -868,7 +868,9 @@ if ((action->act_error && (action->act_type != ACT_blob_for)) || action->act_flags & ACT_sql) + { begin(column); + } TEXT s[MAX_REF_SIZE]; const blb* blob; @@ -2073,7 +2075,8 @@ db = NULL; if (gpreGlob.sw_auto || ((action->act_flags & ACT_sql) && - (action->act_type != ACT_disconnect))) { + (action->act_type != ACT_disconnect))) + { printa(column, "if gds__trans <> nil"); printa(column + 4, "then GDS__%s_TRANSACTION (%s, gds__trans);", (action->act_type != ACT_rfinish) ? "COMMIT" : "ROLLBACK", @@ -3520,7 +3523,7 @@ trname = "gds__trans"; return trname; } - else + return (request) ? request->req_trans : "gds__trans"; } Index: rmc.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/rmc.cpp,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -b -U3 -r1.7 -r1.7.2.1 --- rmc.cpp 10 Feb 2008 17:33:37 -0000 1.7 +++ rmc.cpp 18 Jun 2008 01:43:35 -0000 1.7.2.1 @@ -75,7 +75,12 @@ static const char* const ISC_OPEN = "isc_embed_dsql_open"; static const char* const ISC_OPEN2 = "isc_embed_dsql_open2"; static const char* const ISC_PREPARE = "isc_embed_dsql_prepare"; -static const char* const ISC_DSQL_ALLOCATE = "isc_dsql_alloc_statement2"; +// Never user isc_dsql_alloc_statement2 here. This will cause problems for +// cursors opened in Cobol subprograms that are subsequently CANCELed. When the +// subprogram is CANCELed the buffer holding the statement handle is free. This +// will cause the program to abort when detaching from the database. It can +// also potentially cause hard to find memory corruption errors. +static const char* const ISC_DSQL_ALLOCATE = "isc_dsql_allocate_statement"; static const char* const ISC_DSQL_EXECUTE = "isc_dsql_execute_m"; static const char* const ISC_DSQL_FREE = "isc_dsql_free_statement"; static const char* const ISC_DSQL_SET_CURSOR = "isc_dsql_set_cursor_name"; @@ -588,7 +593,7 @@ else single_quote = false; } - if (!open_quote && (*p == ',')) + if (!open_quote && *p == ',') break; } /* if p == s, this is a call with no commas. back up to a blank */ @@ -607,7 +612,7 @@ else single_quote = false; } - if (!open_quote && (*p == ' ')) + if (!open_quote && *p == ' ') break; } q--; @@ -634,7 +639,7 @@ else single_quote = false; } - if (!open_quote && (*p == ' ')) + if (!open_quote && *p == ' ') break; } q--; @@ -1462,11 +1467,16 @@ if (gpreGlob.sw_auto && action->act_error) printa(names[COLUMN], false, "IF %s NOT = 0 THEN", request_trans(action, request)); - + // Never use isc_compile_request2 here because if the request is + // generated in a subprogram and that subprogram is subsequently CANCELed + // the buffer containing the request handle will be freed. This will cause + // the main program to abort when detaching from the database. It can also + // cause other difficult to find memory corruption problems. This implies + // that the user must issue a RELEASE_REQUESTS request before exiting any + // subprogram in order to clean up its handles. sprintf(output_buffer, - "%sCALL \"%s%s\" USING %s, %s, %s, %d, %s%d\n", + "%sCALL \"%s\" USING %s, %s, %s, %d, %s%d\n", names[COLUMN], ISC_COMPILE_REQUEST, - (request->req_flags & REQ_exp_hand) ? "" : "2", status_vector(action), symbol->sym_string, request->req_handle, request->req_length, names[isc_a_pos], request->req_ident); @@ -3197,8 +3207,9 @@ if (exp_db && db != exp_db) continue; if (!(request->req_flags & REQ_exp_hand)) { - printa(names[COLUMN], false, "IF %s = 0 THEN", - db->dbb_name->sym_string); + printa(names[COLUMN], false, "IF %s NOT = 0 AND %s NOT = 0 THEN", + db->dbb_name->sym_string, + request->req_handle); printa(names[COLUMN], true, "CALL \"%s\" USING %s, %s", ISC_RELEASE_REQUEST, status_vector(action), request->req_handle); @@ -3295,7 +3306,7 @@ request->req_ident); const char* string_type; - if (!(gpreGlob.sw_raw)) { + if (!gpreGlob.sw_raw) { printa(names[COMMENT], false, " "); printa(names[COMMENT], false, "FORMATTED REQUEST BLR FOR %s%d = ", names[isc_a_pos], request->req_ident); @@ -4463,7 +4474,7 @@ trname = names[isc_trans_pos]; return trname; } - else + return (request) ? request->req_trans : names[isc_trans_pos]; } Index: sqe.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/sqe.cpp,v retrieving revision 1.49.2.1 retrieving revision 1.49.2.2 diff -b -U3 -r1.49.2.1 -r1.49.2.2 --- sqe.cpp 30 May 2008 01:40:42 -0000 1.49.2.1 +++ sqe.cpp 18 Jun 2008 01:43:35 -0000 1.49.2.2 @@ -277,12 +277,12 @@ for (conflict = request->req_contexts; conflict; conflict = conflict->ctx_next) { - if ((symbol = conflict->ctx_symbol) - && (symbol->sym_type == SYM_relation - || symbol->sym_type == SYM_context - || symbol->sym_type == SYM_procedure) - && (!strcmp(symbol->sym_string, gpreGlob.token_global.tok_string)) - && (conflict->ctx_scope_level == request-> req_scope_level)) + if ((symbol = conflict->ctx_symbol) && + (symbol->sym_type == SYM_relation || + symbol->sym_type == SYM_context || + symbol->sym_type == SYM_procedure) && + !strcmp(symbol->sym_string, gpreGlob.token_global.tok_string) && + conflict->ctx_scope_level == request->req_scope_level) { break; } @@ -1758,8 +1758,10 @@ // since we already matched it to the context for (arg++; arg < end; arg++) + { if (!(relation = par_base_table(request, relation, (const TEXT*) * arg))) break; + } if (!relation) { fb_utils::snprintf(error_string, sizeof(error_string), @@ -1830,8 +1832,10 @@ const TEXT* p = context->ctx_alias; const TEXT* q = alias; for (; *p && *q; p++, q++) + { if (UPPER(*p) != UPPER(*q)) break; + } if (!*p && !*q) return context; } @@ -2059,7 +2063,7 @@ MSC_binary(nod_or, node, MSC_binary(nod_eq, value, value2)); - if (!(MSC_match(KW_COMMA))) + if (!MSC_match(KW_COMMA)) break; } } @@ -2833,8 +2837,7 @@ case nod_agg_min: case nod_agg_average: case nod_agg_total: - if ((node->nod_arg[1]) && - (request->req_database->dbb_flags & DBB_v3)) + if (node->nod_arg[1] && (request->req_database->dbb_flags & DBB_v3)) { selection->rse_reduced = MSC_unary(nod_sort, node->nod_arg[1]); Index: sql.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/sql.cpp,v retrieving revision 1.66.2.2 retrieving revision 1.66.2.3 diff -b -U3 -r1.66.2.2 -r1.66.2.3 --- sql.cpp 30 May 2008 01:40:42 -0000 1.66.2.2 +++ sql.cpp 18 Jun 2008 01:43:36 -0000 1.66.2.3 @@ -89,6 +89,7 @@ static act* act_open_blob(ACT_T, gpre_sym*); static act* act_prepare(void); static act* act_procedure(void); +static act* act_release(void); static act* act_select(void); static act* act_set(const TEXT*); static act* act_set_dialect(void); @@ -192,6 +193,7 @@ case KW_LOCK: case KW_OPEN: case KW_PREPARE: + case KW_RELEASE_REQUESTS: case KW_ROLLBACK: case KW_SELECT: case KW_SET: @@ -298,6 +300,10 @@ action = act_prepare(); break; + case KW_RELEASE_REQUESTS: + action = act_release(); + break; + case KW_REVOKE: action = act_grant_revoke(ACT_dyn_revoke); break; @@ -1483,8 +1489,7 @@ || db->dbb_r_lc_messages || db->dbb_r_lc_ctype) { if (!request) - request = - PAR_set_up_dpb_info(ready, action, default_buffers); + request = PAR_set_up_dpb_info(ready, action, default_buffers); request->req_flags |= REQ_extend_dpb; } @@ -1547,8 +1552,7 @@ db->dbb_r_password = password; db->dbb_r_lc_messages = lc_messages; if (!request) - request = - PAR_set_up_dpb_info(ready, action, default_buffers); + request = PAR_set_up_dpb_info(ready, action, default_buffers); request->req_flags |= REQ_extend_dpb; } @@ -1559,8 +1563,7 @@ db->dbb_c_sql_role || db->dbb_c_lc_ctype || db->dbb_c_lc_messages)) { - request = - PAR_set_up_dpb_info(ready, action, default_buffers); + request = PAR_set_up_dpb_info(ready, action, default_buffers); } } @@ -2928,12 +2931,12 @@ switch (gpreGlob.sw_sql_dialect) { case 1: - if ((!isQuoted(gpreGlob.token_global.tok_type)) && (!MSC_match(KW_COLON))) + if (!isQuoted(gpreGlob.token_global.tok_type) && !MSC_match(KW_COLON)) CPR_s_error(": <string expression>"); break; default: - if (gpreGlob.token_global.tok_type != tok_sglquoted && (!MSC_match(KW_COLON))) + if (gpreGlob.token_global.tok_type != tok_sglquoted && !MSC_match(KW_COLON)) CPR_s_error(": <string expression>"); break; } @@ -3052,8 +3055,7 @@ if (direction != blr_forward) { if (!(request->req_flags & REQ_scroll)) - PAR_error - ("Must use SCROLL modifier for DECLARE CURSOR to enable scrolling."); + PAR_error("Must use SCROLL modifier for DECLARE CURSOR to enable scrolling."); // create a literal for the direction parameter @@ -3293,6 +3295,7 @@ // If this is a grant, do we have the optional WITH GRANT OPTION specification? if ((type == ACT_dyn_grant) && grant_option_legal) + { if (MSC_match(KW_WITH)) { if (!MSC_match(KW_GRANT)) CPR_s_error("GRANT"); @@ -3300,6 +3303,7 @@ CPR_s_error("OPTION"); priv_block->prv_privileges |= PRV_grant_option; } + } // create action block @@ -3458,7 +3462,7 @@ else MSC_push(SQE_value(request, false, NULL, NULL), &values); count2++; - if (!(MSC_match(KW_COMMA))) + if (!MSC_match(KW_COMMA)) break; } EXP_match_paren(); @@ -3877,12 +3881,12 @@ switch (gpreGlob.sw_sql_dialect) { case 1: - if ((!isQuoted(gpreGlob.token_global.tok_type)) && (!MSC_match(KW_COLON))) + if (!isQuoted(gpreGlob.token_global.tok_type) && !MSC_match(KW_COLON)) CPR_s_error(": <string expression>"); break; default: - if (gpreGlob.token_global.tok_type != tok_sglquoted && (!MSC_match(KW_COLON))) + if (gpreGlob.token_global.tok_type != tok_sglquoted && !MSC_match(KW_COLON)) CPR_s_error(": <string expression>"); break; } @@ -3977,8 +3981,24 @@ return action; } +//____________________________________________________________ +// +// Parse a RELEASE_REQUESTS statement +// +static act* act_release(void) +{ + act* action = MSC_action(0, ACT_release); + MSC_match(KW_FOR); + gpre_sym* symbol = gpreGlob.token_global.tok_symbol; + if (symbol && (symbol->sym_type == SYM_database)) { + action->act_object = (REF) symbol->sym_object; + PAR_get_token(); + } + + return action; +} //____________________________________________________________ // // Handle the stand alone SQL select statement. @@ -4196,7 +4216,7 @@ * so we can resolve against it. * So what if we go through this code once for each database... */ - if (!(MSC_find_symbol(gpreGlob.token_global.tok_symbol, SYM_charset))) + if (!MSC_find_symbol(gpreGlob.token_global.tok_symbol, SYM_charset)) PAR_error("The named CHARACTER SET was not found"); } } @@ -5073,7 +5093,7 @@ { IND index = NULL; - if ((gpreGlob.isc_databases) && (!(gpreGlob.isc_databases->dbb_next))) { + if (gpreGlob.isc_databases && !gpreGlob.isc_databases->dbb_next) { // CVC: I've kept this silly code. What's the idea of the copy here? // If we are trying to limit the index name, the correct length is NAME_SIZE. TEXT s[ERROR_LENGTH]; |