MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / MAKE_parameter

Function MAKE_parameter

src/dsql/make.cpp:460–531  ·  view source on GitHub ↗

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 **/

Source from the content-addressed store, hash-verified

458
459 **/
460dsql_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 }

Callers 6

dsqlPassMethod · 0.85
setParameterTypeMethod · 0.85
explodeOutputsMethod · 0.85
genBlrMethod · 0.85
dsqlPassCursorReferenceFunction · 0.85
dsqlProcessReturningFunction · 0.85

Calls 9

ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
JRD_get_thread_dataFunction · 0.85
MAKE_parameter_namesFunction · 0.85
dsql_parClass · 0.70
getCountMethod · 0.45
printfMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected