class OCI8::Cursor
def make_bind_object(param, fetch_array_size = nil)
def make_bind_object(param, fetch_array_size = nil) case param when Hash key = param[:type] val = param[:value] max_array_size = param[:max_array_size] if key.nil? if val.nil? raise "bind type is not given." elsif val.is_a? OCI8::Object::Base key = :named_type param = @con.get_tdo_by_class(val.class) else key = val.class end elsif key.class == Class && key < OCI8::Object::Base param = @con.get_tdo_by_class(key) key = :named_type elsif key == :named_type param = @con.get_tdo_by_typename(param[:length]) end when OCI8::Metadata::Base key = param.data_type case key when :named_type if param.type_name == 'XMLTYPE' key = :xmltype else param = @con.get_tdo_by_metadata(param.type_metadata) end end else raise "unknown param #{param.intern}" end bindclass = OCI8::BindType::Mapping[key] if bindclass.nil? and key.is_a? Class bindclass = OCI8::BindType::Mapping[key.to_s] OCI8::BindType::Mapping[key] = bindclass if bindclass end raise "unsupported datatype: #{key}" if bindclass.nil? bindclass.create(@con, val, param, fetch_array_size || max_array_size) end