static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe) { GNCSearchAccountPrivate *priv; GNCSearchAccount *fi = (GNCSearchAccount *)fe; GList *l = NULL, *node; g_return_val_if_fail (fi, NULL); g_return_val_if_fail (IS_GNCSEARCH_ACCOUNT (fi), NULL); priv = _PRIVATE(fi); for (node = priv->selected_accounts; node; node = node->next) { Account *acc = node->data; const GncGUID *guid = xaccAccountGetGUID (acc); l = g_list_prepend (l, (gpointer)guid); } l = g_list_reverse (l); return qof_query_guid_predicate (fi->how, l); }
void xaccQueryAddAccountGUIDMatch(QofQuery *q, AccountGUIDList *guid_list, QofGuidMatch how, QofQueryOp op) { QofQueryPredData *pred_data; GSList *param_list = NULL; if (!q) return; if (!guid_list && how != QOF_GUID_MATCH_NULL) { g_warning("Got a NULL guid_list but the QofGuidMatch is not MATCH_NULL (but instead %d). In other words, the list of GUID matches is empty but it must contain something non-empty.", how); /* qof_query_guid_predicate() would trigger a g_warning as well */ return; } pred_data = qof_query_guid_predicate (how, guid_list); if (!pred_data) return; switch (how) { case QOF_GUID_MATCH_ANY: case QOF_GUID_MATCH_NONE: param_list = qof_query_build_param_list (SPLIT_ACCOUNT, QOF_PARAM_GUID, NULL); break; case QOF_GUID_MATCH_ALL: param_list = qof_query_build_param_list (SPLIT_TRANS, TRANS_SPLITLIST, SPLIT_ACCOUNT_GUID, NULL); break; default: PERR ("Invalid match type: %d", how); break; } qof_query_add_term (q, param_list, pred_data, op); }