Sha256: adc0f122ffc27b5b09cb68b24fc1b31fa1b8ea57bf4c923915b2ded36774e8e2

Contents?: true

Size: 1.66 KB

Versions: 15

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

describe "OracleEnhancedAdapter quoting of NCHAR and NVARCHAR2 columns" do
  before(:all) do
    ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
    @conn = ActiveRecord::Base.connection
    @conn.execute <<~SQL
      CREATE TABLE test_items (
        id                  NUMBER(6,0) PRIMARY KEY,
        nchar_column        NCHAR(20),
        nvarchar2_column    NVARCHAR2(20),
        char_column         CHAR(20),
        varchar2_column     VARCHAR2(20)
      )
    SQL
    @conn.execute "CREATE SEQUENCE test_items_seq"
  end

  after(:all) do
    @conn.execute "DROP TABLE test_items"
    @conn.execute "DROP SEQUENCE test_items_seq"
  end

  before(:each) do
    class ::TestItem < ActiveRecord::Base
    end
  end

  after(:each) do
    Object.send(:remove_const, "TestItem")
    ActiveRecord::Base.clear_cache!
  end

  it "should quote with N prefix" do
    columns = @conn.columns("test_items")
    %w(nchar_column nvarchar2_column char_column varchar2_column).each do |col|
      column = columns.detect { |c| c.name == col }
      type = @conn.lookup_cast_type_from_column(column)
      value = type.serialize("abc")
      expect(@conn.quote(value)).to eq(column.sql_type[0, 1] == "N" ? "N'abc'" : "'abc'")
      type = @conn.lookup_cast_type_from_column(column)
      nilvalue = type.serialize(nil)
      expect(@conn.quote(nilvalue)).to eq("NULL")
    end
  end

  it "should create record" do
    nchar_data = "āčē"
    item = TestItem.create(
      nchar_column: nchar_data,
      nvarchar2_column: nchar_data
    ).reload
    expect(item.nchar_column).to eq(nchar_data)
    expect(item.nvarchar2_column).to eq(nchar_data)
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
activerecord-oracle_enhanced-adapter-7.1.0 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.1.0.beta2 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.1.0.beta1 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.0.3 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.0.2 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.6 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.0.1 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.0.0 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-7.0.0.rc1 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.5 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.4 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.2 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.1 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.0 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
activerecord-oracle_enhanced-adapter-6.1.0.rc1 spec/active_record/oracle_enhanced/type/national_character_string_spec.rb