ruby-plsql 0.5.3 → 0.8.0
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.
- checksums.yaml +5 -5
- data/.github/stale.yml +37 -0
- data/.github/workflows/rubocop.yml +37 -0
- data/.github/workflows/test.yml +69 -0
- data/.rubocop.yml +147 -0
- data/.travis.yml +88 -0
- data/.travis/oracle/download.sh +15 -0
- data/.travis/oracle/install.sh +32 -0
- data/.travis/setup_accounts.sh +9 -0
- data/Gemfile +17 -9
- data/History.txt +76 -0
- data/README.md +29 -6
- data/Rakefile +31 -26
- data/VERSION +1 -1
- data/Vagrantfile +4 -4
- data/ci/network/admin/tnsnames.ora +7 -0
- data/ci/setup_accounts.sh +9 -0
- data/gemfiles/Gemfile.activerecord-5.0 +21 -0
- data/gemfiles/Gemfile.activerecord-5.1 +21 -0
- data/gemfiles/Gemfile.activerecord-5.2 +21 -0
- data/gemfiles/Gemfile.activerecord-6.0 +21 -0
- data/gemfiles/Gemfile.activerecord-6.1 +21 -0
- data/gemfiles/Gemfile.activerecord-main +21 -0
- data/lib/plsql/connection.rb +19 -22
- data/lib/plsql/helpers.rb +1 -3
- data/lib/plsql/jdbc_connection.rb +70 -68
- data/lib/plsql/oci8_patches.rb +2 -2
- data/lib/plsql/oci_connection.rb +62 -77
- data/lib/plsql/package.rb +61 -46
- data/lib/plsql/procedure.rb +358 -78
- data/lib/plsql/procedure_call.rb +508 -463
- data/lib/plsql/schema.rb +96 -101
- data/lib/plsql/sequence.rb +10 -13
- data/lib/plsql/sql_statements.rb +9 -11
- data/lib/plsql/table.rb +60 -63
- data/lib/plsql/type.rb +71 -76
- data/lib/plsql/variable.rb +90 -94
- data/lib/plsql/version.rb +1 -1
- data/lib/plsql/view.rb +16 -19
- data/ruby-plsql.gemspec +55 -35
- data/spec/plsql/connection_spec.rb +72 -66
- data/spec/plsql/package_spec.rb +63 -14
- data/spec/plsql/procedure_spec.rb +603 -261
- data/spec/plsql/schema_spec.rb +47 -23
- data/spec/plsql/sequence_spec.rb +2 -2
- data/spec/plsql/sql_statements_spec.rb +6 -6
- data/spec/plsql/table_spec.rb +84 -79
- data/spec/plsql/type_spec.rb +24 -30
- data/spec/plsql/variable_spec.rb +80 -88
- data/spec/plsql/version_spec.rb +4 -4
- data/spec/plsql/view_spec.rb +42 -42
- data/spec/spec_helper.rb +38 -35
- data/spec/support/create_arunit_user.sql +2 -0
- data/spec/support/custom_config.rb.sample +14 -0
- data/spec/support/test_db.rb +12 -13
- data/spec/support/unlock_and_setup_hr_user.sql +2 -0
- metadata +111 -34
    
        data/spec/plsql/type_spec.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe "Type" do
         | 
| 4 4 | 
             
              before(:all) do
         | 
| @@ -80,7 +80,7 @@ describe "Type" do | |
| 80 80 | 
             
                  CREATE OR REPLACE TYPE t_employee AS OBJECT (
         | 
| 81 81 | 
             
                    employee_id   NUMBER(15),
         | 
| 82 82 | 
             
                    first_name    VARCHAR2(50),
         | 
| 83 | 
            -
                    last_name      | 
| 83 | 
            +
                    last_name     VARCHAR(50),
         | 
| 84 84 | 
             
                    hire_date     DATE,
         | 
| 85 85 | 
             
                    address       t_address,
         | 
| 86 86 | 
             
                    phones        t_phones
         | 
| @@ -167,28 +167,22 @@ describe "Type" do | |
| 167 167 | 
             
                end
         | 
| 168 168 |  | 
| 169 169 | 
             
                it "should get attributes metadata" do
         | 
| 170 | 
            -
                  expect(plsql.t_employee.attributes).to eq( | 
| 171 | 
            -
                    : | 
| 172 | 
            -
             | 
| 173 | 
            -
                    : | 
| 174 | 
            -
             | 
| 175 | 
            -
                    : | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
                      {:position=>4, :data_type=>"DATE", :data_length=>nil, :data_precision=>nil, :data_scale=>nil, :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil},
         | 
| 179 | 
            -
                    :address => 
         | 
| 180 | 
            -
                      {:position=>5, :data_type=>"OBJECT", :data_length=>nil, :data_precision=>nil, :data_scale=>nil, :type_owner=>"HR", :type_name=>"T_ADDRESS", :sql_type_name=>"HR.T_ADDRESS"},
         | 
| 181 | 
            -
                    :phones => 
         | 
| 182 | 
            -
                      {:position=>6, :data_type=>"TABLE", :data_length=>nil, :data_precision=>nil, :data_scale=>nil, :type_owner=>"HR", :type_name=>"T_PHONES", :sql_type_name=>"HR.T_PHONES"}
         | 
| 183 | 
            -
                  })
         | 
