def resource_close( connection: 'Connection', cursor: int, query_id=None ) -> APIResult: """ Closes a resource, such as query cursor. :param connection: connection to Ignite server, :param cursor: cursor ID, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_RESOURCE_CLOSE, [ ('cursor', Long), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'cursor': cursor, }, )
def cache_remove_all( connection: 'Connection', cache: Union[str, int], binary=False, query_id=None, ) -> 'APIResult': """ Removes all entries from cache, notifying listeners and cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_REMOVE_ALL, [ ('hash_code', Int), ('flag', Byte), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, }, )
def resource_close(connection: 'Connection', cursor: int, query_id=None) -> APIResult: """ Closes a resource, such as query cursor. :param connection: connection to Ignite server, :param cursor: cursor ID, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_RESOURCE_CLOSE, [ ('cursor', Long), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'cursor': cursor, }, )
def cache_get_or_create( connection: 'Connection', name: str, query_id=None, ) -> 'APIResult': """ Creates a cache with a given name. Does nothing if the cache exists. :param connection: connection to Ignite server, :param name: cache name, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status if a cache is created successfully, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_GET_OR_CREATE_WITH_NAME, [ ('cache_name', String), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'cache_name': name, }, )
def cache_create( connection: 'Connection', name: str, query_id=None, ) -> 'APIResult': """ Creates a cache with a given name. Returns error if a cache with specified name already exists. :param connection: connection to Ignite server, :param name: cache name, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status if a cache is created successfully, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_CREATE_WITH_NAME, [ ('cache_name', String), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'cache_name': name, }, )
def cache_destroy( connection: 'Connection', cache: Union[str, int], query_id=None, ) -> 'APIResult': """ Destroys cache with a given name. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. """ query_struct = Query( OP_CACHE_DESTROY, [ ('hash_code', Int), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), }, )
def cache_clear( connection: 'Connection', cache: Union[str, int], binary=False, query_id=None, ) -> 'APIResult': """ Clears the cache without notifying listeners or cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_CLEAR, [ ('hash_code', Int), ('flag', Byte), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, }, )
def cache_destroy( connection: 'Connection', cache: Union[str, int], query_id=None, ) -> 'APIResult': """ Destroys cache with a given name. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. """ query_struct = Query( OP_CACHE_DESTROY,[ ('hash_code', Int), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), }, )
def cache_remove_if_equals( connection: 'Connection', cache: Union[str, int], key, sample, key_hint=None, sample_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Removes an entry with a given key if provided value is equal to actual value, notifying listeners and cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry, :param sample: a sample to compare the stored value with, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param sample_hint: (optional) Ignite data type, for whic the given sample should be converted :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a boolean success code, or non-zero status and an error description if something has gone wrong. """ query_struct = Query( OP_CACHE_REMOVE_IF_EQUALS, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ('sample', sample_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, 'sample': sample, }, response_config=[ ('success', Bool), ], ) if result.status == 0: result.value = result.value['success'] return result
def cache_get_and_replace( connection: 'Connection', cache: Union[str, int], key, value, key_hint=None, value_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Puts a value with a given key to cache, returning previous value for that key, if and only if there is a value currently mapped for that key. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry. Can be of any supported type, :param value: value for the key, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param value_hint: (optional) Ignite data type, for which the given value should be converted. :param binary: pass True to keep the value in binary form. False by default, :param query_id: a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and an old value or None on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_GET_AND_REPLACE, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ('value', value_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, 'value': value, }, response_config=[ ('value', AnyDataObject), ], ) if result.status == 0: result.value = result.value['value'] return result
def cache_replace_if_equals( connection: 'Connection', cache: Union[str, int], key, sample, value, key_hint=None, sample_hint=None, value_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Puts a value with a given key to cache only if the key already exists and value equals provided sample. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry, :param sample: a sample to compare the stored value with, :param value: new value for the given key, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param sample_hint: (optional) Ignite data type, for whic the given sample should be converted :param value_hint: (optional) Ignite data type, for which the given value should be converted, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a boolean success code, or non-zero status and an error description if something has gone wrong. """ query_struct = Query( OP_CACHE_REPLACE_IF_EQUALS, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ('sample', sample_hint or AnyDataObject), ('value', value_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, 'sample': sample, 'value': value, }, response_config=[ ('success', Bool), ], ) if result.status == 0: result.value = result.value['success'] return result
def cache_put_if_absent( connection: 'Connection', cache: Union[str, int], key, value, key_hint=None, value_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Puts a value with a given key to cache only if the key does not already exist. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry. Can be of any supported type, :param value: value for the key, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param value_hint: (optional) Ignite data type, for which the given value should be converted. :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_PUT_IF_ABSENT, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ('value', value_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, 'value': value, }, response_config=[ ('success', Bool), ], ) if result.status == 0: result.value = result.value['success'] return result
def cache_get_size( connection: 'Connection', cache: Union[str, int], peek_modes=0, binary=False, query_id=None, ) -> 'APIResult': """ Gets the number of entries in cache. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param peek_modes: (optional) limit count to near cache partition (PeekModes.NEAR), primary cache (PeekModes.PRIMARY), or backup cache (PeekModes.BACKUP). Defaults to all cache partitions (PeekModes.ALL), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a number of cache entries on success, non-zero status and an error description otherwise. """ if not isinstance(peek_modes, (list, tuple)): if peek_modes == 0: peek_modes = [] else: peek_modes = [peek_modes] query_struct = Query( OP_CACHE_GET_SIZE, [ ('hash_code', Int), ('flag', Byte), ('peek_modes', PeekModes), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'peek_modes': peek_modes, }, response_config=[ ('count', Long), ], ) if result.status == 0: result.value = result.value['count'] return result
def cache_get_and_put( connection: 'Connection', cache: Union[str, int], key, value, key_hint=None, value_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Puts a value with a given key to cache, and returns the previous value for that key, or null value if there was not such key. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry. Can be of any supported type, :param value: value for the key, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param value_hint: (optional) Ignite data type, for which the given value should be converted. :param binary: pass True to keep the value in binary form. False by default, :param query_id: a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and an old value or None if a value is written, non-zero status and an error description in case of error. """ query_struct = Query( OP_CACHE_GET_AND_PUT, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ('value', value_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, 'value': value, }, response_config=[ ('value', AnyDataObject), ], ) if result.status == 0: result.value = result.value['value'] return result
def cache_get( connection: 'Connection', cache: Union[str, int], key, key_hint=None, binary=False, query_id=None, ) -> 'APIResult': """ Retrieves a value from cache by key. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry. Can be of any supported type, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value retrieved on success, non-zero status and an error description on failure. """ query_struct = Query( OP_CACHE_GET, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, }, response_config=[ ('value', AnyDataObject), ], ) if result.status != 0: return result result.value = result.value['value'] return result
def cache_contains_keys( connection: 'Connection', cache: Union[str, int], keys: Iterable, binary=False, query_id=None, ) -> 'APIResult': """ Returns a value indicating whether all given keys are present in cache. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param keys: a list of keys or (key, type hint) tuples, :param binary: pass True to keep the value in binary form. False by default, :param query_id: a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a bool value retrieved on success: `True` when all keys are present, `False` otherwise, non-zero status and an error description on failure. """ query_struct = Query( OP_CACHE_CONTAINS_KEYS, [ ('hash_code', Int), ('flag', Byte), ('keys', AnyDataArray()), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'keys': keys, }, response_config=[ ('value', Bool), ], ) if result.status == 0: result.value = result.value['value'] return result
def cache_get_all( connection: 'Connection', cache: Union[str, int], keys: Iterable, binary=False, query_id=None, ) -> 'APIResult': """ Retrieves multiple key-value pairs from cache. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param keys: list of keys or tuples of (key, key_hint), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a dict, made of retrieved key-value pairs, non-zero status and an error description on failure. """ query_struct = Query( OP_CACHE_GET_ALL, [ ('hash_code', Int), ('flag', Byte), ('keys', AnyDataArray()), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'keys': keys, }, response_config=[ ('data', Map), ], ) if result.status == 0: result.value = dict(result.value)['data'] return result
def scan_cursor_get_page( connection: 'Connection', cursor: int, query_id=None, ) -> APIResult: """ Fetches the next scan query cursor page by cursor ID that is obtained from `scan` function. :param connection: connection to Ignite server, :param cursor: cursor ID, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value of type dict with results on success, non-zero status and an error description otherwise. Value dict is of following format: * `data`: dict, result rows as key-value pairs, * `more`: bool, True if more data is available for subsequent ‘scan_cursor_get_page’ calls. """ query_struct = Query( OP_QUERY_SCAN_CURSOR_GET_PAGE, [ ('cursor', Long), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'cursor': cursor, }, response_config=[ ('data', Map), ('more', Bool), ], ) if result.status == 0: result.value = dict(result.value) return result
def cache_remove_key( connection: 'Connection', cache: Union[str, int], key, key_hint: object=None, binary=False, query_id=None, ) -> 'APIResult': """ Clears the cache key without notifying listeners or cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param key: key for the cache entry, :param key_hint: (optional) Ignite data type, for which the given key should be converted, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a boolean success code, or non-zero status and an error description if something has gone wrong. """ query_struct = Query( OP_CACHE_REMOVE_KEY, [ ('hash_code', Int), ('flag', Byte), ('key', key_hint or AnyDataObject), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'key': key, }, response_config=[ ('success', Bool), ], ) if result.status == 0: result.value = result.value['success'] return result
def cache_put_all( connection: 'Connection', cache: Union[str, int], pairs: dict, binary=False, query_id=None, ) -> 'APIResult': """ Puts multiple key-value pairs to cache (overwriting existing associations if any). :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param pairs: dictionary type parameters, contains key-value pairs to save. Each key or value can be an item of representable Python type or a tuple of (item, hint), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status if key-value pairs are written, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_PUT_ALL, [ ('hash_code', Int), ('flag', Byte), ('data', Map), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'data': pairs, }, )
def cache_get_configuration( connection: 'Connection', cache: Union[str, int], flags: int = 0, query_id=None, ) -> 'APIResult': """ Gets configuration for the given cache. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param flags: Ignite documentation is unclear on this subject, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Result value is OrderedDict with the cache configuration parameters. """ query_struct = Query( OP_CACHE_GET_CONFIGURATION, [ ('hash_code', Int), ('flags', Byte), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flags': flags, }, response_config=[ ('cache_config', cache_config_struct), ], ) if result.status == 0: result.value = compact_cache_config(result.value['cache_config']) return result
def cache_get_names(connection: 'Connection', query_id=None) -> 'APIResult': """ Gets existing cache names. :param connection: connection to Ignite server, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a list of cache names, non-zero status and an error description otherwise. """ query_struct = Query(OP_CACHE_GET_NAMES, query_id=query_id) result = query_struct.perform( connection, response_config=[ ('cache_names', StringArray), ], ) if result.status == 0: result.value = result.value['cache_names'] return result
def cache_remove_keys( connection: 'Connection', cache: Union[str, int], keys: Iterable, binary=False, query_id=None, ) -> 'APIResult': """ Removes entries with given keys, notifying listeners and cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param keys: list of keys or tuples of (key, key_hint), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_REMOVE_KEYS, [ ('hash_code', Int), ('flag', Byte), ('keys', AnyDataArray()), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'keys': keys, }, )
def cache_get_configuration( connection: 'Connection', cache: Union[str, int], flags: int=0, query_id=None, ) -> 'APIResult': """ Gets configuration for the given cache. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param flags: Ignite documentation is unclear on this subject, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Result value is OrderedDict with the cache configuration parameters. """ query_struct = Query( OP_CACHE_GET_CONFIGURATION, [ ('hash_code', Int), ('flags', Byte), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flags': flags, }, response_config=[ ('cache_config', cache_config_struct), ], ) if result.status == 0: result.value = compact_cache_config(result.value['cache_config']) return result
def cache_clear_keys( connection: 'Connection', cache: Union[str, int], keys: list, binary=False, query_id=None, ) -> 'APIResult': """ Clears the cache keys without notifying listeners or cache writers. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param keys: list of keys or tuples of (key, key_hint), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status on success, non-zero status and an error description otherwise. """ query_struct = Query( OP_CACHE_CLEAR_KEYS, [ ('hash_code', Int), ('flag', Byte), ('keys', AnyDataArray()), ], query_id=query_id, ) return query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'keys': keys, }, )
def put_binary_type( connection: 'Connection', type_name: str, affinity_key_field: str=None, is_enum=False, schema: dict=None, query_id=None, ) -> APIResult: """ Registers binary type information in cluster. :param connection: connection to Ignite server, :param type_name: name of the data type being registered, :param affinity_key_field: (optional) name of the affinity key field, :param is_enum: (optional) register enum if True, binary object otherwise. Defaults to False, :param schema: (optional) when register enum, pass a dict of enumerated parameter names as keys and an integers as values. When register binary type, pass a dict of field names: field types. Binary type with no fields is OK, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. """ # prepare data if schema is None: schema = {} type_id = entity_id(type_name) data = { 'type_name': type_name, 'type_id': type_id, 'affinity_key_field': affinity_key_field, 'binary_fields': [], 'is_enum': is_enum, 'schema': [], } schema_id = None if is_enum: data['enums'] = [] for literal, ordinal in schema.items(): data['enums'].append({ 'literal': literal, 'type_id': ordinal, }) else: # assemble schema and calculate schema ID in one go schema_id = FNV1_OFFSET_BASIS if schema else 0 for field_name, data_type in schema.items(): # TODO: check for allowed data types field_id = entity_id(field_name) data['binary_fields'].append({ 'field_name': field_name, 'type_id': int.from_bytes( data_type.type_code, byteorder=PROTOCOL_BYTE_ORDER ), 'field_id': field_id, }) schema_id ^= (field_id & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 8) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 16) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 24) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) data['schema'].append({ 'schema_id': schema_id, 'schema_fields': [ {'schema_field_id': entity_id(x)} for x in schema ], }) # do query if is_enum: query_struct = Query( OP_PUT_BINARY_TYPE, [ ('type_id', Int), ('type_name', String), ('affinity_key_field', String), ('binary_fields', binary_fields_struct), ('is_enum', Bool), ('enums', enum_struct), ('schema', schema_struct), ], query_id=query_id, ) else: query_struct = Query( OP_PUT_BINARY_TYPE, [ ('type_id', Int), ('type_name', String), ('affinity_key_field', String), ('binary_fields', binary_fields_struct), ('is_enum', Bool), ('schema', schema_struct), ], query_id=query_id, ) result = query_struct.perform(connection, query_params=data) if result.status == 0: result.value = { 'type_id': type_id, 'schema_id': schema_id, } return result
def scan( connection: 'Connection', cache: Union[str, int], page_size: int, partitions: int = -1, local: bool = False, binary: bool = False, query_id=None, ) -> APIResult: """ Performs scan query. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param page_size: cursor page size, :param partitions: (optional) number of partitions to query (negative to query entire cache), :param local: (optional) pass True if this query should be executed on local node only. Defaults to False, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value of type dict with results on success, non-zero status and an error description otherwise. Value dict is of following format: * `cursor`: int, cursor ID, * `data`: dict, result rows as key-value pairs, * `more`: bool, True if more data is available for subsequent ‘scan_cursor_get_page’ calls. """ query_struct = Query( OP_QUERY_SCAN, [ ('hash_code', Int), ('flag', Byte), ('filter', Null), ('page_size', Int), ('partitions', Int), ('local', Bool), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'filter': None, 'page_size': page_size, 'partitions': partitions, 'local': 1 if local else 0, }, response_config=[ ('cursor', Long), ('data', Map), ('more', Bool), ], ) if result.status == 0: result.value = dict(result.value) return result
def sql(connection: 'Connection', cache: Union[str, int], table_name: str, query_str: str, page_size: int, query_args=None, distributed_joins: bool = False, replicated_only: bool = False, local: bool = False, timeout: int = 0, binary: bool = False, query_id=None) -> APIResult: """ Executes an SQL query over data stored in the cluster. The query returns the whole record (key and value). :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param table_name: name of a type or SQL table, :param query_str: SQL query string, :param page_size: cursor page size, :param query_args: (optional) query arguments, :param distributed_joins: (optional) distributed joins. Defaults to False, :param replicated_only: (optional) whether query contains only replicated tables or not. Defaults to False, :param local: (optional) pass True if this query should be executed on local node only. Defaults to False, :param timeout: (optional) non-negative timeout value in ms. Zero disables timeout (default), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value of type dict with results on success, non-zero status and an error description otherwise. Value dict is of following format: * `cursor`: int, cursor ID, * `data`: dict, result rows as key-value pairs, * `more`: bool, True if more data is available for subsequent ‘sql_get_page’ calls. """ if query_args is None: query_args = [] query_struct = Query( OP_QUERY_SQL, [ ('hash_code', Int), ('flag', Byte), ('table_name', String), ('query_str', String), ('query_args', AnyDataArray()), ('distributed_joins', Bool), ('local', Bool), ('replicated_only', Bool), ('page_size', Int), ('timeout', Long), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'table_name': table_name, 'query_str': query_str, 'query_args': query_args, 'distributed_joins': 1 if distributed_joins else 0, 'local': 1 if local else 0, 'replicated_only': 1 if replicated_only else 0, 'page_size': page_size, 'timeout': timeout, }, response_config=[ ('cursor', Long), ('data', Map), ('more', Bool), ], ) if result.status == 0: result.value = dict(result.value) return result
def put_binary_type( connection: 'Connection', type_name: str, affinity_key_field: str = None, is_enum=False, schema: dict = None, query_id=None, ) -> APIResult: """ Registers binary type information in cluster. :param connection: connection to Ignite server, :param type_name: name of the data type being registered, :param affinity_key_field: (optional) name of the affinity key field, :param is_enum: (optional) register enum if True, binary object otherwise. Defaults to False, :param schema: (optional) when register enum, pass a dict of enumerated parameter names as keys and an integers as values. When register binary type, pass a dict of field names: field types. Binary type with no fields is OK, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. """ # prepare data if schema is None: schema = {} type_id = entity_id(type_name) data = { 'type_name': type_name, 'type_id': type_id, 'affinity_key_field': affinity_key_field, 'binary_fields': [], 'is_enum': is_enum, 'schema': [], } schema_id = None if is_enum: data['enums'] = [] for literal, ordinal in schema.items(): data['enums'].append({ 'literal': literal, 'type_id': ordinal, }) else: # assemble schema and calculate schema ID in one go schema_id = FNV1_OFFSET_BASIS if schema else 0 for field_name, data_type in schema.items(): # TODO: check for allowed data types field_id = entity_id(field_name) data['binary_fields'].append({ 'field_name': field_name, 'type_id': int.from_bytes(data_type.type_code, byteorder=PROTOCOL_BYTE_ORDER), 'field_id': field_id, }) schema_id ^= (field_id & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 8) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 16) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) schema_id ^= ((field_id >> 24) & 0xff) schema_id = int_overflow(schema_id * FNV1_PRIME) data['schema'].append({ 'schema_id': schema_id, 'schema_fields': [{ 'schema_field_id': entity_id(x) } for x in schema], }) # do query if is_enum: query_struct = Query( OP_PUT_BINARY_TYPE, [ ('type_id', Int), ('type_name', String), ('affinity_key_field', String), ('binary_fields', binary_fields_struct), ('is_enum', Bool), ('enums', enum_struct), ('schema', schema_struct), ], query_id=query_id, ) else: query_struct = Query( OP_PUT_BINARY_TYPE, [ ('type_id', Int), ('type_name', String), ('affinity_key_field', String), ('binary_fields', binary_fields_struct), ('is_enum', Bool), ('schema', schema_struct), ], query_id=query_id, ) result = query_struct.perform(connection, query_params=data) if result.status == 0: result.value = { 'type_id': type_id, 'schema_id': schema_id, } return result
def sql( connection: 'Connection', cache: Union[str, int], table_name: str, query_str: str, page_size: int, query_args=None, distributed_joins: bool=False, replicated_only: bool=False, local: bool=False, timeout: int=0, binary: bool=False, query_id=None ) -> APIResult: """ Executes an SQL query over data stored in the cluster. The query returns the whole record (key and value). :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param table_name: name of a type or SQL table, :param query_str: SQL query string, :param page_size: cursor page size, :param query_args: (optional) query arguments, :param distributed_joins: (optional) distributed joins. Defaults to False, :param replicated_only: (optional) whether query contains only replicated tables or not. Defaults to False, :param local: (optional) pass True if this query should be executed on local node only. Defaults to False, :param timeout: (optional) non-negative timeout value in ms. Zero disables timeout (default), :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value of type dict with results on success, non-zero status and an error description otherwise. Value dict is of following format: * `cursor`: int, cursor ID, * `data`: dict, result rows as key-value pairs, * `more`: bool, True if more data is available for subsequent ‘sql_get_page’ calls. """ if query_args is None: query_args = [] query_struct = Query( OP_QUERY_SQL, [ ('hash_code', Int), ('flag', Byte), ('table_name', String), ('query_str', String), ('query_args', AnyDataArray()), ('distributed_joins', Bool), ('local', Bool), ('replicated_only', Bool), ('page_size', Int), ('timeout', Long), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'table_name': table_name, 'query_str': query_str, 'query_args': query_args, 'distributed_joins': 1 if distributed_joins else 0, 'local': 1 if local else 0, 'replicated_only': 1 if replicated_only else 0, 'page_size': page_size, 'timeout': timeout, }, response_config=[ ('cursor', Long), ('data', Map), ('more', Bool), ], ) if result.status == 0: result.value = dict(result.value) return result
def scan( connection: 'Connection', cache: Union[str, int], page_size: int, partitions: int=-1, local: bool=False, binary: bool=False, query_id=None, ) -> APIResult: """ Performs scan query. :param connection: connection to Ignite server, :param cache: name or ID of the cache, :param page_size: cursor page size, :param partitions: (optional) number of partitions to query (negative to query entire cache), :param local: (optional) pass True if this query should be executed on local node only. Defaults to False, :param binary: (optional) pass True to keep the value in binary form. False by default, :param query_id: (optional) a value generated by client and returned as-is in response.query_id. When the parameter is omitted, a random value is generated, :return: API result data object. Contains zero status and a value of type dict with results on success, non-zero status and an error description otherwise. Value dict is of following format: * `cursor`: int, cursor ID, * `data`: dict, result rows as key-value pairs, * `more`: bool, True if more data is available for subsequent ‘scan_cursor_get_page’ calls. """ query_struct = Query( OP_QUERY_SCAN, [ ('hash_code', Int), ('flag', Byte), ('filter', Null), ('page_size', Int), ('partitions', Int), ('local', Bool), ], query_id=query_id, ) result = query_struct.perform( connection, query_params={ 'hash_code': cache_id(cache), 'flag': 1 if binary else 0, 'filter': None, 'page_size': page_size, 'partitions': partitions, 'local': 1 if local else 0, }, response_config=[ ('cursor', Long), ('data', Map), ('more', Bool), ], ) if result.status == 0: result.value = dict(result.value) return result