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

Function gen_event_init

src/gpre/languages/rmc.cpp:2401–2459  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2399//
2400
2401static void gen_event_init( const act* action)
2402{
2403 const TEXT *pattern1 = "CALL \"%S1\" USING %S4%N1A, %S4%N1B, %N2, %S6 GIVING %S4%N1L";
2404 const TEXT *pattern2 = "CALL \"%S2\" USING %V1, %DH, %S4%N1L, %S4%N1A, %S4%N1B";
2405 const TEXT *pattern3 = "CALL \"%S3\" USING %S5, %S4%N1L, %S4%N1A, %S4%N1B";
2406
2407 const gpre_nod* init = (gpre_nod*) action->act_object;
2408 const gpre_nod* event_list = init->nod_arg[1];
2409
2410 const USHORT column = static_cast<USHORT>(strlen(names[COLUMN]));
2411
2412 PAT args;
2413 args.pat_database = (gpre_dbb*) init->nod_arg[3];
2414 args.pat_vector1 = status_vector(action);
2415 args.pat_value1 = (int) (IPTR) init->nod_arg[2];
2416 args.pat_value2 = (int) event_list->nod_count;
2417 args.pat_string1 = ISC_EVENT_BLOCK;
2418 args.pat_string2 = ISC_EVENT_WAIT;
2419 args.pat_string3 = ISC_EVENT_COUNTS;
2420 args.pat_string4 = names[isc_a_pos];
2421 args.pat_string5 = names[ISC_EVENTS_VECTOR];
2422 args.pat_string6 = names[ISC_EVENT_NAMES_VECTOR];
2423
2424 // generate call to dynamically generate event blocks
2425
2426 TEXT variable[MAX_REF_SIZE];
2427 const gpre_nod *const *ptr, *const *end;
2428 SSHORT count;
2429 for (ptr = event_list->nod_arg, count = 0, end = ptr + event_list->nod_count; ptr < end; ptr++)
2430 {
2431 count++;
2432 const gpre_nod* node = *ptr;
2433 if (node->nod_type == nod_field)
2434 {
2435 const ref* reference = (ref*) node->nod_arg[0];
2436 gen_name(variable, reference, true);
2437 printa(names[COLUMN], false, "MOVE %s TO %s(%d)",
2438 variable, names[ISC_EVENT_NAMES2], count);
2439 }
2440 else
2441 printa(names[COLUMN], false, "MOVE %s TO %s(%d)",
2442 (TEXT*) node->nod_arg[0], names[ISC_EVENT_NAMES2], count);
2443
2444 printa(names[COLUMN], true, EVENT_MOVE_TEMPLATE, ISC_BADDRESS,
2445 names[ISC_EVENT_NAMES2], count, names[ISC_EVENT_NAMES], count);
2446 }
2447
2448 PATTERN_expand(column, pattern1, &args);
2449
2450 // generate actual call to event_wait
2451
2452 PATTERN_expand(column, pattern2, &args);
2453
2454 // get change in event counts, copying event parameter block for reuse
2455
2456 PATTERN_expand(column, pattern3, &args);
2457 fprintf(gpreGlob.out_file, "\n");
2458 set_sqlcode(action);

Callers 1

RMC_actionFunction · 0.70

Calls 5

PATTERN_expandFunction · 0.85
status_vectorFunction · 0.70
gen_nameFunction · 0.70
printaFunction · 0.70
set_sqlcodeFunction · 0.70

Tested by

no test coverage detected