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

Function par_not

src/gpre/sqe.cpp:2196–2243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2194//
2195
2196static gpre_nod* par_not( gpre_req* request, USHORT* paren_count)
2197{
2198 assert_IS_REQ(request);
2199
2200 if (MSC_match(KW_NOT))
2201 return negate(par_not(request, paren_count));
2202
2203 nod_t type = nod_nothing;
2204
2205 if (MSC_match(KW_EXISTS))
2206 type = nod_any;
2207 else if (MSC_match(KW_SINGULAR))
2208 type = nod_unique;
2209 if (type == nod_any || type == nod_unique)
2210 {
2211 scope saved_scope;
2212 push_scope(request, &saved_scope);
2213
2214 EXP_left_paren(0);
2215 if (!MSC_match(KW_SELECT))
2216 CPR_s_error("SELECT");
2217
2218 request->req_in_select_list++;
2219 gpre_nod* field;
2220 if (MSC_match(KW_ASTERISK))
2221 field = NULL;
2222 else if (!(field = par_udf(request)))
2223 field = SQE_field(request, false);
2224 request->req_in_select_list--;
2225
2226 gpre_nod* node = MSC_node(type, 1);
2227 node->nod_count = 0;
2228 gpre_rse* selection = par_rse(request, 0, false);
2229 node->nod_arg[0] = (gpre_nod*) selection;
2230 if (field)
2231 {
2232 SQE_resolve(&field, 0, selection);
2233 gpre_nod* expr = MSC_unary(nod_missing, field);
2234 selection->rse_boolean = merge(negate(expr), selection->rse_boolean);
2235 }
2236 EXP_rse_cleanup((gpre_rse*) node->nod_arg[0]);
2237 pop_scope(request, &saved_scope);
2238 EXP_match_paren();
2239 return node;
2240 }
2241
2242 return par_relational(request, paren_count);
2243}
2244
2245//____________________________________________________________
2246//

Callers 1

par_andFunction · 0.70

Calls 15

MSC_matchFunction · 0.85
push_scopeFunction · 0.85
EXP_left_parenFunction · 0.85
CPR_s_errorFunction · 0.85
SQE_fieldFunction · 0.85
MSC_nodeFunction · 0.85
par_rseFunction · 0.85
SQE_resolveFunction · 0.85
MSC_unaryFunction · 0.85
EXP_rse_cleanupFunction · 0.85
pop_scopeFunction · 0.85
EXP_match_parenFunction · 0.85

Tested by

no test coverage detected