Lines 958-966
Link Here
|
958 |
FMT format; |
958 |
FMT format; |
959 |
USHORT id; |
959 |
USHORT id; |
960 |
|
960 |
|
961 |
id = (USHORT) node->nod_arg[e_fld_id]; |
961 |
id = (USHORT)(IPTR) node->nod_arg[e_fld_id]; |
962 |
format = |
962 |
format = |
963 |
CMP_format(tdbb, csb, (USHORT) node->nod_arg[e_fld_stream]); |
963 |
CMP_format(tdbb, csb, (USHORT)(IPTR) node->nod_arg[e_fld_stream]); |
964 |
if (id >= format->fmt_count) { |
964 |
if (id >= format->fmt_count) { |
965 |
desc->dsc_dtype = dtype_null; |
965 |
desc->dsc_dtype = dtype_null; |
966 |
desc->dsc_length = 0; |
966 |
desc->dsc_length = 0; |
Lines 983-991
Link Here
|
983 |
|
983 |
|
984 |
sub = node->nod_arg[e_scl_field]; |
984 |
sub = node->nod_arg[e_scl_field]; |
985 |
relation = |
985 |
relation = |
986 |
csb->csb_rpt[(USHORT) sub-> |
986 |
csb->csb_rpt[(USHORT)(IPTR) sub-> |
987 |
nod_arg[e_fld_stream]].csb_relation; |
987 |
nod_arg[e_fld_stream]].csb_relation; |
988 |
id = (USHORT) sub->nod_arg[e_fld_id]; |
988 |
id = (USHORT)(IPTR) sub->nod_arg[e_fld_id]; |
989 |
field = MET_get_field(relation, id); |
989 |
field = MET_get_field(relation, id); |
990 |
if (!field || !(array = field->fld_array)) |
990 |
if (!field || !(array = field->fld_array)) |
991 |
IBERROR(223); /* msg 223 argument of scalar operation must be an array */ |
991 |
IBERROR(223); /* msg 223 argument of scalar operation must be an array */ |
Lines 1661-1667
Link Here
|
1661 |
return; |
1661 |
return; |
1662 |
|
1662 |
|
1663 |
case nod_extract: |
1663 |
case nod_extract: |
1664 |
if ((ULONG) node->nod_arg[e_extract_part] == blr_extract_second) { |
1664 |
if ((ULONG)(IPTR) node->nod_arg[e_extract_part] == blr_extract_second) { |
1665 |
/* QUADDATE - SECOND returns a float, or scaled! */ |
1665 |
/* QUADDATE - SECOND returns a float, or scaled! */ |
1666 |
desc->dsc_dtype = dtype_long; |
1666 |
desc->dsc_dtype = dtype_long; |
1667 |
desc->dsc_length = sizeof(ULONG); |
1667 |
desc->dsc_length = sizeof(ULONG); |
Lines 1720-1726
Link Here
|
1720 |
|
1720 |
|
1721 |
message = node->nod_arg[e_arg_message]; |
1721 |
message = node->nod_arg[e_arg_message]; |
1722 |
format = (FMT) message->nod_arg[e_msg_format]; |
1722 |
format = (FMT) message->nod_arg[e_msg_format]; |
1723 |
*desc = format->fmt_desc[(int) node->nod_arg[e_arg_number]]; |
1723 |
*desc = format->fmt_desc[(int)(IPTR) node->nod_arg[e_arg_number]]; |
1724 |
return; |
1724 |
return; |
1725 |
} |
1725 |
} |
1726 |
|
1726 |
|
Lines 2653-2660
Link Here
|
2653 |
!input->nod_arg[e_fld_id] && !input->nod_arg[e_fld_stream]) |
2653 |
!input->nod_arg[e_fld_id] && !input->nod_arg[e_fld_stream]) |
2654 |
--field_id; |
2654 |
--field_id; |
2655 |
else |
2655 |
else |
2656 |
field_id = (USHORT) input->nod_arg[e_fld_id]; |
2656 |
field_id = (USHORT)(IPTR) input->nod_arg[e_fld_id]; |
2657 |
stream = (USHORT) input->nod_arg[e_fld_stream]; |
2657 |
stream = (USHORT)(IPTR) input->nod_arg[e_fld_stream]; |
2658 |
if (remap_fld) { |
2658 |
if (remap_fld) { |
2659 |
JRD_REL relation; |
2659 |
JRD_REL relation; |
2660 |
JRD_FLD field; |
2660 |
JRD_FLD field; |
Lines 2662-2668
Link Here
|
2662 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
2662 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
2663 |
field = MET_get_field(relation, field_id); |
2663 |
field = MET_get_field(relation, field_id); |
2664 |
if (field->fld_source) |
2664 |
if (field->fld_source) |
2665 |
field_id = (USHORT) field->fld_source->nod_arg[e_fld_id]; |
2665 |
field_id = (USHORT)(IPTR) field->fld_source->nod_arg[e_fld_id]; |
2666 |
} |
2666 |
} |
2667 |
if (remap) |
2667 |
if (remap) |
2668 |
stream = remap[stream]; |
2668 |
stream = remap[stream]; |
Lines 2773-2779
Link Here
|
2773 |
node->nod_type = input->nod_type; |
2773 |
node->nod_type = input->nod_type; |
2774 |
node->nod_count = 0; |
2774 |
node->nod_count = 0; |
2775 |
|
2775 |
|
2776 |
stream = (USHORT) input->nod_arg[e_rel_stream]; |
2776 |
stream = (USHORT)(IPTR) input->nod_arg[e_rel_stream]; |
2777 |
/** |
2777 |
/** |
2778 |
Last entry in the remap contains the the original stream number. |
2778 |
Last entry in the remap contains the the original stream number. |
2779 |
Get that stream number so that the flags can be copied |
2779 |
Get that stream number so that the flags can be copied |
Lines 2853-2859
Link Here
|
2853 |
node->nod_arg[e_prc_inputs] = |
2853 |
node->nod_arg[e_prc_inputs] = |
2854 |
copy(tdbb, csb, input->nod_arg[e_prc_inputs], remap, field_id, |
2854 |
copy(tdbb, csb, input->nod_arg[e_prc_inputs], remap, field_id, |
2855 |
node->nod_arg[e_prc_in_msg], remap_fld); |
2855 |
node->nod_arg[e_prc_in_msg], remap_fld); |
2856 |
stream = (USHORT) input->nod_arg[e_prc_stream]; |
2856 |
stream = (USHORT)(IPTR) input->nod_arg[e_prc_stream]; |
2857 |
new_stream = (*csb)->csb_n_stream++; |
2857 |
new_stream = (*csb)->csb_n_stream++; |
2858 |
node->nod_arg[e_prc_stream] = (JRD_NOD) (SLONG) new_stream; |
2858 |
node->nod_arg[e_prc_stream] = (JRD_NOD) (SLONG) new_stream; |
2859 |
/* TMN: Here we should really have the following assert */ |
2859 |
/* TMN: Here we should really have the following assert */ |
Lines 2863-2869
Link Here
|
2863 |
element = CMP_csb_element(csb, new_stream); |
2863 |
element = CMP_csb_element(csb, new_stream); |
2864 |
// SKIDDER: Maybe we need to check if we really found a procedure ? |
2864 |
// SKIDDER: Maybe we need to check if we really found a procedure ? |
2865 |
element->csb_procedure = MET_lookup_procedure_id(tdbb, |
2865 |
element->csb_procedure = MET_lookup_procedure_id(tdbb, |
2866 |
(SSHORT)node->nod_arg[e_prc_procedure],FALSE,FALSE,0); |
2866 |
(SSHORT)(IPTR)node->nod_arg[e_prc_procedure],FALSE,FALSE,0); |
2867 |
|
2867 |
|
2868 |
(*csb)->csb_rpt[new_stream].csb_flags |= |
2868 |
(*csb)->csb_rpt[new_stream].csb_flags |= |
2869 |
(*csb)->csb_rpt[stream].csb_flags & csb_no_dbkey; |
2869 |
(*csb)->csb_rpt[stream].csb_flags & csb_no_dbkey; |
Lines 2876-2882
Link Here
|
2876 |
node = PAR_make_node(tdbb, e_agg_length); |
2876 |
node = PAR_make_node(tdbb, e_agg_length); |
2877 |
node->nod_type = input->nod_type; |
2877 |
node->nod_type = input->nod_type; |
2878 |
node->nod_count = 0; |
2878 |
node->nod_count = 0; |
2879 |
stream = (USHORT) input->nod_arg[e_agg_stream]; |
2879 |
stream = (USHORT)(IPTR) input->nod_arg[e_agg_stream]; |
2880 |
assert(stream <= MAX_STREAMS); |
2880 |
assert(stream <= MAX_STREAMS); |
2881 |
new_stream = (*csb)->csb_n_stream++; |
2881 |
new_stream = (*csb)->csb_n_stream++; |
2882 |
assert(new_stream <= MAX_STREAMS); |
2882 |
assert(new_stream <= MAX_STREAMS); |
Lines 2905-2911
Link Here
|
2905 |
node = PAR_make_node(tdbb, e_uni_length); |
2905 |
node = PAR_make_node(tdbb, e_uni_length); |
2906 |
node->nod_type = input->nod_type; |
2906 |
node->nod_type = input->nod_type; |
2907 |
node->nod_count = 2; |
2907 |
node->nod_count = 2; |
2908 |
stream = (USHORT) input->nod_arg[e_uni_stream]; |
2908 |
stream = (USHORT)(IPTR) input->nod_arg[e_uni_stream]; |
2909 |
new_stream = (*csb)->csb_n_stream++; |
2909 |
new_stream = (*csb)->csb_n_stream++; |
2910 |
node->nod_arg[e_uni_stream] = (JRD_NOD) (SLONG) new_stream; |
2910 |
node->nod_arg[e_uni_stream] = (JRD_NOD) (SLONG) new_stream; |
2911 |
/* TMN: Here we should really have the following assert */ |
2911 |
/* TMN: Here we should really have the following assert */ |
Lines 3043-3049
Link Here
|
3043 |
csb_repeat *tail; |
3043 |
csb_repeat *tail; |
3044 |
JRD_REL relation; |
3044 |
JRD_REL relation; |
3045 |
|
3045 |
|
3046 |
stream = (USHORT) node->nod_arg[e_rel_stream]; |
3046 |
stream = (USHORT)(IPTR) node->nod_arg[e_rel_stream]; |
3047 |
csb->csb_rpt[stream].csb_flags |= csb_no_dbkey; |
3047 |
csb->csb_rpt[stream].csb_flags |= csb_no_dbkey; |
3048 |
tail = &csb->csb_rpt[stream]; |
3048 |
tail = &csb->csb_rpt[stream]; |
3049 |
if ( (relation = tail->csb_relation) ) |
3049 |
if ( (relation = tail->csb_relation) ) |
Lines 3271-3277
Link Here
|
3271 |
JRD_FLD field; |
3271 |
JRD_FLD field; |
3272 |
UCHAR *map, local_map[MAP_LENGTH]; |
3272 |
UCHAR *map, local_map[MAP_LENGTH]; |
3273 |
|
3273 |
|
3274 |
stream = (USHORT) node->nod_arg[e_fld_stream]; |
3274 |
stream = (USHORT)(IPTR) node->nod_arg[e_fld_stream]; |
3275 |
|
3275 |
|
3276 |
/* Look at all rse's which are lower in scope than the rse which this field |
3276 |
/* Look at all rse's which are lower in scope than the rse which this field |
3277 |
is referencing, and mark them as varying -- the rule is that if a field |
3277 |
is referencing, and mark them as varying -- the rule is that if a field |
Lines 3292-3298
Link Here
|
3292 |
if (!(relation = tail->csb_relation) || |
3292 |
if (!(relation = tail->csb_relation) || |
3293 |
!(field = |
3293 |
!(field = |
3294 |
MET_get_field(relation, |
3294 |
MET_get_field(relation, |
3295 |
(USHORT) node->nod_arg[e_fld_id]))) break; |
3295 |
(USHORT)(IPTR) node->nod_arg[e_fld_id]))) break; |
3296 |
|
3296 |
|
3297 |
/* if this is a modify or store, check REFERENCES access to any foreign keys. */ |
3297 |
/* if this is a modify or store, check REFERENCES access to any foreign keys. */ |
3298 |
|
3298 |
|
Lines 3404-3412
Link Here
|
3404 |
|
3404 |
|
3405 |
sub = node->nod_arg[e_asgn_from]; |
3405 |
sub = node->nod_arg[e_asgn_from]; |
3406 |
if (sub->nod_type == nod_field) { |
3406 |
if (sub->nod_type == nod_field) { |
3407 |
stream = (USHORT) sub->nod_arg[e_fld_stream]; |
3407 |
stream = (USHORT)(IPTR) sub->nod_arg[e_fld_stream]; |
3408 |
field = MET_get_field((*csb)->csb_rpt[stream].csb_relation, |
3408 |
field = MET_get_field((*csb)->csb_rpt[stream].csb_relation, |
3409 |
(USHORT) sub->nod_arg[e_fld_id]); |
3409 |
(USHORT)(IPTR) sub->nod_arg[e_fld_id]); |
3410 |
if (field) |
3410 |
if (field) |
3411 |
node->nod_arg[e_asgn_missing2] = field->fld_missing_value; |
3411 |
node->nod_arg[e_asgn_missing2] = field->fld_missing_value; |
3412 |
} |
3412 |
} |
Lines 3414-3425
Link Here
|
3414 |
sub = node->nod_arg[e_asgn_to]; |
3414 |
sub = node->nod_arg[e_asgn_to]; |
3415 |
if (sub->nod_type != nod_field) |
3415 |
if (sub->nod_type != nod_field) |
3416 |
break; |
3416 |
break; |
3417 |
stream = (USHORT) sub->nod_arg[e_fld_stream]; |
3417 |
stream = (USHORT)(IPTR) sub->nod_arg[e_fld_stream]; |
3418 |
tail = &(*csb)->csb_rpt[stream]; |
3418 |
tail = &(*csb)->csb_rpt[stream]; |
3419 |
if (! |
3419 |
if (! |
3420 |
(field = |
3420 |
(field = |
3421 |
MET_get_field(tail->csb_relation, |
3421 |
MET_get_field(tail->csb_relation, |
3422 |
(USHORT) sub->nod_arg[e_fld_id]))) break; |
3422 |
(USHORT)(IPTR) sub->nod_arg[e_fld_id]))) break; |
3423 |
if (field->fld_missing_value) { |
3423 |
if (field->fld_missing_value) { |
3424 |
node->nod_arg[e_asgn_missing] = field->fld_missing_value; |
3424 |
node->nod_arg[e_asgn_missing] = field->fld_missing_value; |
3425 |
node->nod_count = 3; |
3425 |
node->nod_count = 3; |
Lines 3433-3439
Link Here
|
3433 |
break; |
3433 |
break; |
3434 |
|
3434 |
|
3435 |
case nod_modify: |
3435 |
case nod_modify: |
3436 |
stream = (USHORT) node->nod_arg[e_mod_new_stream]; |
3436 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_new_stream]; |
3437 |
tail = &(*csb)->csb_rpt[stream]; |
3437 |
tail = &(*csb)->csb_rpt[stream]; |
3438 |
tail->csb_flags |= csb_modify; |
3438 |
tail->csb_flags |= csb_modify; |
3439 |
pass1_modify(tdbb, csb, node); |
3439 |
pass1_modify(tdbb, csb, node); |
Lines 3441-3453
Link Here
|
3441 |
/* assert(node->nod_arg [e_mod_new_stream] <= MAX_USHORT); */ |
3441 |
/* assert(node->nod_arg [e_mod_new_stream] <= MAX_USHORT); */ |
3442 |
if ( (node->nod_arg[e_mod_validate] = |
3442 |
if ( (node->nod_arg[e_mod_validate] = |
3443 |
make_validation(tdbb, csb, |
3443 |
make_validation(tdbb, csb, |
3444 |
(USHORT) node-> |
3444 |
(USHORT)(IPTR) node-> |
3445 |
nod_arg[e_mod_new_stream])) ) node->nod_count = |
3445 |
nod_arg[e_mod_new_stream])) ) node->nod_count = |
3446 |
MAX(node->nod_count, (USHORT) e_mod_validate + 1); |
3446 |
MAX(node->nod_count, (USHORT) e_mod_validate + 1); |
3447 |
break; |
3447 |
break; |
3448 |
|
3448 |
|
3449 |
case nod_erase: |
3449 |
case nod_erase: |
3450 |
stream = (USHORT) node->nod_arg[e_erase_stream]; |
3450 |
stream = (USHORT)(IPTR) node->nod_arg[e_erase_stream]; |
3451 |
tail = &(*csb)->csb_rpt[stream]; |
3451 |
tail = &(*csb)->csb_rpt[stream]; |
3452 |
tail->csb_flags |= csb_erase; |
3452 |
tail->csb_flags |= csb_erase; |
3453 |
pass1_erase(tdbb, csb, node); |
3453 |
pass1_erase(tdbb, csb, node); |
Lines 3463-3474
Link Here
|
3463 |
|
3463 |
|
3464 |
case nod_store: |
3464 |
case nod_store: |
3465 |
sub = node->nod_arg[e_sto_relation]; |
3465 |
sub = node->nod_arg[e_sto_relation]; |
3466 |
stream = (USHORT) sub->nod_arg[e_rel_stream]; |
3466 |
stream = (USHORT)(IPTR) sub->nod_arg[e_rel_stream]; |
3467 |
tail = &(*csb)->csb_rpt[stream]; |
3467 |
tail = &(*csb)->csb_rpt[stream]; |
3468 |
tail->csb_flags |= csb_store; |
3468 |
tail->csb_flags |= csb_store; |
3469 |
sub = pass1_store(tdbb, csb, node); |
3469 |
sub = pass1_store(tdbb, csb, node); |
3470 |
if (sub) { |
3470 |
if (sub) { |
3471 |
stream = (USHORT) sub->nod_arg[e_rel_stream]; |
3471 |
stream = (USHORT)(IPTR) sub->nod_arg[e_rel_stream]; |
3472 |
if ((!node->nod_arg[e_sto_sub_store]) && |
3472 |
if ((!node->nod_arg[e_sto_sub_store]) && |
3473 |
(node->nod_arg[e_sto_validate] = |
3473 |
(node->nod_arg[e_sto_validate] = |
3474 |
make_validation(tdbb, csb, stream))) node->nod_count = |
3474 |
make_validation(tdbb, csb, stream))) node->nod_count = |
Lines 3495-3501
Link Here
|
3495 |
|
3495 |
|
3496 |
case nod_aggregate: |
3496 |
case nod_aggregate: |
3497 |
assert((int)node->nod_arg[e_agg_stream] <= MAX_STREAMS); |
3497 |
assert((int)node->nod_arg[e_agg_stream] <= MAX_STREAMS); |
3498 |
(*csb)->csb_rpt[(USHORT) node->nod_arg[e_agg_stream]].csb_flags |= |
3498 |
(*csb)->csb_rpt[(USHORT)(IPTR) node->nod_arg[e_agg_stream]].csb_flags |= |
3499 |
csb_no_dbkey; |
3499 |
csb_no_dbkey; |
3500 |
ignore_dbkey(tdbb, *csb, (RSE) node->nod_arg[e_agg_rse], view); |
3500 |
ignore_dbkey(tdbb, *csb, (RSE) node->nod_arg[e_agg_rse], view); |
3501 |
node->nod_arg[e_agg_rse] = |
3501 |
node->nod_arg[e_agg_rse] = |
Lines 3523-3529
Link Here
|
3523 |
NOD_T type; |
3523 |
NOD_T type; |
3524 |
|
3524 |
|
3525 |
type = node->nod_type; |
3525 |
type = node->nod_type; |
3526 |
stream = (USHORT) node->nod_arg[0]; |
3526 |
stream = (USHORT)(IPTR) node->nod_arg[0]; |
3527 |
|
3527 |
|
3528 |
if (!(*csb)->csb_rpt[stream].csb_map) |
3528 |
if (!(*csb)->csb_rpt[stream].csb_map) |
3529 |
return node; |
3529 |
return node; |
Lines 3558-3564
Link Here
|
3558 |
break; |
3558 |
break; |
3559 |
|
3559 |
|
3560 |
case nod_cardinality: |
3560 |
case nod_cardinality: |
3561 |
stream = (USHORT) node->nod_arg[e_card_stream]; |
3561 |
stream = (USHORT)(IPTR) node->nod_arg[e_card_stream]; |
3562 |
(*csb)->csb_rpt[stream].csb_flags |= csb_compute; |
3562 |
(*csb)->csb_rpt[stream].csb_flags |= csb_compute; |
3563 |
break; |
3563 |
break; |
3564 |
|
3564 |
|
Lines 3625-3631
Link Here
|
3625 |
/* To support views of views, loop until we hit a real relation */ |
3625 |
/* To support views of views, loop until we hit a real relation */ |
3626 |
|
3626 |
|
3627 |
for (;;) { |
3627 |
for (;;) { |
3628 |
stream = new_stream = (USHORT) node->nod_arg[e_erase_stream]; |
3628 |
stream = new_stream = (USHORT)(IPTR) node->nod_arg[e_erase_stream]; |
3629 |
tail = &(*csb)->csb_rpt[stream]; |
3629 |
tail = &(*csb)->csb_rpt[stream]; |
3630 |
tail->csb_flags |= csb_erase; |
3630 |
tail->csb_flags |= csb_erase; |
3631 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
3631 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
Lines 3693-3699
Link Here
|
3693 |
|
3693 |
|
3694 |
parent = relation; |
3694 |
parent = relation; |
3695 |
parent_stream = stream; |
3695 |
parent_stream = stream; |
3696 |
new_stream = (USHORT) source->nod_arg[e_rel_stream]; |
3696 |
new_stream = (USHORT)(IPTR) source->nod_arg[e_rel_stream]; |
3697 |
node->nod_arg[e_erase_stream] = (JRD_NOD) (SLONG) map[new_stream]; |
3697 |
node->nod_arg[e_erase_stream] = (JRD_NOD) (SLONG) map[new_stream]; |
3698 |
} |
3698 |
} |
3699 |
} |
3699 |
} |
Lines 3740-3746
Link Here
|
3740 |
field = MET_get_field(relation, id); |
3740 |
field = MET_get_field(relation, id); |
3741 |
if (field->fld_source) |
3741 |
if (field->fld_source) |
3742 |
new_id = |
3742 |
new_id = |
3743 |
(USHORT) (JRD_NOD) (field->fld_source)->nod_arg[e_fld_id]; |
3743 |
(USHORT)(IPTR) (JRD_NOD) (field->fld_source)->nod_arg[e_fld_id]; |
3744 |
else |
3744 |
else |
3745 |
new_id = id; |
3745 |
new_id = id; |
3746 |
} |
3746 |
} |
Lines 3802-3809
Link Here
|
3802 |
/* To support views of views, loop until we hit a real relation */ |
3802 |
/* To support views of views, loop until we hit a real relation */ |
3803 |
|
3803 |
|
3804 |
for (;;) { |
3804 |
for (;;) { |
3805 |
stream = (USHORT) node->nod_arg[e_mod_org_stream]; |
3805 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_org_stream]; |
3806 |
new_stream = (USHORT) node->nod_arg[e_mod_new_stream]; |
3806 |
new_stream = (USHORT)(IPTR) node->nod_arg[e_mod_new_stream]; |
3807 |
tail = &(*csb)->csb_rpt[new_stream]; |
3807 |
tail = &(*csb)->csb_rpt[new_stream]; |
3808 |
tail->csb_flags |= csb_modify; |
3808 |
tail->csb_flags |= csb_modify; |
3809 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
3809 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
Lines 3842-3848
Link Here
|
3842 |
node->nod_count = |
3842 |
node->nod_count = |
3843 |
MAX(node->nod_count, (USHORT) e_mod_map_view + 1); |
3843 |
MAX(node->nod_count, (USHORT) e_mod_map_view + 1); |
3844 |
map = (*csb)->csb_rpt[stream].csb_map; |
3844 |
map = (*csb)->csb_rpt[stream].csb_map; |
3845 |
stream = (USHORT) source->nod_arg[e_rel_stream]; |
3845 |
stream = (USHORT)(IPTR) source->nod_arg[e_rel_stream]; |
3846 |
stream = map[stream]; |
3846 |
stream = map[stream]; |
3847 |
view_stream = new_stream; |
3847 |
view_stream = new_stream; |
3848 |
|
3848 |
|
Lines 3850-3867
Link Here
|
3850 |
|
3850 |
|
3851 |
map = |
3851 |
map = |
3852 |
alloc_map(tdbb, csb, |
3852 |
alloc_map(tdbb, csb, |
3853 |
(SSHORT) node->nod_arg[e_mod_new_stream]); |
3853 |
(SSHORT)(IPTR) node->nod_arg[e_mod_new_stream]); |
3854 |
source = copy(tdbb, csb, source, map, 0, NULL, FALSE); |
3854 |
source = copy(tdbb, csb, source, map, 0, NULL, FALSE); |
3855 |
/* TMN: Here we should really have the following assert */ |
3855 |
/* TMN: Here we should really have the following assert */ |
3856 |
/* assert(source->nod_arg [e_rel_stream] <= MAX_UCHAR); */ |
3856 |
/* assert(source->nod_arg [e_rel_stream] <= MAX_UCHAR); */ |
3857 |
map[new_stream] = (UCHAR) source->nod_arg[e_rel_stream]; |
3857 |
map[new_stream] = (UCHAR)(IPTR) source->nod_arg[e_rel_stream]; |
3858 |
view_node = copy(tdbb, csb, node, map, 0, NULL, TRUE); |
3858 |
view_node = copy(tdbb, csb, node, map, 0, NULL, TRUE); |
3859 |
view_node->nod_arg[e_mod_org_stream] = (JRD_NOD) (SLONG) stream; |
3859 |
view_node->nod_arg[e_mod_org_stream] = (JRD_NOD) (SLONG) stream; |
3860 |
view_node->nod_arg[e_mod_new_stream] = |
3860 |
view_node->nod_arg[e_mod_new_stream] = |
3861 |
source->nod_arg[e_rel_stream]; |
3861 |
source->nod_arg[e_rel_stream]; |
3862 |
view_node->nod_arg[e_mod_map_view] = NULL; |
3862 |
view_node->nod_arg[e_mod_map_view] = NULL; |
3863 |
node->nod_arg[e_mod_sub_mod] = view_node; |
3863 |
node->nod_arg[e_mod_sub_mod] = view_node; |
3864 |
new_stream = (USHORT) source->nod_arg[e_rel_stream]; |
3864 |
new_stream = (USHORT)(IPTR) source->nod_arg[e_rel_stream]; |
3865 |
view_node->nod_arg[e_mod_statement] = |
3865 |
view_node->nod_arg[e_mod_statement] = |
3866 |
pass1_expand_view(tdbb, *csb, view_stream, new_stream, TRUE); |
3866 |
pass1_expand_view(tdbb, *csb, view_stream, new_stream, TRUE); |
3867 |
node->nod_count = |
3867 |
node->nod_count = |
Lines 3874-3887
Link Here
|
3874 |
/* View passes muster -- do some translation. Start with source stream */ |
3874 |
/* View passes muster -- do some translation. Start with source stream */ |
3875 |
|
3875 |
|
3876 |
map = (*csb)->csb_rpt[stream].csb_map; |
3876 |
map = (*csb)->csb_rpt[stream].csb_map; |
3877 |
stream = (USHORT) source->nod_arg[e_rel_stream]; |
3877 |
stream = (USHORT)(IPTR) source->nod_arg[e_rel_stream]; |
3878 |
node->nod_arg[e_mod_org_stream] = (JRD_NOD) (SLONG) map[stream]; |
3878 |
node->nod_arg[e_mod_org_stream] = (JRD_NOD) (SLONG) map[stream]; |
3879 |
|
3879 |
|
3880 |
/* Next, do update stream */ |
3880 |
/* Next, do update stream */ |
3881 |
|
3881 |
|
3882 |
map = |
3882 |
map = |
3883 |
alloc_map(tdbb, csb, |
3883 |
alloc_map(tdbb, csb, |
3884 |
(SSHORT) node->nod_arg[e_mod_new_stream]); |
3884 |
(SSHORT)(IPTR) node->nod_arg[e_mod_new_stream]); |
3885 |
source = copy(tdbb, csb, source, map, 0, NULL, FALSE); |
3885 |
source = copy(tdbb, csb, source, map, 0, NULL, FALSE); |
3886 |
node->nod_arg[e_mod_new_stream] = source->nod_arg[e_rel_stream]; |
3886 |
node->nod_arg[e_mod_new_stream] = source->nod_arg[e_rel_stream]; |
3887 |
} |
3887 |
} |
Lines 4128-4134
Link Here
|
4128 |
|
4128 |
|
4129 |
pass1(tdbb, csb, source, parent_view, view_stream, FALSE); |
4129 |
pass1(tdbb, csb, source, parent_view, view_stream, FALSE); |
4130 |
procedure = MET_lookup_procedure_id(tdbb, |
4130 |
procedure = MET_lookup_procedure_id(tdbb, |
4131 |
(SSHORT)source->nod_arg[e_prc_procedure], FALSE, FALSE, 0); |
4131 |
(SSHORT)(IPTR)source->nod_arg[e_prc_procedure], FALSE, FALSE, 0); |
4132 |
post_procedure_access(tdbb, *csb, procedure); |
4132 |
post_procedure_access(tdbb, *csb, procedure); |
4133 |
CMP_post_resource(&(*csb)->csb_resources, (BLK) procedure, |
4133 |
CMP_post_resource(&(*csb)->csb_resources, (BLK) procedure, |
4134 |
Resource::rsc_procedure, procedure->prc_id); |
4134 |
Resource::rsc_procedure, procedure->prc_id); |
Lines 4160-4166
Link Here
|
4160 |
view->rel_id); |
4160 |
view->rel_id); |
4161 |
source->nod_arg[e_rel_view] = (JRD_NOD) parent_view; |
4161 |
source->nod_arg[e_rel_view] = (JRD_NOD) parent_view; |
4162 |
|
4162 |
|
4163 |
stream = (USHORT) source->nod_arg[e_rel_stream]; |
4163 |
stream = (USHORT)(IPTR) source->nod_arg[e_rel_stream]; |
4164 |
element = CMP_csb_element(csb, stream); |
4164 |
element = CMP_csb_element(csb, stream); |
4165 |
element->csb_view = parent_view; |
4165 |
element->csb_view = parent_view; |
4166 |
/* TMN: Here we should really have the following assert */ |
4166 |
/* TMN: Here we should really have the following assert */ |
Lines 4175-4181
Link Here
|
4175 |
for (vcx_ptr = &parent_view->rel_view_contexts; *vcx_ptr; |
4175 |
for (vcx_ptr = &parent_view->rel_view_contexts; *vcx_ptr; |
4176 |
vcx_ptr = &(*vcx_ptr)->vcx_next) |
4176 |
vcx_ptr = &(*vcx_ptr)->vcx_next) |
4177 |
if ((*vcx_ptr)->vcx_context == |
4177 |
if ((*vcx_ptr)->vcx_context == |
4178 |
(USHORT) source->nod_arg[e_rel_context]) { |
4178 |
(USHORT)(IPTR) source->nod_arg[e_rel_context]) { |
4179 |
element->csb_alias = (*vcx_ptr)->vcx_context_name; |
4179 |
element->csb_alias = (*vcx_ptr)->vcx_context_name; |
4180 |
break; |
4180 |
break; |
4181 |
} |
4181 |
} |
Lines 4319-4325
Link Here
|
4319 |
|
4319 |
|
4320 |
for (;;) { |
4320 |
for (;;) { |
4321 |
original = node->nod_arg[e_sto_relation]; |
4321 |
original = node->nod_arg[e_sto_relation]; |
4322 |
stream = (USHORT) original->nod_arg[e_rel_stream]; |
4322 |
stream = (USHORT)(IPTR) original->nod_arg[e_rel_stream]; |
4323 |
tail = &(*csb)->csb_rpt[stream]; |
4323 |
tail = &(*csb)->csb_rpt[stream]; |
4324 |
tail->csb_flags |= csb_store; |
4324 |
tail->csb_flags |= csb_store; |
4325 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
4325 |
relation = (*csb)->csb_rpt[stream].csb_relation; |
Lines 4373-4379
Link Here
|
4373 |
node->nod_arg[e_sto_relation] = |
4373 |
node->nod_arg[e_sto_relation] = |
4374 |
copy(tdbb, csb, source, map, 0, NULL, FALSE); |
4374 |
copy(tdbb, csb, source, map, 0, NULL, FALSE); |
4375 |
new_stream = |
4375 |
new_stream = |
4376 |
(USHORT) node->nod_arg[e_sto_relation]->nod_arg[e_rel_stream]; |
4376 |
(USHORT)(IPTR) node->nod_arg[e_sto_relation]->nod_arg[e_rel_stream]; |
4377 |
node->nod_arg[e_sto_statement] = |
4377 |
node->nod_arg[e_sto_statement] = |
4378 |
pass1_expand_view(tdbb, *csb, stream, new_stream, TRUE); |
4378 |
pass1_expand_view(tdbb, *csb, stream, new_stream, TRUE); |
4379 |
node->nod_arg[e_sto_statement] = |
4379 |
node->nod_arg[e_sto_statement] = |
Lines 4721-4729
Link Here
|
4721 |
/* AB: Mark the streams involved with an UPDATE statement |
4721 |
/* AB: Mark the streams involved with an UPDATE statement |
4722 |
active. So that the optimizer can use indices for |
4722 |
active. So that the optimizer can use indices for |
4723 |
eventually used sub-selects. */ |
4723 |
eventually used sub-selects. */ |
4724 |
stream = (USHORT) node->nod_arg[e_mod_org_stream]; |
4724 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_org_stream]; |
4725 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
4725 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
4726 |
stream = (USHORT) node->nod_arg[e_mod_new_stream]; |
4726 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_new_stream]; |
4727 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
4727 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
4728 |
} |
4728 |
} |
4729 |
|
4729 |
|
Lines 4735-4743
Link Here
|
4735 |
|
4735 |
|
4736 |
if (node->nod_type == nod_modify) { |
4736 |
if (node->nod_type == nod_modify) { |
4737 |
/* AB: Remove the previous flags */ |
4737 |
/* AB: Remove the previous flags */ |
4738 |
stream = (USHORT) node->nod_arg[e_mod_org_stream]; |
4738 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_org_stream]; |
4739 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
4739 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
4740 |
stream = (USHORT) node->nod_arg[e_mod_new_stream]; |
4740 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_new_stream]; |
4741 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
4741 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
4742 |
} |
4742 |
} |
4743 |
|
4743 |
|
Lines 4836-4842
Link Here
|
4836 |
FMT format; |
4836 |
FMT format; |
4837 |
fmt::fmt_desc_iterator desc; |
4837 |
fmt::fmt_desc_iterator desc; |
4838 |
|
4838 |
|
4839 |
stream = (USHORT) node->nod_arg[e_mod_org_stream]; |
4839 |
stream = (USHORT)(IPTR) node->nod_arg[e_mod_org_stream]; |
4840 |
csb->csb_rpt[stream].csb_flags |= csb_update; |
4840 |
csb->csb_rpt[stream].csb_flags |= csb_update; |
4841 |
format = CMP_format(tdbb, csb, stream); |
4841 |
format = CMP_format(tdbb, csb, stream); |
4842 |
desc = format->fmt_desc.begin(); |
4842 |
desc = format->fmt_desc.begin(); |
Lines 4861-4873
Link Here
|
4861 |
break; |
4861 |
break; |
4862 |
|
4862 |
|
4863 |
case nod_erase: |
4863 |
case nod_erase: |
4864 |
stream = (USHORT) node->nod_arg[e_erase_stream]; |
4864 |
stream = (USHORT)(IPTR) node->nod_arg[e_erase_stream]; |
4865 |
csb->csb_rpt[stream].csb_flags |= csb_update; |
4865 |
csb->csb_rpt[stream].csb_flags |= csb_update; |
4866 |
break; |
4866 |
break; |
4867 |
|
4867 |
|
4868 |
case nod_field: |
4868 |
case nod_field: |
4869 |
stream = (USHORT) node->nod_arg[e_fld_stream]; |
4869 |
stream = (USHORT)(IPTR) node->nod_arg[e_fld_stream]; |
4870 |
id = (USHORT) node->nod_arg[e_fld_id]; |
4870 |
id = (USHORT)(IPTR) node->nod_arg[e_fld_id]; |
4871 |
SBM_set(tdbb, &csb->csb_rpt[stream].csb_fields, id); |
4871 |
SBM_set(tdbb, &csb->csb_rpt[stream].csb_fields, id); |
4872 |
if (node->nod_flags & nod_value) { |
4872 |
if (node->nod_flags & nod_value) { |
4873 |
csb->csb_impure += sizeof(struct vlux); |
4873 |
csb->csb_impure += sizeof(struct vlux); |
Lines 4941-4947
Link Here
|
4941 |
pass2_rse(tdbb, csb, (RSE) node->nod_arg[e_agg_rse]); |
4941 |
pass2_rse(tdbb, csb, (RSE) node->nod_arg[e_agg_rse]); |
4942 |
pass2(tdbb, csb, node->nod_arg[e_agg_map], node); |
4942 |
pass2(tdbb, csb, node->nod_arg[e_agg_map], node); |
4943 |
pass2(tdbb, csb, node->nod_arg[e_agg_group], node); |
4943 |
pass2(tdbb, csb, node->nod_arg[e_agg_group], node); |
4944 |
stream = (USHORT) node->nod_arg[e_agg_stream]; |
4944 |
stream = (USHORT)(IPTR) node->nod_arg[e_agg_stream]; |
4945 |
assert(stream <= MAX_STREAMS); |
4945 |
assert(stream <= MAX_STREAMS); |
4946 |
process_map(tdbb, csb, node->nod_arg[e_agg_map], |
4946 |
process_map(tdbb, csb, node->nod_arg[e_agg_map], |
4947 |
&csb->csb_rpt[stream].csb_format); |
4947 |
&csb->csb_rpt[stream].csb_format); |
Lines 5050-5056
Link Here
|
5050 |
|
5050 |
|
5051 |
node = *ptr; |
5051 |
node = *ptr; |
5052 |
if (node->nod_type == nod_relation) { |
5052 |
if (node->nod_type == nod_relation) { |
5053 |
USHORT stream = (USHORT) node->nod_arg[e_rel_stream]; |
5053 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_rel_stream]; |
5054 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5054 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5055 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
5055 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
5056 |
} |
5056 |
} |
Lines 5058-5069
Link Here
|
5058 |
pass2_rse(tdbb, csb, (RSE) node); |
5058 |
pass2_rse(tdbb, csb, (RSE) node); |
5059 |
} |
5059 |
} |
5060 |
else if (node->nod_type == nod_procedure) { |
5060 |
else if (node->nod_type == nod_procedure) { |
5061 |
USHORT stream = (USHORT) node->nod_arg[e_prc_stream]; |
5061 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_prc_stream]; |
5062 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5062 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5063 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
5063 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
5064 |
} |
5064 |
} |
5065 |
else if (node->nod_type == nod_aggregate) { |
5065 |
else if (node->nod_type == nod_aggregate) { |
5066 |
USHORT stream = (USHORT) node->nod_arg[e_agg_stream]; |
5066 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_agg_stream]; |
5067 |
assert(stream <= MAX_STREAMS); |
5067 |
assert(stream <= MAX_STREAMS); |
5068 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5068 |
csb->csb_rpt[stream].csb_flags |= csb_active; |
5069 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
5069 |
pass2(tdbb, csb, node, (JRD_NOD) rse); |
Lines 5118-5124
Link Here
|
5118 |
/* Make up a format block sufficiently large to hold instantiated record */ |
5118 |
/* Make up a format block sufficiently large to hold instantiated record */ |
5119 |
|
5119 |
|
5120 |
clauses = node->nod_arg[e_uni_clauses]; |
5120 |
clauses = node->nod_arg[e_uni_clauses]; |
5121 |
id = (USHORT) node->nod_arg[e_uni_stream]; |
5121 |
id = (USHORT)(IPTR) node->nod_arg[e_uni_stream]; |
5122 |
format = &csb->csb_rpt[id].csb_format; |
5122 |
format = &csb->csb_rpt[id].csb_format; |
5123 |
|
5123 |
|
5124 |
/* Process alternating rse and map blocks */ |
5124 |
/* Process alternating rse and map blocks */ |
Lines 5160-5166
Link Here
|
5160 |
|
5160 |
|
5161 |
for (ptr = rse->rse_relation, end = ptr + rse->rse_count; ptr < end; |
5161 |
for (ptr = rse->rse_relation, end = ptr + rse->rse_count; ptr < end; |
5162 |
ptr++) if ((*ptr)->nod_type == nod_relation) { |
5162 |
ptr++) if ((*ptr)->nod_type == nod_relation) { |
5163 |
stream = (USHORT) (*ptr)->nod_arg[e_rel_stream]; |
5163 |
stream = (USHORT)(IPTR) (*ptr)->nod_arg[e_rel_stream]; |
5164 |
if (!(csb->csb_rpt[stream].csb_plan)) |
5164 |
if (!(csb->csb_rpt[stream].csb_plan)) |
5165 |
ERR_post(gds_no_stream_plan, gds_arg_string, |
5165 |
ERR_post(gds_no_stream_plan, gds_arg_string, |
5166 |
csb->csb_rpt[stream].csb_relation->rel_name, 0); |
5166 |
csb->csb_rpt[stream].csb_relation->rel_name, 0); |
Lines 5213-5219
Link Here
|
5213 |
|
5213 |
|
5214 |
/* find the tail for the relation specified in the rse */ |
5214 |
/* find the tail for the relation specified in the rse */ |
5215 |
|
5215 |
|
5216 |
stream = (USHORT) plan_relation_node->nod_arg[e_rel_stream]; |
5216 |
stream = (USHORT)(IPTR) plan_relation_node->nod_arg[e_rel_stream]; |
5217 |
tail = &csb->csb_rpt[stream]; |
5217 |
tail = &csb->csb_rpt[stream]; |
5218 |
|
5218 |
|
5219 |
/* if the plan references a view, find the real base relation |
5219 |
/* if the plan references a view, find the real base relation |
Lines 5449-5463
Link Here
|
5449 |
ptr < end; ptr++) { |
5449 |
ptr < end; ptr++) { |
5450 |
node = *ptr; |
5450 |
node = *ptr; |
5451 |
if (node->nod_type == nod_relation) { |
5451 |
if (node->nod_type == nod_relation) { |
5452 |
USHORT stream = (USHORT) node->nod_arg[e_rel_stream]; |
5452 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_rel_stream]; |
5453 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5453 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5454 |
} |
5454 |
} |
5455 |
else if (node->nod_type == nod_procedure) { |
5455 |
else if (node->nod_type == nod_procedure) { |
5456 |
USHORT stream = (USHORT) node->nod_arg[e_prc_stream]; |
5456 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_prc_stream]; |
5457 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5457 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5458 |
} |
5458 |
} |
5459 |
else if (node->nod_type == nod_aggregate) { |
5459 |
else if (node->nod_type == nod_aggregate) { |
5460 |
USHORT stream = (USHORT) node->nod_arg[e_agg_stream]; |
5460 |
USHORT stream = (USHORT)(IPTR) node->nod_arg[e_agg_stream]; |
5461 |
assert(stream <= MAX_STREAMS); |
5461 |
assert(stream <= MAX_STREAMS); |
5462 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5462 |
csb->csb_rpt[stream].csb_flags &= ~csb_active; |
5463 |
} |
5463 |
} |
Lines 5553-5559
Link Here
|
5553 |
for (end = ptr + map->nod_count; ptr < end; ptr++) { |
5553 |
for (end = ptr + map->nod_count; ptr < end; ptr++) { |
5554 |
assignment = *ptr; |
5554 |
assignment = *ptr; |
5555 |
field = assignment->nod_arg[e_asgn_to]; |
5555 |
field = assignment->nod_arg[e_asgn_to]; |
5556 |
id = (USHORT) field->nod_arg[e_fld_id]; |
5556 |
id = (USHORT)(IPTR) field->nod_arg[e_fld_id]; |
5557 |
if (id >= format->fmt_count) { |
5557 |
if (id >= format->fmt_count) { |
5558 |
format->fmt_desc.resize(id + 1); |
5558 |
format->fmt_desc.resize(id + 1); |
5559 |
} |
5559 |
} |
Lines 5689-5701
Link Here
|
5689 |
/* for aggregates, check current rse, if not found then check |
5689 |
/* for aggregates, check current rse, if not found then check |
5690 |
the sub-rse */ |
5690 |
the sub-rse */ |
5691 |
if (sub->nod_type == nod_aggregate) { |
5691 |
if (sub->nod_type == nod_aggregate) { |
5692 |
if ((stream == (USHORT) sub->nod_arg[e_rel_stream]) || |
5692 |
if ((stream == (USHORT)(IPTR) sub->nod_arg[e_rel_stream]) || |
5693 |
(stream_in_rse(stream, (RSE) sub->nod_arg[e_agg_rse]))) |
5693 |
(stream_in_rse(stream, (RSE) sub->nod_arg[e_agg_rse]))) |
5694 |
return TRUE; /* do not mark as variant */ |
5694 |
return TRUE; /* do not mark as variant */ |
5695 |
} |
5695 |
} |
5696 |
|
5696 |
|
5697 |
if ((sub->nod_type == nod_relation) && |
5697 |
if ((sub->nod_type == nod_relation) && |
5698 |
(stream == (USHORT) sub->nod_arg[e_rel_stream])) |
5698 |
(stream == (USHORT)(IPTR) sub->nod_arg[e_rel_stream])) |
5699 |
return TRUE; /* do not mark as variant */ |
5699 |
return TRUE; /* do not mark as variant */ |
5700 |
} |
5700 |
} |
5701 |
|
5701 |
|