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

Function get_ref

src/gpre/sqe.cpp:1401–1467  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1399//
1400
1401static gpre_fld* get_ref( gpre_nod* expr)
1402{
1403 gpre_fld* field;
1404
1405 assert_IS_NOD(expr);
1406
1407 if (expr->nod_type == nod_via || expr->nod_type == nod_cast)
1408 {
1409 field = (gpre_fld*) MSC_alloc(FLD_LEN);
1410 CME_get_dtype(expr, field);
1411 if (field->fld_dtype && (field->fld_dtype <= dtype_any_text))
1412 field->fld_flags |= FLD_text;
1413 return field;
1414 }
1415
1416 ref* reference;
1417
1418 switch (expr->nod_type)
1419 {
1420 case nod_field:
1421 reference = (ref*) expr->nod_arg[0];
1422 return reference->ref_field;
1423
1424
1425 case nod_array:
1426 reference = (ref*) expr->nod_arg[0];
1427 return reference->ref_field->fld_array;
1428
1429 case nod_agg_count:
1430 case nod_agg_max:
1431 case nod_agg_min:
1432 case nod_agg_total:
1433 case nod_agg_average:
1434 case nod_plus:
1435 case nod_minus:
1436 case nod_times:
1437 case nod_divide:
1438 case nod_negate:
1439 case nod_upcase:
1440 case nod_lowcase:
1441 case nod_concatenate:
1442 {
1443 gpre_nod** ptr = expr->nod_arg;
1444 for (const gpre_nod* const* const end = ptr + expr->nod_count; ptr < end; ptr++)
1445 {
1446 if (field = get_ref(*ptr))
1447 return field;
1448 }
1449 break;
1450 }
1451
1452 // Begin date/time/timestamp support
1453 case nod_extract:
1454 if (field = get_ref(expr->nod_arg[1]))
1455 return field;
1456 break;
1457 // End date/time/timestamp support
1458 case nod_map_ref:

Callers 1

pairFunction · 0.85

Calls 2

MSC_allocFunction · 0.85
CME_get_dtypeFunction · 0.85

Tested by

no test coverage detected