mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Move the query_compare_t (compraritor, or "what kind of comparrison to make")
into the Predicate Data, which allows the predicate creation functions to sanity check the validity. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6694 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
ba18e6db4c
commit
c68bf8adbd
@ -123,7 +123,7 @@ static GHashTable *freeTable = NULL;
|
|||||||
/* QUERYCORE_STRING */
|
/* QUERYCORE_STRING */
|
||||||
|
|
||||||
static int string_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int string_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
query_string_t pdata = (query_string_t) pd;
|
query_string_t pdata = (query_string_t) pd;
|
||||||
const char *s;
|
const char *s;
|
||||||
@ -154,13 +154,13 @@ static int string_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
|
|
||||||
} while (FALSE);
|
} while (FALSE);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_EQUAL:
|
case COMPARE_EQUAL:
|
||||||
return ret;
|
return ret;
|
||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return !ret;
|
return !ret;
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,20 +200,23 @@ static QueryPredData_t string_copy_predicate (QueryPredData_t pd)
|
|||||||
|
|
||||||
VERIFY_PDATA_R (query_string_type);
|
VERIFY_PDATA_R (query_string_type);
|
||||||
|
|
||||||
return gncQueryStringPredicate (pdata->matchstring, pdata->options,
|
return gncQueryStringPredicate (pd->how, pdata->matchstring, pdata->options,
|
||||||
pdata->is_regex);
|
pdata->is_regex);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryStringPredicate (char *str, string_match_t options,
|
QueryPredData_t gncQueryStringPredicate (query_compare_t how,
|
||||||
|
char *str, string_match_t options,
|
||||||
gboolean is_regex)
|
gboolean is_regex)
|
||||||
{
|
{
|
||||||
query_string_t pdata;
|
query_string_t pdata;
|
||||||
|
|
||||||
g_return_val_if_fail (str, NULL);
|
g_return_val_if_fail (str, NULL);
|
||||||
g_return_val_if_fail (*str != '\0', NULL);
|
g_return_val_if_fail (*str != '\0', NULL);
|
||||||
|
g_return_val_if_fail (how == COMPARE_EQUAL || how == COMPARE_NEQ, NULL);
|
||||||
|
|
||||||
pdata = g_new0 (query_string_def, 1);
|
pdata = g_new0 (query_string_def, 1);
|
||||||
pdata->pd.type_name = query_string_type;
|
pdata->pd.type_name = query_string_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->options = options;
|
pdata->options = options;
|
||||||
pdata->matchstring = g_strdup (str);
|
pdata->matchstring = g_strdup (str);
|
||||||
|
|
||||||
@ -252,7 +255,7 @@ static int date_compare (Timespec ta, Timespec tb, date_match_t options)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int date_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int date_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
query_date_t pdata = (query_date_t)pd;
|
query_date_t pdata = (query_date_t)pd;
|
||||||
Timespec objtime;
|
Timespec objtime;
|
||||||
@ -263,7 +266,7 @@ static int date_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
objtime = ((query_date_getter)get_fcn) (object);
|
objtime = ((query_date_getter)get_fcn) (object);
|
||||||
compare = date_compare (objtime, pdata->date, pdata->options);
|
compare = date_compare (objtime, pdata->date, pdata->options);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (compare < 0);
|
return (compare < 0);
|
||||||
case COMPARE_LTE:
|
case COMPARE_LTE:
|
||||||
@ -277,7 +280,7 @@ static int date_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (compare != 0);
|
return (compare != 0);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,15 +313,17 @@ static QueryPredData_t date_copy_predicate (QueryPredData_t pd)
|
|||||||
|
|
||||||
VERIFY_PDATA_R (query_date_type);
|
VERIFY_PDATA_R (query_date_type);
|
||||||
|
|
||||||
return gncQueryDatePredicate (pdata->options, pdata->date);
|
return gncQueryDatePredicate (pd->how, pdata->options, pdata->date);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryDatePredicate (date_match_t options, Timespec date)
|
QueryPredData_t gncQueryDatePredicate (query_compare_t how,
|
||||||
|
date_match_t options, Timespec date)
|
||||||
{
|
{
|
||||||
query_date_t pdata;
|
query_date_t pdata;
|
||||||
|
|
||||||
pdata = g_new0 (query_date_def, 1);
|
pdata = g_new0 (query_date_def, 1);
|
||||||
pdata->pd.type_name = query_date_type;
|
pdata->pd.type_name = query_date_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->options = options;
|
pdata->options = options;
|
||||||
pdata->date = date;
|
pdata->date = date;
|
||||||
return ((QueryPredData_t)pdata);
|
return ((QueryPredData_t)pdata);
|
||||||
@ -327,7 +332,7 @@ QueryPredData_t gncQueryDatePredicate (date_match_t options, Timespec date)
|
|||||||
/* QUERYCORE_NUMERIC */
|
/* QUERYCORE_NUMERIC */
|
||||||
|
|
||||||
static int numeric_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int numeric_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
query_numeric_t pdata = (query_numeric_t)pd;
|
query_numeric_t pdata = (query_numeric_t)pd;
|
||||||
gnc_numeric obj_val;
|
gnc_numeric obj_val;
|
||||||
@ -348,7 +353,7 @@ static int numeric_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (how == COMPARE_EQUAL) {
|
if (pd->how == COMPARE_EQUAL) {
|
||||||
gnc_numeric cmp_val = gnc_numeric_create (1, 10000);
|
gnc_numeric cmp_val = gnc_numeric_create (1, 10000);
|
||||||
compare =
|
compare =
|
||||||
(gnc_numeric_compare (gnc_numeric_sub (gnc_numeric_abs (obj_val),
|
(gnc_numeric_compare (gnc_numeric_sub (gnc_numeric_abs (obj_val),
|
||||||
@ -358,7 +363,7 @@ static int numeric_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
} else
|
} else
|
||||||
compare = gnc_numeric_compare (gnc_numeric_abs (obj_val), pdata->amount);
|
compare = gnc_numeric_compare (gnc_numeric_abs (obj_val), pdata->amount);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (compare < 0);
|
return (compare < 0);
|
||||||
case COMPARE_LTE:
|
case COMPARE_LTE:
|
||||||
@ -372,7 +377,7 @@ static int numeric_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (!compare);
|
return (!compare);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -401,15 +406,17 @@ static QueryPredData_t numeric_copy_predicate (QueryPredData_t pd)
|
|||||||
{
|
{
|
||||||
query_numeric_t pdata = (query_numeric_t)pd;
|
query_numeric_t pdata = (query_numeric_t)pd;
|
||||||
VERIFY_PDATA_R (query_numeric_type);
|
VERIFY_PDATA_R (query_numeric_type);
|
||||||
return gncQueryNumericPredicate (pdata->options, pdata->amount);
|
return gncQueryNumericPredicate (pd->how, pdata->options, pdata->amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryNumericPredicate (numeric_match_t options,
|
QueryPredData_t gncQueryNumericPredicate (query_compare_t how,
|
||||||
|
numeric_match_t options,
|
||||||
gnc_numeric value)
|
gnc_numeric value)
|
||||||
{
|
{
|
||||||
query_numeric_t pdata;
|
query_numeric_t pdata;
|
||||||
pdata = g_new0 (query_numeric_def, 1);
|
pdata = g_new0 (query_numeric_def, 1);
|
||||||
pdata->pd.type_name = query_numeric_type;
|
pdata->pd.type_name = query_numeric_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->options = options;
|
pdata->options = options;
|
||||||
pdata->amount = value;
|
pdata->amount = value;
|
||||||
return ((QueryPredData_t)pdata);
|
return ((QueryPredData_t)pdata);
|
||||||
@ -418,7 +425,7 @@ QueryPredData_t gncQueryNumericPredicate (numeric_match_t options,
|
|||||||
/* QUERYCORE_GUID */
|
/* QUERYCORE_GUID */
|
||||||
|
|
||||||
static int guid_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int guid_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
query_guid_t pdata = (query_guid_t)pd;
|
query_guid_t pdata = (query_guid_t)pd;
|
||||||
GList *node;
|
GList *node;
|
||||||
@ -513,7 +520,7 @@ QueryPredData_t gncQueryGUIDPredicate (guid_match_t options, GList *guids)
|
|||||||
/* QUERYCORE_INT64 */
|
/* QUERYCORE_INT64 */
|
||||||
|
|
||||||
static int int64_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int int64_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
gint64 val;
|
gint64 val;
|
||||||
query_int64_t pdata = (query_int64_t)pd;
|
query_int64_t pdata = (query_int64_t)pd;
|
||||||
@ -522,7 +529,7 @@ static int int64_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
|
|
||||||
val = ((query_int64_getter)get_fcn) (object);
|
val = ((query_int64_getter)get_fcn) (object);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (val < pdata->val);
|
return (val < pdata->val);
|
||||||
case COMPARE_LTE:
|
case COMPARE_LTE:
|
||||||
@ -536,7 +543,7 @@ static int int64_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (val != pdata->val);
|
return (val != pdata->val);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -566,13 +573,14 @@ static QueryPredData_t int64_copy_predicate (QueryPredData_t pd)
|
|||||||
{
|
{
|
||||||
query_int64_t pdata = (query_int64_t)pd;
|
query_int64_t pdata = (query_int64_t)pd;
|
||||||
VERIFY_PDATA_R (query_int64_type);
|
VERIFY_PDATA_R (query_int64_type);
|
||||||
return gncQueryInt64Predicate (pdata->val);
|
return gncQueryInt64Predicate (pd->how, pdata->val);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryInt64Predicate (gint64 val)
|
QueryPredData_t gncQueryInt64Predicate (query_compare_t how, gint64 val)
|
||||||
{
|
{
|
||||||
query_int64_t pdata = g_new0 (query_int64_def, 1);
|
query_int64_t pdata = g_new0 (query_int64_def, 1);
|
||||||
pdata->pd.type_name = query_int64_type;
|
pdata->pd.type_name = query_int64_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->val = val;
|
pdata->val = val;
|
||||||
return ((QueryPredData_t)pdata);
|
return ((QueryPredData_t)pdata);
|
||||||
}
|
}
|
||||||
@ -580,7 +588,7 @@ QueryPredData_t gncQueryInt64Predicate (gint64 val)
|
|||||||
/* QUERYCORE_DOUBLE */
|
/* QUERYCORE_DOUBLE */
|
||||||
|
|
||||||
static int double_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int double_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
double val;
|
double val;
|
||||||
query_double_t pdata = (query_double_t)pd;
|
query_double_t pdata = (query_double_t)pd;
|
||||||
@ -589,7 +597,7 @@ static int double_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
|
|
||||||
val = ((query_double_getter)get_fcn) (object);
|
val = ((query_double_getter)get_fcn) (object);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (val < pdata->val);
|
return (val < pdata->val);
|
||||||
case COMPARE_LTE:
|
case COMPARE_LTE:
|
||||||
@ -603,7 +611,7 @@ static int double_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (val != pdata->val);
|
return (val != pdata->val);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -633,13 +641,14 @@ static QueryPredData_t double_copy_predicate (QueryPredData_t pd)
|
|||||||
{
|
{
|
||||||
query_double_t pdata = (query_double_t)pd;
|
query_double_t pdata = (query_double_t)pd;
|
||||||
VERIFY_PDATA_R (query_double_type);
|
VERIFY_PDATA_R (query_double_type);
|
||||||
return gncQueryDoublePredicate (pdata->val);
|
return gncQueryDoublePredicate (pd->how, pdata->val);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryDoublePredicate (double val)
|
QueryPredData_t gncQueryDoublePredicate (query_compare_t how, double val)
|
||||||
{
|
{
|
||||||
query_double_t pdata = g_new0 (query_double_def, 1);
|
query_double_t pdata = g_new0 (query_double_def, 1);
|
||||||
pdata->pd.type_name = query_double_type;
|
pdata->pd.type_name = query_double_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->val = val;
|
pdata->val = val;
|
||||||
return ((QueryPredData_t)pdata);
|
return ((QueryPredData_t)pdata);
|
||||||
}
|
}
|
||||||
@ -648,7 +657,7 @@ QueryPredData_t gncQueryDoublePredicate (double val)
|
|||||||
/* QUERYCORE_BOOLEAN */
|
/* QUERYCORE_BOOLEAN */
|
||||||
|
|
||||||
static int boolean_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int boolean_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
gboolean val;
|
gboolean val;
|
||||||
query_boolean_t pdata = (query_boolean_t)pd;
|
query_boolean_t pdata = (query_boolean_t)pd;
|
||||||
@ -657,13 +666,13 @@ static int boolean_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
|
|
||||||
val = ((query_boolean_getter)get_fcn) (object);
|
val = ((query_boolean_getter)get_fcn) (object);
|
||||||
|
|
||||||
switch (how) {
|
switch (pd->how) {
|
||||||
case COMPARE_EQUAL:
|
case COMPARE_EQUAL:
|
||||||
return (val == pdata->val);
|
return (val == pdata->val);
|
||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (val != pdata->val);
|
return (val != pdata->val);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -691,13 +700,17 @@ static QueryPredData_t boolean_copy_predicate (QueryPredData_t pd)
|
|||||||
{
|
{
|
||||||
query_boolean_t pdata = (query_boolean_t)pd;
|
query_boolean_t pdata = (query_boolean_t)pd;
|
||||||
VERIFY_PDATA_R (query_boolean_type);
|
VERIFY_PDATA_R (query_boolean_type);
|
||||||
return gncQueryBooleanPredicate (pdata->val);
|
return gncQueryBooleanPredicate (pd->how, pdata->val);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryBooleanPredicate (gboolean val)
|
QueryPredData_t gncQueryBooleanPredicate (query_compare_t how, gboolean val)
|
||||||
{
|
{
|
||||||
query_boolean_t pdata = g_new0 (query_boolean_def, 1);
|
query_boolean_t pdata;
|
||||||
|
g_return_val_if_fail (how == COMPARE_EQUAL || how == COMPARE_NEQ, NULL);
|
||||||
|
|
||||||
|
pdata = g_new0 (query_boolean_def, 1);
|
||||||
pdata->pd.type_name = query_boolean_type;
|
pdata->pd.type_name = query_boolean_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->val = val;
|
pdata->val = val;
|
||||||
return ((QueryPredData_t)pdata);
|
return ((QueryPredData_t)pdata);
|
||||||
}
|
}
|
||||||
@ -705,7 +718,7 @@ QueryPredData_t gncQueryBooleanPredicate (gboolean val)
|
|||||||
/* QUERYCORE_CHAR */
|
/* QUERYCORE_CHAR */
|
||||||
|
|
||||||
static int char_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int char_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
query_char_t pdata = (query_char_t)pd;
|
query_char_t pdata = (query_char_t)pd;
|
||||||
@ -767,7 +780,7 @@ QueryPredData_t gncQueryCharPredicate (char_match_t options, const char *chars)
|
|||||||
/* QUERYCORE_KVP */
|
/* QUERYCORE_KVP */
|
||||||
|
|
||||||
static int kvp_match_predicate (gpointer object, QueryAccess get_fcn,
|
static int kvp_match_predicate (gpointer object, QueryAccess get_fcn,
|
||||||
query_compare_t how, QueryPredData_t pd)
|
QueryPredData_t pd)
|
||||||
{
|
{
|
||||||
int compare;
|
int compare;
|
||||||
kvp_frame *kvp;
|
kvp_frame *kvp;
|
||||||
@ -789,7 +802,7 @@ static int kvp_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
|
|
||||||
compare = kvp_value_compare (value, pdata->value);
|
compare = kvp_value_compare (value, pdata->value);
|
||||||
|
|
||||||
switch (how)
|
switch (pd->how)
|
||||||
{
|
{
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (compare < 0);
|
return (compare < 0);
|
||||||
@ -804,7 +817,7 @@ static int kvp_match_predicate (gpointer object, QueryAccess get_fcn,
|
|||||||
case COMPARE_NEQ:
|
case COMPARE_NEQ:
|
||||||
return (compare != 0);
|
return (compare != 0);
|
||||||
default:
|
default:
|
||||||
PWARN ("bad match type: %d", how);
|
PWARN ("bad match type: %d", pd->how);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -828,10 +841,11 @@ static QueryPredData_t kvp_copy_predicate (QueryPredData_t pd)
|
|||||||
{
|
{
|
||||||
query_kvp_t pdata = (query_kvp_t)pd;
|
query_kvp_t pdata = (query_kvp_t)pd;
|
||||||
VERIFY_PDATA_R (query_kvp_type);
|
VERIFY_PDATA_R (query_kvp_type);
|
||||||
return gncQueryKVPPredicate (pdata->path, pdata->value);
|
return gncQueryKVPPredicate (pd->how, pdata->path, pdata->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPredData_t gncQueryKVPPredicate (GSList *path, const kvp_value *value)
|
QueryPredData_t gncQueryKVPPredicate (query_compare_t how,
|
||||||
|
GSList *path, const kvp_value *value)
|
||||||
{
|
{
|
||||||
query_kvp_t pdata;
|
query_kvp_t pdata;
|
||||||
GSList *node;
|
GSList *node;
|
||||||
@ -840,6 +854,7 @@ QueryPredData_t gncQueryKVPPredicate (GSList *path, const kvp_value *value)
|
|||||||
|
|
||||||
pdata = g_new0 (query_kvp_def, 1);
|
pdata = g_new0 (query_kvp_def, 1);
|
||||||
pdata->pd.type_name = query_kvp_type;
|
pdata->pd.type_name = query_kvp_type;
|
||||||
|
pdata->pd.how = how;
|
||||||
pdata->value = kvp_value_copy (value);
|
pdata->value = kvp_value_copy (value);
|
||||||
pdata->path = g_slist_copy (path);
|
pdata->path = g_slist_copy (path);
|
||||||
for (node = pdata->path; node; node = node->next)
|
for (node = pdata->path; node; node = node->next)
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
/* Head of Predicate Data structures. All PData must start like this. */
|
/* Head of Predicate Data structures. All PData must start like this. */
|
||||||
typedef struct query_pred_data {
|
typedef struct query_pred_data {
|
||||||
const char * type_name;
|
const char * type_name;
|
||||||
|
query_compare_t how;
|
||||||
} QueryPredDataDef;
|
} QueryPredDataDef;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -28,7 +29,6 @@ typedef struct query_pred_data {
|
|||||||
*/
|
*/
|
||||||
typedef int (*QueryPredicate) (gpointer object,
|
typedef int (*QueryPredicate) (gpointer object,
|
||||||
QueryAccess get_fcn,
|
QueryAccess get_fcn,
|
||||||
query_compare_t how,
|
|
||||||
QueryPredData_t pdata);
|
QueryPredData_t pdata);
|
||||||
|
|
||||||
/* A callback for how to destroy a query predicate's pdata */
|
/* A callback for how to destroy a query predicate's pdata */
|
||||||
@ -73,17 +73,21 @@ QueryPredData_t gncQueryCorePredicateCopy (QueryPredData_t pdata);
|
|||||||
void gncQueryCorePredicateFree (QueryPredData_t pdata);
|
void gncQueryCorePredicateFree (QueryPredData_t pdata);
|
||||||
|
|
||||||
/* Core Data Type Predicates */
|
/* Core Data Type Predicates */
|
||||||
QueryPredData_t gncQueryStringPredicate (char *str, string_match_t options,
|
QueryPredData_t gncQueryStringPredicate (query_compare_t how, char *str,
|
||||||
|
string_match_t options,
|
||||||
gboolean is_regex);
|
gboolean is_regex);
|
||||||
QueryPredData_t gncQueryDatePredicate (date_match_t options, Timespec date);
|
QueryPredData_t gncQueryDatePredicate (query_compare_t how,
|
||||||
QueryPredData_t gncQueryNumericPredicate (numeric_match_t options,
|
date_match_t options, Timespec date);
|
||||||
|
QueryPredData_t gncQueryNumericPredicate (query_compare_t how,
|
||||||
|
numeric_match_t options,
|
||||||
gnc_numeric value);
|
gnc_numeric value);
|
||||||
QueryPredData_t gncQueryGUIDPredicate (guid_match_t options, GList *guids);
|
QueryPredData_t gncQueryGUIDPredicate (guid_match_t options, GList *guids);
|
||||||
QueryPredData_t gncQueryInt64Predicate (gint64 val);
|
QueryPredData_t gncQueryInt64Predicate (query_compare_t how, gint64 val);
|
||||||
QueryPredData_t gncQueryDoublePredicate (double val);
|
QueryPredData_t gncQueryDoublePredicate (query_compare_t how, double val);
|
||||||
QueryPredData_t gncQueryBooleanPredicate (gboolean val);
|
QueryPredData_t gncQueryBooleanPredicate (query_compare_t how, gboolean val);
|
||||||
QueryPredData_t gncQueryCharPredicate (char_match_t options,
|
QueryPredData_t gncQueryCharPredicate (char_match_t options,
|
||||||
const char *chars);
|
const char *chars);
|
||||||
QueryPredData_t gncQueryKVPPredicate (GSList *path, const kvp_value *value);
|
QueryPredData_t gncQueryKVPPredicate (query_compare_t how,
|
||||||
|
GSList *path, const kvp_value *value);
|
||||||
|
|
||||||
#endif /* GNC_QUERYCORE_H */
|
#endif /* GNC_QUERYCORE_H */
|
||||||
|
@ -27,7 +27,6 @@ static short module = MOD_QUERY;
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
GSList * param_list;
|
GSList * param_list;
|
||||||
QueryPredData_t pdata;
|
QueryPredData_t pdata;
|
||||||
query_compare_t how;
|
|
||||||
gboolean invert;
|
gboolean invert;
|
||||||
|
|
||||||
/* These values are filled in during "compilation" of the query
|
/* These values are filled in during "compilation" of the query
|
||||||
@ -342,7 +341,7 @@ static int check_object (QueryNew *q, gpointer object)
|
|||||||
conv_obj = get_fcn (conv_obj);
|
conv_obj = get_fcn (conv_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((qt->pred_fcn)(conv_obj, get_fcn, qt->how, qt->pdata))
|
if (((qt->pred_fcn)(conv_obj, get_fcn, qt->pdata))
|
||||||
== qt->invert) {
|
== qt->invert) {
|
||||||
and_terms_ok = 0;
|
and_terms_ok = 0;
|
||||||
break;
|
break;
|
||||||
@ -529,8 +528,7 @@ void gncQueryNewShutdown (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gncQueryAddTerm (QueryNew *q, GSList *param_list,
|
void gncQueryAddTerm (QueryNew *q, GSList *param_list,
|
||||||
query_compare_t comparitor, QueryPredData_t pred_data,
|
QueryPredData_t pred_data, QueryOp op)
|
||||||
QueryOp op)
|
|
||||||
{
|
{
|
||||||
QueryNewTerm *qt;
|
QueryNewTerm *qt;
|
||||||
QueryNew *qr, *qs;
|
QueryNew *qr, *qs;
|
||||||
@ -540,7 +538,6 @@ void gncQueryAddTerm (QueryNew *q, GSList *param_list,
|
|||||||
qt = g_new0 (QueryNewTerm, 1);
|
qt = g_new0 (QueryNewTerm, 1);
|
||||||
qt->param_list = param_list;
|
qt->param_list = param_list;
|
||||||
qt->pdata = pred_data;
|
qt->pdata = pred_data;
|
||||||
qt->how = comparitor;
|
|
||||||
|
|
||||||
qs = gncQueryCreate ();
|
qs = gncQueryCreate ();
|
||||||
query_init (qs, qt);
|
query_init (qs, qt);
|
||||||
@ -958,7 +955,7 @@ void gncQueryAddGUIDListMatch (QueryNew *q, GSList *param_list,
|
|||||||
g_return_if_fail (options == GUID_MATCH_NULL);
|
g_return_if_fail (options == GUID_MATCH_NULL);
|
||||||
|
|
||||||
pdata = gncQueryGUIDPredicate (options, guid_list);
|
pdata = gncQueryGUIDPredicate (options, guid_list);
|
||||||
gncQueryAddTerm (q, param_list, COMPARE_EQUAL, pdata, op);
|
gncQueryAddTerm (q, param_list, pdata, op);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gncQueryAddGUIDMatch (QueryNew *q, GSList *param_list,
|
void gncQueryAddGUIDMatch (QueryNew *q, GSList *param_list,
|
||||||
|
@ -154,8 +154,7 @@ typedef enum {
|
|||||||
typedef struct query_pred_data *QueryPredData_t;
|
typedef struct query_pred_data *QueryPredData_t;
|
||||||
|
|
||||||
void gncQueryAddTerm (QueryNew *query, GSList *param_list,
|
void gncQueryAddTerm (QueryNew *query, GSList *param_list,
|
||||||
query_compare_t comparitor, QueryPredData_t pred_data,
|
QueryPredData_t pred_data, QueryOp op);
|
||||||
QueryOp op);
|
|
||||||
|
|
||||||
void gncQuerySetBook (QueryNew *q, GNCBook *book);
|
void gncQuerySetBook (QueryNew *q, GNCBook *book);
|
||||||
void gncQueryAddGUIDMatch (QueryNew *q, GSList *param_list,
|
void gncQueryAddGUIDMatch (QueryNew *q, GSList *param_list,
|
||||||
|
Loading…
Reference in New Issue
Block a user