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

Function cmp_slice

src/gpre/cmp.cpp:1562–1617  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1560//
1561
1562static void cmp_slice( gpre_req* request)
1563{
1564
1565 slc* slice = request->req_slice;
1566 const gpre_fld* field = slice->slc_field;
1567 gpre_fld* element = field->fld_array;
1568 const ary* array = field->fld_array_info;
1569
1570 // Process variable references
1571
1572 for (ref* reference = request->req_values; reference; reference = reference->ref_next)
1573 {
1574 reference->ref_id = slice->slc_parameters++;
1575 }
1576
1577 request->req_blr = request->req_base = MSC_alloc(500);
1578 request->req_length = 500;
1579
1580 request->add_byte(isc_sdl_version1);
1581 request->add_byte(isc_sdl_struct);
1582 request->add_byte(1);
1583 cmp_field(request, element, 0);
1584
1585 request->add_byte(isc_sdl_relation);
1586 CMP_stuff_symbol(request, field->fld_relation->rel_symbol);
1587
1588 request->add_byte(isc_sdl_field);
1589 CMP_stuff_symbol(request, field->fld_symbol);
1590
1591 bool loop_flags[MAX_ARRAY_DIMENSIONS];
1592 { // scope block
1593 fb_assert(slice->slc_dimensions <= MAX_ARRAY_DIMENSIONS);
1594 USHORT n = 0;
1595 for (bool* p = loop_flags; n < slice->slc_dimensions; n++, p++)
1596 *p = cmp_sdl_loop(request, n, slice, array);
1597 } // end scope block
1598
1599 request->add_byte(isc_sdl_element);
1600 request->add_byte(1);
1601 request->add_byte(isc_sdl_scalar);
1602 request->add_byte(0);
1603 request->add_byte(slice->slc_dimensions);
1604 { // scope block
1605 USHORT n = 0;
1606 for (const bool* p = loop_flags; n < slice->slc_dimensions; n++, p++)
1607 {
1608 if (!*p)
1609 cmp_sdl_fudge(request, array->ary_rpt[n].ary_lower);
1610 cmp_sdl_subscript(request, n, slice);
1611 }
1612 } // end scope block
1613
1614 request->add_byte(isc_sdl_eoc);
1615 request->req_length = request->req_blr - request->req_base;
1616 request->req_blr = request->req_base;
1617}
1618
1619

Callers 1

CMP_compile_requestFunction · 0.85

Calls 7

MSC_allocFunction · 0.85
CMP_stuff_symbolFunction · 0.85
cmp_sdl_loopFunction · 0.85
cmp_sdl_fudgeFunction · 0.85
cmp_sdl_subscriptFunction · 0.85
cmp_fieldFunction · 0.70
add_byteMethod · 0.45

Tested by

no test coverage detected