+static void client_record_ingest(struct client *cl)
+{
+ const char *msg, *addinfo;
+ ZOOM_record rec = 0;
+ ZOOM_resultset resultset = cl->resultset;
+ struct session *se = client_get_session(cl);
+
+ if ((rec = ZOOM_resultset_record_immediate(resultset, cl->record_offset)))
+ {
+ int offset = ++cl->record_offset;
+ if (cl->session == 0)
+ ; /* no operation */
+ else if (ZOOM_record_error(rec, &msg, &addinfo, 0))
+ {
+ session_log(se, YLOG_WARN, "Record error %s (%s): %s #%d",
+ msg, addinfo, client_get_id(cl), offset);
+ }
+ else
+ {
+ struct session_database *sdb = client_get_database(cl);
+ NMEM nmem = nmem_create();
+ const char *xmlrec;
+ char type[80];
+
+ const char *s = session_setting_oneval(sdb, PZ_NATIVESYNTAX);
+ if (nativesyntax_to_type(s, type, rec))
+ session_log(se, YLOG_WARN, "Failed to determine record type");
+ xmlrec = ZOOM_record_get(rec, type, NULL);
+ if (!xmlrec)
+ {
+ const char *rec_syn = ZOOM_record_get(rec, "syntax", NULL);
+ session_log(se, YLOG_WARN, "ZOOM_record_get failed from %s #%d",
+ client_get_id(cl), offset);
+ session_log(se, YLOG_LOG, "pz:nativesyntax=%s . "
+ "ZOOM record type=%s . Actual record syntax=%s",
+ s ? s : "null", type,
+ rec_syn ? rec_syn : "null");
+ }
+ else
+ {
+ /* OK = 0, -1 = failure, -2 = Filtered */
+ int rc = ingest_record(cl, xmlrec, cl->record_offset, nmem);
+ if (rc == -1)
+ {
+ const char *rec_syn = ZOOM_record_get(rec, "syntax", NULL);
+ session_log(se, YLOG_WARN,
+ "Failed to ingest record from %s #%d",
+ client_get_id(cl), offset);
+ session_log(se, YLOG_LOG, "pz:nativesyntax=%s . "
+ "ZOOM record type=%s . Actual record syntax=%s",
+ s ? s : "null", type,
+ rec_syn ? rec_syn : "null");
+ }
+ if (rc == -2)
+ cl->filtered += 1;
+ }
+ nmem_destroy(nmem);
+ }
+ }
+ else
+ {
+ session_log(se, YLOG_WARN, "Got NULL record from %s #%d",
+ client_get_id(cl), cl->record_offset);
+ }
+}
+
+void client_record_response(struct client *cl, int *got_records)