| 170 | 
            +
                  expect(plsql.t_employee.attributes).to eq(
         | 
| 171 | 
            +
                    employee_id:           { position: 1, data_type: "NUMBER", data_length: nil, data_precision: 15, data_scale: 0, type_owner: nil, type_name: nil, sql_type_name: nil },
         | 
| 172 | 
            +
                    first_name:           { position: 2, data_type: "VARCHAR2", data_length: 50, data_precision: nil, data_scale: nil, type_owner: nil, type_name: nil, sql_type_name: nil },
         | 
| 173 | 
            +
                    last_name:           { position: 3, data_type: "VARCHAR2", data_length: 50, data_precision: nil, data_scale: nil, type_owner: nil, type_name: nil, sql_type_name: nil },
         | 
| 174 | 
            +
                    hire_date:           { position: 4, data_type: "DATE", data_length: nil, data_precision: nil, data_scale: nil, type_owner: nil, type_name: nil, sql_type_name: nil },
         | 
| 175 | 
            +
                    address:           { position: 5, data_type: "OBJECT", data_length: nil, data_precision: nil, data_scale: nil, type_owner: "HR", type_name: "T_ADDRESS", sql_type_name: "HR.T_ADDRESS" },
         | 
| 176 | 
            +
                    phones:           { position: 6, data_type: "TABLE", data_length: nil, data_precision: nil, data_scale: nil, type_owner: "HR", type_name: "T_PHONES", sql_type_name: "HR.T_PHONES" }
         | 
| 177 | 
            +
                  )
         | 
| 184 178 | 
             
                end
         | 
| 185 179 |  | 
| 186 180 | 
             
              end
         | 
| 187 181 |  | 
| 188 182 | 
             
              describe "object instance" do
         | 
| 189 183 | 
             
                before(:all) do
         | 
