| 930 | // |
| 931 | |
| 932 | bool SQE_resolve(gpre_nod** node_ptr, gpre_req* request, gpre_rse* selection) |
| 933 | { |
| 934 | bool result = false; |
| 935 | act* slice_action = 0; |
| 936 | |
| 937 | gpre_nod* node = *node_ptr; |
| 938 | |
| 939 | assert_IS_REQ(request); |
| 940 | assert_IS_NOD(node); |
| 941 | |
| 942 | switch (node->nod_type) |
| 943 | { |
| 944 | case nod_plus: |
| 945 | case nod_minus: |
| 946 | case nod_times: |
| 947 | case nod_divide: |
| 948 | case nod_negate: |
| 949 | case nod_and: |
| 950 | case nod_or: |
| 951 | case nod_not: |
| 952 | case nod_eq: |
| 953 | case nod_ne: |
| 954 | case nod_ge: |
| 955 | case nod_gt: |
| 956 | case nod_le: |
| 957 | case nod_lt: |
| 958 | case nod_containing: |
| 959 | case nod_like: |
| 960 | case nod_between: |
| 961 | case nod_starting: |
| 962 | case nod_upcase: |
| 963 | case nod_lowcase: |
| 964 | case nod_concatenate: |
| 965 | case nod_cast: |
| 966 | case nod_case: |
| 967 | case nod_case1: |
| 968 | case nod_substring: |
| 969 | { |
| 970 | gpre_nod** ptr = node->nod_arg; |
| 971 | const gpre_nod* const* const end = ptr + node->nod_count; |
| 972 | for (; ptr < end; ptr++) |
| 973 | result |= SQE_resolve(ptr, request, selection); |
| 974 | return result; |
| 975 | } |
| 976 | |
| 977 | case nod_agg_max: |
| 978 | case nod_agg_min: |
| 979 | case nod_agg_total: |
| 980 | case nod_agg_average: |
| 981 | case nod_agg_count: |
| 982 | if (node->nod_arg[0]) |
| 983 | { |
| 984 | SQE_resolve(&node->nod_arg[0], request, selection); |
| 985 | gpre_nod* node_arg = node->nod_arg[0]; |
| 986 | const ref* reference = (ref*) node_arg->nod_arg[0]; |
| 987 | if (node_arg->nod_type == nod_field && reference && |
| 988 | reference->ref_field && reference->ref_field->fld_array_info) |
| 989 | { |
no test coverage detected