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

Function gen_sdl

src/yvalve/array.cpp:456–565  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

454
455
456static ISC_STATUS gen_sdl(ISC_STATUS* status,
457 const ISC_ARRAY_DESC* desc,
458 SSHORT* sdl_buffer_length,
459 UCHAR** sdl_buffer,
460 SSHORT* sdl_length,
461 bool internal_flag)
462{
463/**************************************
464 *
465 * g e n _ s d l
466 *
467 **************************************
468 *
469 * Functional description
470 *
471 **************************************/
472 const SSHORT dimensions = desc->array_desc_dimensions;
473
474 if (dimensions > 16)
475 return error(status, Arg::Gds(isc_invalid_dimension) << Arg::Num(dimensions) << Arg::Num(16));
476
477 gen_t gen_block;
478 gen_t* gen = &gen_block;
479 gen->gen_sdl = *sdl_buffer;
480 gen->gen_sdl_ptr = sdl_buffer;
481 gen->gen_end = *sdl_buffer + *sdl_buffer_length;
482 gen->gen_status = status;
483 gen->gen_internal = internal_flag ? 0 : -1;
484
485 if (stuff_args(gen, 4, isc_sdl_version1, isc_sdl_struct, 1, desc->array_desc_dtype))
486 {
487 return status[1];
488 }
489
490 switch (desc->array_desc_dtype)
491 {
492 case blr_short:
493 case blr_long:
494 case blr_int64:
495 case blr_quad:
496 case blr_int128:
497 if (stuff_sdl(gen, desc->array_desc_scale))
498 return status[1];
499 break;
500
501 case blr_text:
502 case blr_cstring:
503 case blr_varying:
504 if (stuff_sdl_word(gen, desc->array_desc_length))
505 return status[1];
506 break;
507 default:
508 break;
509 }
510
511 if (stuff_string(gen, isc_sdl_relation, desc->array_desc_relation_name))
512 return status[1];
513

Calls 8

GdsClass · 0.85
NumClass · 0.85
stuff_argsFunction · 0.85
stuff_sdlFunction · 0.85
stuff_sdl_wordFunction · 0.85
stuff_stringFunction · 0.85
stuff_literalFunction · 0.85
errorFunction · 0.70

Tested by

no test coverage detected