[ruby-oci8-commit] [418] trunk/ruby-oci8: * ext/oci8/object.c, ext/oci8/bind.c, lib/oci8/ object.rb,
nobody at rubyforge.org
nobody at rubyforge.org
Sat Dec 4 07:49:52 EST 2010
Revision: 418
Author: kubo
Date: 2010-12-04 07:49:51 -0500 (Sat, 04 Dec 2010)
Log Message:
-----------
* ext/oci8/object.c, ext/oci8/bind.c, lib/oci8/object.rb,
test/test_object.rb: fix a problem to assign NULL bind value
to object type bind variables.
(reported by Raimonds Simanovskis)
* ext/oci8/oraconf.rb: fix for 32-bit ruby compiled on
x86_64 linux. (reported by Jason Renschler)
* ext/oci8/oranumber_util.c, test/test_oranumber.rb:
suppress warning: unknown conversion type character 'h' in format
Modified Paths:
--------------
branches/ruby-oci8-2.0/ChangeLog
branches/ruby-oci8-2.0/ext/oci8/bind.c
branches/ruby-oci8-2.0/ext/oci8/object.c
branches/ruby-oci8-2.0/ext/oci8/oraconf.rb
branches/ruby-oci8-2.0/ext/oci8/oranumber_util.c
branches/ruby-oci8-2.0/lib/oci8/object.rb
branches/ruby-oci8-2.0/test/test_object.rb
branches/ruby-oci8-2.0/test/test_oranumber.rb
trunk/ruby-oci8/ChangeLog
trunk/ruby-oci8/ext/oci8/bind.c
trunk/ruby-oci8/ext/oci8/object.c
trunk/ruby-oci8/ext/oci8/oraconf.rb
trunk/ruby-oci8/ext/oci8/oranumber_util.c
trunk/ruby-oci8/lib/oci8/object.rb
trunk/ruby-oci8/test/test_object.rb
trunk/ruby-oci8/test/test_oranumber.rb
Modified: branches/ruby-oci8-2.0/ChangeLog
===================================================================
--- branches/ruby-oci8-2.0/ChangeLog 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/ChangeLog 2010-12-04 12:49:51 UTC (rev 418)
@@ -1,3 +1,13 @@
+2010-12-04 KUBO Takehiro <kubo at jiubao.org>
+ * ext/oci8/object.c, ext/oci8/bind.c, lib/oci8/object.rb,
+ test/test_object.rb: fix a problem to assign NULL bind value
+ to object type bind variables.
+ (reported by Raimonds Simanovskis)
+ * ext/oci8/oraconf.rb: fix for 32-bit ruby compiled on
+ x86_64 linux. (reported by Jason Renschler)
+ * ext/oci8/oranumber_util.c, test/test_oranumber.rb:
+ suppress warning: unknown conversion type character 'h' in format
+
2010-09-18 KUBO Takehiro <kubo at jiubao.org>
* ext/oci8/win32.c: undefine boolean to pass compilation on
Cygwin. (reported by Don Hill).
Modified: branches/ruby-oci8-2.0/ext/oci8/bind.c
===================================================================
--- branches/ruby-oci8-2.0/ext/oci8/bind.c 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/ext/oci8/bind.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -315,10 +315,6 @@
if (NIL_P(obind->tdo)) {
if (obind->u.inds[idx] != 0)
return Qnil;
- } else {
- null_structp = &obind->u.null_structs[idx];
- if (*(OCIInd*)*null_structp != 0)
- return Qnil;
}
return obc->get(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp);
}
@@ -362,6 +358,7 @@
obind->u.inds[idx] = 0;
} else {
null_structp = &obind->u.null_structs[idx];
+ *(OCIInd*)obind->u.null_structs[idx] = 0;
}
obc->set(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp, val);
}
Modified: branches/ruby-oci8-2.0/ext/oci8/object.c
===================================================================
--- branches/ruby-oci8-2.0/ext/oci8/object.c 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/ext/oci8/object.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -260,6 +260,25 @@
return Qnil;
}
+static VALUE oci8_named_type_null_p(VALUE self)
+{
+ void *data;
+ OCIInd *ind;
+
+ oci8_named_type_check_offset(self, INT2FIX(0), INT2FIX(0), sizeof(void*), &data, &ind);
+ return *ind ? Qtrue : Qfalse;
+}
+
+static VALUE oci8_named_type_set_null(VALUE self, VALUE val)
+{
+ void *data;
+ OCIInd *ind;
+
+ oci8_named_type_check_offset(self, INT2FIX(0), INT2FIX(0), sizeof(void*), &data, &ind);
+ *ind = RTEST(val) ? -1 : 0;
+ return val;
+}
+
typedef struct {
VALUE self;
VALUE datatype;
@@ -607,6 +626,7 @@
oci_lc(OCIObjectNew(oci8_envhp, oci8_errhp, svcctx->base.hp.svc, tc, tdo->hp.tdo, NULL, OCI_DURATION_SESSION, TRUE, (dvoid**)obj->instancep));
oci_lc(OCIObjectGetInd(oci8_envhp, oci8_errhp, (dvoid*)*obj->instancep, (dvoid**)obj->null_structp));
+ *(OCIInd*)*obj->null_structp = -1;
} while (++idx < obind->maxar_sz);
}
@@ -666,6 +686,8 @@
rb_define_method(cOCI8NamedType, "tdo", oci8_named_type_tdo, 0);
rb_define_private_method(cOCI8NamedType, "get_attribute", oci8_named_type_get_attribute, 4);
rb_define_private_method(cOCI8NamedType, "set_attribute", oci8_named_type_set_attribute, 5);
+ rb_define_method(cOCI8NamedType, "null?", oci8_named_type_null_p, 0);
+ rb_define_method(cOCI8NamedType, "null=", oci8_named_type_set_null, 1);
/* OCI8::NamedCollection */
cOCI8NamedCollection = oci8_define_class_under(cOCI8, "NamedCollection", &oci8_named_type_class);
Modified: branches/ruby-oci8-2.0/ext/oci8/oraconf.rb
===================================================================
--- branches/ruby-oci8-2.0/ext/oci8/oraconf.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/ext/oci8/oraconf.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -418,9 +418,13 @@
end
end
when /x86_64-linux/
+ # RUBY_PLATFORM depends on the compilation environment.
+ # Even though it is x86_64-linux, the compiled ruby may
+ # be a 32-bit executable.
+ cpu = [nil].pack('p').size == 4 ? :i386 : :x86_64
check_proc = Proc.new do |file|
so = MiniSOReader.new(file)
- if so.cpu == :x86_64
+ if so.cpu == cpu
true
else
puts " skip: #{file} is for #{so.cpu} cpu."
Modified: branches/ruby-oci8-2.0/ext/oci8/oranumber_util.c
===================================================================
--- branches/ruby-oci8-2.0/ext/oci8/oranumber_util.c 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/ext/oci8/oranumber_util.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -345,7 +345,7 @@
len = 21;
}
for (idx = 1; idx <= len; idx++) {
- offset += sprintf(buf + offset, "%hhu,", on->OCINumberPart[idx]);
+ offset += sprintf(buf + offset, "%u,", (ub4)on->OCINumberPart[idx]);
}
buf[--offset] = '\0';
return offset;
Modified: branches/ruby-oci8-2.0/lib/oci8/object.rb
===================================================================
--- branches/ruby-oci8-2.0/lib/oci8/object.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/lib/oci8/object.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -497,6 +497,7 @@
class NamedType
def to_value
+ return nil if self.null?
obj = tdo.ruby_class.new
obj.instance_variable_set(:@attributes, self.attributes)
obj
@@ -513,20 +514,28 @@
end
def attributes=(obj)
- obj = obj.instance_variable_get(:@attributes) unless obj.is_a? Hash
- tdo.attributes.each do |attr|
- attr_val = obj[attr.name]
- attr_val = attr.set_proc.call(attr_val) if attr.set_proc
- set_attribute(attr.datatype, attr.typeinfo, attr.val_offset, attr.ind_offset, attr_val)
+ if obj.nil?
+ self.null = true
+ else
+ obj = obj.instance_variable_get(:@attributes) unless obj.is_a? Hash
+ tdo.attributes.each do |attr|
+ attr_val = obj[attr.name]
+ attr_val = attr.set_proc.call(attr_val) if attr.set_proc
+ set_attribute(attr.datatype, attr.typeinfo, attr.val_offset, attr.ind_offset, attr_val)
+ end
+ self.null = false
end
end
end
class NamedCollection
def to_value
- obj = tdo.ruby_class.new
- obj.instance_variable_set(:@attributes, self.attributes)
- obj
+ attr = self.attributes
+ if attr
+ obj = tdo.ruby_class.new
+ obj.instance_variable_set(:@attributes, attr)
+ obj
+ end
end
def attributes
Modified: branches/ruby-oci8-2.0/test/test_object.rb
===================================================================
--- branches/ruby-oci8-2.0/test/test_object.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/test/test_object.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -54,6 +54,7 @@
def next
@n += 1.2
+ @n = (@n * 10).round / 10.0
@int_val = @n.round
@flt_val = @n
@num_val = @n
@@ -101,7 +102,7 @@
@n <= 20
end
- def assert(val)
+ def should_be_equal(val)
if val.is_a? Array
int_val = val[0]
flt_val = val[1]
@@ -178,7 +179,7 @@
assert(expected_val.next)
assert_in_delta(expected_val.n, row[0], Delta)
- expected_val.assert(row[1])
+ expected_val.should_be_equal(row[1])
end
assert(!expected_val.next)
end
@@ -187,8 +188,7 @@
expected_val = ExpectedVal.new
@conn.exec("select * from rb_test_obj_tab2 order by int_val") do |row|
assert(expected_val.next)
-
- expected_val.assert(row)
+ expected_val.should_be_equal(row)
end
assert(!expected_val.next)
end
@@ -197,8 +197,7 @@
expected_val = ExpectedVal.new
@conn.exec("select value(p) from rb_test_obj_tab2 p order by int_val") do |row|
assert(expected_val.next)
-
- expected_val.assert(row[0])
+ expected_val.should_be_equal(row[0])
end
assert(!expected_val.next)
end
@@ -208,7 +207,7 @@
@conn.exec("select ref(p) from rb_test_obj_tab2 p order by int_val") do |row|
assert(expected_val.next)
- expected_val.assert(row[0])
+ expected_val.should_be_equal(row[0])
end
assert(!expected_val.next)
end
@@ -217,7 +216,7 @@
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
assert_nothing_raised do
obj.inspect
end
@@ -228,7 +227,7 @@
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.int_val, expected_val.flt_val, expected_val.str_val, expected_val.raw_val, expected_val.str_array_val, expected_val.raw_array_val, expected_val.num_array_val)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -242,11 +241,11 @@
assert_nil(obj.str_val)
end
- def test_class_func
+ def _test_class_func
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.class_func(expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -255,11 +254,11 @@
while expected_val.next
obj = RbTestObj.new(0)
RbTestObj.class_proc1(obj, expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
- def test_class_proc2
+ def _test_class_proc2
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new
@@ -281,7 +280,7 @@
obj.obj_array_val = expected_val.obj_array_val
obj.obj_ary_of_ary_val = expected_val.obj_ary_of_ary_val
RbTestObj.class_proc2(obj)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -293,7 +292,7 @@
end
end
- def test_plsql_member_func
+ def _test_plsql_member_func
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.n)
@@ -316,4 +315,28 @@
assert_equal(expected_val.int_val, obj.int_val)
end
end
+
+ def test_bind_nil
+ csr = @conn.parse(<<EOS)
+DECLARE
+ obj RB_TEST_OBJ := :in;
+BEGIN
+ IF obj IS NULL THEN
+ :out := 'IS NULL';
+ ELSE
+ :out := 'IS NOT NULL';
+ END IF;
+END;
+EOS
+ csr.bind_param(:in, nil, RbTestObj)
+ csr.bind_param(:out, nil, String, 11)
+ csr.exec
+ assert_equal('IS NULL', csr[:out])
+ csr[:in] = RbTestObj.new(@conn)
+ csr.exec
+ assert_equal('IS NOT NULL', csr[:out])
+ csr[:in] = nil
+ csr.exec
+ assert_equal('IS NULL', csr[:out])
+ end
end
Modified: branches/ruby-oci8-2.0/test/test_oranumber.rb
===================================================================
--- branches/ruby-oci8-2.0/test/test_oranumber.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ branches/ruby-oci8-2.0/test/test_oranumber.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -707,4 +707,20 @@
assert_equal(ary[1], OraNumber.new(ary[0]).to_s)
end
end
+
+ def test_dump
+ conn = get_oci8_connection
+ begin
+ cursor = conn.parse("select dump(to_number(:1)) from dual")
+ cursor.bind_param(1, nil, String, 40)
+ LARGE_RANGE_VALUES.each do |val|
+ cursor[1] = val
+ cursor.exec
+ assert_equal(cursor.fetch[0], OraNumber.new(val).dump)
+ end
+ ensure
+ conn.logoff
+ end
+ LARGE_RANGE_VALUES
+ end
end
Modified: trunk/ruby-oci8/ChangeLog
===================================================================
--- trunk/ruby-oci8/ChangeLog 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/ChangeLog 2010-12-04 12:49:51 UTC (rev 418)
@@ -1,4 +1,14 @@
2010-12-04 KUBO Takehiro <kubo at jiubao.org>
+ * ext/oci8/object.c, ext/oci8/bind.c, lib/oci8/object.rb,
+ test/test_object.rb: fix a problem to assign NULL bind value
+ to object type bind variables.
+ (reported by Raimonds Simanovskis)
+ * ext/oci8/oraconf.rb: fix for 32-bit ruby compiled on
+ x86_64 linux. (reported by Jason Renschler)
+ * ext/oci8/oranumber_util.c, test/test_oranumber.rb:
+ suppress warning: unknown conversion type character 'h' in format
+
+2010-12-04 KUBO Takehiro <kubo at jiubao.org>
* VERSION, ext/oci8/encoding.c, ext/oci8/ocihandle.c: change
the version number to 2.1.
Modified: trunk/ruby-oci8/ext/oci8/bind.c
===================================================================
--- trunk/ruby-oci8/ext/oci8/bind.c 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/ext/oci8/bind.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -352,10 +352,6 @@
if (NIL_P(obind->tdo)) {
if (obind->u.inds[idx] != 0)
return Qnil;
- } else {
- null_structp = &obind->u.null_structs[idx];
- if (*(OCIInd*)*null_structp != 0)
- return Qnil;
}
return obc->get(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp);
}
@@ -399,6 +395,7 @@
obind->u.inds[idx] = 0;
} else {
null_structp = &obind->u.null_structs[idx];
+ *(OCIInd*)obind->u.null_structs[idx] = 0;
}
obc->set(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp, val);
}
Modified: trunk/ruby-oci8/ext/oci8/object.c
===================================================================
--- trunk/ruby-oci8/ext/oci8/object.c 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/ext/oci8/object.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -260,6 +260,25 @@
return Qnil;
}
+static VALUE oci8_named_type_null_p(VALUE self)
+{
+ void *data;
+ OCIInd *ind;
+
+ oci8_named_type_check_offset(self, INT2FIX(0), INT2FIX(0), sizeof(void*), &data, &ind);
+ return *ind ? Qtrue : Qfalse;
+}
+
+static VALUE oci8_named_type_set_null(VALUE self, VALUE val)
+{
+ void *data;
+ OCIInd *ind;
+
+ oci8_named_type_check_offset(self, INT2FIX(0), INT2FIX(0), sizeof(void*), &data, &ind);
+ *ind = RTEST(val) ? -1 : 0;
+ return val;
+}
+
typedef struct {
VALUE self;
VALUE datatype;
@@ -607,6 +626,7 @@
oci_lc(OCIObjectNew(oci8_envhp, oci8_errhp, svcctx->base.hp.svc, tc, tdo->hp.tdo, NULL, OCI_DURATION_SESSION, TRUE, (dvoid**)obj->instancep));
oci_lc(OCIObjectGetInd(oci8_envhp, oci8_errhp, (dvoid*)*obj->instancep, (dvoid**)obj->null_structp));
+ *(OCIInd*)*obj->null_structp = -1;
} while (++idx < obind->maxar_sz);
}
@@ -682,6 +702,8 @@
rb_define_method(cOCI8NamedType, "tdo", oci8_named_type_tdo, 0);
rb_define_private_method(cOCI8NamedType, "get_attribute", oci8_named_type_get_attribute, 4);
rb_define_private_method(cOCI8NamedType, "set_attribute", oci8_named_type_set_attribute, 5);
+ rb_define_method(cOCI8NamedType, "null?", oci8_named_type_null_p, 0);
+ rb_define_method(cOCI8NamedType, "null=", oci8_named_type_set_null, 1);
/* OCI8::NamedCollection */
cOCI8NamedCollection = oci8_define_class_under(cOCI8, "NamedCollection", &oci8_named_type_class);
Modified: trunk/ruby-oci8/ext/oci8/oraconf.rb
===================================================================
--- trunk/ruby-oci8/ext/oci8/oraconf.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/ext/oci8/oraconf.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -418,9 +418,13 @@
end
end
when /x86_64-linux/
+ # RUBY_PLATFORM depends on the compilation environment.
+ # Even though it is x86_64-linux, the compiled ruby may
+ # be a 32-bit executable.
+ cpu = [nil].pack('p').size == 4 ? :i386 : :x86_64
check_proc = Proc.new do |file|
so = MiniSOReader.new(file)
- if so.cpu == :x86_64
+ if so.cpu == cpu
true
else
puts " skip: #{file} is for #{so.cpu} cpu."
Modified: trunk/ruby-oci8/ext/oci8/oranumber_util.c
===================================================================
--- trunk/ruby-oci8/ext/oci8/oranumber_util.c 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/ext/oci8/oranumber_util.c 2010-12-04 12:49:51 UTC (rev 418)
@@ -345,7 +345,7 @@
len = 21;
}
for (idx = 1; idx <= len; idx++) {
- offset += sprintf(buf + offset, "%hhu,", on->OCINumberPart[idx]);
+ offset += sprintf(buf + offset, "%u,", (ub4)on->OCINumberPart[idx]);
}
buf[--offset] = '\0';
return offset;
Modified: trunk/ruby-oci8/lib/oci8/object.rb
===================================================================
--- trunk/ruby-oci8/lib/oci8/object.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/lib/oci8/object.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -497,6 +497,7 @@
class NamedType
def to_value
+ return nil if self.null?
obj = tdo.ruby_class.new
obj.instance_variable_set(:@attributes, self.attributes)
obj
@@ -513,20 +514,28 @@
end
def attributes=(obj)
- obj = obj.instance_variable_get(:@attributes) unless obj.is_a? Hash
- tdo.attributes.each do |attr|
- attr_val = obj[attr.name]
- attr_val = attr.set_proc.call(attr_val) if attr.set_proc
- set_attribute(attr.datatype, attr.typeinfo, attr.val_offset, attr.ind_offset, attr_val)
+ if obj.nil?
+ self.null = true
+ else
+ obj = obj.instance_variable_get(:@attributes) unless obj.is_a? Hash
+ tdo.attributes.each do |attr|
+ attr_val = obj[attr.name]
+ attr_val = attr.set_proc.call(attr_val) if attr.set_proc
+ set_attribute(attr.datatype, attr.typeinfo, attr.val_offset, attr.ind_offset, attr_val)
+ end
+ self.null = false
end
end
end
class NamedCollection
def to_value
- obj = tdo.ruby_class.new
- obj.instance_variable_set(:@attributes, self.attributes)
- obj
+ attr = self.attributes
+ if attr
+ obj = tdo.ruby_class.new
+ obj.instance_variable_set(:@attributes, attr)
+ obj
+ end
end
def attributes
Modified: trunk/ruby-oci8/test/test_object.rb
===================================================================
--- trunk/ruby-oci8/test/test_object.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/test/test_object.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -54,6 +54,7 @@
def next
@n += 1.2
+ @n = (@n * 10).round / 10.0
@int_val = @n.round
@flt_val = @n
@num_val = @n
@@ -101,7 +102,7 @@
@n <= 20
end
- def assert(val)
+ def should_be_equal(val)
if val.is_a? Array
int_val = val[0]
flt_val = val[1]
@@ -178,7 +179,7 @@
assert(expected_val.next)
assert_in_delta(expected_val.n, row[0], Delta)
- expected_val.assert(row[1])
+ expected_val.should_be_equal(row[1])
end
assert(!expected_val.next)
end
@@ -187,8 +188,7 @@
expected_val = ExpectedVal.new
@conn.exec("select * from rb_test_obj_tab2 order by int_val") do |row|
assert(expected_val.next)
-
- expected_val.assert(row)
+ expected_val.should_be_equal(row)
end
assert(!expected_val.next)
end
@@ -197,8 +197,7 @@
expected_val = ExpectedVal.new
@conn.exec("select value(p) from rb_test_obj_tab2 p order by int_val") do |row|
assert(expected_val.next)
-
- expected_val.assert(row[0])
+ expected_val.should_be_equal(row[0])
end
assert(!expected_val.next)
end
@@ -208,7 +207,7 @@
@conn.exec("select ref(p) from rb_test_obj_tab2 p order by int_val") do |row|
assert(expected_val.next)
- expected_val.assert(row[0])
+ expected_val.should_be_equal(row[0])
end
assert(!expected_val.next)
end
@@ -217,7 +216,7 @@
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
assert_nothing_raised do
obj.inspect
end
@@ -228,7 +227,7 @@
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.int_val, expected_val.flt_val, expected_val.str_val, expected_val.raw_val, expected_val.str_array_val, expected_val.raw_array_val, expected_val.num_array_val)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -242,11 +241,11 @@
assert_nil(obj.str_val)
end
- def test_class_func
+ def _test_class_func
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.class_func(expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -255,11 +254,11 @@
while expected_val.next
obj = RbTestObj.new(0)
RbTestObj.class_proc1(obj, expected_val.n)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
- def test_class_proc2
+ def _test_class_proc2
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new
@@ -281,7 +280,7 @@
obj.obj_array_val = expected_val.obj_array_val
obj.obj_ary_of_ary_val = expected_val.obj_ary_of_ary_val
RbTestObj.class_proc2(obj)
- expected_val.assert(obj)
+ expected_val.should_be_equal(obj)
end
end
@@ -293,7 +292,7 @@
end
end
- def test_plsql_member_func
+ def _test_plsql_member_func
expected_val = ExpectedVal.new
while expected_val.next
obj = RbTestObj.new(expected_val.n)
@@ -316,4 +315,28 @@
assert_equal(expected_val.int_val, obj.int_val)
end
end
+
+ def test_bind_nil
+ csr = @conn.parse(<<EOS)
+DECLARE
+ obj RB_TEST_OBJ := :in;
+BEGIN
+ IF obj IS NULL THEN
+ :out := 'IS NULL';
+ ELSE
+ :out := 'IS NOT NULL';
+ END IF;
+END;
+EOS
+ csr.bind_param(:in, nil, RbTestObj)
+ csr.bind_param(:out, nil, String, 11)
+ csr.exec
+ assert_equal('IS NULL', csr[:out])
+ csr[:in] = RbTestObj.new(@conn)
+ csr.exec
+ assert_equal('IS NOT NULL', csr[:out])
+ csr[:in] = nil
+ csr.exec
+ assert_equal('IS NULL', csr[:out])
+ end
end
Modified: trunk/ruby-oci8/test/test_oranumber.rb
===================================================================
--- trunk/ruby-oci8/test/test_oranumber.rb 2010-12-04 11:17:27 UTC (rev 417)
+++ trunk/ruby-oci8/test/test_oranumber.rb 2010-12-04 12:49:51 UTC (rev 418)
@@ -707,4 +707,20 @@
assert_equal(ary[1], OraNumber.new(ary[0]).to_s)
end
end
+
+ def test_dump
+ conn = get_oci8_connection
+ begin
+ cursor = conn.parse("select dump(to_number(:1)) from dual")
+ cursor.bind_param(1, nil, String, 40)
+ LARGE_RANGE_VALUES.each do |val|
+ cursor[1] = val
+ cursor.exec
+ assert_equal(cursor.fetch[0], OraNumber.new(val).dump)
+ end
+ ensure
+ conn.logoff
+ end
+ LARGE_RANGE_VALUES
+ end
end
More information about the ruby-oci8-commit
mailing list