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

Function MAKE_field

src/dsql/make.cpp:377–423  ·  view source on GitHub ↗

MAKE_field @brief Make up a field node. @param context @param field @param indices **/

Source from the content-addressed store, hash-verified

375
376 **/
377FieldNode* MAKE_field(dsql_ctx* context, dsql_fld* field, ValueListNode* indices)
378{
379 DEV_BLKCHK(context, dsql_type_ctx);
380 DEV_BLKCHK(field, dsql_type_fld);
381
382 thread_db* const tdbb = JRD_get_thread_data();
383 FieldNode* const node = FB_NEW_POOL(*tdbb->getDefaultPool()) FieldNode(
384 *tdbb->getDefaultPool(), context, field, indices);
385
386 dsc desc;
387
388 if (field->dimensions)
389 {
390 if (indices)
391 DsqlDescMaker::fromElement(&desc, field);
392 else
393 {
394 desc = node->getDsqlDesc();
395 desc.dsc_dtype = dtype_array;
396 desc.dsc_length = sizeof(ISC_QUAD);
397 desc.dsc_scale = static_cast<SCHAR>(field->scale);
398 desc.dsc_sub_type = field->subType;
399 }
400
401 node->setDsqlDesc(desc);
402 }
403 else
404 {
405 if (indices)
406 {
407 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
408 Arg::Gds(isc_dsql_only_can_subscript_array) << Arg::Str(field->fld_name));
409 }
410
411 DsqlDescMaker::fromField(&desc, field);
412 node->setDsqlDesc(desc);
413 }
414
415 if ((field->flags & FLD_nullable) || (context->ctx_flags & CTX_outer_join))
416 {
417 desc = node->getDsqlDesc();
418 desc.dsc_flags |= DSC_nullable;
419 node->setDsqlDesc(desc);
420 }
421
422 return node;
423}
424
425
426/**

Callers 2

internalDsqlPassMethod · 0.85
PASS1_expand_select_nodeFunction · 0.85

Calls 8

JRD_get_thread_dataFunction · 0.85
ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
StrClass · 0.85
FieldNodeClass · 0.70
getDefaultPoolMethod · 0.45
setDsqlDescMethod · 0.45

Tested by

no test coverage detected