MAKE_parameter @brief Generate a parameter block for a message. If requested, set up for a null flag as well. @param message @param sqlda_flag @param null_flag @param sqlda_index @param node **/
| 458 | |
| 459 | **/ |
| 460 | dsql_par* MAKE_parameter(dsql_msg* message, bool sqlda_flag, bool null_flag, |
| 461 | USHORT sqlda_index, const ValueExprNode* node) |
| 462 | { |
| 463 | if (!message) |
| 464 | { |
| 465 | ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) << |
| 466 | Arg::Gds(isc_badmsgnum)); |
| 467 | } |
| 468 | |
| 469 | if (sqlda_flag && sqlda_index && sqlda_index <= message->msg_index) |
| 470 | { |
| 471 | // This parameter is possibly already here. Look for it. |
| 472 | for (FB_SIZE_T i = 0; i < message->msg_parameters.getCount(); ++i) |
| 473 | { |
| 474 | dsql_par* temp = message->msg_parameters[i]; |
| 475 | |
| 476 | if (temp->par_index == sqlda_index) |
| 477 | return temp; |
| 478 | } |
| 479 | } |
| 480 | |
| 481 | thread_db* tdbb = JRD_get_thread_data(); |
| 482 | |
| 483 | if (message->msg_parameter == MAX_USHORT) |
| 484 | { |
| 485 | string msg; |
| 486 | msg.printf("Maximum number of parameters: %d", MAX_USHORT / 2); |
| 487 | |
| 488 | ERRD_post(Arg::Gds(isc_imp_exc) << |
| 489 | Arg::Gds(isc_random) << |
| 490 | msg); |
| 491 | } |
| 492 | |
| 493 | dsql_par* parameter = FB_NEW_POOL(message->getPool()) dsql_par(message->getPool()); |
| 494 | parameter->par_message = message; |
| 495 | message->msg_parameters.insert(0, parameter); |
| 496 | parameter->par_parameter = message->msg_parameter++; |
| 497 | |
| 498 | parameter->par_rel_name = NULL; |
| 499 | parameter->par_owner_name = NULL; |
| 500 | parameter->par_rel_alias = NULL; |
| 501 | |
| 502 | if (node) |
| 503 | MAKE_parameter_names(parameter, node); |
| 504 | |
| 505 | // If the parameter is used declared, set SQLDA index |
| 506 | if (sqlda_flag) |
| 507 | { |
| 508 | if (sqlda_index) |
| 509 | { |
| 510 | parameter->par_index = sqlda_index; |
| 511 | if (message->msg_index < sqlda_index) |
| 512 | message->msg_index = sqlda_index; |
| 513 | } |
| 514 | else { |
| 515 | parameter->par_index = ++message->msg_index; |
| 516 | } |
| 517 | } |
no test coverage detected