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

Method parseDsqlMessage

src/jrd/PreparedStatement.cpp:411–459  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

409
410
411void PreparedStatement::parseDsqlMessage(const dsql_msg* dsqlMsg, Array<dsc>& values,
412 MsgMetadata* msgMetadata, UCharBuffer& msg)
413{
414 // hvlad: Parameters in dsqlMsg->msg_parameters almost always linked in descending
415 // order by par_index. The only known exception is EXECUTE BLOCK statement.
416 // To generate correct metadata we must walk params in ascending par_index order.
417 // So store all params in array in an ascending par_index order despite of
418 // order in linked list.
419 // ASF: Input parameters don't come necessarily in ascending or descending order,
420 // so I changed the code to use a SortedArray.
421 // AP: removed assertions for correct parameters order - useless with SortedArray.
422
423 SortedArray<const dsql_par*, InlineStorage<const dsql_par*, 16>, const dsql_par*,
424 DefaultKeyValue<const dsql_par*>, ParamCmp> params;
425
426 for (FB_SIZE_T i = 0; i < dsqlMsg->msg_parameters.getCount(); ++i)
427 {
428 dsql_par* par = dsqlMsg->msg_parameters[i];
429 if (par->par_index)
430 params.add(par);
431 }
432
433 FB_SIZE_T paramCount = params.getCount();
434 values.resize(paramCount * 2);
435 msgMetadata->setItemsCount(paramCount);
436
437 for (FB_SIZE_T i = 0; i < paramCount; ++i)
438 dscToMetaItem(&params[i]->par_desc, msgMetadata->getItem(i));
439
440 msgMetadata->makeOffsets();
441 msg.resize(msgMetadata->getMessageLength());
442
443 dsc* value = values.begin();
444
445 for (FB_SIZE_T i = 0; i < paramCount; ++i)
446 {
447 // value
448 *value = params[i]->par_desc;
449 value->dsc_address = msg.begin() + msgMetadata->getItem(i).offset;
450 ++value;
451
452 // NULL indicator
453 value->makeShort(0);
454 value->dsc_address = msg.begin() + msgMetadata->getItem(i).nullInd;
455 // set NULL indicator value
456 *((SSHORT*) value->dsc_address) = -1;
457 ++value;
458 }
459}
460
461
462} // namespace

Callers

nothing calls this directly

Calls 10

dscToMetaItemFunction · 0.85
setItemsCountMethod · 0.80
getItemMethod · 0.80
makeOffsetsMethod · 0.80
makeShortMethod · 0.80
getCountMethod · 0.45
addMethod · 0.45
resizeMethod · 0.45
getMessageLengthMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected