| 2394 | // |
| 2395 | |
| 2396 | static void gen_get_or_put_slice(const act* action, const ref* reference, bool get, int column) |
| 2397 | { |
| 2398 | const TEXT* pattern1 = |
| 2399 | "isc_get_slice (%V1, &%DH, &%RT, &%S2, (short) %N1, (char*) %S3, 0, (%S6*) 0, (%S6) %L1, %S5, &isc_array_length);"; |
| 2400 | const TEXT* pattern2 = |
| 2401 | "isc_put_slice (%V1, &%DH, &%RT, &%S2, (short) %N1, (char*) %S3, 0, (%S6*) 0, (%S6) %L1, (void*) %S5);"; |
| 2402 | |
| 2403 | if (!(reference->ref_flags & REF_fetch_array)) |
| 2404 | return; |
| 2405 | |
| 2406 | TEXT s1[MAX_REF_SIZE], s2[MAX_REF_SIZE]; |
| 2407 | PAT args; |
| 2408 | args.pat_request = action->act_request; |
| 2409 | args.pat_condition = get; // get or put slice |
| 2410 | args.pat_vector1 = status_vector(action); // status vector |
| 2411 | args.pat_database = action->act_request->req_database; // database handle |
| 2412 | gen_name(s1, reference, true); // blob handle |
| 2413 | args.pat_string2 = s1; |
| 2414 | args.pat_value1 = reference->ref_sdl_length; // slice description length |
| 2415 | sprintf(s2, "isc_%d", reference->ref_sdl_ident); // slice description |
| 2416 | args.pat_string3 = s2; |
| 2417 | |
| 2418 | args.pat_long1 = reference->ref_field->fld_array_info->ary_size; |
| 2419 | // slice size |
| 2420 | |
| 2421 | TEXT s4[MAX_REF_SIZE]; |
| 2422 | if (action->act_flags & ACT_sql) |
| 2423 | args.pat_string5 = reference->ref_value; |
| 2424 | else |
| 2425 | { |
| 2426 | sprintf(s4, "isc_%d", reference->ref_field->fld_array_info->ary_ident); |
| 2427 | args.pat_string5 = s4; // array name |
| 2428 | } |
| 2429 | |
| 2430 | args.pat_string6 = DCL_LONG; |
| 2431 | |
| 2432 | PATTERN_expand((USHORT) column, get ? pattern1 : pattern2, &args); |
| 2433 | |
| 2434 | set_sqlcode(action, column); |
| 2435 | if (action->act_flags & ACT_sql) |
| 2436 | gen_whenever(action->act_whenever, column); |
| 2437 | } |
| 2438 | |
| 2439 | |
| 2440 | //____________________________________________________________ |
no test coverage detected