Loading...
Searching...
No Matches
AbstractDataProvider.qc.dox.h
// -*- mode: c++; indent-tabs-mode: nil -*-
namespace DataProvider {
const UpsertResultInserted = "inserted";
const UpsertResultUpdated = "updated";
const UpsertResultVerified = "verified";
const UpsertResultUnchanged = "unchanged";
const UpsertResultDeleted = "deleted";
public struct AllowedValueInfo {
auto value;
string desc;
};
public struct DataProviderOptionInfo {
softlist<AbstractDataProviderType> type;
bool required = False;
string desc;
auto default_value;
bool sensitive = False;
*softlist<hash<AllowedValueInfo>> allowed_values;
};
public struct DataProviderSummaryInfo {
string name;
string desc;
string type;
bool supports_read = False;
bool supports_create = False;
bool supports_update = False;
bool supports_upsert = False;
bool supports_delete = False;
bool supports_native_search = False;
bool supports_bulk_read = False;
bool supports_bulk_create = False;
bool supports_bulk_upsert = False;
bool supports_request = False;
bool supports_children = False;
bool transaction_management = False;
bool has_record = False;
bool supports_search_expressions = False;
bool supports_observable = False;
string supports_messages = MSG_None;
bool children_can_support_apis = False;
bool children_can_support_records = False;
bool children_can_support_observers = False;
bool children_can_support_messages = False;
};
public struct DataProviderMessageInfo {
string desc;
AbstractDataProviderType type;
};
const MSG_None = "NONE";
const MSG_Sync = "SYNC";
const MSG_Async = "ASYNC";
const ST_Any = 1;
const ST_Value = 2;
const ST_Field = 3;
const SignatureTypeCodeMap = {
ST_Any: "any",
ST_Value: "value",
ST_Field: "field reference",
};
const SignatureTypeDescMap = map {$1.value: $1.key.toInt()}, SignatureTypeCodeMap.pairIterator();
const ER_Search = (1 << 0);
const ER_Field = (1 << 1);
const ER_All = ER_Search | ER_Field;
const RoleCodeMap = {
ER_Search: "search",
};
const RoleDescMap = map {$1.value: $1.key.toInt()}, RoleCodeMap.pairIterator();
const LC_And = (1 << 0);
const LC_Or = (1 << 1);
const LC_All = (LC_And | LC_Or);
const LogicCodeMap = {
LC_And: "AND",
LC_Or: "OR",
};
const LogicDescMap = map {$1.value: $1.key.toInt()}, LogicCodeMap.pairIterator();
public struct DataProviderSignatureTypeInfo {
AbstractDataProviderType type;
int type_code = ST_Any;
};
const DataProviderSignatureFieldType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."any",
"type_code": ST_Field,
};
const DataProviderSignatureAnyType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."any",
"type_code": ST_Any,
};
const DataProviderSignatureStringValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."string",
"type_code": ST_Value,
};
const DataProviderSignatureOptionalStringValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."*string",
"type_code": ST_Value,
};
const DataProviderSignatureIntValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."int",
"type_code": ST_Value,
};
const DataProviderSignatureOptionalIntValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."*int",
"type_code": ST_Value,
};
const DataProviderSignatureListValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."list",
"type_code": ST_Value,
};
const DataProviderSignatureHashValueType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."hash",
"type_code": ST_Value,
};
const DataProviderSignatureBoolType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."bool",
"type_code": ST_Any,
};
const DataProviderSignatureStringType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."string",
"type_code": ST_Any,
};
const DataProviderSignatureDateType = <DataProviderSignatureTypeInfo>{
"type": AbstractDataProviderTypeMap."date",
"type_code": ST_Any,
};
const DET_Operator = 1;
const DET_Function = 2;
const ExpressionTypeCodeMap = {
DET_Operator: "operator",
DET_Function: "function",
};
const ExpressionTypeDescMap = map {$1.value: $1.key.toInt()}, ExpressionTypeCodeMap.pairIterator();
public struct DataProviderExpressionInfo {
int type;
string label;
string name;
string desc;
string symbol;
int role = ER_All;
softlist<hash<DataProviderSignatureTypeInfo>> args;
AbstractDataProviderType return_type;
bool varargs = False;
};
public struct DataProviderFieldReference {
string field;
};
public struct DataProviderExpression {
string exp;
softlist<auto> args;
};
public struct DataProviderInfo {
string name;
string type;
bool supports_read = False;
bool supports_create = False;
bool supports_update = False;
bool supports_upsert = False;
bool supports_delete = False;
bool supports_native_search = False;
bool supports_bulk_read = False;
bool supports_bulk_create = False;
bool supports_bulk_upsert = False;
bool supports_request = False;
bool supports_children = False;
bool transaction_management = False;
bool has_record = False;
bool record_requires_search_options = False;
bool supports_child_create = False;
bool supports_child_delete = False;
bool supports_add_field = False;
bool supports_update_field = False;
bool supports_delete_field = False;
bool supports_schema = False;
bool supports_search_expressions = False;
bool supports_observable = False;
string supports_messages = MSG_None;
bool children_can_support_apis = False;
bool children_can_support_records = False;
bool children_can_support_observers = False;
bool children_can_support_messages = False;
*string schema_type;
*hash<string, hash<DataProviderOptionInfo>> constructor_options;
*hash<string, hash<DataProviderOptionInfo>> create_options;
*hash<string, hash<DataProviderOptionInfo>> upsert_options;
*hash<string, hash<DataProviderOptionInfo>> search_options;
*hash<string, hash<DataProviderOptionInfo>> request_options;
*hash<string, hash<DataProviderOptionInfo>> child_create_options;
*hash<string, hash<DataProviderOptionInfo>> child_delete_options;
*hash<string, hash<DataProviderOptionInfo>> add_field_options;
*hash<string, hash<DataProviderOptionInfo>> update_field_options;
*hash<string, hash<DataProviderOptionInfo>> delete_field_options;
*hash<string, hash<DataProviderOptionInfo>> send_message_options;
*hash<string, hash<DataProviderExpressionInfo>> expressions;
*hash<string, hash<DataProviderMessageInfo>> events;
*hash<string, hash<DataProviderMessageInfo>> messages;
int search_logic_capabilities = LC_All;
hash<string, hash<MapperRuntimeKeyInfo>> mapper_keys = Mapper::MapperKeyInfo;
*string desc;
*list<string> children;
};
class AbstractDataProvider {
public:
const GenericExpressionImplementations = {
DP_OP_AND: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_OP_AND,
"name": "and (&&)",
"desc": "logical AND operation supporting logic short-circuiting",
"symbol": "&&",
"args": (DataProviderSignatureBoolType),
"varargs": True,
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
foreach auto arg in (exp.args) {
if (!AbstractDataProvider::evalGenericExpressionValue(rec, arg)) {
return False;
}
}
return True;
},
},
DP_OP_OR: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_OP_OR,
"name": "or (||)",
"desc": "logical OR operation supporting logic short-circuiting",
"symbol": "||",
"args": (DataProviderSignatureBoolType),
"varargs": True,
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
foreach auto arg in (exp.args) {
if (AbstractDataProvider::evalGenericExpressionValue(rec, arg)) {
return True;
}
}
return False;
},
},
DP_SEARCH_OP_EQ: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_EQ,
"name": "equals (=)",
"desc": "a value for equality comparisons; the type of the value should correspond to the field "
"type",
"symbol": "==",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
auto arg0 = AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0]);
auto arg1 = AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
// for backwards compatibility, if the first argument is a field reference, and the second is a
# hash
return arg0 == arg1;
},
},
DP_SEARCH_OP_NE: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_NE,
"name": "not equals (!=)",
"desc": "a value for not-equals comparisons; the type of the value should correspond to the "
"field type",
"symbol": "!=",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0])
!= AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
},
},
DP_SEARCH_OP_LT: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_LT,
"name": "less than (<)",
"desc": "a value for less than comparisons; if the field value is less than the argument, then "
"the operation returns true; the type of the value should correspond to the field type",
"symbol": "<",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0])
< AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
},
},
DP_SEARCH_OP_LE: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_LE,
"name": "less than or equals (<=)",
"desc": "a value for less than or equals comparisons; if the field value is less than or equal "
"to the argument, then the operation returns true; the type of the value should correspond "
"to the field type",
"symbol": "<=",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0])
<= AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
},
},
DP_SEARCH_OP_GT: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_GT,
"name": "greater than (>)",
"desc": "a value for less than comparisons; if the field value is less than the argument, then "
"the operation returns true; the type of the value should correspond to the field type",
"symbol": ">",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0])
> AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
},
},
DP_SEARCH_OP_GE: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_GE,
"name": "greater than or equals (>=)",
"desc": "a value for greater than or equals comparisons; if the field value is greater than or "
"equal to the argument, then the operation returns true; the type of the value should "
"correspond to the field type",
"symbol": ">=",
"args": (DataProviderSignatureAnyType, DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0])
>= AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
},
},
DP_SEARCH_OP_BETWEEN: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_BETWEEN,
"name": "between",
"desc": "A list with two elements giving the lower and upper bounds of the field value; the list "
"element value types must be equal to the field's type",
"symbol": "between",
"args": (
DataProviderSignatureAnyType,
DataProviderSignatureAnyType,
DataProviderSignatureAnyType,
),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
auto arg0 = AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0]);
return arg0 > AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1])
&& arg0 < AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[2]);
},
},
DP_SEARCH_OP_IN: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_IN,
"name": "in",
"desc": "A list giving possible values of the field; if the field's value matches any of the "
"values in the list, then the operation returns true; element value types must be equal to "
"the field's type",
"symbol": "in",
"args": (DataProviderSignatureAnyType),
"return_type": AbstractDataProviderTypeMap."bool",
"varargs": True,
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return inlist(AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0]),
AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]));
},
},
DP_SEARCH_OP_NOT: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_NOT,
"name": "logical not (!)",
"desc": "This operator reverses the logcal value of the operator expression given as an argument",
"symbol": "!",
"args": (DataProviderSignatureBoolType,),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
return (!AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0]));
},
},
DP_SEARCH_OP_REGEX: {
"exp": <DataProviderExpressionInfo>{
"type": DET_Operator,
"label": DP_SEARCH_OP_REGEX,
"name": "regular expression match",
"desc": "regular expression operator; the first argument will be processed with the second as a "
"regular expression pattern",
"symbol": "regex",
"args": (
DataProviderSignatureStringType,
<DataProviderSignatureTypeInfo>{
"type": (new HashDataType())
.addField(new QoreDataField("pattern", "the regular expression pattern",
AbstractDataProviderTypeMap."string"))
.addField(new QoreDataField("options", "regular expression options",
AbstractDataProviderTypeMap."*int")),
},
),
"return_type": AbstractDataProviderTypeMap."bool",
},
"impl": auto sub (hash<auto> rec, hash<DataProviderExpression> exp) {
auto arg1 = AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[1]);
return regex(AbstractDataProvider::evalGenericExpressionValue(rec, exp.args[0]).toString(),
arg1.pattern, arg1.options);
},
},
};
const GenericExpressions = map {$1.key: $1.value.exp}, GenericExpressionImplementations.pairIterator();
const DataProviderSummaryInfoKeys = map $1.getName(),
TypedHash::forName("DataProviderSummaryInfo").getMembers();
protected:
*Logger logger;
static bool callbacks_locked = False;
static code cb_value_needs_resolution;
static code cb_resolve_value;
const GenericRecordSearchOptions = {
"columns": <DataProviderOptionInfo>{
"type": AbstractDataProviderTypeMap."any",
"desc": "allows a subset of fields to be output in searches",
},
"limit": <DataProviderOptionInfo>{
"type": AbstractDataProviderType::get(IntType),
"desc": "the maximum number of records to return",
},
"offset": <DataProviderOptionInfo>{
"type": AbstractDataProviderType::get(IntType),
"desc": "the offset number in records to return",
},
};
public:
constructor();
constructor(Logger logger);
setLogger(Logger logger);
hash<auto> getInfoAsData(*bool with_type_info);
hash<DataProviderInfo> getInfo();
hash<DataProviderSummaryInfo> getSummaryInfo();
*string getDesc();
*hash<auto> createRecord(hash<auto> rec, *hash<auto> create_options);
string upsertRecord(hash<auto> rec, *hash<auto> upsert_options);
*hash<auto> searchFirstRecord(hash<DataProviderExpression> where_cond, *hash<auto> search_options);
*hash<auto> searchFirstRecord(hash<auto> where_cond, *hash<auto> search_options);
*hash<auto> searchSingleRecord(hash<DataProviderExpression> where_cond, *hash<auto> search_options);
*hash<auto> searchSingleRecord(hash<auto> where_cond, *hash<auto> search_options);
AbstractDataProviderRecordIterator getRecordIterator(*hash<auto> search_options);
AbstractDataProviderBulkRecordInterface getBulkRecordInterface(int block_size = 1000,
*hash<auto> search_options) {
checkRead();
return searchRecordsBulk(block_size, NOTHING, validateSearchOptions(search_options));
}
AbstractDataProviderBulkRecordInterface searchRecordsBulk(int block_size = 1000,
*hash<DataProviderExpression> where_cond, *hash<auto> search_options) {
checkRead();
if (block_size <= 0);
search_options = validateSearchOptions(search_options);
return searchRecordsBulkImpl(block_size, processSearchParameters(where_cond, search_options),
search_options);
}
AbstractDataProviderBulkRecordInterface searchRecordsBulk(int block_size = 1000, *hash<auto> where_cond,
*hash<auto> search_options) {
checkRead();
if (block_size <= 0);
search_options = validateSearchOptions(search_options);
return searchRecordsBulkImpl(block_size, getSearchExpression(where_cond, search_options), search_options);
}
AbstractDataProviderRecordIterator searchRecords(*hash<DataProviderExpression> where_cond,
*hash<auto> search_options) {
checkRead();
search_options = validateSearchOptions(search_options);
return searchRecordsImpl(processSearchParameters(where_cond, search_options), search_options);
}
AbstractDataProviderRecordIterator searchRecords(*hash<auto> where_cond, *hash<auto> search_options);
AbstractDataProviderRecordIterator requestSearchRecords(auto req, *hash<DataProviderExpression> where_cond,
*hash<auto> search_options) {
checkRead();
checkRequest();
return requestSearchRecordsImpl(req, processSearchParameters(where_cond, search_options), search_options);
}
AbstractDataProviderRecordIterator requestSearchRecords(auto req, *hash<auto> where_cond,
*hash<auto> search_options) {
checkRead();
checkRequest();
return requestSearchRecordsImpl(req, getSearchExpression(where_cond, search_options), search_options);
}
bool updateSingleRecord(hash<auto> set, hash<DataProviderExpression> where_cond, *hash<auto> search_options);
bool updateSingleRecord(hash<auto> set, hash<auto> where_cond, *hash<auto> search_options);
int updateRecords(hash<auto> set, *hash<DataProviderExpression> where_cond, *hash<auto> search_options);
int updateRecords(hash<auto> set, *hash<auto> where_cond, *hash<auto> search_options);
int deleteRecords(*hash<DataProviderExpression> where_cond, *hash<auto> search_options);
int deleteRecords(*hash<auto> where_cond, *hash<auto> search_options);
auto doRequest(auto req, *hash<auto> request_options);
AbstractDataProvider createChildProvider(string name, hash<string, AbstractDataField> fields,
*hash<auto> child_create_options) {
checkCreateChild();
child_create_options = validateChildCreateOptions(child_create_options);
if (!fields);
on_error if (1.err != 'CREATE-CHILD-PROVIDER-ERROR');
return createChildProviderImpl(name, fields, child_create_options);
}
deleteChildProvider(string name, *hash<auto> child_delete_options);
addField(AbstractDataField field, *hash<auto> field_add_options);
updateField(string name, AbstractDataField field, *hash<auto> field_update_options);
deleteField(string name, *hash<auto> field_delete_options);
sendMessage(string message_id, auto msg, *hash<auto> send_message_options);
object getSchemaObject();
*AbstractDataProviderType getRequestType();
*AbstractDataProviderType getResponseType();
*hash<string, AbstractDataProviderType> getErrorResponseTypes();
AbstractDataProviderType getErrorResponseType(string error_code);
hash<DataProviderMessageInfo> getEventInfo(string event_id);
hash<string, hash<DataProviderMessageInfo>> getEventTypes();
hash<DataProviderMessageInfo> getMessageInfo(string message_id);
hash<string, hash<DataProviderMessageInfo>> getMessageTypes();
*list<hash<DataProviderSummaryInfo>> getChildProviderSummaryInfo();
*list<string> getChildProviderNames();
*AbstractDataProvider getChildProvider(string name);
AbstractDataProvider getChildProviderEx(string name);
AbstractDataProvider getChildProviderPath(string path);
bool requiresTransactionManagement();
beginTransaction();
commit();
rollback();
AbstractDataProviderBulkOperation getBulkInserter();
AbstractDataProviderBulkOperation getBulkUpserter();
*hash<string, hash<MapperRuntimeKeyInfo>> getMapperRuntimeKeys();
checkRead();
checkCreate();
checkUpsert();
checkUpdate();
checkDelete();
checkRequest();
checkCreateChild();
checkDeleteChild();
checkAddField();
checkUpdateField();
checkDeleteField();
checkSchema();
checkSearchExpressions();
checkObservable();
checkMessages();
*hash<auto> getSearchExpression(*hash<auto> where_cond, *hash<auto> search_options);
private hash<DataProviderExpression> getSimpleArgumentIntern(int role, hash<DataProviderInfo> info,
hash<DataProviderExpressionInfo> expinfo, string key, auto value) {
// remove any unique suffix from key to get field name
key =~ s/:.*//g;
hash<DataProviderExpression> rv;
if (value.typeCode() == NT_HASH && value.op && value.hasKey('arg'));
else {
rv = getEqualityComparisonExpression(role, info, key, value);
}
int caps = role == ER_Search ? info.search_logic_capabilities : 0;
verifyExpression(role, info.expressions, caps, AbstractDataProviderTypeMap."bool", rv);
return rv;
}
private hash<DataProviderExpression> getEqualityComparisonExpression(int role, hash<DataProviderInfo> info,
string key, auto value) {
if (!info.expressions.'=');
return <DataProviderExpression>{
"exp": "=",
"args": (<DataProviderFieldReference>{"field": key},) + value,
};
}
static private hash<DataProviderExpressionInfo> getExpression(int role, string exp,
*hash<string, hash<DataProviderExpressionInfo>> expmap) {
*hash<DataProviderExpressionInfo> expinfo = expmap{exp};
if (!expinfo);
if (!(expinfo.role & role));
return expinfo;
}
static bool setDynamicValueCallbacks();
static auto evalGenericExpressionValue(hash<auto> rec, auto val);
return rv;
};
if (val instanceof hash<DataProviderExpression>);
return val;
};
static auto evalGenericExpression(hash<auto> rec, hash<DataProviderExpression> exp);
static bool setDynamicValueCallbacks(code value_needs_resolution, code resolve_value);
static verifyExpression(int role, *hash<string, hash<DataProviderExpressionInfo>> expmap, int caps,
AbstractDataProviderType expected_type, hash<DataProviderExpression> exp) {
hash<DataProviderExpressionInfo> expinfo = AbstractDataProvider::getExpression(role, exp.exp, expmap);
return AbstractDataProvider::verifyExpression(role, expinfo, caps, expected_type, exp);
}
static verifyExpression(int role, hash<DataProviderExpressionInfo> expinfo, int caps,
AbstractDataProviderType expected_type, hash<DataProviderExpression> exp) {
// check arguments
if (exp.args.lsize() > expinfo.args.size() && !expinfo.varargs);
map AbstractDataProvider::verifyExpressionArgValue(role, caps, expinfo, exp.args, //), expinfo.args;
if (exp.args.lsize() > expinfo.args.size());
if (!expected_type.isAssignableFrom(expinfo.return_type));
}
static verifyExpressionArgValue(int role, int caps, hash<DataProviderExpressionInfo> expinfo,
softlist<auto> values, int pos) {
hash<DataProviderSignatureTypeInfo> arginfo = expinfo.args[pos] ?? expinfo.args.last();
if (arginfo.type_code == ST_Any);
auto val = values[pos];
bool is_exp = val instanceof hash<DataProviderExpression>;
bool is_ref = is_exp ? False : val instanceof hash<DataProviderFieldReference>;
switch (arginfo.type_code);
}
protected:
static bool checkCallbacks();
public:
protected:
*hash<auto> validateCreateOptions(*hash<auto> create_options);
public:
protected:
*hash<auto> validateUpsertOptions(*hash<auto> upsert_options);
public:
protected:
*hash<auto> validateSearchOptions(*hash<auto> search_options);
public:
protected:
*hash<auto> validateRequestOptions(*hash<auto> request_options);
public:
protected:
*hash<auto> validateChildCreateOptions(*hash<auto> child_create_options);
public:
protected:
*hash<auto> validateChildDeleteOptions(*hash<auto> child_delete_options);
public:
protected:
*hash<auto> validateFieldAddOptions(*hash<auto> field_add_options);
public:
protected:
*hash<auto> validateFieldUpdateOptions(*hash<auto> field_update_options);
public:
protected:
*hash<auto> validateFieldDeleteOptions(*hash<auto> field_delete_options);
public:
protected:
*hash<auto> validateSendMessageOptions(*hash<auto> send_message_options);
public:
protected:
processConstructorOptions(*hash<string, hash<DataProviderOptionInfo>> option_desc, *hash<auto> options);
public:
private *hash<auto> checkOptions(string err, *hash<string, hash<DataProviderOptionInfo>> option_desc,
*hash<auto> options) {
if (!option_desc && options);
if (*list<string> invalid_keys = keys (options - (keys option_desc)));
bool updated;
// check types and required keys
foreach hash<auto> i in (option_desc.pairIterator());
return options;
}
private *hash<DataProviderExpression> processSearchParameters(*hash<DataProviderExpression> exp,
*hash<auto> search_options) {
if (!exp);
checkSearchExpressions();
hash<DataProviderInfo> info = getInfo();
verifyExpression(ER_Search, info.expressions, info.search_logic_capabilities,
AbstractDataProviderTypeMap."bool", exp);
return exp;
}
protected:
*hash<auto> processFieldValues(*hash<auto> h, *hash<auto> search_options);
public:
protected:
error(string err, string fmt);
public:
private *hash<auto> searchFirstRecordImpl(hash<auto> where_cond,
*hash<auto> search_options) {
// scans the whole data set to find a single record
AbstractDataProviderRecordIterator i = searchRecordsImpl(where_cond, search_options);
if (i.next());
}
private *hash<auto> searchSingleRecordImpl(hash<auto> where_cond,
*hash<auto> search_options) {
// scans the whole data set to find a single record
*list<*hash<auto>> records = map $1, searchRecordsImpl(where_cond, search_options);
if (records.lsize() > 1);
return records[0];
}
protected:
*list<string> getChildProviderNamesImpl();
public:
protected:
*AbstractDataProvider getChildProviderImpl(string name);
public:
*hash<string, AbstractDataField> getRecordType(*hash<auto> search_options);
*hash<string, AbstractDataField> getSoftRecordType(*hash<auto> search_options);
*hash<string, AbstractDataField> getOrNothingRecordType(*hash<auto> search_options);
*hash<string, hash<DataProviderOptionInfo>> getSearchOptions();
*hash<string, hash<DataProviderOptionInfo>> getCreateOptions();
*hash<string, hash<DataProviderOptionInfo>> getUpsertOptions();
*hash<string, hash<DataProviderOptionInfo>> getRequestOptions();
*hash<string, hash<DataProviderOptionInfo>> getChildCreateOptions();
*hash<string, hash<DataProviderOptionInfo>> getChildDeleteOptions();
*hash<string, hash<DataProviderOptionInfo>> getFieldAddOptions();
*hash<string, hash<DataProviderOptionInfo>> getFieldUpdateOptions();
*hash<string, hash<DataProviderOptionInfo>> getFieldDeleteOptions();
*hash<string, hash<DataProviderOptionInfo>> getSendMessageOptions();
string getMessageSupport();
bool supportsRead();
bool supportsBulkRead();
bool supportsCreate();
bool supportsUpdate();
bool supportsUpsert();
bool supportsDelete();
bool supportsNativeSearch();
bool supportsBulkCreate();
bool supportsBulkUpsert();
bool supportsRequest();
bool recordRequiresSearchOptions();
bool hasRecord();
bool supportsCreateChild();
bool supportsDeleteChild();
bool supportsAddField();
bool supportsUpdateField();
bool supportsDeleteField();
bool supportsSchema();
bool supportsSearchExpressions();
bool supportsObservable();
bool supportsMessages();
*object getSchemaType();
protected:
*hash<string, AbstractDataField> getRecordTypeImpl(*hash<auto> search_options);
public:
private AbstractDataProviderBulkRecordInterface searchRecordsBulkImpl(int block_size = 1000,
*hash<auto> where_cond, *hash<auto> search_options) {
return new DefaultBulkRecordIterface(block_size, searchRecordsImpl(where_cond, search_options));
}
private AbstractDataProviderRecordIterator searchRecordsImpl(hash<auto> where_cond,
*hash<auto> search_options) {
throwUnimplementedException();
}
private AbstractDataProviderRecordIterator requestSearchRecordsImpl(auto req,
*hash<auto> where_cond, *hash<auto> search_options) {
throwUnimplementedException();
}
protected:
*hash<auto> createRecordImpl(hash<auto> rec, *hash<auto> create_options);
public:
protected:
string upsertRecordImpl(hash<auto> rec, *hash<auto> upsert_options);
public:
private bool updateSingleRecordImpl(hash<auto> set, hash<auto> where_cond,
*hash<auto> search_options) {
throwUnimplementedException();
}
private int updateRecordsImpl(hash<auto> set, *hash<auto> where_cond,
*hash<auto> search_options) {
throwUnimplementedException();
}
protected:
int deleteRecordsImpl(*hash<auto> where_cond, *hash<auto> search_options);
public:
protected:
auto doRequestImpl(auto req, *hash<auto> request_options);
public:
private AbstractDataProvider createChildProviderImpl(string name, hash<string, AbstractDataField> fields,
*hash<auto> child_create_options) {
throwUnimplementedException();
}
protected:
deleteChildProviderImpl(string name, *hash<auto> child_delete_options);
public:
protected:
addFieldImpl(AbstractDataField field, *hash<auto> field_add_options);
public:
protected:
updateFieldImpl(string name, AbstractDataField field, *hash<auto> field_update_options);
public:
protected:
deleteFieldImpl(string name, *hash<auto> field_delete_options);
public:
protected:
sendMessageImpl(string message_id, auto msg, *hash<auto> send_message_options);
public:
protected:
object getSchemaObjectImpl();
public:
protected:
*AbstractDataProviderType getRequestTypeImpl();
public:
protected:
*AbstractDataProviderType getResponseTypeImpl();
public:
protected:
*hash<string, AbstractDataProviderType> getErrorResponseTypesImpl();
public:
protected:
AbstractDataProviderType getErrorResponseTypeImpl(string error_code);
public:
protected:
hash<DataProviderMessageInfo> getEventInfoImpl(string event_id);
public:
protected:
hash<string, hash<DataProviderMessageInfo>> getEventTypesImpl();
public:
protected:
hash<DataProviderMessageInfo> getMessageInfoImpl(string message_id);
public:
protected:
hash<string, hash<DataProviderMessageInfo>> getMessageTypesImpl();
public:
protected:
throwUnimplementedException();
public:
abstract string getName();
protected:
abstract hash<DataProviderInfo> getStaticInfoImpl();
public:
}
}
DataProvider::AbstractDataField
describes a data type based on a hashdecl
Definition: AbstractDataField.qc.dox.h:47
DataProvider::AbstractDataProviderBulkOperation
Abstract bulk data operation class.
Definition: AbstractDataProviderBulkOperation.qc.dox.h:33
DataProvider::AbstractDataProviderBulkRecordInterface
Defines the abstract class for data provider iterators; the destructor releases the iterator.
Definition: AbstractDataProviderBulkRecordInterface.qc.dox.h:33
DataProvider::AbstractDataProvider
The AbstractDataProvider class.
Definition: AbstractDataProvider.qc.dox.h:732
DataProvider::AbstractDataProvider::searchFirstRecord
*hash< auto > searchFirstRecord(hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Returns the first record matching the search options.
DataProvider::AbstractDataProvider::cb_resolve_value
static code cb_resolve_value
static callback for dynamic value resolution
Definition: AbstractDataProvider.qc.dox.h:983
DataProvider::AbstractDataProvider::GenericExpressions
const GenericExpressions
Generic search operator expressions.
Definition: AbstractDataProvider.qc.dox.h:966
DataProvider::AbstractDataProvider::getSummaryInfo
hash< DataProviderSummaryInfo > getSummaryInfo()
Return data provider summary info.
DataProvider::AbstractDataProvider::getEventInfo
hash< DataProviderMessageInfo > getEventInfo(string event_id)
Returns the description of an observable event, if any.
DataProvider::AbstractDataProvider::checkDeleteChild
checkDeleteChild()
Ensures that the data provider supports deleting children.
DataProvider::AbstractDataProvider::getMapperRuntimeKeys
*hash< string, hash< MapperRuntimeKeyInfo > > getMapperRuntimeKeys()
Returns custom data mapper runtime keys.
DataProvider::AbstractDataProvider::deleteChildProvider
deleteChildProvider(string name, *hash< auto > child_delete_options)
Deletes a child data provider.
DataProvider::AbstractDataProvider::searchSingleRecord
*hash< auto > searchSingleRecord(hash< auto > where_cond, *hash< auto > search_options)
Returns a single record matching the search options.
DataProvider::AbstractDataProvider::beginTransaction
beginTransaction()
Begins a transaction with a data provider.
DataProvider::AbstractDataProvider::DataProviderSummaryInfoKeys
const DataProviderSummaryInfoKeys
A list of members names of the DataProviderSummaryInfoKeys hashdecl.
Definition: AbstractDataProvider.qc.dox.h:969
DataProvider::AbstractDataProvider::getRequestType
*AbstractDataProviderType getRequestType()
Returns the description of a successful request message, if any.
DataProvider::AbstractDataProvider::getInfoAsData
hash< auto > getInfoAsData(*bool with_type_info)
Returns static provider information as data; no objects are returned.
DataProvider::AbstractDataProvider::checkUpdate
checkUpdate()
Ensures that the data provider supports record upserts.
DataProvider::AbstractDataProvider::getBulkUpserter
AbstractDataProviderBulkOperation getBulkUpserter()
Returns a bulk upsert operation object for the data provider.
DataProvider::AbstractDataProvider::getMessageInfo
hash< DataProviderMessageInfo > getMessageInfo(string message_id)
Returns the description of an outbound message, if any.
DataProvider::AbstractDataProvider::GenericExpressionImplementations
const GenericExpressionImplementations
Generic expression implementations for data providers without native search functionality.
Definition: AbstractDataProvider.qc.dox.h:736
DataProvider::AbstractDataProvider::searchSingleRecord
*hash< auto > searchSingleRecord(hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Returns a single record matching the search options.
DataProvider::AbstractDataProvider::getEventTypes
hash< string, hash< DataProviderMessageInfo > > getEventTypes()
Returns a hash of all supported event types.
DataProvider::AbstractDataProvider::checkUpdateField
checkUpdateField()
Ensures that the data provider supports updating fields.
DataProvider::AbstractDataProvider::sendMessage
sendMessage(string message_id, auto msg, *hash< auto > send_message_options)
Sends a message from message-capable data providers.
DataProvider::AbstractDataProvider::checkObservable
checkObservable()
Ensures that the data provider supports observer pattern / event API.
DataProvider::AbstractDataProvider::getChildProvider
*AbstractDataProvider getChildProvider(string name)
Returns the given child provider or NOTHING if the given child is unknown.
DataProvider::AbstractDataProvider::GenericRecordSearchOptions
const GenericRecordSearchOptions
Generic record search options; see details below.
Definition: AbstractDataProvider.qc.dox.h:991
DataProvider::AbstractDataProvider::commit
commit()
Commits data written to the data provider.
DataProvider::AbstractDataProvider::updateSingleRecord
bool updateSingleRecord(hash< auto > set, hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Updates a single record matching the search options.
DataProvider::AbstractDataProvider::requiresTransactionManagement
bool requiresTransactionManagement()
Returns True if the data provider supports transaction management.
DataProvider::AbstractDataProvider::getRecordIterator
AbstractDataProviderRecordIterator getRecordIterator(*hash< auto > search_options)
Returns an iterator iterating all records.
DataProvider::AbstractDataProvider::searchRecordsBulk
AbstractDataProviderBulkRecordInterface searchRecordsBulk(int block_size=1000, *hash< auto > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options.
Definition: AbstractDataProvider.qc.dox.h:1162
DataProvider::AbstractDataProvider::constructor
constructor()
Creates the data provider.
DataProvider::AbstractDataProvider::setLogger
setLogger(Logger logger)
Sets or replaces the logger.
DataProvider::AbstractDataProvider::deleteField
deleteField(string name, *hash< auto > field_delete_options)
Deletes an existing field.
DataProvider::AbstractDataProvider::searchFirstRecord
*hash< auto > searchFirstRecord(hash< auto > where_cond, *hash< auto > search_options)
Returns the first record matching the search options.
DataProvider::AbstractDataProvider::getInfo
hash< DataProviderInfo > getInfo()
Returns data provider info.
DataProvider::AbstractDataProvider::deleteRecords
int deleteRecords(*hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Deletes zero or more records.
DataProvider::AbstractDataProvider::logger
*Logger logger
Logger for logging.
Definition: AbstractDataProvider.qc.dox.h:974
DataProvider::AbstractDataProvider::rollback
rollback()
Rolls back data written to the data provider.
DataProvider::AbstractDataProvider::updateRecords
int updateRecords(hash< auto > set, *hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Updates zero or more records matching the search options.
DataProvider::AbstractDataProvider::evalGenericExpressionValue
static auto evalGenericExpressionValue(hash< auto > rec, auto val)
Evaluates the given expression with the generic internal implementation and returns the result.
DataProvider::AbstractDataProvider::getResponseType
*AbstractDataProviderType getResponseType()
Returns the description of a response message, if this object represents a response message.
DataProvider::AbstractDataProvider::callbacks_locked
static bool callbacks_locked
flag if callbacks are locked
Definition: AbstractDataProvider.qc.dox.h:977
DataProvider::AbstractDataProvider::requestSearchRecords
AbstractDataProviderRecordIterator requestSearchRecords(auto req, *hash< auto > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options according to an API request.
Definition: AbstractDataProvider.qc.dox.h:1222
DataProvider::AbstractDataProvider::getBulkInserter
AbstractDataProviderBulkOperation getBulkInserter()
Returns a bulk insert operation object for the data provider.
DataProvider::AbstractDataProvider::createRecord
*hash< auto > createRecord(hash< auto > rec, *hash< auto > create_options)
Creates the given record in the data provider.
DataProvider::AbstractDataProvider::setDynamicValueCallbacks
static bool setDynamicValueCallbacks()
Ensures that no callbacks can be set for dynamic URI resolution.
DataProvider::AbstractDataProvider::updateSingleRecord
bool updateSingleRecord(hash< auto > set, hash< auto > where_cond, *hash< auto > search_options)
Updates a single record matching the search options.
DataProvider::AbstractDataProvider::doRequest
auto doRequest(auto req, *hash< auto > request_options)
Makes a request and returns the response.
DataProvider::AbstractDataProvider::getChildProviderSummaryInfo
*list< hash< DataProviderSummaryInfo > > getChildProviderSummaryInfo()
Return data provider summary info.
DataProvider::AbstractDataProvider::cb_value_needs_resolution
static code cb_value_needs_resolution
static callback the returns a bool if the value needs dynamic resolution
Definition: AbstractDataProvider.qc.dox.h:980
DataProvider::AbstractDataProvider::getSchemaObject
object getSchemaObject()
Returns the schema supporting this data provider.
DataProvider::AbstractDataProvider::checkCreate
checkCreate()
Ensures that the data provider supports record creation.
DataProvider::AbstractDataProvider::checkSchema
checkSchema()
Ensures that the data provider supports a schema.
DataProvider::AbstractDataProvider::getEqualityComparisonExpression
private hash< DataProviderExpression > getEqualityComparisonExpression(int role, hash< DataProviderInfo > info, string key, auto value)
Returns an equality comparison expression.
Definition: AbstractDataProvider.qc.dox.h:1775
DataProvider::AbstractDataProvider::checkRead
checkRead()
Ensures that the data provider supports read operations.
DataProvider::AbstractDataProvider::getDesc
*string getDesc()
Returns the data provider description.
DataProvider::AbstractDataProvider::getBulkRecordInterface
AbstractDataProviderBulkRecordInterface getBulkRecordInterface(int block_size=1000, *hash< auto > search_options)
Returns an iterator iterating all records with the bulk read API.
Definition: AbstractDataProvider.qc.dox.h:1124
DataProvider::AbstractDataProvider::updateRecords
int updateRecords(hash< auto > set, *hash< auto > where_cond, *hash< auto > search_options)
Updates zero or more records matching the search options.
DataProvider::AbstractDataProvider::getSimpleArgumentIntern
private hash< DataProviderExpression > getSimpleArgumentIntern(int role, hash< DataProviderInfo > info, hash< DataProviderExpressionInfo > expinfo, string key, auto value)
Returns an argument for an expression.
Definition: AbstractDataProvider.qc.dox.h:1755
DataProvider::AbstractDataProvider::searchRecords
AbstractDataProviderRecordIterator searchRecords(*hash< auto > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options.
DataProvider::AbstractDataProvider::checkDelete
checkDelete()
Ensures that the data provider supports record deletion.
DataProvider::AbstractDataProvider::getMessageTypes
hash< string, hash< DataProviderMessageInfo > > getMessageTypes()
Returns a hash of all supported outbound messages.
DataProvider::AbstractDataProvider::getErrorResponseType
AbstractDataProviderType getErrorResponseType(string error_code)
Returns the type for the given error code.
DataProvider::AbstractDataProvider::checkMessages
checkMessages()
Ensures that the data provider supports sending messages.
DataProvider::AbstractDataProvider::searchRecords
AbstractDataProviderRecordIterator searchRecords(*hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options.
Definition: AbstractDataProvider.qc.dox.h:1179
DataProvider::AbstractDataProvider::getErrorResponseTypes
*hash< string, AbstractDataProviderType > getErrorResponseTypes()
Returns a hash of error responses, if any.
DataProvider::AbstractDataProvider::checkDeleteField
checkDeleteField()
Ensures that the data provider supports deleting fields.
DataProvider::AbstractDataProvider::getChildProviderPath
AbstractDataProvider getChildProviderPath(string path)
Returns the given child provider from a "/" separated path string.
DataProvider::AbstractDataProvider::constructor
constructor(Logger logger)
Creates the data provider with the given Logger.
DataProvider::AbstractDataProvider::addField
addField(AbstractDataField field, *hash< auto > field_add_options)
Creates a new field.
DataProvider::AbstractDataProvider::createChildProvider
AbstractDataProvider createChildProvider(string name, hash< string, AbstractDataField > fields, *hash< auto > child_create_options)
Creates a new child data provider and returns it after adding as a child.
Definition: AbstractDataProvider.qc.dox.h:1341
DataProvider::AbstractDataProvider::upsertRecord
string upsertRecord(hash< auto > rec, *hash< auto > upsert_options)
Upserts the given record in the data provider.
DataProvider::AbstractDataProvider::updateField
updateField(string name, AbstractDataField field, *hash< auto > field_update_options)
Updates an existing field.
DataProvider::AbstractDataProvider::getSearchExpression
*hash< auto > getSearchExpression(*hash< auto > where_cond, *hash< auto > search_options)
Returns a search expression for a standard search hash.
DataProvider::AbstractDataProvider::checkRequest
checkRequest()
Ensures that the data provider supports the request API.
DataProvider::AbstractDataProvider::getExpression
static private hash< DataProviderExpressionInfo > getExpression(int role, string exp, *hash< string, hash< DataProviderExpressionInfo > > expmap)
Returns an expression definition for an expression code or throws an exception.
Definition: AbstractDataProvider.qc.dox.h:1789
DataProvider::AbstractDataProvider::getChildProviderEx
AbstractDataProvider getChildProviderEx(string name)
Returns the given child provider or throws an exception if the given child is unknown.
DataProvider::AbstractDataProvider::checkSearchExpressions
checkSearchExpressions()
Ensures that the data provider supports advanced search expressions.
DataProvider::AbstractDataProvider::requestSearchRecords
AbstractDataProviderRecordIterator requestSearchRecords(auto req, *hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options according to an API request.
Definition: AbstractDataProvider.qc.dox.h:1206
DataProvider::AbstractDataProvider::checkAddField
checkAddField()
Ensures that the data provider supports adding fields.
DataProvider::AbstractDataProvider::checkCreateChild
checkCreateChild()
Ensures that the data provider supports creating children.
DataProvider::AbstractDataProvider::searchRecordsBulk
AbstractDataProviderBulkRecordInterface searchRecordsBulk(int block_size=1000, *hash< DataProviderExpression > where_cond, *hash< auto > search_options)
Returns an iterator for zero or more records matching the search options.
Definition: AbstractDataProvider.qc.dox.h:1142
DataProvider::AbstractDataProvider::deleteRecords
int deleteRecords(*hash< auto > where_cond, *hash< auto > search_options)
Deletes zero or more records.
DataProvider::AbstractDataProvider::checkUpsert
checkUpsert()
Ensures that the data provider supports record upserts.
DataProvider::AbstractDataProvider::getChildProviderNames
*list< string > getChildProviderNames()
Returns a list of child data provider names, if any.
DataProvider::AbstractDataProviderRecordIterator
Defines the abstract class for data provider iterators; the destructor releases the iterator.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:339
DataProvider::AbstractDataProviderType
describes a data type
Definition: AbstractDataProviderType.qc.dox.h:187
DataProvider::AbstractDataProviderType::get
static AbstractDataProviderType get(Type type, *hash< auto > options, *hash< auto > tags)
Returns an appropriate object for the given type.
DataProvider::HashDataType
describes a data type based on a hash
Definition: HashDataType.qc.dox.h:36
DataProvider::QoreDataField
describes a data type based on a hashdecl
Definition: QoreDataField.qc.dox.h:34
Qore::False
const False
Qore::exp
number exp(number n)
DataProvider
Qore AbstractDataField class definition.
Definition: AbstractDataField.qc.dox.h:27
DataProvider::UpsertResultUnchanged
const UpsertResultUnchanged
Indicates that the record was left unchanged.
Definition: AbstractDataProvider.qc.dox.h:42
DataProvider::UpsertResultDeleted
const UpsertResultDeleted
Indicates that the record was deleted.
Definition: AbstractDataProvider.qc.dox.h:45
DataProvider::DP_SEARCH_OP_EQ
const DP_SEARCH_OP_EQ
Identifies the generic data provider equals operator (=) for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:81
DataProvider::ER_All
const ER_All
Indicates an expression that can be used in all contexts.
Definition: AbstractDataProvider.qc.dox.h:254
DataProvider::UpsertResultInserted
const UpsertResultInserted
Indicates that the record was inserted.
Definition: AbstractDataProvider.qc.dox.h:33
DataProvider::DP_OP_OR
const DP_OP_OR
OR logic.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:41
DataProvider::DP_SEARCH_OP_REGEX
const DP_SEARCH_OP_REGEX
Identifies the regex operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:51
DataProvider::MSG_None
const MSG_None
No output type.
Definition: AbstractDataProvider.qc.dox.h:199
DataProvider::ST_Value
const ST_Value
Indicates any literal value of the given type; i.e. not an operator or other expression.
Definition: AbstractDataProvider.qc.dox.h:223
DataProvider::DP_SEARCH_OP_GT
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
DataProvider::DataProviderSignatureOptionalIntValueType
const DataProviderSignatureOptionalIntValueType
Data provider signature *int value type.
Definition: AbstractDataProvider.qc.dox.h:329
DataProvider::DataProviderSignatureStringType
const DataProviderSignatureStringType
Data provider signature string type.
Definition: AbstractDataProvider.qc.dox.h:353
DataProvider::DataProviderSignatureDateType
const DataProviderSignatureDateType
Data provider signature date type.
Definition: AbstractDataProvider.qc.dox.h:359
DataProvider::LC_Or
const LC_Or
Indicates that boolean expressions can be combined with OR logic.
Definition: AbstractDataProvider.qc.dox.h:274
DataProvider::DataProviderSignatureHashValueType
const DataProviderSignatureHashValueType
Data provider signature hash value type.
Definition: AbstractDataProvider.qc.dox.h:341
DataProvider::ER_Search
const ER_Search
Indicates an expression that can be used in a search operation.
Definition: AbstractDataProvider.qc.dox.h:248
DataProvider::DP_SEARCH_OP_IN
const DP_SEARCH_OP_IN
Identifies the generic data provider "in" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:91
DataProvider::SignatureTypeDescMap
const SignatureTypeDescMap
Maps signature description values to integer codes.
Definition: AbstractDataProvider.qc.dox.h:240
DataProvider::SignatureTypeCodeMap
const SignatureTypeCodeMap
Maps signature type codes to descriptions.
Definition: AbstractDataProvider.qc.dox.h:233
DataProvider::DET_Operator
const DET_Operator
Indicates an operator expression.
Definition: AbstractDataProvider.qc.dox.h:370
DataProvider::DataProviderSignatureOptionalStringValueType
const DataProviderSignatureOptionalStringValueType
Data provider signature optional string value type.
Definition: AbstractDataProvider.qc.dox.h:317
DataProvider::LogicDescMap
const LogicDescMap
Logic map from descriptions to integer codes.
Definition: AbstractDataProvider.qc.dox.h:287
DataProvider::DP_SEARCH_OP_GE
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
DataProvider::LC_And
const LC_And
Indicates that boolean expressions can be combined with AND logic.
Definition: AbstractDataProvider.qc.dox.h:271
DataProvider::DET_Function
const DET_Function
Indicates a function expression.
Definition: AbstractDataProvider.qc.dox.h:373
DataProvider::DP_SEARCH_OP_BETWEEN
const DP_SEARCH_OP_BETWEEN
Identifies the generic data provider "between" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:86
DataProvider::DP_OP_AND
const DP_OP_AND
AND logic.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:38
DataProvider::DataProviderSignatureFieldType
const DataProviderSignatureFieldType
Data provider signature field type.
Definition: AbstractDataProvider.qc.dox.h:299
DataProvider::DP_SEARCH_OP_NE
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
DataProvider::DP_SEARCH_OP_NOT
const DP_SEARCH_OP_NOT
Identifies the generic data provider "not" operator for use in generic search criteria.
Definition: AbstractDataProviderRecordIterator.qc.dox.h:96
DataProvider::ExpressionTypeDescMap
const ExpressionTypeDescMap
Maps DataProvider expression type descriptions to integer codes.
Definition: AbstractDataProvider.qc.dox.h:383
DataProvider::DataProviderSignatureBoolType
const DataProviderSignatureBoolType
Data provider signature bool type.
Definition: AbstractDataProvider.qc.dox.h:347
DataProvider::AbstractDataProviderTypeMap
const AbstractDataProviderTypeMap
Maps Qore type name constant values to AbstractDataProviderType values.
Definition: AbstractDataProviderType.qc.dox.h:121
DataProvider::DataProviderSignatureListValueType
const DataProviderSignatureListValueType
Data provider signature list value type.
Definition: AbstractDataProvider.qc.dox.h:335
DataProvider::DataProviderSignatureStringValueType
const DataProviderSignatureStringValueType
Data provider signature string value type.
Definition: AbstractDataProvider.qc.dox.h:311
DataProvider::DataProviderSignatureAnyType
const DataProviderSignatureAnyType
Data provider signature any type.
Definition: AbstractDataProvider.qc.dox.h:305
DataProvider::ST_Field
const ST_Field
The signature type indicates a string field name when used as an argument, and the type is the field ...
Definition: AbstractDataProvider.qc.dox.h:229
DataProvider::UpsertResultVerified
const UpsertResultVerified
Indicates that the record was verified as already in the target state.
Definition: AbstractDataProvider.qc.dox.h:39
DataProvider::DP_SEARCH_OP_LT
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
DataProvider::RoleCodeMap
const RoleCodeMap
Role map from codes to descriptions.
Definition: AbstractDataProvider.qc.dox.h:258
DataProvider::UpsertResultUpdated
const UpsertResultUpdated
Indicates that the record was updated.
Definition: AbstractDataProvider.qc.dox.h:36
DataProvider::MSG_Async
const MSG_Async
Asynchronous output type, output can happen any time.
Definition: AbstractDataProvider.qc.dox.h:211
DataProvider::LC_All
const LC_All
Indicates that all logic capabilities are supported.
Definition: AbstractDataProvider.qc.dox.h:277
DataProvider::ST_Any
const ST_Any
Indicates any valid expression that returns the given type (default)
Definition: AbstractDataProvider.qc.dox.h:220
DataProvider::LogicCodeMap
const LogicCodeMap
Logic map from codes to descriptions.
Definition: AbstractDataProvider.qc.dox.h:281
DataProvider::DP_SEARCH_OP_LE
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
DataProvider::RoleDescMap
const RoleDescMap
Role map from descriptions to codes.
Definition: AbstractDataProvider.qc.dox.h:263
DataProvider::ER_Field
const ER_Field
Indicates an expression that can be used in a field.
Definition: AbstractDataProvider.qc.dox.h:251
DataProvider::ExpressionTypeCodeMap
const ExpressionTypeCodeMap
Maps DataProvider expression type codes to descriptions.
Definition: AbstractDataProvider.qc.dox.h:377
DataProvider::MSG_Sync
const MSG_Sync
Synchronous output type, an output message is expected after each observed event.
Definition: AbstractDataProvider.qc.dox.h:206
DataProvider::DataProviderSignatureIntValueType
const DataProviderSignatureIntValueType
Data provider signature int value type.
Definition: AbstractDataProvider.qc.dox.h:323
DataProvider::AllowedValueInfo
Allowed value hash.
Definition: AbstractDataProvider.qc.dox.h:49
DataProvider::AllowedValueInfo::value
auto value
The value.
Definition: AbstractDataProvider.qc.dox.h:51
DataProvider::AllowedValueInfo::desc
string desc
Description for the value.
Definition: AbstractDataProvider.qc.dox.h:54
DataProvider::DataProviderExpression
Data provider expression.
Definition: AbstractDataProvider.qc.dox.h:426
DataProvider::DataProviderExpression::exp
string exp
Expression name.
Definition: AbstractDataProvider.qc.dox.h:428
DataProvider::DataProviderExpression::args
softlist< auto > args
Expression arguments.
Definition: AbstractDataProvider.qc.dox.h:434
DataProvider::DataProviderExpressionInfo
Data provider signature info.
Definition: AbstractDataProvider.qc.dox.h:386
DataProvider::DataProviderExpressionInfo::symbol
string symbol
The symbol to use when rendering expressions.
Definition: AbstractDataProvider.qc.dox.h:402
DataProvider::DataProviderExpressionInfo::name
string name
The display name.
Definition: AbstractDataProvider.qc.dox.h:396
DataProvider::DataProviderExpressionInfo::label
string label
The label used for the expression.
Definition: AbstractDataProvider.qc.dox.h:393
DataProvider::DataProviderExpressionInfo::varargs
bool varargs
The last argument can be repeated indefinitely.
Definition: AbstractDataProvider.qc.dox.h:416
DataProvider::DataProviderExpressionInfo::role
int role
The expression role code / bitfield.
Definition: AbstractDataProvider.qc.dox.h:407
DataProvider::DataProviderExpressionInfo::type
int type
The type of expression; see DataProvider Expression Type Codes.
Definition: AbstractDataProvider.qc.dox.h:388
DataProvider::DataProviderExpressionInfo::args
softlist< hash< DataProviderSignatureTypeInfo > > args
Argument types.
Definition: AbstractDataProvider.qc.dox.h:410
DataProvider::DataProviderExpressionInfo::desc
string desc
The description of the operation.
Definition: AbstractDataProvider.qc.dox.h:399
DataProvider::DataProviderExpressionInfo::return_type
AbstractDataProviderType return_type
The return type.
Definition: AbstractDataProvider.qc.dox.h:413
DataProvider::DataProviderFieldReference
Data provider field reference.
Definition: AbstractDataProvider.qc.dox.h:420
DataProvider::DataProviderFieldReference::field
string field
The name of the field being referenced.
Definition: AbstractDataProvider.qc.dox.h:422
DataProvider::DataProviderInfo
Data provider info.
Definition: AbstractDataProvider.qc.dox.h:438
DataProvider::DataProviderInfo::supports_messages
string supports_messages
Output message support.
Definition: AbstractDataProvider.qc.dox.h:592
DataProvider::DataProviderInfo::supports_delete
bool supports_delete
Does the data provider support record deletion?
Definition: AbstractDataProvider.qc.dox.h:472
DataProvider::DataProviderInfo::events
*hash< string, hash< DataProviderMessageInfo > > events
hash of observable events and event types
Definition: AbstractDataProvider.qc.dox.h:699
DataProvider::DataProviderInfo::supports_bulk_read
bool supports_bulk_read
Does the data provider support native / optimized bulk reads?
Definition: AbstractDataProvider.qc.dox.h:485
DataProvider::DataProviderInfo::add_field_options
*hash< string, hash< DataProviderOptionInfo > > add_field_options
Add field options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:664
DataProvider::DataProviderInfo::messages
*hash< string, hash< DataProviderMessageInfo > > messages
List of output message IDs and message types.
Definition: AbstractDataProvider.qc.dox.h:706
DataProvider::DataProviderInfo::transaction_management
bool transaction_management
Does the data provider require transaction management?
Definition: AbstractDataProvider.qc.dox.h:516
DataProvider::DataProviderInfo::expressions
*hash< string, hash< DataProviderExpressionInfo > > expressions
Expressions (operators and functions) supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:692
DataProvider::DataProviderInfo::children_can_support_observers
bool children_can_support_observers
Can any child data providers support the observer pattern / event API?
Definition: AbstractDataProvider.qc.dox.h:607
DataProvider::DataProviderInfo::supports_child_delete
bool supports_child_delete
Does the data provider support deleting new child providers?
Definition: AbstractDataProvider.qc.dox.h:540
DataProvider::DataProviderInfo::type
string type
The name of the provider type.
Definition: AbstractDataProvider.qc.dox.h:447
DataProvider::DataProviderInfo::supports_delete_field
bool supports_delete_field
Does the data provider support deleting fields?
Definition: AbstractDataProvider.qc.dox.h:561
DataProvider::DataProviderInfo::supports_child_create
bool supports_child_create
Does the data provider support creating new child providers?
Definition: AbstractDataProvider.qc.dox.h:533
DataProvider::DataProviderInfo::child_delete_options
*hash< string, hash< DataProviderOptionInfo > > child_delete_options
Child deletion options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:657
DataProvider::DataProviderInfo::supports_native_search
bool supports_native_search
Does the data provider support native record searching?
Definition: AbstractDataProvider.qc.dox.h:477
DataProvider::DataProviderInfo::request_options
*hash< string, hash< DataProviderOptionInfo > > request_options
Request options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:643
DataProvider::DataProviderInfo::search_options
*hash< string, hash< DataProviderOptionInfo > > search_options
Search options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:638
DataProvider::DataProviderInfo::name
string name
Data provider name.
Definition: AbstractDataProvider.qc.dox.h:442
DataProvider::DataProviderInfo::supports_add_field
bool supports_add_field
Does the data provider support adding new fields?
Definition: AbstractDataProvider.qc.dox.h:547
DataProvider::DataProviderInfo::children_can_support_messages
bool children_can_support_messages
Can any child data providers support messages?
Definition: AbstractDataProvider.qc.dox.h:612
DataProvider::DataProviderInfo::supports_bulk_upsert
bool supports_bulk_upsert
Does the data provider support native / optimized bulk upserts?
Definition: AbstractDataProvider.qc.dox.h:501
DataProvider::DataProviderInfo::child_create_options
*hash< string, hash< DataProviderOptionInfo > > child_create_options
Child creation options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:650
DataProvider::DataProviderInfo::mapper_keys
hash< string, hash< MapperRuntimeKeyInfo > > mapper_keys
A hash of mapper key information.
Definition: AbstractDataProvider.qc.dox.h:718
DataProvider::DataProviderInfo::supports_read
bool supports_read
Does the data provider support reading.
Definition: AbstractDataProvider.qc.dox.h:452
DataProvider::DataProviderInfo::record_requires_search_options
bool record_requires_search_options
Do we require search options to retrieve the record type?
Definition: AbstractDataProvider.qc.dox.h:526
DataProvider::DataProviderInfo::supports_update
bool supports_update
Does the data provider support record updates?
Definition: AbstractDataProvider.qc.dox.h:462
DataProvider::DataProviderInfo::supports_search_expressions
bool supports_search_expressions
Does this data provide support advanced search experssions?
Definition: AbstractDataProvider.qc.dox.h:575
DataProvider::DataProviderInfo::upsert_options
*hash< string, hash< DataProviderOptionInfo > > upsert_options
Upsert options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:633
DataProvider::DataProviderInfo::supports_update_field
bool supports_update_field
Does the data provider support updating existing fields?
Definition: AbstractDataProvider.qc.dox.h:554
DataProvider::DataProviderInfo::supports_request
bool supports_request
Does the data provider support the request API?
Definition: AbstractDataProvider.qc.dox.h:506
DataProvider::DataProviderInfo::constructor_options
*hash< string, hash< DataProviderOptionInfo > > constructor_options
Constructor options supported by the data provider for the constructor variant taking a hash.
Definition: AbstractDataProvider.qc.dox.h:623
DataProvider::DataProviderInfo::create_options
*hash< string, hash< DataProviderOptionInfo > > create_options
Create options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:628
DataProvider::DataProviderInfo::supports_create
bool supports_create
Does the data provider support record creation?
Definition: AbstractDataProvider.qc.dox.h:457
DataProvider::DataProviderInfo::children
*list< string > children
A list of child data providers in this data provider.
Definition: AbstractDataProvider.qc.dox.h:728
DataProvider::DataProviderInfo::supports_observable
bool supports_observable
Does this data provider support the event API / observer pattern?
Definition: AbstractDataProvider.qc.dox.h:582
DataProvider::DataProviderInfo::supports_upsert
bool supports_upsert
Does the data provider support record upserts (create or update)?
Definition: AbstractDataProvider.qc.dox.h:467
DataProvider::DataProviderInfo::supports_bulk_create
bool supports_bulk_create
Does the data provider support native / optimized bulk creation?
Definition: AbstractDataProvider.qc.dox.h:493
DataProvider::DataProviderInfo::delete_field_options
*hash< string, hash< DataProviderOptionInfo > > delete_field_options
Delete field options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:678
DataProvider::DataProviderInfo::send_message_options
*hash< string, hash< DataProviderOptionInfo > > send_message_options
Send message options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:685
DataProvider::DataProviderInfo::supports_children
bool supports_children
Does the data provider support children?
Definition: AbstractDataProvider.qc.dox.h:511
DataProvider::DataProviderInfo::children_can_support_apis
bool children_can_support_apis
Can any child data providers offer API services (request - response data providers)?
Definition: AbstractDataProvider.qc.dox.h:597
DataProvider::DataProviderInfo::children_can_support_records
bool children_can_support_records
Can any child data providers offer record-based providers?
Definition: AbstractDataProvider.qc.dox.h:602
DataProvider::DataProviderInfo::update_field_options
*hash< string, hash< DataProviderOptionInfo > > update_field_options
Update field options supported by the data provider.
Definition: AbstractDataProvider.qc.dox.h:671
DataProvider::DataProviderInfo::desc
*string desc
A markdown description of the data provider.
Definition: AbstractDataProvider.qc.dox.h:723
DataProvider::DataProviderInfo::supports_schema
bool supports_schema
Does the data provider support a schema?
Definition: AbstractDataProvider.qc.dox.h:568
DataProvider::DataProviderInfo::search_logic_capabilities
int search_logic_capabilities
Supported search logic capabilities.
Definition: AbstractDataProvider.qc.dox.h:711
DataProvider::DataProviderInfo::schema_type
*string schema_type
Returns the schema type supported by this data provider.
Definition: AbstractDataProvider.qc.dox.h:618
DataProvider::DataProviderInfo::has_record
bool has_record
Does the data provider provide a record?
Definition: AbstractDataProvider.qc.dox.h:521
DataProvider::DataProviderMessageInfo
Data provider message and event info.
Definition: AbstractDataProvider.qc.dox.h:178
DataProvider::DataProviderMessageInfo::desc
string desc
The description of the message or event.
Definition: AbstractDataProvider.qc.dox.h:182
DataProvider::DataProviderMessageInfo::type
AbstractDataProviderType type
The data type of the message or event.
Definition: AbstractDataProvider.qc.dox.h:185
DataProvider::DataProviderOptionInfo
Data provider option info.
Definition: AbstractDataProvider.qc.dox.h:58
DataProvider::DataProviderOptionInfo::type
softlist< AbstractDataProviderType > type
The option value type or types.
Definition: AbstractDataProvider.qc.dox.h:60
DataProvider::DataProviderOptionInfo::sensitive
bool sensitive
Is the option value sensitive?
Definition: AbstractDataProvider.qc.dox.h:72
DataProvider::DataProviderOptionInfo::default_value
auto default_value
Any default value.
Definition: AbstractDataProvider.qc.dox.h:69
DataProvider::DataProviderOptionInfo::desc
string desc
The option description.
Definition: AbstractDataProvider.qc.dox.h:66
DataProvider::DataProviderOptionInfo::allowed_values
*softlist< hash< AllowedValueInfo > > allowed_values
List of allowed values (enum)
Definition: AbstractDataProvider.qc.dox.h:75
DataProvider::DataProviderOptionInfo::required
bool required
Required flag.
Definition: AbstractDataProvider.qc.dox.h:63
DataProvider::DataProviderSignatureTypeInfo
Data provider signature argument info.
Definition: AbstractDataProvider.qc.dox.h:290
DataProvider::DataProviderSignatureTypeInfo::type_code
int type_code
The signature type code.
Definition: AbstractDataProvider.qc.dox.h:295
DataProvider::DataProviderSignatureTypeInfo::type
AbstractDataProviderType type
Argument types.
Definition: AbstractDataProvider.qc.dox.h:292
DataProvider::DataProviderSummaryInfo
Data provider summary info.
Definition: AbstractDataProvider.qc.dox.h:79
DataProvider::DataProviderSummaryInfo::supports_observable
bool supports_observable
Does this data provider support the event API / observer pattern?
Definition: AbstractDataProvider.qc.dox.h:144
DataProvider::DataProviderSummaryInfo::supports_bulk_upsert
bool supports_bulk_upsert
Does the data provider support native / optimized bulk upserts?
Definition: AbstractDataProvider.qc.dox.h:123
DataProvider::DataProviderSummaryInfo::transaction_management
bool transaction_management
Does the data provider require transaction management?
Definition: AbstractDataProvider.qc.dox.h:132
DataProvider::DataProviderSummaryInfo::children_can_support_apis
bool children_can_support_apis
Can any child data providers offer API services (request - response data providers)?
Definition: AbstractDataProvider.qc.dox.h:159
DataProvider::DataProviderSummaryInfo::supports_create
bool supports_create
Does the data provider support record creation?
Definition: AbstractDataProvider.qc.dox.h:93
DataProvider::DataProviderSummaryInfo::name
string name
The name of the data provider.
Definition: AbstractDataProvider.qc.dox.h:81
DataProvider::DataProviderSummaryInfo::supports_read
bool supports_read
Does the data provider support reading.
Definition: AbstractDataProvider.qc.dox.h:90
DataProvider::DataProviderSummaryInfo::desc
string desc
The description of the data provider; supports markdown.
Definition: AbstractDataProvider.qc.dox.h:84
DataProvider::DataProviderSummaryInfo::has_record
bool has_record
Does the data provider provide a record?
Definition: AbstractDataProvider.qc.dox.h:135
DataProvider::DataProviderSummaryInfo::children_can_support_observers
bool children_can_support_observers
Can any child data providers support the observer pattern / event API?
Definition: AbstractDataProvider.qc.dox.h:169
DataProvider::DataProviderSummaryInfo::supports_upsert
bool supports_upsert
Does the data provider support record upserts (create or update)?
Definition: AbstractDataProvider.qc.dox.h:99
DataProvider::DataProviderSummaryInfo::supports_children
bool supports_children
Does the data provider support children?
Definition: AbstractDataProvider.qc.dox.h:129
DataProvider::DataProviderSummaryInfo::supports_bulk_create
bool supports_bulk_create
Does the data provider support native / optimized bulk creation?
Definition: AbstractDataProvider.qc.dox.h:117
DataProvider::DataProviderSummaryInfo::supports_delete
bool supports_delete
Does the data provider support record deletion?
Definition: AbstractDataProvider.qc.dox.h:102
DataProvider::DataProviderSummaryInfo::supports_request
bool supports_request
Does the data provider support the request API?
Definition: AbstractDataProvider.qc.dox.h:126
DataProvider::DataProviderSummaryInfo::supports_search_expressions
bool supports_search_expressions
Does this data provide support advanced search experssions?
Definition: AbstractDataProvider.qc.dox.h:138
DataProvider::DataProviderSummaryInfo::children_can_support_messages
bool children_can_support_messages
Can any child data providers support messages?
Definition: AbstractDataProvider.qc.dox.h:174
DataProvider::DataProviderSummaryInfo::supports_native_search
bool supports_native_search
Does the data provider support native record searching?
Definition: AbstractDataProvider.qc.dox.h:105
DataProvider::DataProviderSummaryInfo::supports_messages
string supports_messages
Message support.
Definition: AbstractDataProvider.qc.dox.h:154
DataProvider::DataProviderSummaryInfo::type
string type
The name of the provider type.
Definition: AbstractDataProvider.qc.dox.h:87
DataProvider::DataProviderSummaryInfo::supports_update
bool supports_update
Does the data provider support record updates?
Definition: AbstractDataProvider.qc.dox.h:96
DataProvider::DataProviderSummaryInfo::supports_bulk_read
bool supports_bulk_read
Does the data provider support native / optimized bulk reads?
Definition: AbstractDataProvider.qc.dox.h:111
DataProvider::DataProviderSummaryInfo::children_can_support_records
bool children_can_support_records
Can any child data providers offer record-based providers?
Definition: AbstractDataProvider.qc.dox.h:164