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

Method scatterData

src/yvalve/why.cpp:571–619  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

569}
570
571void SQLDAMetadata::scatterData(DataBuffer& from)
572{
573 fb_assert(sqlda);
574 ///fb_assert(offsets); // Not reliable, but still check that input buffer can come from this metadata
575
576 if (speedHackEnabled)
577 return; // Data is already in user's buffer
578
579 fb_assert(length == from.getCount());
580
581 for (unsigned i = 0; i < count; i++)
582 {
583 const XSQLVAR& var = sqlda->sqlvar[i];
584
585 if ((var.sqltype & ~1) != SQL_NULL)
586 {
587 unsigned len = var.sqllen;
588
589 // Make sure user has specified a data location.
590 if (!var.sqldata)
591 {
592 (Arg::Gds(isc_dsql_sqlda_value_err) <<
593 Arg::Gds(isc_dsql_no_sqldata) <<
594 Arg::Gds(isc_dsql_sqlvar_index) << Arg::Num(i)
595 ).raise();
596 }
597
598 if ((var.sqltype & ~1) == SQL_VARYING)
599 len += sizeof(SSHORT);
600
601 memcpy(var.sqldata, from.begin() + offsets[i].offset, len);
602 }
603
604 if (var.sqltype & 1)
605 {
606 // Make sure user has specified a location for null indicator.
607 if (!var.sqlind)
608 {
609 (Arg::Gds(isc_dsql_sqlda_value_err) <<
610 Arg::Gds(isc_dsql_no_sqlind) <<
611 Arg::Gds(isc_dsql_sqlvar_index) << Arg::Num(i)
612 ).raise();
613 }
614
615 *var.sqlind = *reinterpret_cast<ISC_SHORT*>(from.begin() + offsets[i].indOffset);
616 }
617 }
618
619}
620
621UCHAR* SQLDAMetadataLauncher::getBuffer()
622{

Callers 4

scatterDataMethod · 0.45

Calls 5

GdsClass · 0.85
NumClass · 0.85
getCountMethod · 0.45
raiseMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected