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

Function create_matching_blr

src/gpre/cmd.cpp:513–575  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

511//
512
513static void create_matching_blr(gpre_req* request, const cnstrt* constraint)
514{
515 // count primary key columns
516 const gpre_lls* prim_key_fld = constraint->cnstrt_referred_fields;
517 const gpre_lls* field = prim_key_fld;
518
519 fb_assert(field != NULL);
520
521 USHORT prim_key_num_flds = 0;
522 while (field)
523 {
524 prim_key_num_flds++;
525 field = field->lls_next;
526 }
527
528 fb_assert(prim_key_num_flds > 0);
529
530 // count of foreign key columns
531 const gpre_lls* for_key_fld = constraint->cnstrt_fields;
532 field = for_key_fld;
533
534 fb_assert(field != NULL);
535
536 USHORT for_key_num_flds = 0;
537 while (field)
538 {
539 for_key_num_flds++;
540 field = field->lls_next;
541 }
542
543 fb_assert(for_key_num_flds > 0);
544 fb_assert(prim_key_num_flds == for_key_num_flds);
545
546 request->add_byte(blr_boolean);
547 if (prim_key_num_flds > 1)
548 request->add_byte(blr_and);
549
550 USHORT num_flds = 0;
551
552 do {
553 request->add_byte(blr_eql);
554
555 const str* for_key_fld_name = (STR) for_key_fld->lls_object;
556 const str* prim_key_fld_name = (STR) prim_key_fld->lls_object;
557
558 request->add_byte(blr_field);
559 request->add_byte((SSHORT) 2);
560 put_cstring(request, 0, for_key_fld_name->str_string);
561 request->add_byte(blr_field);
562 request->add_byte((SSHORT) 0);
563 put_cstring(request, 0, prim_key_fld_name->str_string);
564
565 ++num_flds;
566
567 if (prim_key_num_flds - num_flds >= 2)
568 request->add_byte(blr_and);
569
570 for_key_fld = for_key_fld->lls_next;

Callers 4

create_upd_cascade_trgFunction · 0.85
create_del_cascade_trgFunction · 0.85
create_set_default_trgFunction · 0.85
create_set_null_trgFunction · 0.85

Calls 2

put_cstringFunction · 0.85
add_byteMethod · 0.45

Tested by

no test coverage detected