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

Method assign

src/yvalve/why.cpp:440–487  ·  view source on GitHub ↗

ATTENTION!!! Keep this method in sync with MsgMetadata::MakeOffsets()

Source from the content-addressed store, hash-verified

438
439// ATTENTION!!! Keep this method in sync with MsgMetadata::MakeOffsets()
440void SQLDAMetadata::assign()
441{
442 if (offsets)
443 return; // already assigned
444
445 if (sqlda->sqld <= 0) // malformed sqlda?
446 return;
447
448 count = (USHORT) sqlda->sqld;
449 speedHackEnabled = true; // May be we are lucky...
450 ISC_SCHAR* const base = sqlda->sqlvar[0].sqldata;
451
452 offsets = FB_NEW OffsetItem[count];
453 for (unsigned i = 0; i < count; i++)
454 {
455 const XSQLVAR& var = sqlda->sqlvar[i];
456 OffsetItem& it = offsets[i];
457
458 it.type = var.sqltype;
459 it.subType = var.sqlsubtype;
460 it.length = var.sqllen;
461 it.scale = var.sqlscale;
462 switch (var.sqltype & ~1)
463 {
464 case SQL_TEXT:
465 case SQL_VARYING:
466 it.charSet = var.sqlsubtype;
467 it.subType = 0;
468 break;
469 case SQL_BLOB:
470 it.charSet = var.sqlscale;
471 it.scale = 0;
472 break;
473 default:
474 it.charSet = 0;
475 }
476 // No matter how good or bad is the way data is placed in message buffer, it cannot be changed
477 // because changing of it on current codebase will completely kill remote module and may be the engine as well
478 unsigned dtype;
479 length = fb_utils::sqlTypeToDsc(length, var.sqltype, var.sqllen,
480 &dtype, NULL /*length*/, &it.offset, &it.indOffset);
481 if (it.offset != var.sqldata - base || it.indOffset != ((ISC_SCHAR*) (var.sqlind)) - base)
482 speedHackEnabled = false; // No luck
483
484 if (dtype < DTYPE_TYPE_MAX)
485 alignment = MAX(alignment, type_alignments[dtype]);
486 }
487}
488
489unsigned SQLDAMetadata::getMessageLength(CheckStatusWrapper* status)
490{

Callers 4

gatherDataMethod · 0.45
DTransactionMethod · 0.45
iscArrayLookupDescImplFunction · 0.45
PluginSetMethod · 0.45

Calls 1

sqlTypeToDscFunction · 0.85

Tested by

no test coverage detected