intersys 0.0.2 → 0.0.4
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.
- data/lib/Makefile +143 -0
- data/lib/common.c +3 -7
- data/lib/common.o +0 -0
- data/lib/database.c +3 -2
- data/lib/database.o +0 -0
- data/lib/definition.c +120 -112
- data/lib/definition.o +0 -0
- data/lib/extconf.rb +23 -4
- data/lib/intersys.c +3 -15
- data/lib/intersys.h +9 -5
- data/lib/intersys.o +0 -0
- data/lib/intersys.rb +83 -62
- data/lib/intersys_cache.bundle +0 -0
- data/lib/mkmf.log +177 -0
- data/lib/object.c +2 -4
- data/lib/object.o +0 -0
- data/lib/query.c +15 -1
- data/lib/query.o +0 -0
- data/lib/test.rb +15 -0
- data/test/object.rb +14 -4
- data/test/query.rb +1 -0
- data/test/reflection.rb +12 -13
- metadata +12 -2
data/lib/Makefile
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
|
2
|
+
SHELL = /bin/sh
|
3
|
+
|
4
|
+
#### Start of system configuration section. ####
|
5
|
+
|
6
|
+
srcdir = .
|
7
|
+
topdir = /opt/local/lib/ruby/1.8/powerpc-darwin8.4.0
|
8
|
+
hdrdir = $(topdir)
|
9
|
+
VPATH = $(srcdir):$(topdir):$(hdrdir)
|
10
|
+
prefix = $(DESTDIR)/opt/local
|
11
|
+
exec_prefix = $(DESTDIR)/opt/local
|
12
|
+
sitedir = $(prefix)/lib/ruby/site_ruby
|
13
|
+
rubylibdir = $(libdir)/ruby/$(ruby_version)
|
14
|
+
archdir = $(rubylibdir)/$(arch)
|
15
|
+
sbindir = $(exec_prefix)/sbin
|
16
|
+
vendordir = $(prefix)/lib/ruby/vendor_ruby
|
17
|
+
datadir = $(prefix)/share
|
18
|
+
includedir = $(prefix)/include
|
19
|
+
infodir = $(prefix)/info
|
20
|
+
sysconfdir = $(prefix)/etc
|
21
|
+
mandir = $(DESTDIR)/opt/local/share/man
|
22
|
+
libdir = $(DESTDIR)/opt/local/lib
|
23
|
+
sharedstatedir = $(prefix)/com
|
24
|
+
oldincludedir = $(DESTDIR)/usr/include
|
25
|
+
sitearchdir = $(sitelibdir)/$(sitearch)
|
26
|
+
vendorarchdir = $(vendorlibdir)/$(vendorarch)
|
27
|
+
bindir = $(exec_prefix)/bin
|
28
|
+
localstatedir = $(prefix)/var
|
29
|
+
vendorlibdir = $(vendordir)/$(ruby_version)
|
30
|
+
sitelibdir = $(sitedir)/$(ruby_version)
|
31
|
+
libexecdir = $(exec_prefix)/libexec
|
32
|
+
|
33
|
+
CC = gcc -g
|
34
|
+
LIBRUBY = $(LIBRUBY_SO)
|
35
|
+
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
36
|
+
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
|
37
|
+
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
38
|
+
|
39
|
+
CFLAGS = -fno-common -O -pipe -I/opt/local/include -fno-common -pipe -fno-common -I/Applications/Cache/dev/cpp/include -I/cygdrive/c/Progra~1/Cache/dev/cpp/include -I/cygdrive/c/Cachesys/dev/cpp/include -Wall
|
40
|
+
CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) -O -pipe -I/opt/local/include
|
41
|
+
CXXFLAGS = $(CFLAGS)
|
42
|
+
DLDFLAGS = -L/opt/local/lib
|
43
|
+
LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
|
44
|
+
AR = ar
|
45
|
+
EXEEXT =
|
46
|
+
|
47
|
+
RUBY_INSTALL_NAME = ruby
|
48
|
+
RUBY_SO_NAME = ruby
|
49
|
+
arch = powerpc-darwin8.4.0
|
50
|
+
sitearch = powerpc-darwin8.4.0
|
51
|
+
vendorarch = powerpc-darwin8.4.0
|
52
|
+
ruby_version = 1.8
|
53
|
+
ruby = /opt/local/bin/ruby
|
54
|
+
RUBY = $(ruby)
|
55
|
+
RM = rm -f
|
56
|
+
MAKEDIRS = mkdir -p
|
57
|
+
INSTALL = /usr/bin/install -c
|
58
|
+
INSTALL_PROG = $(INSTALL) -m 0755
|
59
|
+
INSTALL_DATA = $(INSTALL) -m 644
|
60
|
+
COPY = cp
|
61
|
+
|
62
|
+
#### End of system configuration section. ####
|
63
|
+
|
64
|
+
preload =
|
65
|
+
|
66
|
+
libpath = $(libdir)
|
67
|
+
LIBPATH = -L"$(libdir)"
|
68
|
+
DEFFILE =
|
69
|
+
|
70
|
+
CLEANFILES =
|
71
|
+
DISTCLEANFILES =
|
72
|
+
|
73
|
+
extout =
|
74
|
+
extout_prefix =
|
75
|
+
target_prefix =
|
76
|
+
LOCAL_LIBS =
|
77
|
+
LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc
|
78
|
+
SRCS = common.c database.c definition.c intersys.c object.c query.c
|
79
|
+
OBJS = common.o database.o definition.o intersys.o object.o query.o
|
80
|
+
TARGET = intersys_cache
|
81
|
+
DLLIB = $(TARGET).bundle
|
82
|
+
STATIC_LIB =
|
83
|
+
|
84
|
+
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
85
|
+
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
86
|
+
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
87
|
+
|
88
|
+
TARGET_SO = $(DLLIB)
|
89
|
+
CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
|
90
|
+
CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
|
91
|
+
|
92
|
+
all: $(DLLIB)
|
93
|
+
static: $(STATIC_LIB)
|
94
|
+
|
95
|
+
clean:
|
96
|
+
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
97
|
+
|
98
|
+
distclean: clean
|
99
|
+
@-$(RM) Makefile extconf.h conftest.* mkmf.log
|
100
|
+
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
101
|
+
|
102
|
+
realclean: distclean
|
103
|
+
install: install-so install-rb
|
104
|
+
|
105
|
+
install-so: $(RUBYARCHDIR)
|
106
|
+
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
107
|
+
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
108
|
+
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
109
|
+
install-rb: pre-install-rb install-rb-default
|
110
|
+
install-rb-default: pre-install-rb-default
|
111
|
+
pre-install-rb: Makefile
|
112
|
+
pre-install-rb-default: Makefile
|
113
|
+
$(RUBYARCHDIR):
|
114
|
+
$(MAKEDIRS) $@
|
115
|
+
|
116
|
+
site-install: site-install-so site-install-rb
|
117
|
+
site-install-so: install-so
|
118
|
+
site-install-rb: install-rb
|
119
|
+
|
120
|
+
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
121
|
+
|
122
|
+
.cc.o:
|
123
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
124
|
+
|
125
|
+
.cxx.o:
|
126
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
127
|
+
|
128
|
+
.cpp.o:
|
129
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
130
|
+
|
131
|
+
.C.o:
|
132
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
133
|
+
|
134
|
+
.c.o:
|
135
|
+
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
|
136
|
+
|
137
|
+
$(DLLIB): $(OBJS)
|
138
|
+
@-$(RM) $@
|
139
|
+
$(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
$(OBJS): ruby.h defines.h
|
data/lib/common.c
CHANGED
@@ -40,14 +40,10 @@ VALUE wcstr_new(const wchar_t *w_str, const char_size_t len) {
|
|
40
40
|
size = (int)(len)*sizeof(wchar_t);
|
41
41
|
capa = (int)(len + 1)*sizeof(wchar_t);
|
42
42
|
|
43
|
-
result =
|
43
|
+
result = rb_str_buf_new(capa);
|
44
|
+
bzero(STR(result) + size, capa-size);
|
45
|
+
rb_str_buf_cat(result, (char *)w_str, size);
|
44
46
|
|
45
|
-
RSTRING(result)->len = size;
|
46
|
-
RSTRING(result)->aux.capa = capa;
|
47
|
-
RSTRING(result)->ptr = ALLOC_N(char, capa);
|
48
|
-
bzero(RSTRING(result)->ptr, capa);
|
49
|
-
|
50
|
-
memcpy(RSTRING(result)->ptr, (char *)w_str, size);
|
51
47
|
rb_str_freeze(result);
|
52
48
|
return result;
|
53
49
|
}
|
data/lib/common.o
ADDED
Binary file
|
data/lib/database.c
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#include "intersys.h"
|
2
2
|
|
3
3
|
void intersys_base_free(struct rbDatabase* base) {
|
4
|
-
// printf("Releasing database\n");
|
5
4
|
RUN(cbind_free_db(base->database));
|
6
5
|
RUN(cbind_free_conn(base->connection));
|
7
6
|
free(base);
|
@@ -37,7 +36,9 @@ VALUE intersys_base_connect(VALUE self, VALUE options) {
|
|
37
36
|
VALUE host, port, user, password, namespace, timeout;
|
38
37
|
|
39
38
|
host = connect_get_options(options, "host", "localhost", 0);
|
40
|
-
port = connect_get_options(options, "port", "
|
39
|
+
port = connect_get_options(options, "port", "1973", 0);
|
40
|
+
//port = connect_get_options(options, "port", "1972", 0);
|
41
|
+
//namespace = connect_get_options(options, "namespace", "User", 0);
|
41
42
|
namespace = connect_get_options(options, "namespace", "Samples", 0);
|
42
43
|
|
43
44
|
user = connect_get_options(options, "user", "_SYSTEM", 1);
|
data/lib/database.o
ADDED
Binary file
|
data/lib/definition.c
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#include "intersys.h"
|
2
2
|
|
3
3
|
static void intersys_definition_free(struct rbDefinition* definition) {
|
4
|
-
// printf("Releasing definition (%d)\n", definition->type);
|
5
4
|
switch(definition->type) {
|
6
5
|
case D_PROPERTY: {
|
7
6
|
RUN(cbind_free_prop_def(definition->def));
|
@@ -98,7 +97,7 @@ VALUE intersys_property_get(VALUE self) {
|
|
98
97
|
RUN(cbind_reset_args(property->database));
|
99
98
|
RUN(cbind_set_next_arg_as_res(property->database, property->cpp_type));
|
100
99
|
RUN(cbind_get_prop(property->database, property->oref, property->in_name));
|
101
|
-
return
|
100
|
+
return intersys_method_extract_retval(self);
|
102
101
|
}
|
103
102
|
|
104
103
|
VALUE intersys_property_set(VALUE self, VALUE value) {
|
@@ -107,7 +106,7 @@ VALUE intersys_property_set(VALUE self, VALUE value) {
|
|
107
106
|
Data_Get_Struct(self, struct rbDefinition, property);
|
108
107
|
|
109
108
|
RUN(cbind_reset_args(property->database));
|
110
|
-
|
109
|
+
intersys_argument_set(self, value);
|
111
110
|
RUN(cbind_set_prop(property->database, property->oref, property->in_name));
|
112
111
|
return self;
|
113
112
|
}
|
@@ -159,27 +158,6 @@ VALUE intersys_method_num_args(VALUE self) {
|
|
159
158
|
return INT2FIX(method->num_args);
|
160
159
|
}
|
161
160
|
|
162
|
-
VALUE intersys_method_prepare_call(VALUE self) {
|
163
|
-
struct rbDefinition* method;
|
164
|
-
|
165
|
-
Data_Get_Struct(self, struct rbDefinition, method);
|
166
|
-
|
167
|
-
RUN(cbind_reset_args(method->database));
|
168
|
-
RUN(cbind_mtd_rewind_args(method->def));
|
169
|
-
return self;
|
170
|
-
}
|
171
|
-
|
172
|
-
VALUE intersys_method_call(VALUE self) {
|
173
|
-
struct rbDefinition* method;
|
174
|
-
|
175
|
-
Data_Get_Struct(self, struct rbDefinition, method);
|
176
|
-
|
177
|
-
if (method->cpp_type != CBIND_VOID) {
|
178
|
-
RUN(cbind_set_next_arg_as_res(method->database, method->cpp_type));
|
179
|
-
}
|
180
|
-
RUN(cbind_run_method(method->database, method->oref, CLASS_NAME(method), method->in_name));
|
181
|
-
return self;
|
182
|
-
}
|
183
161
|
|
184
162
|
static VALUE extract_next_dlist_elem(char *dlist, int* elem_size) {
|
185
163
|
bool_t flag;
|
@@ -222,6 +200,71 @@ static VALUE extract_next_dlist_elem(char *dlist, int* elem_size) {
|
|
222
200
|
|
223
201
|
|
224
202
|
|
203
|
+
|
204
|
+
VALUE intersys_method_call(VALUE self, VALUE args) {
|
205
|
+
struct rbDefinition* method;
|
206
|
+
int i;
|
207
|
+
Check_Type(args, T_ARRAY);
|
208
|
+
Data_Get_Struct(self, struct rbDefinition, method);
|
209
|
+
if(method->num_args < RARRAY(args)->len) {
|
210
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", RARRAY(args)->len, method->num_args);
|
211
|
+
}
|
212
|
+
VALUE database = rb_iv_get(self, "@database");
|
213
|
+
VALUE class_name = rb_iv_get(self, "@class_name");
|
214
|
+
VALUE name = rb_iv_get(self, "@name");
|
215
|
+
|
216
|
+
RUN(cbind_reset_args(method->database));
|
217
|
+
RUN(cbind_mtd_rewind_args(method->def));
|
218
|
+
|
219
|
+
for(i = 0; i < RARRAY(args)->len; i++) {
|
220
|
+
VALUE arg = rb_funcall(cArgument, rb_intern("new"), 4, database, class_name, name, self);
|
221
|
+
intersys_argument_set(arg, RARRAY(args)->ptr[i]);
|
222
|
+
RUN(cbind_mtd_arg_next(method->def));
|
223
|
+
}
|
224
|
+
method->passed_args = RARRAY(args)->len;
|
225
|
+
|
226
|
+
if (method->cpp_type != CBIND_VOID) {
|
227
|
+
RUN(cbind_set_next_arg_as_res(method->database, method->cpp_type));
|
228
|
+
}
|
229
|
+
RUN(cbind_run_method(method->database, method->oref, CLASS_NAME(method), method->in_name));
|
230
|
+
return intersys_method_extract_retval(self);
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
VALUE intersys_argument_initialize(VALUE self, VALUE r_database, VALUE class_name, VALUE name, VALUE r_method) {
|
235
|
+
struct rbDefinition* argument;
|
236
|
+
struct rbDefinition* method;
|
237
|
+
VALUE args[] = {r_database, class_name, name};
|
238
|
+
rb_call_super(3, args);
|
239
|
+
|
240
|
+
Data_Get_Struct(self, struct rbDefinition, argument);
|
241
|
+
Data_Get_Struct(r_method, struct rbDefinition, method);
|
242
|
+
|
243
|
+
|
244
|
+
argument->type = D_ARGUMENT;
|
245
|
+
RUN(cbind_alloc_arg_def(&argument->def));
|
246
|
+
RUN(cbind_mtd_arg_get(method->def, argument->def));
|
247
|
+
RUN(cbind_get_arg_cpp_type(argument->def, &argument->cpp_type));
|
248
|
+
RUN(cbind_get_arg_cache_type(argument->def, &argument->cache_type));
|
249
|
+
RUN(cbind_get_arg_name(argument->def, &argument->name));
|
250
|
+
RUN(cbind_get_arg_is_by_ref(argument->def, &argument->is_by_ref));
|
251
|
+
RUN(cbind_get_arg_is_default(argument->def, &argument->is_default));
|
252
|
+
RUN(cbind_get_arg_def_val(argument->def, &argument->default_value));
|
253
|
+
RUN(cbind_get_arg_def_val_size(argument->def, &argument->default_value_size));
|
254
|
+
argument->arg_number = method->arg_counter;
|
255
|
+
method->arg_counter++;
|
256
|
+
return self;
|
257
|
+
}
|
258
|
+
|
259
|
+
VALUE intersys_argument_default_value(VALUE self) {
|
260
|
+
struct rbDefinition* argument;
|
261
|
+
Data_Get_Struct(self, struct rbDefinition, argument);
|
262
|
+
if(!argument->is_default) {
|
263
|
+
return Qnil;
|
264
|
+
}
|
265
|
+
return rb_str_new(argument->default_value, argument->default_value_size);
|
266
|
+
}
|
267
|
+
|
225
268
|
VALUE intersys_method_extract_retval(VALUE self) {
|
226
269
|
struct rbDefinition* method;
|
227
270
|
bool_t is_null;
|
@@ -232,7 +275,7 @@ VALUE intersys_method_extract_retval(VALUE self) {
|
|
232
275
|
}
|
233
276
|
|
234
277
|
|
235
|
-
RUN(cbind_get_is_null(method->database, method->
|
278
|
+
RUN(cbind_get_is_null(method->database, method->passed_args, &is_null));
|
236
279
|
if(is_null) {
|
237
280
|
return Qnil;
|
238
281
|
}
|
@@ -250,7 +293,7 @@ VALUE intersys_method_extract_retval(VALUE self) {
|
|
250
293
|
VALUE class_name_w, class_name;
|
251
294
|
const wchar_t *cl_name = 0;
|
252
295
|
struct rbObject* object;
|
253
|
-
RUN(cbind_get_arg_as_obj(method->database, method->
|
296
|
+
RUN(cbind_get_arg_as_obj(method->database, method->passed_args, &oref, &cl_name, &len, &is_null));
|
254
297
|
if(is_null) {
|
255
298
|
printf("Loaded NULL object\n");
|
256
299
|
return Qnil;
|
@@ -267,95 +310,95 @@ VALUE intersys_method_extract_retval(VALUE self) {
|
|
267
310
|
case CBIND_TIME_ID:
|
268
311
|
{
|
269
312
|
int hour, minute, second;
|
270
|
-
RUN(cbind_get_arg_as_time(method->database, method->
|
313
|
+
RUN(cbind_get_arg_as_time(method->database, method->passed_args, &hour, &minute, &second, &is_null));
|
271
314
|
return Qnil;
|
272
315
|
break;
|
273
316
|
}
|
274
317
|
case CBIND_DATE_ID:
|
275
318
|
{
|
276
319
|
int year, month,day;
|
277
|
-
RUN(cbind_get_arg_as_date(method->database, method->
|
278
|
-
|
279
|
-
|
320
|
+
RUN(cbind_get_arg_as_date(method->database, method->passed_args, &year, &month, &day, &is_null));
|
321
|
+
if(is_null) {
|
322
|
+
return Qnil;
|
323
|
+
}
|
324
|
+
return rb_funcall(rb_cTime, rb_intern("local"), 3, INT2NUM(year), INT2NUM(month), INT2NUM(day))
|
280
325
|
}
|
281
326
|
case CBIND_TIMESTAMP_ID:
|
282
327
|
{
|
283
328
|
int year, month, day, hour, minute, second, fraction;
|
284
|
-
RUN(cbind_get_arg_as_timestamp(method->database, method->
|
329
|
+
RUN(cbind_get_arg_as_timestamp(method->database, method->passed_args,
|
285
330
|
&year, &month, &day, &hour, &minute, &second, &fraction, &is_null));
|
286
|
-
|
287
|
-
|
331
|
+
if(is_null) {
|
332
|
+
return Qnil;
|
333
|
+
}
|
334
|
+
//TODO: fraction also should be included
|
335
|
+
return rb_funcall(rb_cTime, rb_intern("local"), 6,
|
336
|
+
INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(minute), INT2NUM(second));
|
288
337
|
}
|
289
338
|
|
290
339
|
case CBIND_INT_ID: {
|
291
340
|
int val;
|
292
|
-
RUN(cbind_get_arg_as_int(method->database, method->
|
341
|
+
RUN(cbind_get_arg_as_int(method->database, method->passed_args, &val, &is_null));
|
293
342
|
return INT2FIX(val);
|
294
343
|
}
|
295
344
|
|
296
345
|
case CBIND_DOUBLE_ID: {
|
297
346
|
double val;
|
298
|
-
RUN(cbind_get_arg_as_double(method->database, method->
|
347
|
+
RUN(cbind_get_arg_as_double(method->database, method->passed_args, &val, &is_null));
|
299
348
|
return rb_float_new(val);
|
300
349
|
}
|
301
350
|
case CBIND_CURRENCY_ID:
|
302
351
|
{
|
303
352
|
double val;
|
304
|
-
RUN(cbind_get_arg_as_cy(method->database, method->
|
353
|
+
RUN(cbind_get_arg_as_cy(method->database, method->passed_args, &val, &is_null));
|
305
354
|
return rb_float_new(val);
|
306
355
|
}
|
307
356
|
|
308
357
|
case CBIND_BINARY_ID: {
|
309
358
|
byte_size_t size;
|
310
|
-
|
311
|
-
VALUE result = rb_str_new(0, 0);
|
359
|
+
VALUE result = Qnil;
|
312
360
|
|
313
|
-
RUN(cbind_get_arg_as_bin(method->database, method->
|
314
|
-
|
315
|
-
RUN(cbind_get_arg_as_bin(method->database, method->
|
316
|
-
|
317
|
-
RSTRING(result)->ptr = buf;
|
318
|
-
RSTRING(result)->len = size;
|
319
|
-
RSTRING(result)->aux.capa = size;
|
361
|
+
RUN(cbind_get_arg_as_bin(method->database, method->passed_args, NULL, 0, &size, &is_null));
|
362
|
+
result = rb_str_buf_new((int)size);
|
363
|
+
RUN(cbind_get_arg_as_bin(method->database, method->passed_args, STR(result), size, &size, &is_null));
|
364
|
+
LEN(result) = size;
|
320
365
|
return result;
|
321
366
|
}
|
322
367
|
case CBIND_STATUS_ID:{
|
323
368
|
byte_size_t size;
|
324
|
-
|
369
|
+
VALUE buf;
|
325
370
|
int code;
|
326
371
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
372
|
+
//TODO: if code is not OK, we should throw exception. No class Status is required
|
373
|
+
RUN(cbind_get_arg_as_status(method->database, method->passed_args, &code, NULL, 0, MULTIBYTE, &size, &is_null));
|
374
|
+
if(!code || is_null) {
|
375
|
+
return Qtrue;
|
376
|
+
}
|
377
|
+
buf = rb_str_buf_new(size);
|
378
|
+
RUN(cbind_get_arg_as_status(method->database, method->passed_args, &code, STR(buf), RSTRING(buf)->aux.capa, MULTIBYTE, &size, &is_null));
|
379
|
+
STR(buf)[size] = '\0';
|
380
|
+
rb_exc_raise(rb_funcall(cStatus, rb_intern("new"), 2, INT2FIX(code), buf));
|
381
|
+
return Qnil;
|
333
382
|
}
|
334
383
|
|
335
384
|
case CBIND_STRING_ID: {
|
336
385
|
byte_size_t size;
|
337
|
-
|
338
|
-
VALUE result = rb_str_new(0, 0);
|
339
|
-
VALUE res;
|
386
|
+
VALUE result = Qnil;
|
340
387
|
|
341
|
-
RUN(cbind_get_arg_as_str(method->database, method->
|
388
|
+
RUN(cbind_get_arg_as_str(method->database, method->passed_args, NULL, 0, CPP_UNICODE, &size, &is_null));
|
342
389
|
//It is important to add wchar_t to end, because for wcslen we need more than 1 terminating zero.
|
343
390
|
//I don't know exactly, how works wcslen, but I add 4 (sizeof wchar_t) terminating zeroes
|
344
|
-
|
345
|
-
bzero(
|
346
|
-
RUN(cbind_get_arg_as_str(method->database, method->
|
347
|
-
|
348
|
-
|
349
|
-
RSTRING(result)->len = size;
|
350
|
-
RSTRING(result)->aux.capa = size;
|
351
|
-
res = rb_funcall(result, rb_intern("from_wchar"), 0);
|
352
|
-
return res;
|
391
|
+
result = rb_str_buf_new(size + sizeof(wchar_t));
|
392
|
+
bzero(STR(result) + size, sizeof(wchar_t));
|
393
|
+
RUN(cbind_get_arg_as_str(method->database, method->passed_args, STR(result), size, CPP_UNICODE, &size, &is_null));
|
394
|
+
LEN(result) = size;
|
395
|
+
return FROMWCHAR(result);
|
353
396
|
}
|
354
397
|
|
355
398
|
case CBIND_BOOL_ID:
|
356
399
|
{
|
357
400
|
bool_t val;
|
358
|
-
RUN(cbind_get_arg_as_bool(method->database, method->
|
401
|
+
RUN(cbind_get_arg_as_bool(method->database, method->passed_args, &val, &is_null));
|
359
402
|
if(val) {
|
360
403
|
return Qtrue;
|
361
404
|
}
|
@@ -364,26 +407,26 @@ VALUE intersys_method_extract_retval(VALUE self) {
|
|
364
407
|
|
365
408
|
case CBIND_DLIST_ID:
|
366
409
|
{
|
367
|
-
|
410
|
+
VALUE buf = Qnil;
|
368
411
|
char *p;
|
369
412
|
byte_size_t size;
|
370
413
|
int num_elems;
|
371
414
|
int i;
|
372
415
|
VALUE list;
|
373
416
|
|
374
|
-
RUN(cbind_get_arg_as_dlist(method->database, method->
|
375
|
-
|
376
|
-
RUN(cbind_get_arg_as_dlist(method->database, method->
|
417
|
+
RUN(cbind_get_arg_as_dlist(method->database, method->passed_args, NULL, 0, &size, &is_null));
|
418
|
+
buf = rb_str_buf_new(size);
|
419
|
+
RUN(cbind_get_arg_as_dlist(method->database, method->passed_args, STR(buf), size, &size, &is_null));
|
420
|
+
LEN(buf) = size;
|
377
421
|
|
378
|
-
RUN(cbind_dlist_calc_num_elems(buf,
|
422
|
+
RUN(cbind_dlist_calc_num_elems(STR(buf), LEN(buf), &num_elems));
|
379
423
|
list = rb_ary_new2(num_elems);
|
380
|
-
p = buf;
|
424
|
+
p = STR(buf);
|
381
425
|
for (i=0; i < num_elems; i++) {
|
382
426
|
int elem_size;
|
383
427
|
rb_ary_push(list, extract_next_dlist_elem(p, &elem_size));
|
384
428
|
p += elem_size;
|
385
429
|
}
|
386
|
-
free(buf);
|
387
430
|
return list;
|
388
431
|
}
|
389
432
|
|
@@ -392,41 +435,6 @@ VALUE intersys_method_extract_retval(VALUE self) {
|
|
392
435
|
}
|
393
436
|
|
394
437
|
|
395
|
-
VALUE intersys_argument_initialize(VALUE self, VALUE r_database, VALUE class_name, VALUE name, VALUE r_method) {
|
396
|
-
struct rbDefinition* argument;
|
397
|
-
struct rbDefinition* method;
|
398
|
-
VALUE args[] = {r_database, class_name, name};
|
399
|
-
rb_call_super(3, args);
|
400
|
-
|
401
|
-
Data_Get_Struct(self, struct rbDefinition, argument);
|
402
|
-
Data_Get_Struct(r_method, struct rbDefinition, method);
|
403
|
-
|
404
|
-
|
405
|
-
argument->type = D_ARGUMENT;
|
406
|
-
RUN(cbind_alloc_arg_def(&argument->def));
|
407
|
-
RUN(cbind_mtd_arg_get(method->def, argument->def));
|
408
|
-
RUN(cbind_get_arg_cpp_type(argument->def, &argument->cpp_type));
|
409
|
-
RUN(cbind_get_arg_cache_type(argument->def, &argument->cache_type));
|
410
|
-
RUN(cbind_get_arg_name(argument->def, &argument->name));
|
411
|
-
RUN(cbind_get_arg_is_by_ref(argument->def, &argument->is_by_ref));
|
412
|
-
RUN(cbind_get_arg_is_default(argument->def, &argument->is_default));
|
413
|
-
RUN(cbind_get_arg_def_val(argument->def, &argument->default_value));
|
414
|
-
RUN(cbind_get_arg_def_val_size(argument->def, &argument->default_value_size));
|
415
|
-
RUN(cbind_mtd_arg_next(method->def));
|
416
|
-
argument->arg_number = method->arg_counter;
|
417
|
-
method->arg_counter++;
|
418
|
-
return self;
|
419
|
-
}
|
420
|
-
|
421
|
-
VALUE intersys_argument_default_value(VALUE self) {
|
422
|
-
struct rbDefinition* argument;
|
423
|
-
Data_Get_Struct(self, struct rbDefinition, argument);
|
424
|
-
if(!argument->is_default) {
|
425
|
-
return Qnil;
|
426
|
-
}
|
427
|
-
return rb_str_new(argument->default_value, argument->default_value_size);
|
428
|
-
}
|
429
|
-
|
430
438
|
VALUE intersys_argument_marshall_dlist_elem(VALUE self, VALUE elem) {
|
431
439
|
struct rbDefinition* argument;
|
432
440
|
Data_Get_Struct(self, struct rbDefinition, argument);
|
@@ -467,7 +475,7 @@ VALUE intersys_argument_set(VALUE self, VALUE obj) {
|
|
467
475
|
|
468
476
|
if(obj == Qnil) {
|
469
477
|
RUN(cbind_set_next_arg_as_null(property->database, property->cpp_type, property->is_by_ref));
|
470
|
-
return
|
478
|
+
return self;
|
471
479
|
}
|
472
480
|
switch (property->cpp_type) {
|
473
481
|
case CBIND_VOID:
|
@@ -507,7 +515,7 @@ VALUE intersys_argument_set(VALUE self, VALUE obj) {
|
|
507
515
|
}
|
508
516
|
case CBIND_STRING_ID:
|
509
517
|
{
|
510
|
-
VALUE res =
|
518
|
+
VALUE res = rb_funcall(obj, rb_intern("to_s"), 0);
|
511
519
|
RUN(cbind_set_next_arg_as_str(property->database, STR(res), LEN(res), MULTIBYTE, property->is_by_ref));
|
512
520
|
break;
|
513
521
|
}
|
@@ -568,8 +576,8 @@ VALUE intersys_argument_set(VALUE self, VALUE obj) {
|
|
568
576
|
default:
|
569
577
|
rb_raise(rb_eStandardError,"unknown type for argument, type = %d",
|
570
578
|
property->cpp_type, CLASS_NAME(property));
|
571
|
-
return
|
579
|
+
return self;
|
572
580
|
}
|
573
|
-
return
|
581
|
+
return self;
|
574
582
|
|
575
583
|
}
|