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

Function cmp_array

src/gpre/cme.cpp:1338–1408  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1336//
1337
1338static void cmp_array( gpre_nod* node, gpre_req* request)
1339{
1340 CMP_check(request, 0);
1341
1342 ref* reference = (ref*) node->nod_arg[0];
1343
1344 if (!reference->ref_context)
1345 {
1346 CPR_error("cmp_array: context missing");
1347 return; //NULL;
1348 }
1349
1350 const gpre_fld* field = reference->ref_field;
1351 if (!field)
1352 {
1353 CPR_error("cmp_array: field missing");
1354 return; // NULL;
1355 }
1356
1357 // Header stuff
1358
1359 reference->ref_sdl = reference->ref_sdl_base = MSC_alloc(500);
1360 reference->ref_sdl_length = 500;
1361 reference->ref_sdl_ident = CMP_next_ident();
1362 reference->add_byte(isc_sdl_version1);
1363 reference->add_byte(isc_sdl_struct);
1364 reference->add_byte(1);
1365
1366 // The datatype of the array elements
1367
1368 cmp_sdl_dtype(field->fld_array, reference);
1369
1370 // The relation and field identifiers or strings
1371
1372 if (gpreGlob.sw_ids)
1373 {
1374 reference->add_byte(isc_sdl_rid);
1375 reference->add_byte(reference->ref_id);
1376 reference->add_byte(isc_sdl_fid);
1377 reference->add_byte(field->fld_id);
1378 }
1379 else
1380 {
1381 reference->add_byte(isc_sdl_relation);
1382 reference->add_byte(static_cast<int>(strlen(field->fld_relation->rel_symbol->sym_string)));
1383 for (const TEXT* p = field->fld_relation->rel_symbol->sym_string; *p; p++)
1384 reference->add_byte(*p);
1385 reference->add_byte(isc_sdl_field);
1386 reference->add_byte(static_cast<int>(strlen(field->fld_symbol->sym_string)));
1387 for (const TEXT* p = field->fld_symbol->sym_string; *p; p++)
1388 reference->add_byte(*p);
1389 }
1390
1391 // The loops for the dimensions
1392
1393 stuff_sdl_loops(reference, field);
1394
1395 // The array element and its "subscripts"

Callers 1

CME_exprFunction · 0.85

Calls 9

CMP_checkFunction · 0.85
CPR_errorFunction · 0.85
MSC_allocFunction · 0.85
CMP_next_identFunction · 0.85
cmp_sdl_dtypeFunction · 0.85
stuff_sdl_loopsFunction · 0.85
stuff_sdl_elementFunction · 0.85
PRETTY_print_sdlFunction · 0.85
add_byteMethod · 0.45

Tested by

no test coverage detected