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.
Files changed (77) hide show
  1. intersystems_iris/_BufferReader.py +10 -0
  2. intersystems_iris/_BufferWriter.py +32 -0
  3. intersystems_iris/_ConnectionInformation.py +54 -0
  4. intersystems_iris/_ConnectionParameters.py +18 -0
  5. intersystems_iris/_Constant.py +38 -0
  6. intersystems_iris/_DBList.py +499 -0
  7. intersystems_iris/_Device.py +69 -0
  8. intersystems_iris/_GatewayContext.py +25 -0
  9. intersystems_iris/_GatewayException.py +4 -0
  10. intersystems_iris/_GatewayUtility.py +74 -0
  11. intersystems_iris/_IRIS.py +1294 -0
  12. intersystems_iris/_IRISConnection.py +516 -0
  13. intersystems_iris/_IRISEmbedded.py +85 -0
  14. intersystems_iris/_IRISGlobalNode.py +273 -0
  15. intersystems_iris/_IRISGlobalNodeView.py +25 -0
  16. intersystems_iris/_IRISIterator.py +143 -0
  17. intersystems_iris/_IRISList.py +360 -0
  18. intersystems_iris/_IRISNative.py +208 -0
  19. intersystems_iris/_IRISOREF.py +4 -0
  20. intersystems_iris/_IRISObject.py +424 -0
  21. intersystems_iris/_IRISReference.py +133 -0
  22. intersystems_iris/_InStream.py +149 -0
  23. intersystems_iris/_LegacyIterator.py +135 -0
  24. intersystems_iris/_ListItem.py +15 -0
  25. intersystems_iris/_ListReader.py +84 -0
  26. intersystems_iris/_ListWriter.py +157 -0
  27. intersystems_iris/_LogFileStream.py +115 -0
  28. intersystems_iris/_MessageHeader.py +51 -0
  29. intersystems_iris/_OutStream.py +25 -0
  30. intersystems_iris/_PrintStream.py +65 -0
  31. intersystems_iris/_PythonGateway.py +850 -0
  32. intersystems_iris/_SharedMemorySocket.py +87 -0
  33. intersystems_iris/__init__.py +79 -0
  34. intersystems_iris/__main__.py +7 -0
  35. intersystems_iris/dbapi/_Column.py +56 -0
  36. intersystems_iris/dbapi/_DBAPI.py +2295 -0
  37. intersystems_iris/dbapi/_Descriptor.py +46 -0
  38. intersystems_iris/dbapi/_IRISStream.py +63 -0
  39. intersystems_iris/dbapi/_Message.py +158 -0
  40. intersystems_iris/dbapi/_Parameter.py +138 -0
  41. intersystems_iris/dbapi/_ParameterCollection.py +133 -0
  42. intersystems_iris/dbapi/_ResultSetRow.py +314 -0
  43. intersystems_iris/dbapi/_SQLType.py +32 -0
  44. intersystems_iris/dbapi/__init__.py +0 -0
  45. intersystems_iris/dbapi/preparser/_PreParser.py +1658 -0
  46. intersystems_iris/dbapi/preparser/_Scanner.py +391 -0
  47. intersystems_iris/dbapi/preparser/_Token.py +81 -0
  48. intersystems_iris/dbapi/preparser/_TokenList.py +251 -0
  49. intersystems_iris/dbapi/preparser/__init__.py +0 -0
  50. intersystems_iris/pex/_BusinessHost.py +101 -0
  51. intersystems_iris/pex/_BusinessOperation.py +105 -0
  52. intersystems_iris/pex/_BusinessProcess.py +214 -0
  53. intersystems_iris/pex/_BusinessService.py +95 -0
  54. intersystems_iris/pex/_Common.py +228 -0
  55. intersystems_iris/pex/_Director.py +24 -0
  56. intersystems_iris/pex/_IRISBusinessOperation.py +5 -0
  57. intersystems_iris/pex/_IRISBusinessService.py +18 -0
  58. intersystems_iris/pex/_IRISInboundAdapter.py +5 -0
  59. intersystems_iris/pex/_IRISOutboundAdapter.py +17 -0
  60. intersystems_iris/pex/_InboundAdapter.py +57 -0
  61. intersystems_iris/pex/_Message.py +6 -0
  62. intersystems_iris/pex/_OutboundAdapter.py +46 -0
  63. intersystems_iris/pex/__init__.py +25 -0
  64. iris/__init__.py +25 -0
  65. iris/iris_site.py +13 -0
  66. iris/irisbuiltins.py +97 -0
  67. iris/irisloader.py +199 -0
  68. irisnative/_IRISNative.py +9 -0
  69. irisnative/__init__.py +10 -0
  70. {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/METADATA +1 -1
  71. sqlalchemy_iris-0.6.0b1.dist-info/RECORD +83 -0
  72. sqlalchemy_iris-0.6.0b1.dist-info/top_level.txt +4 -0
  73. sqlalchemy_iris-0.5.0b3.dist-info/RECORD +0 -14
  74. sqlalchemy_iris-0.5.0b3.dist-info/top_level.txt +0 -1
  75. {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/LICENSE +0 -0
  76. {sqlalchemy_iris-0.5.0b3.dist-info → sqlalchemy_iris-0.6.0b1.dist-info}/WHEEL +0 -0
  77. {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