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,46 @@
1
+ class _Descriptor:
2
+ def __init__(self, type = 0, precision = 0, scale = None, nullable = 0):
3
+ try:
4
+ type = int(type)
5
+ except (TypeError, ValueError):
6
+ raise TypeError("type must be an integer")
7
+ try:
8
+ precision = int(precision)
9
+ except (TypeError, ValueError):
10
+ raise TypeError("precision must be an integer")
11
+ try:
12
+ nullable = int(nullable)
13
+ except (TypeError, ValueError):
14
+ raise TypeError("nullable must be an integer")
15
+
16
+ self.type = type
17
+ self.precision = precision
18
+ self.scale = scale
19
+ self.nullable = nullable
20
+ self.name = None
21
+ self.slotPosition = None
22
+
23
+ @property
24
+ def scale(self):
25
+ return self.__scale
26
+
27
+ @scale.setter
28
+ def scale(self, value):
29
+ if value is not None:
30
+ try:
31
+ value = int(value)
32
+ except (TypeError, ValueError):
33
+ raise TypeError("scale must be an integer")
34
+
35
+ self.__scale = value
36
+
37
+ def cloneMe(self, d):
38
+ if not isinstance(d, _Descriptor):
39
+ raise TypeError("Must clone another _Descriptor")
40
+
41
+ self.type = d.type
42
+ self.precision = d.precision
43
+ self.scale = d.scale
44
+ self.nullable = d.nullable
45
+ self.name = d.name
46
+ self.slotPosition = d.slotPosition
@@ -0,0 +1,63 @@
1
+ from . import _Message
2
+ from .._MessageHeader import _MessageHeader
3
+ from .._InStream import _InStream
4
+ from .._OutStream import _OutStream
5
+
6
+ class IRISStream:
7
+ _handle = None
8
+ _binary = False
9
+ _connection = None
10
+ _embedded = False
11
+
12
+ def __init__(self, connection, handle, embedded=False):
13
+ self._connection = connection
14
+ self._handle = handle
15
+ self._embedded = embedded
16
+ self._locale = connection._connection_info._locale
17
+ if not self._embedded:
18
+ self._in_message = _InStream(connection)
19
+ self._out_message = _OutStream(connection)
20
+
21
+ def fetch_embdedded(self):
22
+ result = b'' if self._binary else ''
23
+
24
+ stream = self._connection.iris.cls('%Stream.Object')._Open(self._handle)
25
+ while not stream.AtEnd:
26
+ chunk = stream.Read()
27
+ result += bytes(chunk, self._locale) if self._binary else chunk
28
+
29
+ return result
30
+
31
+ def fetch(self):
32
+ if self._embedded:
33
+ return self.fetch_embdedded()
34
+ result = None
35
+ if not self._handle:
36
+ return result
37
+
38
+ with self._connection._lock:
39
+ # message header
40
+ self._statement_id = self._connection._get_new_statement_id()
41
+ self._out_message.wire._write_header(_Message.READ_STREAM)
42
+ _MessageHeader._set_statement_id(self._out_message.wire.buffer, self._statement_id)
43
+
44
+ # message body
45
+ self._out_message.wire._set(self._handle) # stream handle
46
+ self._out_message.wire._set(-1) # length
47
+
48
+ # send message
49
+ sequence_number = self._connection._get_new_sequence_number()
50
+ self._out_message._send(sequence_number)
51
+
52
+ code = self._in_message._read_message_sql(sequence_number, self._statement_id, _InStream.BYTE_STREAM, 403)
53
+ if code == 403:
54
+ return None
55
+
56
+ result = self._in_message.wire._get_raw()
57
+ if not self._binary:
58
+ result = str(result, self._locale)
59
+
60
+ return result
61
+
62
+ class IRISBinaryStream(IRISStream):
63
+ _binary = True
@@ -0,0 +1,158 @@
1
+ def expect_response(message_type):
2
+ if message_type in NO_RESPONSE:
3
+ return False
4
+ return True
5
+
6
+ HANDSHAKE = b'HS'
7
+ CONNECT = b'CN'
8
+ DISCONNECT = b'DC'
9
+ PREPARE = b'PP'
10
+ DIRECT_UPDATE = b'DU'
11
+ DIRECT_QUERY = b'DQ'
12
+ DIRECT_STORED_PROCEDURE = b'DS'
13
+ PREPARE_DIALECT = b'PD'
14
+ DIRECT_EXECUTE_DIALECT = b'DD'
15
+ PREPARED_UPDATE_EXECUTE = b'PU'
16
+ PREPARED_QUERY_EXECUTE = b'PQ'
17
+ FETCH_DATA = b'FD'
18
+ CLOSE_CURSOR = b'CC'
19
+ PREPARE_STORED_PROCEDURE = b'SP'
20
+ STORED_PROCEDURE_UPDATE_EXECUTE = b'SU'
21
+ STORED_PROCEDURE_QUERY_EXECUTE = b'SQ'
22
+ STORED_PROCEDURE_FETCH_DATA = b'SF'
23
+ EXECUTE_MULTIPLE_RESULT_SETS = b'MS'
24
+ MULTIPLE_RESULT_SETS_FETCH_DATA = b'MD'
25
+ GET_MORE_RESULTS = b'MR'
26
+ GET_STREAM_SIZE = b'SS'
27
+ RETRIEVE_STREAM = b'RS'
28
+ OPEN_STREAM = b'OS'
29
+ READ_STREAM = b'JS'
30
+ READ_STREAM_ODBC = b'AS'
31
+ STORE_BINARY_STREAM = b'SB'
32
+ STORE_CHARACTER_STREAM = b'SM'
33
+ STREAM_GET_BYTES = b'GB'
34
+ STREAM_SET_BYTES = b'SZ'
35
+ STREAM_TRUNCATE = b'SX'
36
+ STREAM_GET_POSITION = b'GP'
37
+ CLOSE_STREAM = b'CS'
38
+ GET_RESULT_SET_OBJECT = b'FR'
39
+ GET_STRUCT_OBJECT = b'FS'
40
+ COMMIT = b'TC'
41
+ ROLLBACK = b'TR'
42
+ READ_COMMITTED = b'RC'
43
+ READ_UNCOMMITTED = b'RU'
44
+ ISOLATION_LEVEL = b'IL'
45
+ AUTOCOMMIT_OFF = b'AF'
46
+ AUTOCOMMIT_ON = b'AN'
47
+ TOGGLE_SYNCHRONOUS_COMMIT = b'TS'
48
+ GET_AUTO_GENERATED_KEYS = b'GG'
49
+ IN_TRANSACTION = b'IT'
50
+ JDBC_BESTROWID = b'BR'
51
+ JDBC_CATALOGS = b'CA'
52
+ JDBC_COLUMNPRIV = b'CP'
53
+ JDBC_COLUMNS = b'CO'
54
+ JDBC_CROSSREFERENCE = b'CR'
55
+ JDBC_EXPORTEDKEYS = b'EK'
56
+ JDBC_IMPORTEDKEYS = b'IK'
57
+ JDBC_INDEXINFO = b'II'
58
+ JDBC_PRIMARYKEYS = b'PK'
59
+ JDBC_PROCEDURECOL = b'PC'
60
+ JDBC_PROCEDURES = b'PR'
61
+ JDBC_SCHEMAS = b'SC'
62
+ JDBC_TABLEPRIV = b'TP'
63
+ JDBC_TABLES = b'TA'
64
+ JDBC_TABLETYPES = b'TT'
65
+ JDBC_TYPEINFO = b'TI'
66
+ JDBC_VERSIONCOL = b'VC'
67
+ ODBC_BESTROWID = b'br'
68
+ ODBC_CATALOGS = b'ca'
69
+ ODBC_COLUMNPRIV = b'cp'
70
+ ODBC_COLUMNS_35 = b'c3'
71
+ ODBC_CROSSREFERENCE_35 = b'r3'
72
+ ODBC_EXPORTEDKEYS_35 = b'e3'
73
+ ODBC_IMPORTEDKEYS_35 = b'i3'
74
+ ODBC_PROCEDURECOL_35 = b'p3'
75
+ ODBC_TYPEINFO_35 = b't3'
76
+ ODBC_COLUMNS = b'co'
77
+ ODBC_CROSSREFERENCE = b'cr'
78
+ ODBC_EXPORTEDKEYS = b'ek'
79
+ ODBC_IMPORTEDKEYS = b'ik'
80
+ ODBC_INDEXINFO = b'ii'
81
+ ODBC_PRIMARYKEYS = b'pk'
82
+ ODBC_PROCEDURECOL = b'pc'
83
+ ODBC_PROCEDURES = b'pr'
84
+ ODBC_SCHEMAS = b'sc'
85
+ ODBC_STATISTICS = b'st'
86
+ ODBC_TABLEPRIV = b'tp'
87
+ ODBC_TABLES = b'ta'
88
+ ODBC_TABLETYPES = b'tt'
89
+ ODBC_TYPEINFO = b'ti'
90
+ ODBC_VERSIONCOL = b'vc'
91
+ JDBC_UDTS = b'UT'
92
+ JDBC_SUPER_TYPES = b'SY'
93
+ JDBC_SUPER_TABLES = b'SL'
94
+ JDBC_GET_ATTRIBUTES = b'AT'
95
+ JDBC_GET_FUNCTION_COLUMNS = b'FC'
96
+ JDBC_GET_FUNCTIONS = b'FN'
97
+ JDBC_CLIENT_INFO_PROPERTIES = b'CF'
98
+ SET_CLIENT_INFO_PROPERTIES = b'CG'
99
+ XA_START = b'XS'
100
+ XA_END = b'XE'
101
+ XA_FORGET = b'XF'
102
+ XA_PREPARE = b'XP'
103
+ XA_COMMIT = b'XC'
104
+ XA_ROLLBACK = b'XR'
105
+ XA_RECOVER = b'XV'
106
+ EXECUTE_STATIC_CURSOR = b'EX'
107
+ DIRECT_STATIC_CURSOR = b'DX'
108
+ FETCH_STATIC_CURSOR = b'FX'
109
+ UPDATE_CACHE = b'UC'
110
+ RESET_CONNECTION = b'RN'
111
+ GET_SERVER_ERROR = b'OE'
112
+ EXECUTE_STATEMENT_BATCH = b'EB'
113
+ CLOSE_STATEMENT = b'CU'
114
+ QUICK_LOAD = b'QL'
115
+ QUICK_CHILD_TABLE_LOAD = b'QZ'
116
+ QUICK_CHILD_TABLE_CREATE = b'QX'
117
+ QUICK_CHILD_TABLE_REMOVE = b'QK'
118
+ QUICK_STORE = b'QS'
119
+ QUICK_CREATE = b'QC'
120
+ QUICK_REMOVE = b'QR'
121
+ QUICK_FIND_ROWID_BY_PK = b'Q1'
122
+ QUICK_FIND_ROWID_BY_CONSTRAINT = b'Q2'
123
+ QUICK_FIND_PK_BY_CONSTRAINT = b'Q3'
124
+ QUICK_REMOVE_BY_PK = b'Q4'
125
+ QUICK_CREATE_BY_PK = b'Q5'
126
+ QUICK_STORE_BY_PK = b'Q6'
127
+ QUICK_LOAD_BY_PK = b'Q7'
128
+ QUICK_CHILD_TABLE_REMOVE_BY_PK = b'Q8'
129
+ QUICK_CHILD_TABLE_CREATE_BY_PK = b'Q9'
130
+ QUICK_CHILD_TABLE_LOAD_BY_PK = b'QA'
131
+ QUICK_GET_CHILDREN_PKS = b'QB'
132
+ QUICK_GET_CHILDREN_PKS_BY_PK = b'QD'
133
+ QUICK_FIND_PK_BY_ROWID = b'QE'
134
+ QUICK_BULK_LOAD = b'QM'
135
+ QUICK_BULK_CREATE = b'QN'
136
+ QUICK_BULK_STORE = b'QO'
137
+ QUICK_BULK_SAVE_BY_PK = b'QW'
138
+ QUICK_QUERY = b'QQ'
139
+ QUICK_JPA_FLUSH = b'QF'
140
+ GET_CACHE_INFO = b'CI'
141
+ PING = b'PG'
142
+ PING_TWO = b'P2'
143
+ IS_TWO_FACTOR_ENABLED = b'2E'
144
+ SEND_TWO_FACTOR_TOKEN = b'2F'
145
+ STREAM_SET_PREFETCH_SIZE = b'SN'
146
+ EXTERNAL_INTERUPT = b'EI'
147
+ GET_NAMESPACES_MSG = b'CI'
148
+ GATEWAY_INIT = b'GI'
149
+
150
+ NO_RESPONSE = [AUTOCOMMIT_OFF,
151
+ AUTOCOMMIT_ON,
152
+ READ_COMMITTED,
153
+ READ_UNCOMMITTED,
154
+ CLOSE_CURSOR,
155
+ CLOSE_STREAM,
156
+ CLOSE_STATEMENT,
157
+ RESET_CONNECTION,
158
+ DISCONNECT]
@@ -0,0 +1,138 @@
1
+ import datetime
2
+ import decimal
3
+ import enum
4
+ import intersystems_iris.dbapi._Descriptor
5
+
6
+ class ParameterMode(enum.IntEnum):
7
+ UNKNOWN = 0
8
+ INPUT = 1
9
+ INPUT_OUTPUT = 2
10
+ UNUSED = 3
11
+ OUTPUT = 4
12
+ REPLACED_LITERAL = 5
13
+ DEFAULT_PARAMETER = 6
14
+ RETURN_VALUE = 7
15
+
16
+ class _Parameter(intersystems_iris.dbapi._Descriptor._Descriptor):
17
+ def __init__(self, value = None, mode = ParameterMode.UNKNOWN, paramType = "?", name = "", execParam = False, bound = False, type = 0, precision = 0, scale = None, nullable = 0, slotPosition = None):
18
+ if not isinstance(mode, ParameterMode):
19
+ raise TypeError("mode must be a ParameterMode")
20
+ paramType = str(paramType)
21
+ if len(paramType) > 1:
22
+ raise ValueError("paramType must be a single character")
23
+ name = str(name)
24
+ execParam = bool(execParam)
25
+ bound = bool(bound)
26
+ if slotPosition is not None:
27
+ try:
28
+ slotPosition = int(slotPosition)
29
+ except (TypeError, ValueError):
30
+ raise TypeError("slotPosition must be an integer")
31
+ if slotPosition < 0:
32
+ raise ValueError("slotPosition must be positive")
33
+
34
+ super().__init__(type, precision, scale, nullable)
35
+
36
+ self.__value = value
37
+ self.mode = mode
38
+ self.__paramType = paramType
39
+ self.name = name
40
+ self.execParam = execParam
41
+ self.__bound = bound
42
+ self.slotPosition = slotPosition
43
+
44
+ self._values = list()
45
+
46
+ self.parsermatched = False
47
+ self.matchedParameterList = None
48
+
49
+ def __repr__(self) -> str:
50
+ if self.mode not in [ParameterMode.UNKNOWN, ParameterMode.INPUT]:
51
+ return f'<{self.mode.name}>{repr(self.value)}'
52
+ else:
53
+ return f'<{self.mode.name}>'
54
+
55
+ def Clone(self):
56
+ clone = _Parameter(self.value, self.mode, self.paramType, self.name, self.execParam, self.bound)
57
+ clone.cloneMe(self)
58
+
59
+ clone.parsermatched = self.parsermatched
60
+ clone.matchedParameterList = self.matchedParameterList
61
+
62
+ return clone
63
+
64
+ @property
65
+ def bound(self):
66
+ return self.__bound
67
+
68
+ @property
69
+ def paramType(self):
70
+ return self.__paramType
71
+
72
+ @property
73
+ def value(self):
74
+ _set_switcher = {
75
+ type(None): lambda v : None,
76
+ # str: lambda v : v or b'\x00',
77
+ datetime.time: lambda v : v.strftime('%H:%M:%S.%f'),
78
+ datetime.date: lambda v : v.strftime('%Y-%m-%d'),
79
+ datetime.datetime: lambda v : v.strftime('%Y-%m-%d %H:%M:%S.%f'),
80
+ bytes: lambda v : v,
81
+ bytearray: lambda v : v,
82
+ bool: lambda v : 1 if v else 0,
83
+ int: lambda v : v,
84
+ float: lambda v : v,
85
+ decimal.Decimal: lambda v : v,
86
+ }
87
+ func = _set_switcher[type(self.__value)] if type(self.__value) in _set_switcher else (lambda v : str(v))
88
+ value = func(self.__value)
89
+ if self.mode == ParameterMode.REPLACED_LITERAL:
90
+ try:
91
+ value = int(value)
92
+ except:
93
+ try:
94
+ value = float(value)
95
+ except:
96
+ pass
97
+ return value
98
+
99
+ def _copy_cached_info(self, desc, copy_replaced):
100
+ self.type = desc.type
101
+ self.precision = desc.precision
102
+ self.scale = desc.scale
103
+ self.nullable = desc.nullable
104
+ self.name = desc.name
105
+ if ((self.mode != ParameterMode.REPLACED_LITERAL)
106
+ and (desc.mode != ParameterMode.REPLACED_LITERAL)
107
+ and (desc.mode != ParameterMode.UNKNOWN)):
108
+ self.mode = desc.mode
109
+
110
+ if not copy_replaced:
111
+ return
112
+
113
+ if desc.mode == ParameterMode.REPLACED_LITERAL:
114
+ self.mode = ParameterMode.REPLACED_LITERAL
115
+ self.__value = desc.value
116
+ self._values = list()
117
+ if len(desc._values) > 0: self._values.append(desc._values[0])
118
+ return
119
+
120
+ def _bind(self, value, parameter_sets):
121
+ if isinstance(value, list):
122
+ self._values = value
123
+ else:
124
+ if parameter_sets == 0:
125
+ self._values = []
126
+ size = len(self._values)
127
+ if parameter_sets + 1 < size or size < parameter_sets:
128
+ raise Exception("Not all parameters bound for this set")
129
+ elif parameter_sets == size:
130
+ self._values.append(value)
131
+ else:
132
+ # Rebinding
133
+ self._values[size - 1] = value
134
+ self.__bound = True
135
+ if self.mode == ParameterMode.OUTPUT or self.mode == ParameterMode.INPUT_OUTPUT:
136
+ self.mode = ParameterMode.INPUT_OUTPUT
137
+ else:
138
+ self.mode = ParameterMode.INPUT
@@ -0,0 +1,133 @@
1
+ import intersystems_iris.dbapi._ResultSetRow
2
+ from intersystems_iris.dbapi._Parameter import _Parameter
3
+ from intersystems_iris.dbapi._Parameter import ParameterMode
4
+
5
+ class _ParameterCollection:
6
+ def __init__(self, param_coll = None, shallow_copy = False):
7
+ self._params_list = list() # contains elements of type _Parameter
8
+ self._has_bound_by_param_name = False
9
+
10
+ self._user_index = list()
11
+ self._user_param_cnt = 0
12
+
13
+ self._param_names = None
14
+ self._array_bound = False
15
+
16
+ self._input_params = list()
17
+
18
+ if param_coll != None:
19
+ if shallow_copy:
20
+ self._params_list = param_coll._params_list
21
+ else:
22
+ self._params_list = list()
23
+ for param in param_coll._params_list:
24
+ new_param = _Parameter()
25
+ new_param._copy_cached_info(param, True)
26
+ self._params_list.append(new_param)
27
+
28
+ self._user_param_cnt = param_coll._user_param_cnt
29
+ self._user_index = param_coll._user_index
30
+
31
+ if param_coll._has_named_parameters():
32
+ self._update_names()
33
+ self._has_bound_by_param_name = False
34
+ self._array_bound = False
35
+
36
+ def set_input_params(self, params):
37
+ self._input_params = params
38
+
39
+ def collect(self, i: int = 0) -> list:
40
+ params = list()
41
+
42
+ param_index = 0
43
+ param_counter = i
44
+ for param in self._params_list:
45
+ mode = param.mode
46
+ if mode == ParameterMode.REPLACED_LITERAL:
47
+ params.append(_Parameter(param.value).value)
48
+ elif not mode == ParameterMode.INPUT:
49
+ params.append(_Parameter(param._values[i]).value)
50
+ elif self._input_params:
51
+ item = self._input_params[param_counter]
52
+ if isinstance(item, tuple) or isinstance(item, list):
53
+ value = item[param_index]
54
+ param_index = param_index + 1
55
+ else:
56
+ value = item
57
+ param_counter = param_counter + 1
58
+ params.append(_Parameter(value).value)
59
+ else:
60
+ raise Exception("Missing value")
61
+
62
+ return params
63
+
64
+ def __repr__(self) -> str:
65
+ return repr(self.collect())
66
+
67
+ def _add_user_param(self, param):
68
+ self._user_param_cnt = self._user_param_cnt + 1
69
+ #self._params_list.append(param)
70
+ return
71
+
72
+ def _user_parameters_size(self):
73
+ if self._user_index == None:
74
+ return len(self._params_list)
75
+ return self._user_param_cnt
76
+
77
+ def _has_named_parameters(self):
78
+ return self._param_names != None and len(self._params_list) != 0
79
+
80
+ def _update_names(self):
81
+ self._param_names = {}
82
+ for i in range(len(self._params_list)):
83
+ key = self._params_list[i].name.upper()
84
+ self._param_names[key] = i
85
+ return
86
+
87
+ def _get_user_param_index(self, user_parameter_number):
88
+ actual_index = self._user_index[user_parameter_number]
89
+ if actual_index == -1:
90
+ raise IndexError("Invalid parameter number: " + str(user_parameter_number))
91
+ return actual_index
92
+
93
+ def _get_user_param(self, user_parameter_number):
94
+ if user_parameter_number >= len(self._user_index):
95
+ raise IndexError("Invalid parameter number: " + str(user_parameter_number))
96
+ actual_index = self._get_user_param_index(user_parameter_number)
97
+ return self._params_list[actual_index]
98
+
99
+ def _update_param_info(self, from_param_coll):
100
+ try:
101
+ for i, param in enumerate(from_param_coll._params_list):
102
+ self._params_list[i]._copy_cached_info(param, False)
103
+
104
+ if self._user_param_cnt != len(from_param_coll._params_list):
105
+ self._user_param_cnt = from_param_coll._user_param_cnt
106
+ self._user_index = from_param_coll._user_index
107
+
108
+ if from_param_coll._has_named_parameters():
109
+ self._update_names()
110
+
111
+ except Exception:
112
+ # need to handle exceptions properly
113
+ if len(from_param_coll._params_list) != len(self._params_list):
114
+ raise LookupError("Parameter mismatch")
115
+ raise Exception
116
+
117
+ def _clear(self):
118
+ self._params_list.clear()
119
+ if self._param_names != None:
120
+ self._param_names.clear()
121
+ self._has_bound_by_param_name = False
122
+ self._array_bound = False
123
+
124
+ def _prep_list_index(self, is_fast_select, output_parameter_list):
125
+ self._param_row = intersystems_iris.dbapi._ResultSetRow._ResultSetRow(rowcount = len(self._params_list))
126
+ self._param_row._fast_select = is_fast_select
127
+ self._param_row.indexRow(output_parameter_list.list_item)
128
+ return
129
+
130
+ def _get_user_list_offset(self, user_parameter_number):
131
+ if user_parameter_number >= len(self._user_index):
132
+ raise IndexError("Invalid parameter number: " + str(user_parameter_number))
133
+ return self._param_row.rowItems[self._get_user_param_index(user_parameter_number)]