class OCI8::BindType::String
def self.create(con, val, param, max_array_size)
def self.create(con, val, param, max_array_size) case param when Hash param[:length_semantics] = OCI8::properties[:length_semantics] unless param.has_key? :length_semantics unless param[:length] if val.respond_to? :to_str val = val.to_str if param[:length_semantics] == :char # character semantics param[:length] = val.size else # byte semantics if OCI8.encoding != val.encoding # If the string encoding is different with NLS_LANG character set, # convert it to get the length. val = val.encode(OCI8.encoding) end param[:length] = val.bytesize end else param[:length] = @@minimum_bind_length end end # use the default value when :nchar is not set explicitly. param[:nchar] = OCI8.properties[:bind_string_as_nchar] unless param.has_key?(:nchar) when OCI8::Metadata::Base case param.data_type when :char, :varchar2 length_semantics = OCI8.properties[:length_semantics] if length_semantics == :char length = param.char_size else length = param.data_size * OCI8.nls_ratio end param = { :length => length, :length_semantics => length_semantics, :nchar => (param.charset_form == :nchar), } when :raw # HEX needs twice space. param = {:length => param.data_size * 2} else param = {:length => @@minimum_bind_length} end end self.new(con, val, param, max_array_size) end
def self.minimum_bind_length
def self.minimum_bind_length @@minimum_bind_length end
def self.minimum_bind_length=(val)
def self.minimum_bind_length=(val) @@minimum_bind_length = val end