Qore DataProvider Module Reference  2.7.1
AbstractDataProviderType.qc.dox.h
1 // -*- mode: c++; indent-tabs-mode: nil -*-
3 
27 namespace DataProvider {
29 const TypeCodeMap = {
30  NT_INT: "int",
31  NT_STRING: "string",
32  NT_BOOLEAN: "bool",
33  NT_FLOAT: "float",
34  NT_NUMBER: "number",
35  NT_BINARY: "binary",
36  NT_LIST: "list",
37  NT_HASH: "hash",
38  NT_OBJECT: "object",
39  NT_ALL: "any",
40  NT_DATE: "date",
41  NT_NULL: "null",
42  NT_NOTHING: "nothing",
43 };
44 
46 
49  "int": "int",
50  Type::Int: "int",
51  Type::String: "string",
52  "boolean": "bool",
53  Type::Boolean: "bool",
54  "double": "float",
55  Type::Float: "float",
56  Type::Number: "number",
57  Type::Binary: "binary",
58  Type::List: "list<auto>",
59  Type::Hash: "hash<auto>",
60  Type::Object: "object",
61  Type::Date: "date",
62  Type::NullType: "null",
63  Type::NothingType: "nothing",
64  "all": "any",
65 };
66 
68 
71  "int": "softint",
72  Type::Int: "softint",
73  Type::String: "softstring",
74  "boolean": "softbool",
75  Type::Boolean: "softbool",
76  "double": "softfloat",
77  Type::Float: "softfloat",
78  Type::Number: "softnumber",
79  Type::List: "softlist<auto>",
80  Type::Date: "softdate",
81 };
82 
84 const DataTypeMap = {
85  "int": IntType,
86  Type::Int: IntType,
87  Type::String: StringType,
88  "boolean": BoolType,
89  Type::Boolean: BoolType,
90  "double": FloatType,
91  Type::Float: FloatType,
92  Type::Number: NumberType,
93  Type::Binary: BinaryType,
94  Type::List: AutoListType,
95  Type::Hash: AutoHashType,
96  Type::Object: ObjectType,
97  Type::Date: DateType,
99  Type::NothingType: AbstractDataProviderType::nothingType,
100  "data": DataType,
101  "all": AbstractDataProviderType::anyType,
102  "any": AbstractDataProviderType::anyType,
103  "auto": AbstractDataProviderType::anyType,
104  "*int": IntOrNothingType,
105  "*integer": IntOrNothingType,
106  "*string": StringOrNothingType,
107  "*boolean": BoolOrNothingType,
108  "*bool": BoolOrNothingType,
109  "*double": FloatOrNothingType,
110  "*float": FloatOrNothingType,
111  "*number": NumberOrNothingType,
112  "*binary": BinaryOrNothingType,
113  "*list": AutoListOrNothingType,
114  "*hash": AutoHashOrNothingType,
115  "*object": ObjectOrNothingType,
116  "*date": DateOrNothingType,
117  "*data": DataOrNothingType,
118 };
119 
122 
123 
127  string type;
128 
130  string desc;
131 };
132 
134 public struct DataTypeInfo {
136  string name;
137 
139  string desc;
140 
142  *hash<string, hash<DataProviderTypeOptionInfo>> supported_options;
143 
145  *hash<auto> options;
146 
148  string base_type;
149 
151  bool mandatory;
152 
154  list<string> types_accepted;
155 
157  list<string> types_returned;
158 
160  hash<string, hash<DataFieldInfo>> fields;
161 
164 
166  *hash<DataTypeInfo> default_field_type_info;
167 
169  *hash<auto> tags;
170 };
171 
177 const DTT_FromFile = "from_file";
178 
180 const DTT_FromLocation = "from_location";
181 
183 const DTT_ClientOnly = "client_only";
185 
187 class AbstractDataProviderType : public Serializable {
188 
189 public:
190  static Type nothingType = Reflection::NothingType;
191  static Type anyType = Reflection::AutoType;
192  // not initialized here to workaround issue #4048 (circular initializtion error)
193  static AbstractDataProviderType anyDataType;
194 
196  const DefaultDesc = "no description available";
197 
198 protected:
200  hash<auto> options;
201 
203  *hash<auto> tags;
204 
205 public:
206 
209 
210 
212 
216  constructor(hash<auto> options, *hash<auto> tags);
217 
218 
220  string getDesc();
221 
222 
224  *hash<string, hash<DataProviderTypeOptionInfo>> getSupportedOptions();
225 
226 
228 
234  hash<DataTypeInfo> getInputInfo();
235 
236 
238  hash<DataTypeInfo> getInfo();
239 
240 
242  *hash<string, hash<DataFieldInfo>> getFieldInfo();
243 
244 
247 
248 
250  bool isAssignableFrom(Type t);
251 
252 
254  bool isList();
255 
256 
258  bool isMandatory();
259 
260 
262  *AbstractDataField getField(string field_name);
263 
264 
266  bool hasType();
267 
268 
270  string getBaseTypeName();
271 
272 
275 
276 
278  *hash<string, bool> getDirectTypeHash();
279 
280 
283 
284 
287 
288 
290  auto getOptionValue(string opt);
291 
292 
294  *hash<auto> getOptions();
295 
296 
298 
303  setOption(string opt, auto value);
304 
305 
307 
311  setOptions(hash<auto> options);
312 
313 
315  auto getTag(string tag);
316 
317 
319  *hash<auto> getTags();
320 
321 
323 
329 
330 
332 
340 
341 
343  abstract string getName();
344 
346  abstract *Type getValueType();
347 
350 
352  abstract *hash<string, AbstractDataField> getFields();
353 
355  abstract hash<string, bool> getAcceptTypeHash();
356 
358  abstract hash<string, bool> getReturnTypeHash();
359 
361 
365  abstract auto acceptsValue(auto value);
366 
368  static AbstractDataProviderType get(Type type, *hash<auto> options, *hash<auto> tags);
369 
371 
374  static AbstractDataProviderType get(string typename, *hash<auto> options);
375 
377 protected:
378  setOptionIntern(string opt, auto value);
379 public:
380 
381 };
382 };
describes a data type based on a hashdecl
Definition: AbstractDataField.qc.dox.h:47
describes a data type
Definition: AbstractDataProviderType.qc.dox.h:187
bool hasType()
Returns True if the type is not a wildcard type.
*hash< string, hash< DataFieldInfo > > getFieldInfo()
Returns information on fields supported.
int getBaseTypeCode()
Returns the base type code for the type.
*hash< auto > tags
type tags
Definition: AbstractDataProviderType.qc.dox.h:203
bool isAssignableFrom(AbstractDataProviderType t)
Returns True if this type can be assigned from values of the argument type.
*AbstractDataProviderType getFieldType(string field_name)
get the given field type if it exists, otherwise return NOTHING
hash< auto > options
type options
Definition: AbstractDataProviderType.qc.dox.h:200
hash< DataTypeInfo > getInfo()
Returns a description of the type as a hash.
bool isAssignableFrom(Type t)
Returns True if this type can be assigned from values of the argument type.
abstract *AbstractDataProviderType getElementType()
Returns the subtype (for lists or hashes) if there is only one.
*hash< string, bool > getDirectTypeHash()
Returns a hash of native base type code keys where no translations are performed; keys are type codes...
hash< DataTypeInfo > getInputInfo()
Returns a description of the type as an input type.
bool isMandatory()
Returns True if the type must have a value.
bool isList()
Returns True if this type is a list.
string getBaseTypeName()
Returns the base type name for the type; must be a standard Qore base type name.
bool isOrNothingType()
Returns True if the type also accepts NOTHING.
const DefaultDesc
Default description.
Definition: AbstractDataProviderType.qc.dox.h:196
abstract auto acceptsValue(auto value)
Returns the value if the value can be assigned to the type.
static AbstractDataProviderType get(string typename, *hash< auto > options)
Returns an appropriate object for the given type.
*hash< string, hash< DataProviderTypeOptionInfo > > getSupportedOptions()
Returns supported options.
AbstractDataProviderType getOrNothingType()
Returns an "or nothing" type equivalent to the current type.
abstract string getName()
Returns the type name.
abstract *hash< string, AbstractDataField > getFields()
Returns the fields of the data structure; if any.
setOptionIntern(string opt, auto value)
sets the given option without any validation of the option
setOptions(hash< auto > options)
sets options on the type
abstract *Type getValueType()
Returns the base type for the type, if any.
*AbstractDataField getField(string field_name)
Returns the given field, if present, or NOTHING if not.
*hash< auto > getOptions()
Returns options set on the type.
constructor(hash< auto > options, *hash< auto > tags)
creates the type and sets options
AbstractDataProviderType getSoftType()
Returns a "soft" type equivalent to the current type.
setOption(string opt, auto value)
sets the given option on the type
abstract hash< string, bool > getReturnTypeHash()
Returns a hash of types returned by this type; keys are type names.
*hash< auto > getTags()
Returns tags set on the type.
abstract hash< string, bool > getAcceptTypeHash()
Returns a hash of types accepted by this type; keys are type names.
static AbstractDataProviderType get(Type type, *hash< auto > options, *hash< auto > tags)
Returns an appropriate object for the given type.
auto getOptionValue(string opt)
Returns the value of the given option.
auto getTag(string tag)
Returns the value of the given tag.
string getDesc()
Returns the description.
const False
const NothingType
const Hash
const Number
const List
const Float
const Object
const NullType
const Date
const Binary
const String
const Boolean
const Int
const NT_DATE
const NT_BOOLEAN
const NT_INT
const NT_NUMBER
const NT_BINARY
const NT_NOTHING
const NT_STRING
const NT_ALL
const NT_FLOAT
const NT_NULL
const NT_OBJECT
const NT_LIST
const NT_HASH
string type(auto arg)
Qore AbstractDataField class definition.
Definition: AbstractDataField.qc.dox.h:27
const DataTypeMap
Maps Qore type name constant values to data type objects.
Definition: AbstractDataProviderType.qc.dox.h:84
const DTT_FromLocation
Tag indicates that a string value can indicate a location.
Definition: AbstractDataProviderType.qc.dox.h:180
const OptimalQoreDataTypeMap
maps Qore type name constant values from the Type namespace to optimal Qore types names
Definition: AbstractDataProviderType.qc.dox.h:48
const TypeCodeMap
maps type codes to type names
Definition: AbstractDataProviderType.qc.dox.h:29
const DTT_FromFile
Tag indicating that a string value can be taken from a file.
Definition: AbstractDataProviderType.qc.dox.h:177
const AbstractDataProviderTypeMap
Maps Qore type name constant values to AbstractDataProviderType values.
Definition: AbstractDataProviderType.qc.dox.h:121
const OptimalQoreSoftDataTypeMap
maps Qore type name constant values from the Type namespace to optimal Qore types names
Definition: AbstractDataProviderType.qc.dox.h:70
const DTT_ClientOnly
Tag indicates that the value is only applicable in client contexts.
Definition: AbstractDataProviderType.qc.dox.h:183
describes type options
Definition: AbstractDataProviderType.qc.dox.h:125
string desc
the description of the option
Definition: AbstractDataProviderType.qc.dox.h:130
string type
the option value type
Definition: AbstractDataProviderType.qc.dox.h:127
describes a data type
Definition: AbstractDataProviderType.qc.dox.h:134
*hash< auto > options
Output: current transformation option values.
Definition: AbstractDataProviderType.qc.dox.h:145
*hash< auto > tags
Any tags set on the type.
Definition: AbstractDataProviderType.qc.dox.h:169
*hash< DataTypeInfo > default_field_type_info
Default type for fields not listed in fields.
Definition: AbstractDataProviderType.qc.dox.h:166
*hash< string, hash< DataProviderTypeOptionInfo > > supported_options
Output: transformation options supported by the type.
Definition: AbstractDataProviderType.qc.dox.h:142
bool can_manage_fields
If fields can be added dynamically to the type and if the type will accept any field at runtime.
Definition: AbstractDataProviderType.qc.dox.h:163
bool mandatory
Output: can be null / missing?
Definition: AbstractDataProviderType.qc.dox.h:151
list< string > types_returned
Input: list of types returned.
Definition: AbstractDataProviderType.qc.dox.h:157
string desc
The description of the type.
Definition: AbstractDataProviderType.qc.dox.h:139
string base_type
Output: base type.
Definition: AbstractDataProviderType.qc.dox.h:148
list< string > types_accepted
Output: list of types accepted.
Definition: AbstractDataProviderType.qc.dox.h:154
hash< string, hash< DataFieldInfo > > fields
Any fields supported by the type.
Definition: AbstractDataProviderType.qc.dox.h:160
string name
The name of the type.
Definition: AbstractDataProviderType.qc.dox.h:136