in results.c [2336:2377]
static void AddAdded(StatementClass *stmt, QResultClass *res, SQLLEN index, const TupleField *tuple_added)
{
KeySet *added_keyset, *keyset, keys;
TupleField *added_tuples = NULL, *tuple;
UInt4 ad_count;
Int2 num_fields;
if (!res) return;
num_fields = res->num_fields;
MYLOG(DETAIL_LOG_LEVEL, "entering index=" FORMAT_LEN ", tuple=%p, num_fields=%d\n", index, tuple_added, num_fields);
ad_count = res->ad_count;
res->ad_count++;
if (QR_get_cursor(res))
index = -(SQLLEN)res->ad_count;
if (!tuple_added)
return;
KeySetSet(tuple_added, num_fields + res->num_key_fields, res->num_key_fields, &keys, TRUE);
keys.status = SQL_ROW_ADDED;
if (CC_is_in_trans(SC_get_conn(stmt)))
keys.status |= CURS_SELF_ADDING;
else
keys.status |= CURS_SELF_ADDED;
AddRollback(stmt, res, index, &keys, SQL_ADD);
if (!QR_get_cursor(res))
return;
if (ad_count > 0 && 0 == res->ad_alloc)
return;
if (!enlargeAdded(res, ad_count + 1, stmt))
return;
added_keyset = res->added_keyset;
added_tuples = res->added_tuples;
keyset = added_keyset + ad_count;
*keyset = keys;
if (added_tuples)
{
tuple = added_tuples + num_fields * ad_count;
pg_memset(tuple, 0, sizeof(TupleField) * num_fields);
ReplaceCachedRows(tuple, tuple_added, num_fields, 1);
}
}