[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] librec: Abstract iteration over selected records in query.
From: |
Liliana Marie Prikler |
Subject: |
[PATCH 1/2] librec: Abstract iteration over selected records in query. |
Date: |
Wed, 2 Feb 2022 16:31:55 +0100 |
---
src/rec-db.c | 45 +++++++++++++++++++++++++++++++--------------
1 file changed, 31 insertions(+), 14 deletions(-)
diff --git a/src/rec-db.c b/src/rec-db.c
index 4c42b65..b303132 100644
--- a/src/rec-db.c
+++ b/src/rec-db.c
@@ -590,6 +590,29 @@ rec_db_record_selected_p (size_t num_record,
return true;
}
+static rec_record_t
+rec_db_next_selected_record (rec_mset_iterator_t *iter,
+ size_t *iter_pos,
+ size_t *index,
+ rec_sex_t sex,
+ const char *fast_string,
+ bool case_insensitive_p)
+{
+ rec_record_t record = NULL;
+ while (rec_mset_iterator_next (iter, MSET_RECORD, (const void **) &record,
NULL))
+ {
+ *iter_pos++;
+ if (rec_db_record_selected_p (*iter_pos,
+ record,
+ index,
+ sex,
+ fast_string,
+ case_insensitive_p))
+ return record;
+ }
+ return NULL;
+}
+
static rec_record_t
rec_db_process_fex (rec_db_t db,
rec_rset_t rset,
@@ -1098,22 +1121,16 @@ rec_db_query (rec_db_t db,
return NULL;
rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset));
- while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **)
&record, NULL))
+
+ while (/* Determine the next record to process. */
+ record = rec_db_next_selected_record (&iter,
+ &num_rec,
+ index,
+ sex,
+ fast_string,
+ flags & REC_F_ICASE))
{
rec_record_t res_record;
- num_rec++;
-
- /* Determine whether we must skip this record. */
-
- if (!rec_db_record_selected_p (num_rec,
- record,
- index,
- sex,
- fast_string,
- flags & REC_F_ICASE))
- continue;
-
- /* Process this record. */
/* Transform the record through the field expression and add
it to the result record set. */
--
2.34.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH 1/2] librec: Abstract iteration over selected records in query.,
Liliana Marie Prikler <=