| 190 | 
            -
                  @phone_attributes = {: | 
| 191 | 
            -
                  @address_attributes = {: | 
| 184 | 
            +
                  @phone_attributes = { type: "mobile", phone_number: "123456" }
         | 
| 185 | 
            +
                  @address_attributes = { street: "Street", city: "City", country: "Country" }
         | 
| 192 186 | 
             
                  @full_address = "#{@address_attributes[:street]}, #{@address_attributes[:city]}, #{@address_attributes[:country]}"
         | 
| 193 187 | 
             
                end
         | 
| 194 188 |  | 
| @@ -206,7 +200,7 @@ describe "Type" do | |
| 206 200 |  | 
| 207 201 | 
             
                it "should get new object instance using custom constructor" do
         | 
| 208 202 | 
             
                  expect(plsql.t_address(@full_address)).to eq(@address_attributes)
         | 
| 209 | 
            -
                  expect(plsql.t_address(: | 
| 203 | 
            +
                  expect(plsql.t_address(p_full_address: @full_address)).to eq(@address_attributes)
         | 
| 210 204 | 
             
                end
         | 
| 211 205 |  | 
| 212 206 | 
             
                it "should get new object instance using default constructor when custom constructor exists" do
         | 
| @@ -230,7 +224,7 @@ describe "Type" do | |
| 230 224 |  | 
| 231 225 | 
             
              describe "member procedures" do
         | 
| 232 226 | 
             
                before(:all) do
         | 
| 233 | 
            -
                  @address_attributes = {: | 
| 227 | 
            +
                  @address_attributes = { street: "Street", city: "City", country: "Country" }
         | 
| 234 228 | 
             
                  @full_address = "#{@address_attributes[:street]}, #{@address_attributes[:city]}, #{@address_attributes[:country]}"
         | 
| 235 229 | 
             
                end
         | 
| 236 230 |  | 
| @@ -239,36 +233,36 @@ describe "Type" do | |
| 239 233 | 
             
                end
         | 
| 240 234 |  | 
| 241 235 | 
             
                it "should call object instance member function with parameters" do
         | 
| 242 | 
            -
                  expect(plsql.t_address(@address_attributes).display_address( | 
| 236 | 
            +
                  expect(plsql.t_address(@address_attributes).display_address(",")).to eq(@full_address)
         | 
| 243 237 | 
             
                end
         | 
| 244 238 |  | 
| 245 239 | 
             
                it "should call object instance member function with named parameters" do
         | 
| 246 | 
            -
                  expect(plsql.t_address(@address_attributes).display_address(: | 
| 240 | 
            +
                  expect(plsql.t_address(@address_attributes).display_address(p_separator: ",")).to eq(@full_address)
         | 
| 247 241 | 
             
                end
         | 
| 248 242 |  | 
| 249 243 | 
             
                it "should call object overloaded instance member function" do
         | 
| 250 244 | 
             
                  expect(plsql.t_address(@address_attributes).display_address(true)).to eq(@full_address.upcase)
         | 
| 251 | 
            -
                  expect(plsql.t_address(@address_attributes).display_address(true,  | 
| 245 | 
            +
                  expect(plsql.t_address(@address_attributes).display_address(true, ",")).to eq(@full_address.upcase)
         | 
| 252 246 | 
             
                end
         | 
| 253 247 |  | 
| 254 248 | 
             
                it "should call object instance member function with explicit first SELF parameter" do
         | 
| 255 | 
            -
                  expect(plsql.t_address.display_address(@address_attributes,  | 
| 249 | 
            +
                  expect(plsql.t_address.display_address(@address_attributes, ",")).to eq(@full_address)
         | 
| 256 250 | 
             
                end
         | 
| 257 251 |  | 
| 258 252 | 
             
                it "should call object instance member function with explicit named SELF parameter" do
         | 
| 259 | 
            -
                  expect(plsql.t_address.display_address(: | 
| 253 | 
            +
                  expect(plsql.t_address.display_address(self: @address_attributes, p_separator: ",")).to eq(@full_address)
         | 
| 260 254 | 
             
                end
         | 
| 261 255 |  | 
| 262 256 | 
             
                it "should call object instance member procedure" do
         | 
| 263 257 | 
             
                  other_country = "Other"
         | 
| 264 | 
            -
                  expect(plsql.t_address(@address_attributes).set_country(other_country)).to eq(@address_attributes.merge(: | 
| 258 | 
            +
                  expect(plsql.t_address(@address_attributes).set_country(other_country)).to eq(@address_attributes.merge(country: other_country))
         | 
| 265 259 | 
             
                end
         | 
| 266 260 |  | 
| 267 261 | 
             
                it "should call object instance member procedure with output parameters" do
         | 
| 268 262 | 
             
                  other_country = "Other"
         | 
| 269 263 | 
             
                  expect(plsql.t_address(@address_attributes).set_country2(other_country)).to eq(
         | 
| 270 | 
            -
                    [@address_attributes.merge(: | 
| 271 | 
            -
                    {: | 
| 264 | 
            +
                    [@address_attributes.merge(country: other_country),
         | 
| 265 | 
            +
                    { x_display_address: "#{@address_attributes[:street]}, #{@address_attributes[:city]}, #{other_country}" }]
         | 
| 272 266 | 
             
                  )
         | 
| 273 267 | 
             
                end
         | 
| 274 268 |  | 
| @@ -282,7 +276,7 @@ describe "Type" do | |
| 282 276 |  | 
| 283 277 | 
             
              describe "static procedures" do
         | 
| 284 278 | 
             
                before(:all) do
         | 
| 285 | 
            -
                  @address_attributes = {: | 
| 279 | 
            +
                  @address_attributes = { street: "Street", city: "City", country: "Country" }
         | 
| 286 280 | 
             
                  @full_address = "#{@address_attributes[:street]}, #{@address_attributes[:city]}, #{@address_attributes[:country]}"
         | 
| 287 281 | 
             
                end
         | 
| 288 282 |  | 
| @@ -291,7 +285,7 @@ describe "Type" do | |
| 291 285 | 
             
                end
         | 
| 292 286 |  | 
| 293 287 | 
             
                it "should call object type static function with named parameters" do
         | 
| 294 | 
            -
                  expect(plsql.t_address.create_address(: | 
| 288 | 
            +
                  expect(plsql.t_address.create_address(p_full_address: @full_address)).to eq(@address_attributes)
         | 
| 295 289 | 
             
                end
         | 
| 296 290 |  | 
| 297 291 | 
             
                it "should raise error if invalid static procedure is called" do
         | 
    
        data/spec/plsql/variable_spec.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 5 | 
             
            describe "Package variables /" do
         | 
| 6 6 |  | 
| @@ -16,6 +16,7 @@ describe "Package variables /" do | |
| 16 16 | 
             
                      varchar2_default3 varchar2(50) NOT NULL := 'default';
         | 
| 17 17 | 
             
                      varchar2_3_char VARCHAR2(3 CHAR);
         | 
| 18 18 | 
             
                      varchar2_3_byte VARCHAR2(3 BYTE);
         | 
| 19 | 
            +
                      varchar_variable VARCHAR(50);
         | 
| 19 20 | 
             
                      char_variable char(10) ;
         | 
| 20 21 | 
             
                      nvarchar2_variable NVARCHAR2(50);
         | 
| 21 22 | 
             
                      nchar_variable NCHAR(10);
         | 
| @@ -33,20 +34,25 @@ describe "Package variables /" do | |
| 33 34 | 
             
                  plsql.logoff
         | 
| 34 35 | 
             
                end
         | 
| 35 36 |  | 
| 37 | 
            +
                it "should set and get VARCHAR variable" do
         | 
| 38 | 
            +
                  plsql.test_package.varchar_variable = "abc"
         | 
| 39 | 
            +
                  expect(plsql.test_package.varchar_variable).to eq("abc")
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 36 42 | 
             
                it "should set and get VARCHAR2 variable" do
         | 
| 37 | 
            -
                  plsql.test_package.varchar2_variable =  | 
| 38 | 
            -
                  expect(plsql.test_package.varchar2_variable).to eq( | 
| 43 | 
            +
                  plsql.test_package.varchar2_variable = "abc"
         | 
| 44 | 
            +
                  expect(plsql.test_package.varchar2_variable).to eq("abc")
         | 
| 39 45 | 
             
                end
         | 
| 40 46 |  | 
| 41 47 | 
             
                it "should set and get VARCHAR2 variable with comment" do
         | 
| 42 | 
            -
                  plsql.test_package.varchar2_variable2 =  | 
| 43 | 
            -
                  expect(plsql.test_package.varchar2_variable2).to eq( | 
| 48 | 
            +
                  plsql.test_package.varchar2_variable2 = "abc"
         | 
| 49 | 
            +
                  expect(plsql.test_package.varchar2_variable2).to eq("abc")
         | 
| 44 50 | 
             
                end
         | 
| 45 51 |  | 
| 46 52 | 
             
                it "should get VARCHAR2 variable default value" do
         | 
| 47 | 
            -
                  expect(plsql.test_package.varchar2_default).to eq( | 
| 48 | 
            -
                  expect(plsql.test_package.varchar2_default2).to eq( | 
| 49 | 
            -
                  expect(plsql.test_package.varchar2_default3).to eq( | 
| 53 | 
            +
                  expect(plsql.test_package.varchar2_default).to eq("default")
         | 
| 54 | 
            +
                  expect(plsql.test_package.varchar2_default2).to eq("default")
         | 
| 55 | 
            +
                  expect(plsql.test_package.varchar2_default3).to eq("default")
         | 
| 50 56 | 
             
                end
         | 
| 51 57 |  | 
| 52 58 | 
             
                describe "with character or byte limit" do
         | 
| @@ -64,56 +70,46 @@ describe "Package variables /" do | |
| 64 70 | 
             
                  end
         | 
| 65 71 |  | 
| 66 72 | 
             
                  it "should set and get VARCHAR2(n CHAR) variable" do
         | 
| 67 | 
            -
                    plsql.test_package.varchar2_3_char =  | 
| 68 | 
            -
                    expect(plsql.test_package.varchar2_3_char).to eq( | 
| 69 | 
            -
                    expect { plsql.test_package.varchar2_3_char =  | 
| 73 | 
            +
                    plsql.test_package.varchar2_3_char = "āčē"
         | 
| 74 | 
            +
                    expect(plsql.test_package.varchar2_3_char).to eq("āčē")
         | 
| 75 | 
            +
                    expect { plsql.test_package.varchar2_3_char = "aceg" }.to raise_error(/buffer too small/)
         | 
| 70 76 | 
             
                  end
         | 
| 71 77 |  | 
| 72 78 | 
             
                  it "should set and get VARCHAR2(n BYTE) variable" do
         | 
| 73 | 
            -
                    plsql.test_package.varchar2_3_byte =  | 
| 74 | 
            -
                    expect(plsql.test_package.varchar2_3_byte).to eq( | 
| 75 | 
            -
                    expect { plsql.test_package.varchar2_3_byte =  | 
| 76 | 
            -
                    expect { plsql.test_package.varchar2_3_byte =  | 
| 79 | 
            +
                    plsql.test_package.varchar2_3_byte = "ace"
         | 
| 80 | 
            +
                    expect(plsql.test_package.varchar2_3_byte).to eq("ace")
         | 
| 81 | 
            +
                    expect { plsql.test_package.varchar2_3_byte = "āce" }.to raise_error(/buffer too small/)
         | 
| 82 | 
            +
                    expect { plsql.test_package.varchar2_3_byte = "aceg" }.to raise_error(/buffer too small/)
         | 
| 77 83 | 
             
                  end
         | 
| 78 84 |  | 
| 79 85 | 
             
                end
         | 
| 80 86 |  | 
| 81 87 | 
             
                it "should set and get CHAR variable" do
         | 
| 82 | 
            -
                  plsql.test_package.char_variable =  | 
| 83 | 
            -
                  expect(plsql.test_package.char_variable).to eq( | 
| 88 | 
            +
                  plsql.test_package.char_variable = "abc"
         | 
| 89 | 
            +
                  expect(plsql.test_package.char_variable).to eq("abc" + " " * 7)
         | 
| 84 90 | 
             
                end
         | 
| 85 91 |  | 
| 86 92 | 
             
                it "should set and get NVARCHAR2 variable" do
         | 
| 87 | 
            -
                  plsql.test_package.nvarchar2_variable =  | 
| 88 | 
            -
                  expect(plsql.test_package.nvarchar2_variable).to eq( | 
| 93 | 
            +
                  plsql.test_package.nvarchar2_variable = "abc"
         | 
| 94 | 
            +
                  expect(plsql.test_package.nvarchar2_variable).to eq("abc")
         | 
| 89 95 | 
             
                end
         | 
| 90 96 |  | 
| 91 97 | 
             
                it "should set and get NCHAR variable" do
         | 
| 92 | 
            -
                  plsql.test_package.nchar_variable =  | 
| 93 | 
            -
                  expect(plsql.test_package.nchar_variable).to eq( | 
| 98 | 
            +
                  plsql.test_package.nchar_variable = "abc"
         | 
| 99 | 
            +
                  expect(plsql.test_package.nchar_variable).to eq("abc" + " " * 7)
         | 
| 94 100 | 
             
                end
         | 
| 95 101 |  | 
| 96 102 | 
             
              end
         | 
| 97 103 |  | 
| 98 | 
            -
               | 
| 104 | 
            +
              shared_examples "Numeric" do |ora_data_type, default, class_, given, expected|
         | 
| 105 | 
            +
             | 
| 99 106 | 
             
                before(:all) do
         | 
| 100 107 | 
             
                  plsql.connect! CONNECTION_PARAMS
         | 
| 101 108 | 
             
                  plsql.execute <<-SQL
         | 
| 102 109 | 
             
                    CREATE OR REPLACE PACKAGE test_package IS
         | 
| 103 | 
            -
                       | 
| 104 | 
            -
                      integer10_variable NUMBER(10);
         | 
| 105 | 
            -
                      integer10_default NUMBER(10) := 1;
         | 
| 106 | 
            -
                      number_variable NUMBER;
         | 
| 107 | 
            -
                      number_with_scale NUMBER(15,2);
         | 
| 108 | 
            -
                      pls_int_variable PLS_INTEGER;
         | 
| 109 | 
            -
                      bin_int_variable BINARY_INTEGER;
         | 
| 110 | 
            +
                      numeric_var #{ora_data_type}#{default ? ':= ' + default.to_s : nil};
         | 
| 110 111 | 
             
                    END;
         | 
| 111 112 | 
             
                  SQL
         | 
| 112 | 
            -
                  plsql.execute <<-SQL
         | 
| 113 | 
            -
                    CREATE OR REPLACE PACKAGE BODY test_package IS
         | 
| 114 | 
            -
                    END;
         | 
| 115 | 
            -
                  SQL
         | 
| 116 | 
            -
             | 
| 117 113 | 
             
                end
         | 
| 118 114 |  | 
| 119 115 | 
             
                after(:all) do
         | 
| @@ -121,45 +117,41 @@ describe "Package variables /" do | |
| 121 117 | 
             
                  plsql.logoff
         | 
| 122 118 | 
             
                end
         | 
| 123 119 |  | 
| 124 | 
            -
                it "should  | 
| 125 | 
            -
                  plsql.test_package. | 
| 126 | 
            -
             | 
| 127 | 
            -
                  expect(plsql.test_package.integer_variable).to eq(1)
         | 
| 128 | 
            -
                end
         | 
| 120 | 
            +
                it "should get #{ora_data_type} variable default value" do
         | 
| 121 | 
            +
                  expect(plsql.test_package.numeric_var).to eq(default)
         | 
| 122 | 
            +
                end if default
         | 
| 129 123 |  | 
| 130 | 
            -
                it "should  | 
| 131 | 
            -
                  plsql.test_package. | 
| 132 | 
            -
                  expect(plsql.test_package. | 
| 133 | 
            -
                  expect(plsql.test_package.integer10_variable).to eq(1)
         | 
| 124 | 
            +
                it "should get #{ora_data_type} variable type mapped to #{class_.to_s}" do
         | 
| 125 | 
            +
                  plsql.test_package.numeric_var = given
         | 
| 126 | 
            +
                  expect(plsql.test_package.numeric_var).to be_a class_
         | 
| 134 127 | 
             
                end
         | 
| 135 128 |  | 
| 136 | 
            -
                it "should get  | 
| 137 | 
            -
                   | 
| 129 | 
            +
                it "should set and get #{ora_data_type} variable" do
         | 
| 130 | 
            +
                  plsql.test_package.numeric_var = given
         | 
| 131 | 
            +
                  expect(plsql.test_package.numeric_var).to eq(expected)
         | 
| 138 132 | 
             
                end
         | 
| 139 133 |  | 
| 140 | 
            -
             | 
| 141 | 
            -
                  plsql.test_package.pls_int_variable = 1
         | 
| 142 | 
            -
                  expect(plsql.test_package.pls_int_variable).to be_a Fixnum
         | 
| 143 | 
            -
                  expect(plsql.test_package.pls_int_variable).to eq(1)
         | 
| 144 | 
            -
                end
         | 
| 145 | 
            -
             | 
| 146 | 
            -
                it "should set and get BINARY_INTEGER variable" do
         | 
| 147 | 
            -
                  plsql.test_package.bin_int_variable = 1
         | 
| 148 | 
            -
                  expect(plsql.test_package.bin_int_variable).to be_a Fixnum
         | 
| 149 | 
            -
                  expect(plsql.test_package.bin_int_variable).to eq(1)
         | 
| 150 | 
            -
                end
         | 
| 151 | 
            -
             | 
| 152 | 
            -
                it "should set and get NUMBER variable" do
         | 
| 153 | 
            -
                  plsql.test_package.number_variable = 123.456
         | 
| 154 | 
            -
                  expect(plsql.test_package.number_variable).to be_a BigDecimal
         | 
| 155 | 
            -
                  expect(plsql.test_package.number_variable).to eq(123.456)
         | 
| 156 | 
            -
                end
         | 
| 134 | 
            +
              end
         | 
| 157 135 |  | 
| 158 | 
            -
             | 
| 159 | 
            -
                   | 
| 160 | 
            -
                   | 
| 136 | 
            +
              [
         | 
| 137 | 
            +
                  { ora_data_type: "INTEGER",        default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 138 | 
            +
                  { ora_data_type: "NUMBER(10)",     default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 139 | 
            +
                  { ora_data_type: "NUMBER(10)",     default: 5,   class: Integer, given: 1, expected: 1 },
         | 
| 140 | 
            +
                  { ora_data_type: "NUMBER",         default: nil, class: BigDecimal, given: 123.456, expected: 123.456 },
         | 
| 141 | 
            +
                  { ora_data_type: "NUMBER(15,2)",   default: nil, class: BigDecimal, given: 123.456, expected: 123.46 },
         | 
| 142 | 
            +
                  { ora_data_type: "PLS_INTEGER",    default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 143 | 
            +
                  { ora_data_type: "BINARY_INTEGER", default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 144 | 
            +
                  { ora_data_type: "SIMPLE_INTEGER", default: 10,  class: Integer, given: 1, expected: 1 },
         | 
| 145 | 
            +
                  { ora_data_type: "NATURAL",        default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 146 | 
            +
                  { ora_data_type: "NATURALN",       default: 0,   class: Integer, given: 1, expected: 1 },
         | 
| 147 | 
            +
                  { ora_data_type: "POSITIVE",       default: nil, class: Integer, given: 1, expected: 1 },
         | 
| 148 | 
            +
                  { ora_data_type: "POSITIVEN",      default: 5,   class: Integer, given: 1, expected: 1 },
         | 
| 149 | 
            +
                  { ora_data_type: "SIGNTYPE",       default: -1,  class: Integer, given: 1, expected: 1 },
         | 
| 150 | 
            +
              ].each do |row|
         | 
| 151 | 
            +
                ora_data_type, default, class_, given, expected = row.values
         | 
| 152 | 
            +
                describe ora_data_type + (default ? " with default" : "") do
         | 
| 153 | 
            +
                  include_examples "Numeric", ora_data_type, default, class_, given, expected
         | 
| 161 154 | 
             
                end
         | 
| 162 | 
            -
             | 
| 163 155 | 
             
              end
         | 
| 164 156 |  | 
| 165 157 | 
             
              describe "Date and Time" do
         | 
| @@ -178,8 +170,8 @@ describe "Package variables /" do | |
| 178 170 | 
             
                    CREATE OR REPLACE PACKAGE BODY test_package IS
         | 
| 179 171 | 
             
                    END;
         | 
| 180 172 | 
             
                  SQL
         | 
| 181 | 
            -
                  @date = Time.local(2009,12,21)
         | 
| 182 | 
            -
                  @timestamp = Time.local(2009,12,21,14,10,30,11)
         | 
| 173 | 
            +
                  @date = Time.local(2009, 12, 21)
         | 
| 174 | 
            +
                  @timestamp = Time.local(2009, 12, 21, 14, 10, 30, 11)
         | 
| 183 175 | 
             
                end
         | 
| 184 176 |  | 
| 185 177 | 
             
                after(:all) do
         | 
| @@ -241,17 +233,17 @@ describe "Package variables /" do | |
| 241 233 | 
             
                end
         | 
| 242 234 |  | 
| 243 235 | 
             
                it "should set and get CLOB variable" do
         | 
| 244 | 
            -
                  plsql.test_package.clob_variable =  | 
| 245 | 
            -
                  expect(plsql.test_package.clob_variable).to eq( | 
| 236 | 
            +
                  plsql.test_package.clob_variable = "abc"
         | 
| 237 | 
            +
                  expect(plsql.test_package.clob_variable).to eq("abc")
         | 
| 246 238 | 
             
                end
         | 
| 247 239 |  | 
| 248 240 | 
             
                it "should get CLOB variable default value" do
         | 
| 249 | 
            -
                  expect(plsql.test_package.clob_default).to eq( | 
| 241 | 
            +
                  expect(plsql.test_package.clob_default).to eq("default")
         | 
| 250 242 | 
             
                end
         | 
| 251 243 |  | 
| 252 244 | 
             
                it "should set and get NCLOB variable" do
         | 
| 253 | 
            -
                  plsql.test_package.nclob_variable =  | 
| 254 | 
            -
                  expect(plsql.test_package.nclob_variable).to eq( | 
| 245 | 
            +
                  plsql.test_package.nclob_variable = "abc"
         | 
| 246 | 
            +
                  expect(plsql.test_package.nclob_variable).to eq("abc")
         | 
| 255 247 | 
             
                end
         | 
| 256 248 |  | 
| 257 249 | 
             
                it "should set and get BLOB variable" do
         | 
| @@ -299,12 +291,12 @@ describe "Package variables /" do | |
| 299 291 | 
             
                end
         | 
| 300 292 |  | 
| 301 293 | 
             
                it "should set and get VARCHAR2 variable" do
         | 
| 302 | 
            -
                  plsql.test_package.first_name =  | 
| 303 | 
            -
                  expect(plsql.test_package.first_name).to eq( | 
| 294 | 
            +
                  plsql.test_package.first_name = "First"
         | 
| 295 | 
            +
                  expect(plsql.test_package.first_name).to eq("First")
         | 
| 304 296 | 
             
                end
         | 
| 305 297 |  | 
| 306 298 | 
             
                it "should set and get DATE variable" do
         | 
| 307 | 
            -
                  today = Time.local(2009,12,22)
         | 
| 299 | 
            +
                  today = Time.local(2009, 12, 22)
         | 
| 308 300 | 
             
                  plsql.test_package.hire_date = today
         | 
| 309 301 | 
             
                  expect(plsql.test_package.hire_date).to eq(today)
         | 
| 310 302 | 
             
                end
         | 
| @@ -337,7 +329,7 @@ describe "Package variables /" do | |
| 337 329 | 
             
                end
         | 
| 338 330 |  | 
| 339 331 | 
             
                it "should get VARCHAR2 constant" do
         | 
| 340 | 
            -
                  expect(plsql.test_package.string_constant).to eq( | 
| 332 | 
            +
                  expect(plsql.test_package.string_constant).to eq("constant")
         | 
| 341 333 | 
             
                end
         | 
| 342 334 |  | 
| 343 335 | 
             
                it "should raise error when trying to set constant" do
         | 
| @@ -379,14 +371,14 @@ describe "Package variables /" do | |
| 379 371 | 
             
                      phones        t_phones
         | 
| 380 372 | 
             
                    )
         | 
| 381 373 | 
             
                  SQL
         | 
| 382 | 
            -
                  @phones = [{: | 
| 374 | 
            +
                  @phones = [{ type: "mobile", phone_number: "123456" }, { type: "home", phone_number: "654321" }]
         | 
| 383 375 | 
             
                  @employee = {
         | 
| 384 | 
            -
                    : | 
| 385 | 
            -
                    : | 
| 386 | 
            -
                    : | 
| 387 | 
            -
                    : | 
| 388 | 
            -
                    : | 
| 389 | 
            -
                    : | 
| 376 | 
            +
                    employee_id: 1,
         | 
| 377 | 
            +
                    first_name: "First",
         | 
| 378 | 
            +
                    last_name: "Last",
         | 
| 379 | 
            +
                    hire_date: Time.local(2000, 01, 31),
         | 
| 380 | 
            +
                    address: { street: "Main street 1", city: "Riga", country: "Latvia" },
         | 
| 381 | 
            +
                    phones: @phones
         | 
| 390 382 | 
             
                  }
         | 
| 391 383 |  | 
| 392 384 | 
             
                  plsql.execute <<-SQL
         | 
| @@ -441,10 +433,10 @@ describe "Package variables /" do | |
| 441 433 | 
             
                    )
         | 
| 442 434 | 
             
                  SQL
         | 
| 443 435 | 
             
                  @employee = {
         | 
| 444 | 
            -
                    : | 
| 445 | 
            -
                    : | 
| 446 | 
            -
                    : | 
| 447 | 
            -
                    : | 
| 436 | 
            +
                    employee_id: 1,
         | 
| 437 | 
            +
                    first_name: "First",
         | 
| 438 | 
            +
                    last_name: "Last",
         | 
| 439 | 
            +
                    hire_date: Time.local(2000, 01, 31)
         | 
| 448 440 | 
             
                  }
         | 
| 449 441 |  | 
| 450 442 | 
             
                  plsql.execute <<-SQL
         | 
    
        data/spec/plsql/version_spec.rb
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe "Version" do
         | 
| 4 4 | 
             
              it "should return ruby-plsql version" do
         | 
| 5 | 
            -
                expect(PLSQL::VERSION).to eq(File.read(File.dirname(__FILE__)+ | 
| 5 | 
            +
                expect(PLSQL::VERSION).to eq(File.read(File.dirname(__FILE__) + "/../../VERSION").chomp)
         | 
| 6 6 | 
             
              end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            end
         | 
    
        data/spec/plsql/view_spec.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe "View" do
         | 
| 4 4 | 
             
              before(:all) do
         | 
| @@ -17,18 +17,18 @@ describe "View" do | |
| 17 17 |  | 
| 18 18 | 
             
                @employees = (1..10).map do |i|
         | 
| 19 19 | 
             
                  {
         | 
| 20 | 
            -
                    : | 
| 21 | 
            -
                    : | 
| 22 | 
            -
                    : | 
| 23 | 
            -
                    : | 
| 24 | 
            -
                    : | 
| 20 | 
            +
                    employee_id: i,
         | 
| 21 | 
            +
                    first_name: "First #{i}",
         | 
| 22 | 
            +
                    last_name: "Last #{i}",
         | 
| 23 | 
            +
                    hire_date: Time.local(2000, 01, i),
         | 
| 24 | 
            +
                    status: "A"
         | 
| 25 25 | 
             
                  }
         | 
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
                @employees_all_fields = [:employee_id, :first_name, :last_name, :hire_date, :status]
         | 
| 28 | 
            -
                @employees_all_values = @employees.map{|e| @employees_all_fields.map{|f| e[f]}}
         | 
| 28 | 
            +
                @employees_all_values = @employees.map { |e| @employees_all_fields.map { |f| e[f] } }
         | 
| 29 29 | 
             
                @employees_some_fields = [:employee_id, :first_name, :last_name]
         | 
| 30 | 
            -
                @employees_some_values = @employees.map{|e| @employees_some_fields.map{|f| e[f]}}
         | 
| 31 | 
            -
                @employee_default_values = {: | 
| 30 | 
            +
                @employees_some_values = @employees.map { |e| @employees_some_fields.map { |f| e[f] } }
         | 
| 31 | 
            +
                @employee_default_values = { hire_date: nil, status: "N" }
         | 
| 32 32 | 
             
              end
         | 
| 33 33 |  | 
| 34 34 | 
             
              after(:all) do
         | 
| @@ -96,23 +96,23 @@ describe "View" do | |
| 96 96 | 
             
                end
         | 
| 97 97 |  | 
| 98 98 | 
             
                it "should get columns metadata for view" do
         | 
| 99 | 
            -
                  expect(plsql.test_employees_v.columns).to eq( | 
| 100 | 
            -
                    : | 
| 101 | 
            -
                      : | 
| 102 | 
            -
                      : | 
| 103 | 
            -
                    : | 
| 104 | 
            -
                      : | 
| 105 | 
            -
                      : | 
| 106 | 
            -
                    : | 
| 107 | 
            -
                      : | 
| 108 | 
            -
                      : | 
| 109 | 
            -
                    : | 
| 110 | 
            -
                      : | 
| 111 | 
            -
                      : | 
| 112 | 
            -
                    : | 
| 113 | 
            -
                      : | 
| 114 | 
            -
                      : | 
| 115 | 
            -
                   | 
| 99 | 
            +
                  expect(plsql.test_employees_v.columns).to eq(
         | 
| 100 | 
            +
                    employee_id: {
         | 
| 101 | 
            +
                      position: 1, data_type: "NUMBER", data_length: 22, data_precision: 15, data_scale: 0, char_used: nil,
         | 
| 102 | 
            +
                      type_owner: nil, type_name: nil, sql_type_name: nil, nullable: false, data_default: nil },
         | 
| 103 | 
            +
                    first_name: {
         | 
| 104 | 
            +
                      position: 2, data_type: "VARCHAR2", data_length: 50, data_precision: nil, data_scale: nil, char_used: "B",
         | 
| 105 | 
            +
                      type_owner: nil, type_name: nil, sql_type_name: nil, nullable: true, data_default: nil },
         | 
| 106 | 
            +
                    last_name: {
         | 
| 107 | 
            +
                      position: 3, data_type: "VARCHAR2", data_length: 50, data_precision: nil, data_scale: nil, char_used: "B",
         | 
| 108 | 
            +
                      type_owner: nil, type_name: nil, sql_type_name: nil, nullable: true, data_default: nil },
         | 
| 109 | 
            +
                    hire_date: {
         | 
| 110 | 
            +
                      position: 4, data_type: "DATE", data_length: 7, data_precision: nil, data_scale: nil, char_used: nil,
         | 
| 111 | 
            +
                      type_owner: nil, type_name: nil, sql_type_name: nil, nullable: true, data_default: nil },
         | 
| 112 | 
            +
                    status: {
         | 
| 113 | 
            +
                      position: 5, data_type: "VARCHAR2", data_length: 1, data_precision: nil, data_scale: nil, char_used: "B",
         | 
| 114 | 
            +
                      type_owner: nil, type_name: nil, sql_type_name: nil, nullable: true, data_default: nil }
         | 
| 115 | 
            +
                  )
         | 
| 116 116 | 
             
                end
         | 
| 117 117 |  | 
| 118 118 | 
             
              end
         | 
| @@ -125,12 +125,12 @@ describe "View" do | |
| 125 125 |  | 
| 126 126 | 
             
                it "should insert a record in view using partial list of columns" do
         | 
| 127 127 | 
             
                  plsql.test_employees_v.insert @employees.first.except(:hire_date)
         | 
| 128 | 
            -
                  expect(plsql.test_employees_v.all).to eq([@employees.first.merge(: | 
| 128 | 
            +
                  expect(plsql.test_employees_v.all).to eq([@employees.first.merge(hire_date: nil)])
         | 
| 129 129 | 
             
                end
         | 
| 130 130 |  | 
| 131 131 | 
             
                it "should insert default value from table definition if value not provided" do
         | 
| 132 132 | 
             
                  plsql.test_employees_v.insert @employees.first.except(:status)
         | 
| 133 | 
            -
                  expect(plsql.test_employees_v.all).to eq([@employees.first.merge(: | 
| 133 | 
            +
                  expect(plsql.test_employees_v.all).to eq([@employees.first.merge(status: "N")])
         | 
| 134 134 | 
             
                end
         | 
| 135 135 |  | 
| 136 136 | 
             
                it "should insert array of records in view" do
         | 
| @@ -168,7 +168,7 @@ describe "View" do | |
| 168 168 |  | 
| 169 169 | 
             
                it "should insert many records with list of some fields and array of values" do
         | 
| 170 170 | 
             
                  plsql.test_employees_v.insert_values @employees_some_fields, *@employees_some_values
         | 
| 171 | 
            -
                  expect(plsql.test_employees_v.all).to eq(@employees.map{|e| e.merge(@employee_default_values)})
         | 
| 171 | 
            +
                  expect(plsql.test_employees_v.all).to eq(@employees.map { |e| e.merge(@employee_default_values) })
         | 
| 172 172 | 
             
                end
         | 
| 173 173 |  | 
| 174 174 | 
             
              end
         | 
| @@ -186,13 +186,13 @@ describe "View" do | |
| 186 186 | 
             
                it "should select all records in view" do
         | 
| 187 187 | 
             
                  expect(plsql.test_employees_v.select(:all, "ORDER BY employee_id")).to eq(@employees)
         | 
| 188 188 | 
             
                  expect(plsql.test_employees_v.all("ORDER BY employee_id")).to eq(@employees)
         | 
| 189 | 
            -
                  expect(plsql.test_employees_v.all(: | 
| 189 | 
            +
                  expect(plsql.test_employees_v.all(order_by: :employee_id)).to eq(@employees)
         | 
| 190 190 | 
             
                end
         | 
| 191 191 |  | 
| 192 192 | 
             
                it "should select record in view using WHERE condition" do
         | 
| 193 193 | 
             
                  expect(plsql.test_employees_v.select(:first, "WHERE employee_id = :1", @employees.first[:employee_id])).to eq(@employees.first)
         | 
| 194 194 | 
             
                  expect(plsql.test_employees_v.first("WHERE employee_id = :1", @employees.first[:employee_id])).to eq(@employees.first)
         | 
| 195 | 
            -
                  expect(plsql.test_employees_v.first(: | 
| 195 | 
            +
                  expect(plsql.test_employees_v.first(employee_id: @employees.first[:employee_id])).to eq(@employees.first)
         | 
| 196 196 | 
             
                end
         | 
| 197 197 |  | 
| 198 198 | 
             
                it "should select record in view using :column => nil condition" do
         | 
| @@ -201,7 +201,7 @@ describe "View" do | |
| 201 201 | 
             
                  employee[:hire_date] = nil
         | 
| 202 202 | 
             
                  plsql.test_employees_v.insert employee
         | 
| 203 203 | 
             
                  expect(plsql.test_employees_v.first("WHERE hire_date IS NULL")).to eq(employee)
         | 
| 204 | 
            -
                  expect(plsql.test_employees_v.first(: | 
| 204 | 
            +
                  expect(plsql.test_employees_v.first(hire_date: nil)).to eq(employee)
         | 
| 205 205 | 
             
                end
         | 
| 206 206 |  | 
| 207 207 | 
             
                it "should count records in view" do
         | 
| @@ -220,26 +220,26 @@ describe "View" do | |
| 220 220 | 
             
                it "should update a record in view" do
         | 
| 221 221 | 
             
                  employee_id = @employees.first[:employee_id]
         | 
| 222 222 | 
             
                  plsql.test_employees_v.insert @employees.first
         | 
| 223 | 
            -
                  plsql.test_employees_v.update : | 
| 224 | 
            -
                  expect(plsql.test_employees_v.first(: | 
| 223 | 
            +
                  plsql.test_employees_v.update first_name: "Test", where: { employee_id: employee_id }
         | 
| 224 | 
            +
                  expect(plsql.test_employees_v.first(employee_id: employee_id)[:first_name]).to eq("Test")
         | 
| 225 225 | 
             
                end
         | 
| 226 226 |  | 
| 227 227 | 
             
                it "should update a record in view using String WHERE condition" do
         | 
| 228 228 | 
             
                  employee_id = @employees.first[:employee_id]
         | 
| 229 229 | 
             
                  plsql.test_employees_v.insert @employees
         | 
| 230 | 
            -
                  plsql.test_employees_v.update : | 
| 231 | 
            -
                  expect(plsql.test_employees_v.first(: | 
| 230 | 
            +
                  plsql.test_employees_v.update first_name: "Test", where: "employee_id = #{employee_id}"
         | 
| 231 | 
            +
                  expect(plsql.test_employees_v.first(employee_id: employee_id)[:first_name]).to eq("Test")
         | 
| 232 232 | 
             
                  # all other records should not be changed
         | 
| 233 233 | 
             
                  plsql.test_employees_v.all("WHERE employee_id > :1", employee_id) do |employee|
         | 
| 234 | 
            -
                    expect(employee[:first_name]).not_to eq( | 
| 234 | 
            +
                    expect(employee[:first_name]).not_to eq("Test")
         | 
| 235 235 | 
             
                  end
         | 
| 236 236 | 
             
                end
         | 
| 237 237 |  | 
| 238 238 | 
             
                it "should update all records in view" do
         | 
| 239 239 | 
             
                  plsql.test_employees_v.insert @employees
         | 
| 240 | 
            -
                  plsql.test_employees_v.update : | 
| 240 | 
            +
                  plsql.test_employees_v.update first_name: "Test"
         | 
| 241 241 | 
             
                  plsql.test_employees_v.all do |employee|
         | 
| 242 | 
            -
                    expect(employee[:first_name]).to eq( | 
| 242 | 
            +
                    expect(employee[:first_name]).to eq("Test")
         | 
| 243 243 | 
             
                  end
         | 
| 244 244 | 
             
                end
         | 
| 245 245 |  | 
| @@ -249,9 +249,9 @@ describe "View" do | |
| 249 249 | 
             
                it "should delete record from view" do
         | 
| 250 250 | 
             
                  employee_id = @employees.first[:employee_id]
         | 
| 251 251 | 
             
                  plsql.test_employees_v.insert @employees
         | 
| 252 | 
            -
                  plsql.test_employees_v.delete : | 
| 253 | 
            -
                  expect(plsql.test_employees_v.first(: | 
| 254 | 
            -
                  expect(plsql.test_employees_v.all(: | 
| 252 | 
            +
                  plsql.test_employees_v.delete employee_id: employee_id
         | 
| 253 | 
            +
                  expect(plsql.test_employees_v.first(employee_id: employee_id)).to be_nil
         | 
| 254 | 
            +
                  expect(plsql.test_employees_v.all(order_by: :employee_id)).to eq(@employees[1, @employees.size - 1])
         | 
| 255 255 | 
             
                end
         | 
| 256 256 |  | 
| 257 257 | 
             
                it "should delete all records from view" do
         |