mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-25 18:30:23 -06:00
8bd7deb3dc
When viewing a register that displays sub-accounts, if the number of sub-accounts is changed, the query is rebuilt from the remaining sub-accounts but when a filter is being used it is not applied after. Fixed by checking the original query for a filter and if so applying that after query rebuilt.
209 lines
7.1 KiB
C
209 lines
7.1 KiB
C
/********************************************************************\
|
|
* qofquerycore.h -- API for providing core Query data types *
|
|
* Copyright (C) 2002 Derek Atkins <warlord@MIT.EDU> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public License as *
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
* the License, or (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License*
|
|
* along with this program; if not, contact: *
|
|
* *
|
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
|
* *
|
|
\********************************************************************/
|
|
|
|
/** @addtogroup Query
|
|
@{ */
|
|
|
|
/** @file qofquerycore.h
|
|
@brief API for providing core Query data types
|
|
@author Copyright (C) 2002 Derek Atkins <warlord@MIT.EDU>
|
|
*/
|
|
|
|
#ifndef QOF_QUERYCORE_H
|
|
#define QOF_QUERYCORE_H
|
|
|
|
#include "gnc-numeric.h"
|
|
#include "gnc-date.h"
|
|
#include "qofclass.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/**
|
|
* PREDICATE DATA TYPES: All the predicate data types are rolled up into
|
|
* the union type PredicateData. The "type" field specifies which type
|
|
* the union is.
|
|
*/
|
|
typedef struct _QofQueryPredData QofQueryPredData;
|
|
|
|
/** Standard Query comparators, for how to compare objects in a predicate.
|
|
* Note that not all core types implement all comparators
|
|
*/
|
|
typedef enum
|
|
{
|
|
QOF_COMPARE_LT = 1,
|
|
QOF_COMPARE_LTE,
|
|
QOF_COMPARE_EQUAL,
|
|
QOF_COMPARE_GT,
|
|
QOF_COMPARE_GTE,
|
|
QOF_COMPARE_NEQ,
|
|
QOF_COMPARE_CONTAINS,
|
|
QOF_COMPARE_NCONTAINS
|
|
} QofQueryCompare;
|
|
|
|
/** List of known core query data-types...
|
|
* Each core query type defines it's set of optional "comparator qualifiers".
|
|
*/
|
|
/* Comparisons for QOF_TYPE_STRING */
|
|
typedef enum
|
|
{
|
|
QOF_STRING_MATCH_NORMAL = 1,
|
|
QOF_STRING_MATCH_CASEINSENSITIVE
|
|
} QofStringMatch;
|
|
|
|
/** Comparisons for QOF_TYPE_DATE
|
|
* The QOF_DATE_MATCH_DAY comparison rounds the two time
|
|
* values to mid-day and then compares these rounded values.
|
|
* The QOF_DATE_MATCH_NORMAL comparison matches the time values,
|
|
* down to the second.
|
|
*/
|
|
|
|
typedef enum
|
|
{
|
|
QOF_DATE_MATCH_NORMAL = 1,
|
|
QOF_DATE_MATCH_DAY
|
|
} QofDateMatch;
|
|
|
|
/** Comparisons for QOF_TYPE_NUMERIC, QOF_TYPE_DEBCRED
|
|
*
|
|
* XXX Should be deprecated, or at least wrapped up as a convenience
|
|
* function, this is based on the old bill gribble code, which assumed
|
|
* the amount was always positive, and then specified a funds-flow
|
|
* direction (credit, debit, or either).
|
|
*
|
|
* The point being that 'match credit' is equivalent to the compound
|
|
* predicate (amount >= 0) && (amount 'op' value) while the 'match
|
|
* debit' predicate is equivalent to (amount <= 0) && (abs(amount) 'op' value)
|
|
*/
|
|
|
|
typedef enum
|
|
{
|
|
QOF_NUMERIC_MATCH_DEBIT = 1,
|
|
QOF_NUMERIC_MATCH_CREDIT,
|
|
QOF_NUMERIC_MATCH_ANY
|
|
} QofNumericMatch;
|
|
|
|
/* Comparisons for QOF_TYPE_GUID */
|
|
typedef enum
|
|
{
|
|
/** These expect a single object and expect the
|
|
* QofAccessFunc returns GncGUID* */
|
|
QOF_GUID_MATCH_ANY = 1,
|
|
QOF_GUID_MATCH_NONE,
|
|
QOF_GUID_MATCH_NULL,
|
|
/** These expect a GList* of objects and calls the QofAccessFunc routine
|
|
* on each item in the list to obtain a GncGUID* for each object */
|
|
QOF_GUID_MATCH_ALL,
|
|
/** These expect a single object and expect the QofAccessFunc function
|
|
* to return a GList* of GncGUID* (the list is the property of the caller) */
|
|
QOF_GUID_MATCH_LIST_ANY,
|
|
} QofGuidMatch;
|
|
|
|
/** A CHAR type is for a RECNCell, Comparisons for QOF_TYPE_CHAR
|
|
* 'ANY' will match any character in the string.
|
|
*
|
|
* Match 'ANY' is a convenience/performance-enhanced predicate
|
|
* for the compound statement (value==char1) || (value==char2) || etc.
|
|
* Match 'NONE' is equivalent to
|
|
* (value != char1) && (value != char2) && etc.
|
|
*/
|
|
typedef enum
|
|
{
|
|
QOF_CHAR_MATCH_ANY = 1,
|
|
QOF_CHAR_MATCH_NONE
|
|
} QofCharMatch;
|
|
|
|
/** No extended comparisons for QOF_TYPE_INT32, QOF_TYPE_INT64,
|
|
* QOF_TYPE_DOUBLE, QOF_TYPE_BOOLEAN
|
|
*/
|
|
|
|
/** Head of Predicate Data structures. All PData must start like this. */
|
|
struct _QofQueryPredData
|
|
{
|
|
QofType type_name; /* QOF_TYPE_* */
|
|
QofQueryCompare how;
|
|
};
|
|
|
|
/** A list of parameters (::QofIdType) used to describe a parameter to
|
|
* use in a predicate or when sorting */
|
|
typedef GSList QofQueryParamList;
|
|
|
|
/** @name Core Data Type Predicates
|
|
@{ */
|
|
QofQueryPredData *qof_query_string_predicate (QofQueryCompare how,
|
|
const gchar *str,
|
|
QofStringMatch options,
|
|
gboolean is_regex);
|
|
|
|
QofQueryPredData *qof_query_date_predicate (QofQueryCompare how,
|
|
QofDateMatch options,
|
|
time64 date);
|
|
|
|
QofQueryPredData *qof_query_numeric_predicate (QofQueryCompare how,
|
|
QofNumericMatch options,
|
|
gnc_numeric value);
|
|
|
|
QofQueryPredData *qof_query_guid_predicate (QofGuidMatch options, GList *guids);
|
|
QofQueryPredData *qof_query_int32_predicate (QofQueryCompare how, gint32 val);
|
|
QofQueryPredData *qof_query_int64_predicate (QofQueryCompare how, gint64 val);
|
|
QofQueryPredData *qof_query_double_predicate (QofQueryCompare how, double val);
|
|
QofQueryPredData *qof_query_boolean_predicate (QofQueryCompare how, gboolean val);
|
|
QofQueryPredData *qof_query_char_predicate (QofCharMatch options,
|
|
const gchar *chars);
|
|
QofQueryPredData *qof_query_collect_predicate (QofGuidMatch options,
|
|
QofCollection *coll);
|
|
QofQueryPredData *qof_query_choice_predicate (QofGuidMatch options, GList *guids);
|
|
|
|
/** Copy a predicate. */
|
|
QofQueryPredData *qof_query_core_predicate_copy (const QofQueryPredData *pdata);
|
|
|
|
/** Destroy a predicate. */
|
|
void qof_query_core_predicate_free (QofQueryPredData *pdata);
|
|
|
|
/** Retrieve a predicate. */
|
|
gboolean qof_query_date_predicate_get_date (const QofQueryPredData *pd, time64 *date);
|
|
gboolean qof_query_char_predicate_get_char (const QofQueryPredData *pd, char **chars);
|
|
|
|
/** Return a printable string for a core data object. Caller needs
|
|
* to g_free() the returned string.
|
|
*/
|
|
char * qof_query_core_to_string (QofType, gpointer object, QofParam *getter);
|
|
|
|
/** Compare two parameter(strings) as if they are numbers!
|
|
* the two objects, a and b, are the objects being compared
|
|
* this_param is the QofParam for this parameter in the objects
|
|
*/
|
|
int qof_string_number_compare_func (gpointer a, gpointer b, gint options,
|
|
QofParam *this_param);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* QOF_QUERYCORE_H */
|
|
/* @} */
|
|
/* @} */
|