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

Function par_end_store

src/gpre/par.cpp:1957–2052  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1955//
1956
1957static act* par_end_store(bool special)
1958{
1959 if (!cur_store)
1960 PAR_error("unmatched END_STORE");
1961
1962 PAR_end();
1963
1964 act* begin_action = (act*) MSC_pop(&cur_store);
1965 gpre_req* request = begin_action->act_request;
1966
1967 if (request->req_type == REQ_store)
1968 {
1969 if (gpreGlob.errors_global)
1970 return NULL;
1971
1972 // Make up an assignment list for all field references
1973
1974 int count = 0;
1975 for (ref* reference = request->req_references; reference; reference = reference->ref_next)
1976 {
1977 if (!reference->ref_master)
1978 count++;
1979 }
1980
1981 gpre_nod* const assignments = MSC_node(nod_list, (SSHORT) count);
1982 request->req_node =
1983 MSC_ternary(nod_store, (gpre_nod*) request->req_contexts, assignments, NULL);
1984 count = 0;
1985
1986 for (ref* reference = request->req_references; reference; reference = reference->ref_next)
1987 {
1988 if (reference->ref_master)
1989 continue;
1990 gpre_nod* item = MSC_node(nod_assignment, 2);
1991 item->nod_arg[0] = MSC_unary(nod_value, (gpre_nod*) reference);
1992 item->nod_arg[1] = MSC_unary(nod_field, (gpre_nod*) reference);
1993 assignments->nod_arg[count++] = item;
1994 }
1995 }
1996 else
1997 {
1998 // if the request type is store2, we have store ...returning_values.
1999 // The next action on the cur_store stack points to a upd structure
2000 // which will give us the assignments for this one.
2001
2002 act* action2 = (act*) MSC_pop(&cur_store);
2003 upd* return_values = (upd*) action2->act_object;
2004
2005 // Build assignments for all fields and null flags referenced
2006
2007 gpre_lls* stack = NULL;
2008 int count = 0;
2009
2010 for (ref* reference = request->req_references; reference; reference = reference->ref_next)
2011 {
2012 if (reference->ref_context == return_values->upd_update &&
2013 reference->ref_level >= return_values->upd_level &&
2014 !reference->ref_master)

Callers 1

PAR_actionFunction · 0.85

Calls 10

PAR_endFunction · 0.85
MSC_popFunction · 0.85
MSC_nodeFunction · 0.85
MSC_ternaryFunction · 0.85
MSC_unaryFunction · 0.85
MSC_referenceFunction · 0.85
MSC_pushFunction · 0.85
HSH_removeFunction · 0.85
MSC_actionFunction · 0.85
PAR_errorFunction · 0.70

Tested by

no test coverage detected