nwrfc 0.0.7 → 0.0.8
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.
- checksums.yaml +8 -8
- data/README.rdoc +5 -0
- data/lib/nwrfc/datacontainer.rb +10 -9
- data/lib/nwrfc/nwerror.rb +2 -2
- data/lib/nwrfc/nwrfclib.rb +297 -270
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OGYwZjQ5ZGFiZTg5NzY4OGZiMmUzZTE1ZTcwNWRjZDIyZjAwMjk4Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2JjNjJjODMyNjA5ZmM4NjFmMzZkYTE2NzYxMWNhY2I0NjQxZjE4Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTk4NTEyYTljOGU5OTg5YWY3YjQ4Yzk4YmFkMGI0ZWZhMjIyMTBiNTdhMjNl
|
10
|
+
MzcyZTFkZTdjZGJkM2I3OGIxNWU4OGIzN2UwMmRhODFmNDQ1YTVkNmQwMjU2
|
11
|
+
ZmQwYzI1NGU2YzhkNGRjOGNkM2RjNGI3YjA5NjJhMTdmMmYyYmM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWQ0YWI5OWNhNDZhZmQ0ZThjMDEwYTkzN2EwMDc5ZTMyZjNlMTRiZDQ0ZDA3
|
14
|
+
OTMwY2RjOWYzYWUzMGJhNWUzOGNhYWJiN2U1ODliZTlkNTUwZjIxNmViMjdi
|
15
|
+
MzRiZjg2MzM3OWViZGM5OTNkZDNkZWQ0NTEwODg2NDA0ZmQ5N2E=
|
data/README.rdoc
CHANGED
@@ -84,6 +84,11 @@ so that ["system2"] at the end points to whatever label you gave it in the YAML
|
|
84
84
|
|
85
85
|
== Release Notes
|
86
86
|
|
87
|
+
=== Available in 0.0.8
|
88
|
+
|
89
|
+
* BigDecimal support added for BCD values (BCD is also returned as BigDecimal to cater for very big numbers like timestamps)
|
90
|
+
* Support for String::encode in Ruby 1.9 and above instead of iconv (thanks Meatballs1)
|
91
|
+
|
87
92
|
=== What's new in 0.0.7
|
88
93
|
|
89
94
|
* Add support for JRuby by extending FFI::StructLayout::CharArrayProxy
|
data/lib/nwrfc/datacontainer.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
1
3
|
module NWRFC
|
2
4
|
|
3
5
|
# Representation of a data container (function, structure or table)
|
@@ -47,12 +49,7 @@ module NWRFC
|
|
47
49
|
buf = FFI::MemoryPointer.new(:uchar, size*2)
|
48
50
|
rc = NWRFCLib.get_chars(@handle, metadata[:name].cU, buf, size, @error.to_ptr)
|
49
51
|
NWRFC.check_error(@error) if rc > 0
|
50
|
-
return buf.get_bytes(0, size*2).uC
|
51
|
-
#size = metadata[:ucLength]
|
52
|
-
#cb = FFI::MemoryPointer.new :char, size * 2
|
53
|
-
#rc = NWRFCLib.get_chars(@handle, metadata[:name].cU, cb, size * 2, @error.to_ptr)
|
54
|
-
#NWRFC.check_error(@error) if rc > 0
|
55
|
-
#cb.read_string(size).uC
|
52
|
+
return BigDecimal(buf.get_bytes(0, size*2).uC)
|
56
53
|
|
57
54
|
when :RFCTYPE_TIME
|
58
55
|
# TODO: See whether we can optimize this
|
@@ -167,9 +164,13 @@ module NWRFC
|
|
167
164
|
NWRFCLib.set_date(@handle, member.cU, value.cU, @error.to_ptr)
|
168
165
|
|
169
166
|
when :RFCTYPE_BCD
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
if value.class == BigDecimal
|
168
|
+
stval = value.to_s('F')
|
169
|
+
else
|
170
|
+
stval = value.to_s
|
171
|
+
end
|
172
|
+
m = FFI::MemoryPointer.from_string stval.cU
|
173
|
+
NWRFCLib.set_string(@handle, member.cU, m, stval.size, @error)
|
173
174
|
|
174
175
|
when :RFCTYPE_TIME
|
175
176
|
value = value_to_time(value)
|
data/lib/nwrfc/nwerror.rb
CHANGED
data/lib/nwrfc/nwrfclib.rb
CHANGED
@@ -7,9 +7,12 @@
|
|
7
7
|
|
8
8
|
require 'rubygems'
|
9
9
|
require 'ffi'
|
10
|
-
require 'iconv'
|
11
10
|
|
12
11
|
RUBY_VERSION_18 = RUBY_VERSION[0..2] == "1.8"
|
12
|
+
# Check if ICONV compatibility (for Ruby 1.8 and below) is required
|
13
|
+
STRING_SUPPORTS_ENCODE = ''.respond_to?(:encode) # Ruby 1.9 and onwards
|
14
|
+
|
15
|
+
require 'iconv' unless STRING_SUPPORTS_ENCODE
|
13
16
|
|
14
17
|
# Provide an alias for FFI::MemoryPointer#read_int to `read_uint` in 1.8
|
15
18
|
# See http://stackoverflow.com/questions/9035661/ruby-ffi-memorypointer-read-int-present-in-1-9-but-not-1-8
|
@@ -17,7 +20,7 @@ RUBY_VERSION_18 = RUBY_VERSION[0..2] == "1.8"
|
|
17
20
|
# that could result in sign conversion
|
18
21
|
# FIXME - This must go! Replace with calls to get_* defined in FFI::MemoryPointer
|
19
22
|
if RUBY_VERSION_18
|
20
|
-
FFI::MemoryPointer.class_eval{ alias :read_uint :read_int}
|
23
|
+
FFI::MemoryPointer.class_eval { alias :read_uint :read_int }
|
21
24
|
end
|
22
25
|
|
23
26
|
# Enhancement to FFI::Pointer to be able to read a double-null terminated string,
|
@@ -35,12 +38,12 @@ module FFI
|
|
35
38
|
cont_nullcount = 0
|
36
39
|
offset = 0
|
37
40
|
until cont_nullcount == 2
|
38
|
-
byte = get_bytes(offset,1)
|
41
|
+
byte = get_bytes(offset, 1)
|
39
42
|
cont_nullcount += 1 if byte == "\000"
|
40
43
|
cont_nullcount = 0 if byte != "\000"
|
41
44
|
offset += 1
|
42
45
|
end
|
43
|
-
get_bytes(0,offset+1)
|
46
|
+
get_bytes(0, offset+1)
|
44
47
|
end
|
45
48
|
end
|
46
49
|
end
|
@@ -50,16 +53,38 @@ end
|
|
50
53
|
# SDK function, which should work on Linux and Windows (and maybe other
|
51
54
|
# architectures, though the plan is not to support them)
|
52
55
|
#String.class_eval{define_method(:cU){ Iconv.conv("UTF-16LE", "UTF8", self+"\0") }}
|
53
|
-
class String
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
# Availability of String::convert() should indicate otherwise
|
58
|
+
if STRING_SUPPORTS_ENCODE
|
59
|
+
|
60
|
+
class String
|
61
|
+
|
62
|
+
# Convert string from UTF-8 to double-null terminated UTF-16LE string
|
63
|
+
def cU
|
64
|
+
(self.dup << "\0").force_encoding('UTF-8').encode('UTF-16LE')
|
65
|
+
end
|
66
|
+
|
67
|
+
# Convert string from UTF-16LE to UTF-8 and trim trailing whitespace
|
68
|
+
def uC
|
69
|
+
self.force_encoding('UTF-16LE').encode('UTF-8').strip
|
70
|
+
end
|
71
|
+
|
58
72
|
end
|
59
73
|
|
60
|
-
|
61
|
-
|
62
|
-
|
74
|
+
else
|
75
|
+
|
76
|
+
class String
|
77
|
+
|
78
|
+
# Convert string from UTF-8 to doudble-null terminated UTF-16LE string
|
79
|
+
def cU
|
80
|
+
NWRFCLib::Cutf8_to_utf16le.iconv(self+"\0")
|
81
|
+
end
|
82
|
+
|
83
|
+
# Convert string from UTF-16LE to UTF-8 and trim trailing whitespace
|
84
|
+
def uC
|
85
|
+
NWRFCLib::Cutf16le_to_utf8.iconv(self).strip
|
86
|
+
end
|
87
|
+
|
63
88
|
end
|
64
89
|
|
65
90
|
end
|
@@ -69,7 +94,7 @@ end
|
|
69
94
|
# and strips off blanks at the end to return a readable String
|
70
95
|
class FFI::StructLayout::CharArray
|
71
96
|
def get_str
|
72
|
-
|
97
|
+
self.to_ptr.read_string(self.size).uC
|
73
98
|
end
|
74
99
|
end
|
75
100
|
|
@@ -79,7 +104,7 @@ end
|
|
79
104
|
if RUBY_PLATFORM == 'java'
|
80
105
|
class FFI::StructLayout::CharArrayProxy
|
81
106
|
def get_str
|
82
|
-
|
107
|
+
self.to_ptr.read_string(self.size).uC
|
83
108
|
end
|
84
109
|
end
|
85
110
|
end
|
@@ -87,8 +112,10 @@ end
|
|
87
112
|
# Library wrapper around NW RFC SDK shared library using RUBY-FFI
|
88
113
|
module NWRFCLib
|
89
114
|
|
90
|
-
|
91
|
-
|
115
|
+
unless STRING_SUPPORTS_ENCODE # Ruby 1.8 and below
|
116
|
+
Cutf8_to_utf16le = Iconv.new("UTF-16LE", "UTF-8")
|
117
|
+
Cutf16le_to_utf8 = Iconv.new("UTF-8", "UTF-16LE")
|
118
|
+
end
|
92
119
|
|
93
120
|
extend FFI::Library
|
94
121
|
ffi_lib 'sapnwrfc'
|
@@ -98,156 +125,156 @@ module NWRFCLib
|
|
98
125
|
B_SIZE = 2
|
99
126
|
|
100
127
|
RFC_RC = enum(
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
+
:RFC_OK,
|
129
|
+
:RFC_COMMUNICATION_FAILURE,
|
130
|
+
:RFC_LOGON_FAILURE,
|
131
|
+
:RFC_ABAP_RUNTIME_FAILURE,
|
132
|
+
:RFC_ABAP_MESSAGE,
|
133
|
+
:RFC_ABAP_EXCEPTION,
|
134
|
+
:RFC_CLOSED,
|
135
|
+
:RFC_CANCELED,
|
136
|
+
:RFC_TIMEOUT,
|
137
|
+
:RFC_MEMORY_INSUFFICIENT,
|
138
|
+
:RFC_VERSION_MISMATCH,
|
139
|
+
:RFC_INVALID_PROTOCOL,
|
140
|
+
:RFC_SERIALIZATION_FAILURE,
|
141
|
+
:RFC_INVALID_HANDLE,
|
142
|
+
:RFC_RETRY,
|
143
|
+
:RFC_EXTERNAL_FAILURE,
|
144
|
+
:RFC_EXECUTED,
|
145
|
+
:RFC_NOT_FOUND,
|
146
|
+
:RFC_NOT_SUPPORTED,
|
147
|
+
:RFC_ILLEGAL_STATE,
|
148
|
+
:RFC_INVALID_PARAMETER,
|
149
|
+
:RFC_CODEPAGE_CONVERSION_FAILURE,
|
150
|
+
:RFC_CONVERSION_FAILURE,
|
151
|
+
:RFC_BUFFER_TOO_SMALL,
|
152
|
+
:RFC_TABLE_MOVE_BOF,
|
153
|
+
:RFC_TABLE_MOVE_EOF,
|
154
|
+
:RFC_UNKNOWN_ERROR
|
128
155
|
)
|
129
156
|
|
130
157
|
RFC_ERROR_GROUP = enum(
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
158
|
+
:OK,
|
159
|
+
:ABAP_APPLICATION_FAILURE,
|
160
|
+
:ABAP_RUNTIME_FAILURE,
|
161
|
+
:LOGON_FAILURE,
|
162
|
+
:COMMUNICATION_FAILURE,
|
163
|
+
:EXTERNAL_RUNTIME_FAILURE,
|
164
|
+
:EXTERNAL_APPLICATION_FAILURE
|
138
165
|
)
|
139
166
|
|
140
167
|
RFC_DIRECTION = enum(
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
168
|
+
:RFC_IMPORT, 1,
|
169
|
+
:RFC_EXPORT, 2,
|
170
|
+
:RFC_CHANGING, 3,
|
171
|
+
:RFC_TABLES, 7
|
145
172
|
)
|
146
173
|
|
147
174
|
RFC_TYPE = enum(
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
175
|
+
:RFCTYPE_CHAR, 0,
|
176
|
+
:RFCTYPE_DATE, 1,
|
177
|
+
:RFCTYPE_BCD, 2,
|
178
|
+
:RFCTYPE_TIME, 3,
|
179
|
+
:RFCTYPE_BYTE, 4,
|
180
|
+
:RFCTYPE_TABLE, 5,
|
181
|
+
:RFCTYPE_NUM, 6,
|
182
|
+
:RFCTYPE_FLOAT, 7,
|
183
|
+
:RFCTYPE_INT, 8,
|
184
|
+
:RFCTYPE_INT2, 9,
|
185
|
+
:RFCTYPE_INT1, 10,
|
186
|
+
:RFCTYPE_NULL, 14,
|
187
|
+
:RFCTYPE_ABAPOBJECT, 16,
|
188
|
+
:RFCTYPE_STRUCTURE, 17,
|
189
|
+
:RFCTYPE_DECF16, 23,
|
190
|
+
:RFCTYPE_DECF34, 24,
|
191
|
+
:RFCTYPE_XMLDATA, 28,
|
192
|
+
:RFCTYPE_STRING, 29,
|
193
|
+
:RFCTYPE_XSTRING, 30,
|
194
|
+
:RFCTYPE_BOX, 31,
|
195
|
+
:RFCTYPE_GENERIC_BOX, 32,
|
196
|
+
:_RFCTYPE_max_value
|
170
197
|
)
|
171
198
|
|
172
199
|
# Connection parameter wrapper (struct RFC_CONNECTION_PARAMETER in sapnwrfc.h)
|
173
200
|
class RFCConnParam < FFI::Struct
|
174
201
|
layout :name, :pointer,
|
175
|
-
|
202
|
+
:value, :pointer
|
176
203
|
end
|
177
204
|
|
178
205
|
# Connection Details (struct RFC_ATTRIBUTES in sapnwrfc.h)
|
179
206
|
class RFCConnection < FFI::Struct
|
180
|
-
layout
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
207
|
+
layout :dest, [:char, (64+1)*B_SIZE],
|
208
|
+
:host, [:char, (100+1)*B_SIZE],
|
209
|
+
:partnerHost, [:char, (100+1)*B_SIZE],
|
210
|
+
:sysNumber, [:char, (2+1)*B_SIZE],
|
211
|
+
:sysId, [:char, (8+1)*B_SIZE],
|
212
|
+
:client, [:char, (3+1)*B_SIZE],
|
213
|
+
:user, [:char, (12+1)*B_SIZE],
|
214
|
+
:language, [:char, (2+1)*B_SIZE],
|
215
|
+
:trace, [:char, (1+1)*B_SIZE],
|
216
|
+
:isoLanguage, [:char, (2+1)*B_SIZE],
|
217
|
+
:codepage, [:char, (4+1)*B_SIZE],
|
218
|
+
:partnerCodepage, [:char, (4+1)*B_SIZE],
|
219
|
+
:rfcRole, [:char, (1+1)*B_SIZE],
|
220
|
+
:type, [:char, (1+1)*B_SIZE],
|
221
|
+
:partnerType, [:char, (1+1)*B_SIZE],
|
222
|
+
:rel, [:char, (4+1)*B_SIZE],
|
223
|
+
:partnerRel, [:char, (4+1)*B_SIZE],
|
224
|
+
:kernelRel, [:char, (4+1)*B_SIZE],
|
225
|
+
:cpicConvId, [:char, (8+1)*B_SIZE],
|
226
|
+
:progName, [:char, (128+1)*B_SIZE],
|
227
|
+
:reserved, [:char, (86+1)*B_SIZE]
|
201
228
|
end
|
202
229
|
|
203
230
|
# Error info wrapper (struct RFC_ERROR_INFO in sapnwrfc.h)
|
204
231
|
class RFCError < FFI::Struct
|
205
|
-
layout :code,
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
232
|
+
layout :code, :int,
|
233
|
+
:group, :int,
|
234
|
+
:key, [:char, (128)*B_SIZE],
|
235
|
+
:message, [:char, (512)*B_SIZE],
|
236
|
+
:abapMsgClass, [:char, (20+1)*B_SIZE],
|
237
|
+
:abapMsgType, [:char, (1+1)*B_SIZE],
|
238
|
+
:abapMsgNumber, [:char, (3+1)*B_SIZE],
|
239
|
+
:abapMsgV1, [:char, (50+1)*B_SIZE],
|
240
|
+
:abapMsgV2, [:char, (50+1)*B_SIZE],
|
241
|
+
:abapMsgV3, [:char, (50+1)*B_SIZE],
|
242
|
+
:abapMsgV4, [:char, (50+1)*B_SIZE]
|
216
243
|
end
|
217
244
|
|
218
245
|
# Function Parameter Description (struct RFC_PARAMETER_DESC in sapnwrfc.h)
|
219
246
|
class RFCFuncParam < FFI::Struct
|
220
|
-
layout :name,
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
247
|
+
layout :name, [:char, (30+1)*B_SIZE],
|
248
|
+
:type, :int, #enum RFCTYPE
|
249
|
+
:direction, :int, #enum RFC_DIRECTION
|
250
|
+
:nucLength, :uint,
|
251
|
+
:ucLength, :uint,
|
252
|
+
:decimals, :uint,
|
253
|
+
:typeDescHandle, :pointer, #RFC_TYPE_DESC_HANDLE
|
254
|
+
:defaultValue, [:char, (30+1)*B_SIZE], #RFC_PARAMETER_DEFVALUE
|
255
|
+
:parameterText, [:char, (79+1)*B_SIZE], #RFC_PARAMETER_TEXT
|
256
|
+
:optional, :uchar, #RFC_BYTE
|
257
|
+
:extendedDescription, :pointer
|
231
258
|
end
|
232
259
|
|
233
260
|
class RFCFieldDesc < FFI::Struct
|
234
261
|
layout :name, [:char, (30+1)*B_SIZE],
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
262
|
+
:type, :int, #enum RFCTYPE
|
263
|
+
:nucLength, :uint,
|
264
|
+
:nucOffset, :uint,
|
265
|
+
:ucLength, :uint,
|
266
|
+
:ucOffset, :uint,
|
267
|
+
:decimals, :uint,
|
268
|
+
:typeDescHandle, :pointer, #RFC_TYPE_DESC_HANDLE
|
269
|
+
:extendedDescription, :pointer
|
243
270
|
end
|
244
271
|
|
245
272
|
class RFCDataContainer < FFI::Struct
|
246
273
|
layout :handle, :pointer
|
247
274
|
end
|
248
275
|
|
249
|
-
# typedef :RFCDataContainer, RFCStructureHandle
|
250
|
-
# typedef :RFCDataContainer, RFCTableHandle
|
276
|
+
# typedef :RFCDataContainer, RFCStructureHandle
|
277
|
+
# typedef :RFCDataContainer, RFCTableHandle
|
251
278
|
|
252
279
|
class RFC_FUNCTION_DESC_HANDLE < FFI::Struct
|
253
280
|
layout :handle, :pointer
|
@@ -263,20 +290,20 @@ module NWRFCLib
|
|
263
290
|
|
264
291
|
class RFC_DECF16 < FFI::Union
|
265
292
|
layout :bytes, [:uchar, 8],
|
266
|
-
|
293
|
+
:align, :double
|
267
294
|
end
|
268
295
|
|
269
|
-
# class SAP_MAX_ALIGN_T < FFI::Union
|
270
|
-
# layout :align1, :long,
|
271
|
-
# :align2, :double,
|
272
|
-
# :align3, :pointer,
|
273
|
-
# :align4,
|
274
|
-
# end
|
296
|
+
# class SAP_MAX_ALIGN_T < FFI::Union
|
297
|
+
# layout :align1, :long,
|
298
|
+
# :align2, :double,
|
299
|
+
# :align3, :pointer,
|
300
|
+
# :align4,
|
301
|
+
# end
|
275
302
|
|
276
|
-
# class RFC_DECF34 < FFI::Union
|
277
|
-
# layout :bytes, [:uchar, 16],
|
278
|
-
# :align, 16
|
279
|
-
# end
|
303
|
+
# class RFC_DECF34 < FFI::Union
|
304
|
+
# layout :bytes, [:uchar, 16],
|
305
|
+
# :align, 16
|
306
|
+
# end
|
280
307
|
|
281
308
|
#############################################################################################################
|
282
309
|
# ATTACH FUNCTIONS
|
@@ -290,136 +317,136 @@ module NWRFCLib
|
|
290
317
|
|
291
318
|
# Function mappings
|
292
319
|
[
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
# [:remove_function_desc, :RfcRemoveFunctionDesc, [:pointer, :pointer, :pointer], :int],
|
392
|
-
# [:remove_type_desc, :RfcRemoveTypeDesc, [:pointer, :pointer, :pointer], :int],
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
].each{|funcsig|
|
320
|
+
[:add_exception, :RfcAddException, [:pointer, :pointer, :pointer], :int],
|
321
|
+
[:add_function_desc, :RfcAddFunctionDesc, [:pointer, :pointer, :pointer], :int],
|
322
|
+
[:add_parameter, :RfcAddParameter, [:pointer, :pointer, :pointer], :int],
|
323
|
+
[:add_type_desc, :RfcAddTypeDesc, [:pointer, :pointer, :pointer], :int],
|
324
|
+
[:add_type_field, :RfcAddTypeField, [:pointer, :pointer, :pointer], :int],
|
325
|
+
# @method append_new_row(table_handle, error_handle)
|
326
|
+
# @returns FFI::Pointer pointer to structure of new row
|
327
|
+
# calls RfcAppendNewRow()
|
328
|
+
[:append_new_row, :RfcAppendNewRow, [:pointer, :pointer], :pointer],
|
329
|
+
# @method append_row(table_handle, structure, error_handle)
|
330
|
+
# @returns Integer RC
|
331
|
+
# calls RfcAppendRow()
|
332
|
+
[:append_row, :RfcAppendRow, [:pointer, :pointer, :pointer], :int],
|
333
|
+
[:clone_structure, :RfcCloneStructure, [:pointer, :pointer], :pointer],
|
334
|
+
[:clone_table, :RfcCloneTable, [:pointer, :pointer], :pointer],
|
335
|
+
[:close_connection, :RfcCloseConnection, [:pointer, :pointer], :int],
|
336
|
+
[:confirm_transaction, :RfcConfirmTransaction, [:pointer, :pointer], :int],
|
337
|
+
[:create_function, :RfcCreateFunction, [:pointer, :pointer], :pointer],
|
338
|
+
[:create_function_desc, :RfcCreateFunctionDesc, [:pointer, :pointer], :pointer],
|
339
|
+
[:create_structure, :RfcCreateStructure, [:pointer, :pointer], :pointer],
|
340
|
+
[:create_table, :RfcCreateTable, [:pointer, :pointer], :pointer],
|
341
|
+
[:create_transaction, :RfcCreateTransaction, [:pointer, :pointer, :pointer, :pointer], :pointer],
|
342
|
+
[:create_type_desc, :RfcCreateTypeDesc, [:pointer, :pointer], :pointer],
|
343
|
+
[:delete_all_rows, :RfcDeleteAllRows, [:pointer, :pointer], :int],
|
344
|
+
[:delete_current_row, :RfcDeleteCurrentRow, [:pointer, :pointer], :int],
|
345
|
+
[:describe_function, :RfcDescribeFunction, [:pointer, :pointer], :pointer],
|
346
|
+
[:describe_type, :RfcDescribeType, [:pointer, :pointer], :pointer],
|
347
|
+
[:destroy_function, :RfcDestroyFunction, [:pointer, :pointer], :int],
|
348
|
+
[:destroy_function_desc, :RfcDestroyFunctionDesc, [:pointer, :pointer], :int],
|
349
|
+
[:destroy_structure, :RfcDestroyStructure, [:pointer, :pointer], :int],
|
350
|
+
[:destroy_table, :RfcDestroyTable, [:pointer, :pointer], :int],
|
351
|
+
[:destroy_transaction, :RfcDestroyTransaction, [:pointer, :pointer], :int],
|
352
|
+
[:destroy_type_desc, :RfcDestroyTypeDesc, [:pointer, :pointer], :int],
|
353
|
+
[:enable_basxml, :RfcEnableBASXML, [:pointer, :pointer], :int],
|
354
|
+
[:get_bytes, :RfcGetBytes, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
355
|
+
[:get_cached_function_desc, :RfcGetCachedFunctionDesc, [:pointer, :pointer, :pointer], :pointer],
|
356
|
+
[:get_cached_type_desc, :RfcGetCachedTypeDesc, [:pointer, :pointer, :pointer], :pointer],
|
357
|
+
[:get_chars, :RfcGetChars, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
358
|
+
[:get_connection_attributes, :RfcGetConnectionAttributes, [:pointer, :pointer, :pointer], :int],
|
359
|
+
[:get_current_row, :RfcGetCurrentRow, [:pointer, :pointer], :pointer],
|
360
|
+
[:get_date, :RfcGetDate, [:pointer, :pointer, :pointer, :pointer], :int],
|
361
|
+
[:get_dec_f16, :RfcGetDecF16, [:pointer, :pointer, :pointer, :pointer], :int],
|
362
|
+
[:get_dec_f34, :RfcGetDecF34, [:pointer, :pointer, :pointer, :pointer], :int],
|
363
|
+
[:get_direction_as_string, :RfcGetDirectionAsString, [:pointer], :pointer],
|
364
|
+
[:get_exception_count, :RfcGetExceptionCount, [:pointer, :pointer, :pointer], :int],
|
365
|
+
[:get_exception_desc_by_index, :RfcGetExceptionDescByIndex, [:pointer, :uint, :pointer, :pointer], :int],
|
366
|
+
[:get_exception_desc_by_name, :RfcGetExceptionDescByName, [:pointer, :pointer, :pointer, :pointer], :int],
|
367
|
+
[:get_field_count, :RfcGetFieldCount, [:pointer, :pointer, :pointer], :int],
|
368
|
+
[:get_field_desc_by_index, :RfcGetFieldDescByIndex, [:pointer, :uint, :pointer, :pointer], :int],
|
369
|
+
[:get_field_desc_by_name, :RfcGetFieldDescByName, [:pointer, :pointer, :pointer, :pointer], :int],
|
370
|
+
[:get_float, :RfcGetFloat, [:pointer, :pointer, :pointer, :pointer], :int],
|
371
|
+
[:get_function_desc, :RfcGetFunctionDesc, [:pointer, :pointer, :pointer], :pointer],
|
372
|
+
[:get_function_name, :RfcGetFunctionName, [:pointer, :pointer, :pointer], :int],
|
373
|
+
[:get_int, :RfcGetInt, [:pointer, :pointer, :pointer, :pointer], :int],
|
374
|
+
[:get_int1, :RfcGetInt1, [:pointer, :pointer, :pointer, :pointer], :int],
|
375
|
+
[:get_int2, :RfcGetInt2, [:pointer, :pointer, :pointer, :pointer], :int],
|
376
|
+
[:get_num, :RfcGetNum, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
377
|
+
[:get_parameter_count, :RfcGetParameterCount, [:pointer, :pointer, :pointer], :int],
|
378
|
+
[:get_parameter_desc_by_index, :RfcGetParameterDescByIndex, [:pointer, :uint, :pointer, :pointer], :int],
|
379
|
+
[:get_parameter_desc_by_name, :RfcGetParameterDescByName, [:pointer, :pointer, :pointer, :pointer], :int],
|
380
|
+
[:get_partner_snc_key, :RfcGetPartnerSNCKey, [:pointer, :pointer, :pointer, :pointer], :int],
|
381
|
+
[:get_partner_snc_name, :RfcGetPartnerSNCName, [:pointer, :pointer, :uint, :pointer], :int],
|
382
|
+
[:get_partner_sso_ticket, :RfcGetPartnerSSOTicket, [:pointer, :pointer, :pointer, :pointer], :int],
|
383
|
+
[:get_rc_as_string, :RfcGetRcAsString, [:pointer], :pointer],
|
384
|
+
[:get_row_count, :RfcGetRowCount, [:pointer, :pointer, :pointer], :int],
|
385
|
+
[:get_string, :RfcGetString, [:pointer, :pointer, :pointer, :uint, :pointer, :pointer], :int],
|
386
|
+
[:get_string_length, :RfcGetStringLength, [:pointer, :pointer, :pointer, :pointer], :int],
|
387
|
+
[:get_structure, :RfcGetStructure, [:pointer, :pointer, :pointer, :pointer], :int],
|
388
|
+
[:get_table, :RfcGetTable, [:pointer, :pointer, :pointer, :pointer], :int],
|
389
|
+
[:get_time, :RfcGetTime, [:pointer, :pointer, :pointer, :pointer], :int],
|
390
|
+
[:get_transaction_id, :RfcGetTransactionID, [:pointer, :pointer, :pointer], :int],
|
391
|
+
[:get_type_as_string, :RfcGetTypeAsString, [:pointer], :pointer],
|
392
|
+
[:get_type_desc, :RfcGetTypeDesc, [:pointer, :pointer, :pointer], :pointer],
|
393
|
+
[:get_type_length, :RfcGetTypeLength, [:pointer, :pointer, :pointer, :pointer], :int],
|
394
|
+
[:get_type_name, :RfcGetTypeName, [:pointer, :pointer, :pointer], :int],
|
395
|
+
[:get_version, :RfcGetVersion, [:pointer, :pointer, :pointer], :pointer],
|
396
|
+
[:get_x_string, :RfcGetXString, [:pointer, :pointer, :pointer, :uint, :pointer, :pointer], :int],
|
397
|
+
[:init, :RfcInit, [:pointer], :int],
|
398
|
+
[:insert_new_row, :RfcInsertNewRow, [:pointer, :pointer], :pointer],
|
399
|
+
[:insert_row, :RfcInsertRow, [:pointer, :pointer, :pointer], :int],
|
400
|
+
[:install_generic_server_function, :RfcInstallGenericServerFunction, [:pointer, :pointer, :pointer], :int],
|
401
|
+
[:install_server_function, :RfcInstallServerFunction, [:pointer, :pointer, :funcimpl, :pointer], :int],
|
402
|
+
[:install_transaction_handlers, :RfcInstallTransactionHandlers, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :int],
|
403
|
+
[:invoke, :RfcInvoke, [:pointer, :pointer, :pointer], :int],
|
404
|
+
[:invoke_in_transaction, :RfcInvokeInTransaction, [:pointer, :pointer, :pointer], :int],
|
405
|
+
[:is_basxml_supported, :RfcIsBASXMLSupported, [:pointer, :pointer, :pointer], :int],
|
406
|
+
#[:is_connection_handle_valid, :RfcIsConnectionHandleValid, [:pointer, :pointer, :pointer], :int],
|
407
|
+
[:is_parameter_active, :RfcIsParameterActive, [:pointer, :pointer, :pointer, :pointer], :int],
|
408
|
+
[:listen_and_dispatch, :RfcListenAndDispatch, [:pointer, :int, :pointer], :int],
|
409
|
+
[:move_to, :RfcMoveTo, [:pointer, :uint, :pointer], :int],
|
410
|
+
[:move_to_first_row, :RfcMoveToFirstRow, [:pointer, :pointer], :int],
|
411
|
+
[:move_to_last_row, :RfcMoveToLastRow, [:pointer, :pointer], :int],
|
412
|
+
[:move_to_next_row, :RfcMoveToNextRow, [:pointer, :pointer], :int],
|
413
|
+
[:move_to_previous_row, :RfcMoveToPreviousRow, [:pointer, :pointer], :int],
|
414
|
+
[:open_connection, :RfcOpenConnection, [:pointer, :uint, :pointer], :pointer],
|
415
|
+
[:ping, :RfcPing, [:pointer, :pointer], :int],
|
416
|
+
[:register_server, :RfcRegisterServer, [:pointer, :uint, :pointer], :pointer],
|
417
|
+
[:reload_ini_file, :RfcReloadIniFile, [:pointer], :int],
|
418
|
+
# [:remove_function_desc, :RfcRemoveFunctionDesc, [:pointer, :pointer, :pointer], :int],
|
419
|
+
# [:remove_type_desc, :RfcRemoveTypeDesc, [:pointer, :pointer, :pointer], :int],
|
420
|
+
[:reset_server_context, :RfcResetServerContext, [:pointer, :pointer], :int],
|
421
|
+
[:sapuc_to_utf8, :RfcSAPUCToUTF8, [:pointer, :uint, :pointer, :pointer, :pointer, :pointer], :int],
|
422
|
+
[:set_bytes, :RfcSetBytes, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
423
|
+
[:set_chars, :RfcSetChars, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
424
|
+
[:set_date, :RfcSetDate, [:pointer, :pointer, :pointer, :pointer], :int],
|
425
|
+
#[:set_dec_f16, :RfcSetDecF16, [:pointer, :pointer, :pointer, :pointer], :int],
|
426
|
+
[:set_dec_f16, :RfcSetDecF16, [:pointer, :pointer, RFC_DECF16.by_value, :pointer], :int],
|
427
|
+
[:set_dec_f34, :RfcSetDecF34, [:pointer, :pointer, :pointer, :pointer], :int],
|
428
|
+
[:set_float, :RfcSetFloat, [:pointer, :pointer, :double, :pointer], :int],
|
429
|
+
[:set_ini_path, :RfcSetIniPath, [:pointer, :pointer], :int],
|
430
|
+
[:set_int, :RfcSetInt, [:pointer, :pointer, :long, :pointer], :int],
|
431
|
+
[:set_int1, :RfcSetInt1, [:pointer, :pointer, :uint8, :pointer], :int],
|
432
|
+
[:set_int2, :RfcSetInt2, [:pointer, :pointer, :short, :pointer], :int],
|
433
|
+
[:set_num, :RfcSetNum, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
434
|
+
[:set_parameter_active, :RfcSetParameterActive, [:pointer, :pointer, :int, :pointer], :int],
|
435
|
+
[:set_string, :RfcSetString, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
436
|
+
[:set_structure, :RfcSetStructure, [:pointer, :pointer, :pointer, :pointer], :int],
|
437
|
+
[:set_table, :RfcSetTable, [:pointer, :pointer, :pointer, :pointer], :int],
|
438
|
+
[:set_time, :RfcSetTime, [:pointer, :pointer, :pointer, :pointer], :int],
|
439
|
+
#[:set_trace_dir, :RfcSetTraceDir, [:pointer, :pointer], :int],
|
440
|
+
#[:set_trace_encoding, :RfcSetTraceEncoding, [:pointer, :pointer], :int],
|
441
|
+
#[:set_trace_level, :RfcSetTraceLevel, [:pointer, :pointer, :uint, :pointer], :int],
|
442
|
+
[:set_type_length, :RfcSetTypeLength, [:pointer, :uint, :uint, :pointer], :int],
|
443
|
+
[:set_x_string, :RfcSetXString, [:pointer, :pointer, :pointer, :uint, :pointer], :int],
|
444
|
+
[:snc_key_to_name, :RfcSNCKeyToName, [:pointer, :pointer, :uint, :pointer, :uint, :pointer], :int],
|
445
|
+
[:snc_name_to_key, :RfcSNCNameToKey, [:pointer, :pointer, :pointer, :pointer, :pointer], :int],
|
446
|
+
[:start_server, :RfcStartServer, [:int, :pointer, :pointer, :uint, :pointer], :pointer],
|
447
|
+
[:submit_transaction, :RfcSubmitTransaction, [:pointer, :pointer], :int],
|
448
|
+
[:utf8_to_sapuc, :RfcUTF8ToSAPUC, [:pointer, :uint, :pointer, :pointer, :pointer, :pointer], :int]
|
449
|
+
].each { |funcsig|
|
423
450
|
attach_function(funcsig[0], funcsig[1], funcsig[2], funcsig[3], :blocking => true)
|
424
451
|
}
|
425
452
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nwrfc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Ceronio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|