sqlalchemy-iris 0.5.0b3__py3-none-any.whl → 0.6.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- intersystems_iris/_BufferReader.py +10 -0
- intersystems_iris/_BufferWriter.py +32 -0
- intersystems_iris/_ConnectionInformation.py +54 -0
- intersystems_iris/_ConnectionParameters.py +18 -0
- intersystems_iris/_Constant.py +38 -0
- intersystems_iris/_DBList.py +499 -0
- intersystems_iris/_Device.py +69 -0
- intersystems_iris/_GatewayContext.py +25 -0
- intersystems_iris/_GatewayException.py +4 -0
- intersystems_iris/_GatewayUtility.py +74 -0
- intersystems_iris/_IRIS.py +1294 -0
- intersystems_iris/_IRISConnection.py +516 -0
- intersystems_iris/_IRISEmbedded.py +85 -0
- intersystems_iris/_IRISGlobalNode.py +273 -0
- intersystems_iris/_IRISGlobalNodeView.py +25 -0
- intersystems_iris/_IRISIterator.py +143 -0
- intersystems_iris/_IRISList.py +360 -0
- intersystems_iris/_IRISNative.py +208 -0
- intersystems_iris/_IRISOREF.py +4 -0
- intersystems_iris/_IRISObject.py +424 -0
- intersystems_iris/_IRISReference.py +133 -0
- intersystems_iris/_InStream.py +149 -0
- intersystems_iris/_LegacyIterator.py +135 -0
- intersystems_iris/_ListItem.py +15 -0
- intersystems_iris/_ListReader.py +84 -0
- intersystems_iris/_ListWriter.py +157 -0
- intersystems_iris/_LogFileStream.py +115 -0
- intersystems_iris/_MessageHeader.py +51 -0
- intersystems_iris/_OutStream.py +25 -0
- intersystems_iris/_PrintStream.py +65 -0
- intersystems_iris/_PythonGateway.py +850 -0
- intersystems_iris/_SharedMemorySocket.py +87 -0
- intersystems_iris/__init__.py +79 -0
- intersystems_iris/__main__.py +7 -0
- intersystems_iris/dbapi/_Column.py +56 -0
- intersystems_iris/dbapi/_DBAPI.py +2295 -0
- intersystems_iris/dbapi/_Descriptor.py +46 -0
- intersystems_iris/dbapi/_IRISStream.py +63 -0
- intersystems_iris/dbapi/_Message.py +158 -0
- intersystems_iris/dbapi/_Parameter.py +138 -0
- intersystems_iris/dbapi/_ParameterCollection.py +133 -0
- intersystems_iris/dbapi/_ResultSetRow.py +314 -0
- intersystems_iris/dbapi/_SQLType.py +32 -0
- intersystems_iris/dbapi/__init__.py +0 -0
- intersystems_iris/dbapi/preparser/_PreParser.py +1658 -0
- intersystems_iris/dbapi/preparser/_Scanner.py +391 -0
- intersystems_iris/dbapi/preparser/_Token.py +81 -0
- intersystems_iris/dbapi/preparser/_TokenList.py +251 -0
- intersystems_iris/dbapi/preparser/__init__.py +0 -0
- intersystems_iris/pex/_BusinessHost.py +101 -0
- intersystems_iris/pex/_BusinessOperation.py +105 -0
- intersystems_iris/pex/_BusinessProcess.py +214 -0
- intersystems_iris/pex/_BusinessService.py +95 -0
- intersystems_iris/pex/_Common.py +228 -0
- intersystems_iris/pex/_Director.py +24 -0
- intersystems_iris/pex/_IRISBusinessOperation.py +5 -0
- intersystems_iris/pex/_IRISBusinessService.py +18 -0
- intersystems_iris/pex/_IRISInboundAdapter.py +5 -0
- intersystems_iris/pex/_IRISOutboundAdapter.py +17 -0
- intersystems_iris/pex/_InboundAdapter.py +57 -0
- intersystems_iris/pex/_Message.py +6 -0
- intersystems_iris/pex/_OutboundAdapter.py +46 -0
- intersystems_iris/pex/__init__.py +25 -0
- iris/__init__.py +25 -0
- iris/iris_site.py +13 -0
- iris/irisbuiltins.py +97 -0
- iris/irisloader.py +199 -0
- irisnative/_IRISNative.py +9 -0
- irisnative/__init__.py +10 -0
- {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/METADATA +1 -1
- sqlalchemy_iris-0.6.0b1.dist-info/RECORD +83 -0
- sqlalchemy_iris-0.6.0b1.dist-info/top_level.txt +4 -0
- sqlalchemy_iris-0.5.0b3.dist-info/RECORD +0 -14
- sqlalchemy_iris-0.5.0b3.dist-info/top_level.txt +0 -1
- {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/LICENSE +0 -0
- {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/WHEEL +0 -0
- {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,273 @@
|
|
1
|
+
import collections.abc
|
2
|
+
import intersystems_iris._IRISIterator
|
3
|
+
import intersystems_iris._IRISGlobalNodeView
|
4
|
+
|
5
|
+
class BEFOREFIRST(object):
|
6
|
+
pass
|
7
|
+
|
8
|
+
class AFTERLAST(object):
|
9
|
+
pass
|
10
|
+
|
11
|
+
class _point(object):
|
12
|
+
|
13
|
+
def __init__(self, key, inclusive):
|
14
|
+
self._key = key
|
15
|
+
self._inclusive = inclusive
|
16
|
+
|
17
|
+
def _iterator_copy(self):
|
18
|
+
if self.is_marker():
|
19
|
+
return _point(None, self._inclusive)
|
20
|
+
else:
|
21
|
+
return _point(self._key, self._inclusive)
|
22
|
+
|
23
|
+
def is_marker(self):
|
24
|
+
return isinstance(self._key,BEFOREFIRST) or isinstance(self._key,AFTERLAST)
|
25
|
+
|
26
|
+
class _IRISGlobalNode(collections.abc.Container, collections.abc.Reversible, collections.abc.Iterable):
|
27
|
+
'''
|
28
|
+
IRISGlobalNode provides an iterable interface that behaves like a virtual dictionary representing the immediate children of a global node.
|
29
|
+
|
30
|
+
IRISGlobalNode is iterable:
|
31
|
+
IRISGlobalNode supports iterable interface using for-loop. For example:
|
32
|
+
for x in node:
|
33
|
+
print(x)
|
34
|
+
|
35
|
+
IRISGlobalNode supports views:
|
36
|
+
Methods keys(), subscripts(), values(), items(), nodes(), and nodeitems() return view objects of IRISGlobalNodeView.
|
37
|
+
They provide specific views on the IRISGlobalNode entries which can be iterated over to yield their respective data, and support membership tests.
|
38
|
+
|
39
|
+
For example, the items() method returns a view object containing list of subscript-value pairs in the IRISGlobalNode.
|
40
|
+
for x in node.items():
|
41
|
+
print(x)
|
42
|
+
|
43
|
+
IRISGlobalNode is sliceable:
|
44
|
+
Through standard Python slicing syntax, IRISGlobalNode can be iterated over a more restricted ranges of subscripts.
|
45
|
+
node[start:stop:step]
|
46
|
+
This results in a new IRISGlobalNode object with the subsript range limited to from start (inclusive) to stop (exclusive). step can be 1 or -1, meaning traversing in forward direction or in reversed direction.
|
47
|
+
|
48
|
+
IRISGlobalNode is reversable:
|
49
|
+
If the "step" variable is -1 in the slicing syntax, the reaversing of the IRISGlobalNode will go backwards - reversed from the standard order.
|
50
|
+
For example:
|
51
|
+
for x in node[8:2:-1]: print(x)
|
52
|
+
will traverse the subscripts from 8 (inclusive) to 2 (exclusive).
|
53
|
+
|
54
|
+
IRISGlobalNode is indexable and supports membership tests
|
55
|
+
node[x] will return the value of the global node with subscript x. "x in node" returns a boolean.
|
56
|
+
'''
|
57
|
+
|
58
|
+
def __init__(self, irisnative, global_name, *subscripts):
|
59
|
+
self._irisnative = irisnative
|
60
|
+
self._global_name = global_name
|
61
|
+
self._subscripts = subscripts
|
62
|
+
self._start = _point(BEFOREFIRST(), False)
|
63
|
+
self._stop = _point(AFTERLAST(), False)
|
64
|
+
self._reversed = False
|
65
|
+
|
66
|
+
def __iter__(self):
|
67
|
+
return intersystems_iris.IRISIterator(intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_SUBSCRIPTS))
|
68
|
+
|
69
|
+
def __contains__(self, subscript):
|
70
|
+
return self._irisnative.isDefined(self._global_name, *self._subscripts, subscript) != 0
|
71
|
+
|
72
|
+
def __getitem__(self, subscript):
|
73
|
+
if isinstance(subscript, slice):
|
74
|
+
newnode = self._clone()
|
75
|
+
step = 1 if subscript.step is None else subscript.step
|
76
|
+
if not isinstance(step, int):
|
77
|
+
raise TypeError("slice indices must be integers or None")
|
78
|
+
if step != 1 and step != -1:
|
79
|
+
raise ValueError("slice step can only be 1, -1 or None")
|
80
|
+
if step > 0:
|
81
|
+
if subscript.start is not None:
|
82
|
+
newnode._start = self._max_start(self._start, _point(subscript.start, True), newnode._reversed)
|
83
|
+
else:
|
84
|
+
newnode._start = self._start
|
85
|
+
if subscript.stop is not None:
|
86
|
+
newnode._stop = self._min_stop(self._stop, _point(subscript.stop, False), newnode._reversed)
|
87
|
+
else:
|
88
|
+
newnode._stop = self._stop
|
89
|
+
else:
|
90
|
+
newnode._reversed = not self._reversed
|
91
|
+
if subscript.start is not None:
|
92
|
+
newnode._start = self._max_start(self._stop, _point(subscript.start, True), newnode._reversed)
|
93
|
+
else:
|
94
|
+
newnode._start = self._stop
|
95
|
+
if subscript.stop is not None:
|
96
|
+
newnode._stop = self._min_stop(self._start, _point(subscript.stop, False), newnode._reversed)
|
97
|
+
else:
|
98
|
+
newnode._stop = self._start
|
99
|
+
return newnode
|
100
|
+
else:
|
101
|
+
iris_value = self._irisnative.get(self._global_name, *self._subscripts, subscript)
|
102
|
+
if iris_value == None:
|
103
|
+
raise KeyError("<UNDEFINED>")
|
104
|
+
return iris_value
|
105
|
+
|
106
|
+
def __setitem__(self, subscript, value):
|
107
|
+
self._irisnative.set(value, self._global_name, *self._subscripts, subscript)
|
108
|
+
|
109
|
+
def __reversed__(self):
|
110
|
+
newnode = self._clone()
|
111
|
+
newnode._reversed = not self._reversed
|
112
|
+
newnode._start = self._stop
|
113
|
+
newnode._stop = self._start
|
114
|
+
return newnode.__iter__()
|
115
|
+
|
116
|
+
def __delitem__(self, subscript):
|
117
|
+
self._irisnative.kill(self._global_name, *self._subscripts, subscript)
|
118
|
+
|
119
|
+
def get(self, subscript, default_value):
|
120
|
+
'''
|
121
|
+
Returns the value of a given subscript. Returns the default_value if the node is UNDEFINED.
|
122
|
+
'''
|
123
|
+
iris_value = self._irisnative.get(self._global_name, *self._subscripts, subscript)
|
124
|
+
return default_value if iris_value == None else iris_value
|
125
|
+
|
126
|
+
def node(self, subscript):
|
127
|
+
'''
|
128
|
+
Returns IRISGlobalNode object representing the subnode at a given subscript.
|
129
|
+
'''
|
130
|
+
return self._irisnative.node(self._global_name, *self._subscripts, subscript)
|
131
|
+
|
132
|
+
def keys(self):
|
133
|
+
'''
|
134
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield only subscripts.
|
135
|
+
'''
|
136
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_SUBSCRIPTS)
|
137
|
+
|
138
|
+
def subscripts(self):
|
139
|
+
'''
|
140
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield only subscripts.
|
141
|
+
'''
|
142
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_SUBSCRIPTS)
|
143
|
+
|
144
|
+
def values(self):
|
145
|
+
'''
|
146
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield only values.
|
147
|
+
'''
|
148
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_VALUES)
|
149
|
+
|
150
|
+
def items(self):
|
151
|
+
'''
|
152
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield subscript-value tuples.
|
153
|
+
'''
|
154
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_ITEMS)
|
155
|
+
|
156
|
+
def nodes(self):
|
157
|
+
'''
|
158
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield subnodes.
|
159
|
+
'''
|
160
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_NODES)
|
161
|
+
|
162
|
+
def nodesitems(self):
|
163
|
+
'''
|
164
|
+
Returns an IRISGlobalNodeView object of the current IRISGlobalNode which can be iterated over to yield subscript-subnode tuples.
|
165
|
+
'''
|
166
|
+
return intersystems_iris.IRISGlobalNodeView(self, intersystems_iris.IRISIterator.VIEW_NODEITEMS)
|
167
|
+
|
168
|
+
def _clone(self):
|
169
|
+
newnode = intersystems_iris.IRISGlobalNode(self._irisnative, self._global_name, *self._subscripts)
|
170
|
+
newnode._start = self._start
|
171
|
+
newnode._stop = self._stop
|
172
|
+
newnode._reversed = self._reversed
|
173
|
+
return newnode
|
174
|
+
|
175
|
+
def _min_stop(self, X, Y, reversed):
|
176
|
+
sort_order = self._sort_order(self._irisnative, X, Y, self._global_name, *self._subscripts)
|
177
|
+
if sort_order > 0:
|
178
|
+
return Y if reversed else X
|
179
|
+
elif sort_order < 0:
|
180
|
+
return X if reversed else Y
|
181
|
+
else:
|
182
|
+
return Y if X._inclusive or X._inclusive == Y._inclusive else X
|
183
|
+
|
184
|
+
def _max_start(self, X, Y, reversed):
|
185
|
+
sort_order = self._sort_order(self._irisnative, X, Y, self._global_name, *self._subscripts)
|
186
|
+
if sort_order > 0:
|
187
|
+
return X if reversed else Y
|
188
|
+
elif sort_order < 0:
|
189
|
+
return Y if reversed else X
|
190
|
+
else:
|
191
|
+
return Y if X._inclusive or X._inclusive == Y._inclusive else X
|
192
|
+
|
193
|
+
@staticmethod
|
194
|
+
def _sort_order(irisnative, X, Y, global_name, *subscripts):
|
195
|
+
if isinstance(X._key, BEFOREFIRST) and isinstance(Y._key, BEFOREFIRST):
|
196
|
+
return 0
|
197
|
+
if isinstance(X._key, AFTERLAST) and isinstance(Y._key, AFTERLAST):
|
198
|
+
return 0
|
199
|
+
if isinstance(X._key, BEFOREFIRST):
|
200
|
+
reference_Y = intersystems_iris.IRISReference(Y._key, str)
|
201
|
+
irisnative._sortOrder(reference_Y, None, global_name, *subscripts)
|
202
|
+
Y._key = reference_Y.get_value()
|
203
|
+
return 1
|
204
|
+
if isinstance(X._key, AFTERLAST):
|
205
|
+
reference_Y = intersystems_iris.IRISReference(Y._key, str)
|
206
|
+
irisnative._sortOrder(reference_Y, None, global_name, *subscripts)
|
207
|
+
Y._key = reference_Y.get_value()
|
208
|
+
return -1
|
209
|
+
if isinstance(Y._key, BEFOREFIRST):
|
210
|
+
reference_X = intersystems_iris.IRISReference(X._key, str)
|
211
|
+
irisnative._sortOrder(reference_X, None, global_name, *subscripts)
|
212
|
+
X._key = reference_X.get_value()
|
213
|
+
return -1
|
214
|
+
if isinstance(Y._key, AFTERLAST):
|
215
|
+
reference_X = intersystems_iris.IRISReference(X._key, str)
|
216
|
+
irisnative._sortOrder(reference_X, None, global_name, *subscripts)
|
217
|
+
X._key = reference_X.get_value()
|
218
|
+
return 1
|
219
|
+
reference_X = intersystems_iris.IRISReference(X._key, str)
|
220
|
+
reference_Y = intersystems_iris.IRISReference(Y._key, str)
|
221
|
+
sort_order = irisnative._sortOrder(reference_X, reference_Y, global_name, *subscripts)
|
222
|
+
X._key = reference_X.get_value()
|
223
|
+
Y._key = reference_Y.get_value()
|
224
|
+
return sort_order
|
225
|
+
|
226
|
+
@classmethod
|
227
|
+
def _sort_order_by_key(cls, irisnative, keyX, keyY, global_name, *subscripts):
|
228
|
+
return cls._sort_order(irisnative, _point(keyX, None), _point(keyY, None), global_name, *subscripts)
|
229
|
+
|
230
|
+
@staticmethod
|
231
|
+
def _point(key, inclusive):
|
232
|
+
return _point(key, inclusive)
|
233
|
+
|
234
|
+
def _slice_state(self):
|
235
|
+
'''
|
236
|
+
This is an internal method intended to be used for debugging purposes only.
|
237
|
+
|
238
|
+
Returns a formatted string that describes the state of slicing in the IRISGlobalNode object.
|
239
|
+
|
240
|
+
slice_state()
|
241
|
+
|
242
|
+
IRISGlobalNode object can be sliced to limit the subscript traversing range.
|
243
|
+
|
244
|
+
node[start:stop:step]
|
245
|
+
|
246
|
+
This results in a new IRISGlobalNode object with the subsript range limited to from start (inclusive) to stop (exclusive).
|
247
|
+
step can be 1 or -1, meaning traversing in forward direction or in reversed direction.
|
248
|
+
|
249
|
+
The formatted string uses the standard mathematical notation of bracketing.
|
250
|
+
Square brackets, [], are used to denote closed intervals with inclusive endpoints.
|
251
|
+
Parentheses, (), are used to denote open intervals with exclusive endpoints
|
252
|
+
For example, "[ 3 >>> 7 )" means from 3 to 7, forward direction, inclusive of 3 but exclusive of 7. This is what you will get with a simple slicing of node[3:7]
|
253
|
+
"[ 1 <<< 9 ]" means from 9 to 1, in reversed direction, inclusive on both ends.
|
254
|
+
|
255
|
+
Return Value
|
256
|
+
------------
|
257
|
+
Returns slice state.
|
258
|
+
'''
|
259
|
+
if self._reversed:
|
260
|
+
left_bracket = "[ " if self._stop._inclusive else "( "
|
261
|
+
left_key = "None" if self._stop.is_marker() else ("'"+self._stop._key.replace("'","\\'")+"'")
|
262
|
+
arrows = " <<< "
|
263
|
+
right_key = "None" if self._start.is_marker() else ("'"+self._start._key.replace("'","\\'")+"'")
|
264
|
+
right_bracket = " ]" if self._start._inclusive else " )"
|
265
|
+
else:
|
266
|
+
left_bracket = "[ " if self._start._inclusive else "( "
|
267
|
+
left_key = "None" if self._start.is_marker() else ("'"+self._start._key.replace("'","\\'")+"'")
|
268
|
+
arrows = " >>> "
|
269
|
+
right_key = "None" if self._stop.is_marker() else ("'"+self._stop._key.replace("'","\\'")+"'")
|
270
|
+
right_bracket = " ]" if self._stop._inclusive else " )"
|
271
|
+
return left_bracket + left_key + arrows + right_key + right_bracket
|
272
|
+
|
273
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import collections.abc
|
2
|
+
import intersystems_iris._IRISIterator
|
3
|
+
|
4
|
+
class _IRISGlobalNodeView(collections.abc.MappingView, collections.abc.Reversible):
|
5
|
+
'''
|
6
|
+
IRISGlobalNodeView class implements view objects for IRISGlobalNode which can be iterated over to yield their respective data.
|
7
|
+
'''
|
8
|
+
|
9
|
+
def __init__(self, node, view_type):
|
10
|
+
self._node = node
|
11
|
+
self._view_type = view_type
|
12
|
+
|
13
|
+
def __iter__(self):
|
14
|
+
return intersystems_iris.IRISIterator(self)
|
15
|
+
|
16
|
+
def __reversed__(self):
|
17
|
+
iter = intersystems_iris.IRISIterator(self)
|
18
|
+
iter._reversed = not iter._reversed
|
19
|
+
temp = iter._start
|
20
|
+
iter._start = iter._stop
|
21
|
+
iter._stop = temp
|
22
|
+
return iter
|
23
|
+
|
24
|
+
def __len__(self):
|
25
|
+
raise TypeError("object of type 'IRISGlobalNodeView' has no len()")
|
@@ -0,0 +1,143 @@
|
|
1
|
+
import collections.abc
|
2
|
+
import intersystems_iris._IRISGlobalNode
|
3
|
+
|
4
|
+
class _IRISIterator(collections.abc.Iterator, collections.abc.Iterable):
|
5
|
+
'''
|
6
|
+
This class implements the iterator of IRISGlobalNode iterable. It can be used to iterate over the contents of IRISGlobalNode which behaves like a virtual dictionary representing the immediate children of a global node.
|
7
|
+
'''
|
8
|
+
|
9
|
+
VIEW_SUBSCRIPTS = 1
|
10
|
+
VIEW_VALUES = 2
|
11
|
+
VIEW_ITEMS = 3
|
12
|
+
VIEW_NODES = 4
|
13
|
+
VIEW_NODEITEMS = 5
|
14
|
+
|
15
|
+
def __init__(self, view):
|
16
|
+
self._irisnative = view._node._irisnative
|
17
|
+
self._global_name = view._node._global_name
|
18
|
+
self._subscripts = view._node._subscripts
|
19
|
+
self._start = view._node._start._iterator_copy()
|
20
|
+
self._stop = view._node._stop._iterator_copy()
|
21
|
+
self._reversed = view._node._reversed
|
22
|
+
self._view_type = view._view_type
|
23
|
+
self._at_end = False
|
24
|
+
|
25
|
+
def __iter__(self):
|
26
|
+
return self
|
27
|
+
|
28
|
+
def __next__(self):
|
29
|
+
if self._at_end:
|
30
|
+
raise StopIteration
|
31
|
+
# deal with inclusiveness or call _nextNode
|
32
|
+
if self._start._inclusive:
|
33
|
+
dollar_data = self._irisnative.isDefined(self._global_name, *self._subscripts, self._start._key)
|
34
|
+
if dollar_data == 0:
|
35
|
+
key_value = self._nextNode()
|
36
|
+
elif dollar_data == 10:
|
37
|
+
if self._has_passed_stop(self._start._key):
|
38
|
+
self._at_end = True
|
39
|
+
raise StopIteration
|
40
|
+
key_value = (self._start._key, None)
|
41
|
+
else:
|
42
|
+
if self._has_passed_stop(self._start._key):
|
43
|
+
self._at_end = True
|
44
|
+
raise StopIteration
|
45
|
+
value = self._irisnative.get(self._global_name, *self._subscripts, self._start._key)
|
46
|
+
key_value = (self._start._key, value)
|
47
|
+
else:
|
48
|
+
key_value = self._nextNode()
|
49
|
+
# check if we are at end
|
50
|
+
returned_key = key_value[0]
|
51
|
+
if returned_key == None or len(returned_key) == 0:
|
52
|
+
self._at_end = True
|
53
|
+
raise StopIteration
|
54
|
+
# save advancing pointer
|
55
|
+
self._start = intersystems_iris._IRISGlobalNode._point(returned_key, False)
|
56
|
+
# return value
|
57
|
+
if self._view_type == intersystems_iris.IRISIterator.VIEW_SUBSCRIPTS:
|
58
|
+
return key_value[0]
|
59
|
+
elif self._view_type == intersystems_iris.IRISIterator.VIEW_VALUES:
|
60
|
+
return key_value[1]
|
61
|
+
elif self._view_type == intersystems_iris.IRISIterator.VIEW_ITEMS:
|
62
|
+
return key_value
|
63
|
+
elif self._view_type == intersystems_iris.IRISIterator.VIEW_NODES:
|
64
|
+
return self._irisnative.node(self._global_name, *self._subscripts, key_value[1])
|
65
|
+
elif self._view_type == intersystems_iris.IRISIterator.VIEW_NODEITEMS:
|
66
|
+
return (key_value[0], self._irisnative.node(self._global_name, *self._subscripts, key_value[1]))
|
67
|
+
else:
|
68
|
+
raise TypeError("Unrecognized view type")
|
69
|
+
|
70
|
+
def _nextNode(self):
|
71
|
+
if self._stop._key is None:
|
72
|
+
return self._irisnative._nextNode(self._reversed, self._global_name, *self._subscripts, self._start._key)
|
73
|
+
SUPPORT_STOP_ON = self._irisnative._connection._connection_info.protocol_version >= 63
|
74
|
+
if SUPPORT_STOP_ON:
|
75
|
+
key_value = self._irisnative._nextNodeWithStop(self._reversed, self._stop._key, self._global_name, *self._subscripts, self._start._key)
|
76
|
+
if not self._stop._inclusive and key_value[0] == self._stop._key:
|
77
|
+
self._at_end = True
|
78
|
+
raise StopIteration
|
79
|
+
return key_value
|
80
|
+
else:
|
81
|
+
key_value = self._irisnative._nextNode(self._reversed, self._global_name, *self._subscripts, self._start._key)
|
82
|
+
if self._has_passed_stop(key_value[0]):
|
83
|
+
self._at_end = True
|
84
|
+
raise StopIteration
|
85
|
+
return key_value
|
86
|
+
|
87
|
+
def _has_passed_stop(self, current_value):
|
88
|
+
if self._stop._key is None:
|
89
|
+
return False
|
90
|
+
if self._reversed:
|
91
|
+
if self._stop._inclusive:
|
92
|
+
if intersystems_iris.IRISGlobalNode._sort_order_by_key(self._irisnative, self._stop._key, current_value, self._global_name, *self._subscripts) < 0:
|
93
|
+
return True
|
94
|
+
else:
|
95
|
+
if intersystems_iris.IRISGlobalNode._sort_order_by_key(self._irisnative, self._stop._key, current_value, self._global_name, *self._subscripts) <= 0:
|
96
|
+
return True
|
97
|
+
else:
|
98
|
+
if self._stop._inclusive:
|
99
|
+
if intersystems_iris.IRISGlobalNode._sort_order_by_key(self._irisnative, self._stop._key, current_value, self._global_name, *self._subscripts) > 0:
|
100
|
+
return True
|
101
|
+
else:
|
102
|
+
if intersystems_iris.IRISGlobalNode._sort_order_by_key(self._irisnative, self._stop._key, current_value, self._global_name, *self._subscripts) >= 0:
|
103
|
+
return True
|
104
|
+
return False
|
105
|
+
|
106
|
+
def _slice_state(self):
|
107
|
+
'''
|
108
|
+
This is an internal method intended to be used for debugging purposes only.
|
109
|
+
|
110
|
+
Returns a formatted string that describes the state of slicing in the IRISIterator object.
|
111
|
+
|
112
|
+
slice_state()
|
113
|
+
|
114
|
+
IRISGlobalNode object can be sliced to limit the subscript traversing range.
|
115
|
+
|
116
|
+
node[start:stop:step]
|
117
|
+
|
118
|
+
This results in a new IRISGlobalNode object with the subsript range limited to from start (inclusive) to stop (exclusive).
|
119
|
+
step can be 1 or -1, meaning traversing in forward direction or in reversed direction.
|
120
|
+
|
121
|
+
The formatted string uses the standard mathematical notation of bracketing.
|
122
|
+
Square brackets, [], are used to denote closed intervals with inclusive endpoints.
|
123
|
+
Parentheses, (), are used to denote open intervals with exclusive endpoints
|
124
|
+
For example, "[ 3 >>> 7 )" means from 3 to 7, forward direction, inclusive of 3 but exclusive of 7. This is what you will get with a simple slicing of node[3:7]
|
125
|
+
"[ 1 <<< 9 ]" means from 9 to 1, in reversed direction, inclusive on both ends.
|
126
|
+
|
127
|
+
Return Value
|
128
|
+
------------
|
129
|
+
Returns slice state.
|
130
|
+
'''
|
131
|
+
if self._reversed:
|
132
|
+
left_bracket = "[ " if self._stop._inclusive else "( "
|
133
|
+
left_key = "None" if self._stop._key == None else ("'"+self._stop._key.replace("'","\\'")+"'")
|
134
|
+
arrows = " <<< "
|
135
|
+
right_key = "None" if self._start._key == None else ("'"+self._start._key.replace("'","\\'")+"'")
|
136
|
+
right_bracket = " ]" if self._start._inclusive else " )"
|
137
|
+
else:
|
138
|
+
left_bracket = "[ " if self._start._inclusive else "( "
|
139
|
+
left_key = "None" if self._start._key == None else ("'"+self._start._key.replace("'","\\'")+"'")
|
140
|
+
arrows = " >>> "
|
141
|
+
right_key = "None" if self._stop._key == None else ("'"+self._stop._key.replace("'","\\'")+"'")
|
142
|
+
right_bracket = " ]" if self._stop._inclusive else " )"
|
143
|
+
return left_bracket + left_key + arrows + right_key + right_bracket
|