Qore DataProvider Module Reference  2.4
AbstractDataProviderRecordIterator.qc.dox.h
1 // -*- mode: c++; indent-tabs-mode: nil -*-
3 
25 // assume local scope for variables, do not use "$" signs
26 // require type definitions everywhere
28 // enable all warnings
29 
31 namespace DataProvider {
38 const DP_OP_AND = "AND";
39 
41 const DP_OP_OR = "OR";
43 
49 
51 const DP_SEARCH_OP_REGEX = "regex";
52 
54 
56 const DP_SEARCH_OP_LT = "<";
57 
59 
61 const DP_SEARCH_OP_LE = "<=";
62 
64 
66 const DP_SEARCH_OP_GT = ">";
67 
69 
71 const DP_SEARCH_OP_GE = ">=";
72 
74 
76 const DP_SEARCH_OP_NE = "!=";
77 
79 
81 const DP_SEARCH_OP_EQ = "=";
82 
84 
86 const DP_SEARCH_OP_BETWEEN = "between";
87 
89 
91 const DP_SEARCH_OP_IN = "in";
92 
94 
96 const DP_SEARCH_OP_NOT = "not";
98 
100 public struct SearchOperatorInfo {
101  string op;
102  auto arg;
103 };
104 
108  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
109  return regex(field_value.toString(), cmd.arg.pattern, cmd.arg.options);
110  },
111  ),
112  DP_SEARCH_OP_LT: (
113  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
114  return field_value < cmd.arg;
115  },
116  ),
117  DP_SEARCH_OP_LE: (
118  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
119  return field_value <= cmd.arg;
120  },
121  ),
122  DP_SEARCH_OP_GT: (
123  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
124  return field_value > cmd.arg;
125  },
126  ),
127  DP_SEARCH_OP_GE: (
128  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
129  return field_value >= cmd.arg;
130  },
131  ),
132  DP_SEARCH_OP_NE: (
133  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
134  return field_value != cmd.arg;
135  },
136  ),
137  DP_SEARCH_OP_EQ: (
138  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
139  return field_value == cmd.arg;
140  },
141  ),
143  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
144  return field_value >= cmd.arg[0] && field_value <= cmd.arg[1];
145  },
146  ),
147  DP_SEARCH_OP_IN: (
148  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
149  return cmd.arg ? (cmd.arg{field_value} ?? False) : !field_value.val();
150  },
151  ),
153  "recursive": True,
154  "code": bool sub (hash<auto> cmd, auto field_value, string field_name, hash<auto> rec) {
155  return !field_value;
156  },
157  ),
158 };
159 
176  hash<SearchOperatorInfo> dp_make_op(string op, auto arg);
177 
178 
180 
189  hash<SearchOperatorInfo> dp_op_regex(string str);
190 
191 
193 
202  hash<SearchOperatorInfo> dp_op_like(string str);
203 
204 
206 
215  hash<SearchOperatorInfo> dp_op_lt(auto arg);
216 
217 
219 
228  hash<SearchOperatorInfo> dp_op_le(auto arg);
229 
230 
232 
241  hash<SearchOperatorInfo> dp_op_gt(auto arg);
242 
243 
245 
254  hash<SearchOperatorInfo> dp_op_ge(auto arg);
255 
256 
258 
267  hash<SearchOperatorInfo> dp_op_ne(auto arg);
268 
269 
271 
280  hash<SearchOperatorInfo> dp_op_eq(auto arg);
281 
282 
284 
296  hash<SearchOperatorInfo> dp_op_between(auto l, auto r);
297 
298 
300 
307  hash<SearchOperatorInfo> dp_op_in();
308 
309 
311 
320  hash<SearchOperatorInfo> dp_op_in(list<auto> args);
321 
322 
324 
331  hash<SearchOperatorInfo> dp_op_not(hash<auto> arg);
332 
334 
336 
339 class AbstractDataProviderRecordIterator : public AbstractIterator {
340 
341 public:
343 
348 
349 
351 
356 
357 
359 
361  *hash<string, AbstractDataField> getRecordType();
362 
363 
365 
367  abstract hash<auto> getValue();
368 
370 
376 protected:
377  auto doMemberGate(string key);
378 public:
379 
380 
382 
387 protected:
388  static bool matchGeneric(hash<auto> record, hash<DataProviderExpression> where_cond);
389 public:
390 
391 
393 
398 protected:
399  static bool matchGeneric(hash<auto> record, *hash<auto> where_cond);
400 public:
401 
402 
404 protected:
405  static bool evalOperator(string field, hash<auto> cmd, hash<auto> op, hash<auto> record);
406 public:
407 
408 
410 
413 protected:
414  static bool matchGenericValue(auto expects, auto val);
415 public:
416 
417 };
418 };
Defines the abstract class for data provider iterators; the destructor releases the iterator.
Definition: AbstractDataProviderBulkRecordInterface.qc.dox.h:33
Defines the abstract class for data provider iterators; the destructor releases the iterator.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:339
static bool matchGeneric(hash< auto > record, *hash< auto > where_cond)
Checks if the current record matches the search criteria.
*hash< string, AbstractDataField > getRecordType()
Returns the record description, if available.
static bool matchGenericValue(auto expects, auto val)
Match a single value.
static bool evalOperator(string field, hash< auto > cmd, hash< auto > op, hash< auto > record)
Evaluates a generic search operator on the field value and record and returns the result.
*AbstractDataProviderBulkRecordInterface getBulkApi()
Returns the bulk data interface if supported.
bool supportsBulkApi()
Returns True if the iterator supports bulk operation.
static bool matchGeneric(hash< auto > record, hash< DataProviderExpression > where_cond)
Checks if the current record matches the search criteria.
abstract hash< auto > getValue()
returns a single record if the iterator is valid
auto doMemberGate(string key)
Returns the value of the given field in the current record, if the iterator is valid.
const True
const False
bool regex(string str, string regex, int options=0)
Qore AbstractDataField class definition.
Definition: AbstractDataField.qc.dox.h:27
const DP_SEARCH_OP_EQ
Identifies the generic data provider equals operator (=) for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:81
hash< SearchOperatorInfo > dp_op_eq(auto arg)
returns an SearchOperatorInfo hash for the "=" operator with the given argument
const DP_OP_OR
OR logic.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:41
const DP_SEARCH_OP_REGEX
Identifies the regex operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:51
const DP_SEARCH_OP_GT
Identifies the generic data provider greater than operator (>) for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:66
const DP_SEARCH_OP_IN
Identifies the generic data provider "in" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:91
hash< SearchOperatorInfo > dp_op_between(auto l, auto r)
returns an SearchOperatorInfo hash for the "between" operator with the given arguments
const DP_SEARCH_OP_GE
Identifies the generic data provider greater than or equals operator (>=) for use in generic search c...
Definition: AbstractDataProviderRecordIterator.qc.dox.h:71
const DP_SEARCH_OP_BETWEEN
Identifies the generic data provider "between" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:86
const DefaultGenericSearchOpMap
a hash of valid operators for use in generic search criteria
Definition: AbstractDataProviderRecordIterator.qc.dox.h:106
const DP_OP_AND
AND logic.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:38
const DP_SEARCH_OP_NE
Identifies the generic data provider not equals operator (!= or <>) for use in generic search criteri...
Definition: AbstractDataProviderRecordIterator.qc.dox.h:76
hash< SearchOperatorInfo > dp_op_regex(string str)
returns an SearchOperatorInfo hash for regular expression matches
hash< SearchOperatorInfo > dp_op_not(hash< auto > arg)
returns an SearchOperatorInfo hash for the "not" operator
const DP_SEARCH_OP_NOT
Identifies the generic data provider "not" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:96
hash< SearchOperatorInfo > dp_op_ge(auto arg)
returns an SearchOperatorInfo hash for the ">=" operator with the given argument
hash< SearchOperatorInfo > dp_op_ne(auto arg)
returns an SearchOperatorInfo hash for the "!=" or "<>" operator with the given argument
hash< SearchOperatorInfo > dp_op_le(auto arg)
returns an SearchOperatorInfo hash for the "<=" operator with the given argument
const DP_SEARCH_OP_LT
Identifies the generic data provider less than (<) operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:56
hash< SearchOperatorInfo > dp_op_like(string str)
returns an SearchOperatorInfo hash for the SQL-like "like" operator with the given argument
hash< SearchOperatorInfo > dp_op_in()
returns an SearchOperatorInfo hash for the "in" operator with all arguments passed to the function
const DP_SEARCH_OP_LE
Identifies the generic data provider less than or equals (<=) operator for use in generic search crit...
Definition: AbstractDataProviderRecordIterator.qc.dox.h:61
hash< SearchOperatorInfo > dp_make_op(string op, auto arg)
returns an SearchOperatorInfo hash
hash< SearchOperatorInfo > dp_op_lt(auto arg)
returns an SearchOperatorInfo hash for the "<" operator with the given argument
hash< SearchOperatorInfo > dp_op_gt(auto arg)
returns an SearchOperatorInfo hash for the ">" operator with the given argument
Generic operator info hash as returned by all generic search operator functions.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:100
string op
the operator string code
Definition: AbstractDataProviderRecordIterator.qc.dox.h:101
auto arg
optional argument
Definition: AbstractDataProviderRecordIterator.qc.dox.h:102