activerecord-sqlserver-adapter 4.2.10 → 4.2.11
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile +6 -2
- data/README.md +1 -1
- data/VERSION +1 -1
- data/appveyor.yml +1 -1
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +3 -5
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +18 -0
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +7 -3
- data/lib/arel/visitors/sqlserver.rb +4 -1
- data/test/cases/column_test_sqlserver.rb +7 -0
- data/test/cases/specific_schema_test_sqlserver.rb +18 -0
- data/test/schema/datatypes/2012.sql +1 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5645093f45bc28adecc3cc3a38fdb886f6683a9c
         | 
| 4 | 
            +
              data.tar.gz: bddd84dff29484133c22f905f3c75439a68cbbe5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e2e9df466a158a7a1d35860e6c32c75b4e9f46774122b7cfcf8f43c1d9f770cb1a723cedf92f30ec9d06ec39501be10a018bbd0f6ffcff1257160127de7fa3f3
         | 
| 7 | 
            +
              data.tar.gz: d24d8c79658031f51266734f5648af3cf5dc3e47911a245774f2a9dd32aecfbb25407703758ef707140507af7ab632dac93ccf193f9c30dd3c74543b5b6ef025
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,18 @@ | |
| 1 | 
            +
            ## v4.2.11
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            #### Fixed
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Undefined method `database_prefix_remote_server?' Fixes #450. Thanks @jippeholwerda
         | 
| 6 | 
            +
            * Document two methods for avoiding N'' quoting on char/varchar columns.
         | 
| 7 | 
            +
            * First run failure of `change_column` while dropping constraint. Fixes #420. Thanks @GrumpyRainbow @rkr090
         | 
| 8 | 
            +
            * Rounding errors w/datetime2(0) types having no fractional seconds. Fixes #465. Thanks @alawton
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            #### Changed
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            * Supporting escape hatch for N'' quoting. Remove `#is_utf8` string check in `#_quote` method.
         | 
| 13 | 
            +
              This duplicated strings and forced encoding which was actually wasteful.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 1 16 | 
             
            ## v4.2.10
         | 
| 2 17 |  | 
| 3 18 | 
             
            #### Fixed
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -49,9 +49,13 @@ group :odbc do | |
| 49 49 | 
             
            end
         | 
| 50 50 |  | 
| 51 51 | 
             
            group :development do
         | 
| 52 | 
            -
              gem 'guard'
         | 
| 53 | 
            -
              gem 'guard-minitest'
         | 
| 54 52 | 
             
              gem 'mocha'
         | 
| 55 53 | 
             
              gem 'minitest', '< 5.3.4' # PENDING: [Rails5.x] Remove test order constraint.
         | 
| 56 54 | 
             
              gem 'minitest-spec-rails'
         | 
| 55 | 
            +
              gem 'pry'
         | 
| 56 | 
            +
            end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            group :guard do
         | 
| 59 | 
            +
              gem 'guard'
         | 
| 60 | 
            +
              gem 'guard-minitest'
         | 
| 57 61 | 
             
            end
         | 
    
        data/README.md
    CHANGED
    
    | @@ -197,5 +197,5 @@ Up-to-date list of contributors: http://github.com/rails-sqlserver/activerecord- | |
| 197 197 |  | 
| 198 198 | 
             
            ## License
         | 
| 199 199 |  | 
| 200 | 
            -
            Copyright © 2008- | 
| 200 | 
            +
            Copyright © 2008-2016. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
         | 
| 201 201 |  | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            4.2. | 
| 1 | 
            +
            4.2.11
         | 
    
        data/appveyor.yml
    CHANGED
    
    | @@ -11,7 +11,7 @@ install: | |
| 11 11 | 
             
              - ps: Update-AppveyorBuild -Version "$(Get-Content $env:appveyor_build_folder\VERSION).$env:appveyor_build_number"
         | 
| 12 12 | 
             
              - ruby --version
         | 
| 13 13 | 
             
              - gem --version
         | 
| 14 | 
            -
              - bundle install --without odbc
         | 
| 14 | 
            +
              - bundle install --without odbc guard
         | 
| 15 15 | 
             
            build: off
         | 
| 16 16 | 
             
            test_script:
         | 
| 17 17 | 
             
              - powershell -File "%APPVEYOR_BUILD_FOLDER%\test\appveyor\dbsetup.ps1"
         | 
| @@ -54,12 +54,10 @@ module ActiveRecord | |
| 54 54 | 
             
                      case value
         | 
| 55 55 | 
             
                      when Type::Binary::Data
         | 
| 56 56 | 
             
                        "0x#{value.hex}"
         | 
| 57 | 
            +
                      when ActiveRecord::Type::SQLServer::Char::Data
         | 
| 58 | 
            +
                        value.quoted
         | 
| 57 59 | 
             
                      when String, ActiveSupport::Multibyte::Chars
         | 
| 58 | 
            -
                         | 
| 59 | 
            -
                          "#{QUOTED_STRING_PREFIX}#{super}"
         | 
| 60 | 
            -
                        else
         | 
| 61 | 
            -
                          super
         | 
| 62 | 
            -
                        end
         | 
| 60 | 
            +
                        "#{QUOTED_STRING_PREFIX}#{super}"
         | 
| 63 61 | 
             
                      else
         | 
| 64 62 | 
             
                        super
         | 
| 65 63 | 
             
                      end
         | 
| @@ -96,6 +96,7 @@ module ActiveRecord | |
| 96 96 | 
             
                    end
         | 
| 97 97 |  | 
| 98 98 | 
             
                    def change_column_default(table_name, column_name, default)
         | 
| 99 | 
            +
                      schema_cache.clear_table_cache!(table_name)
         | 
| 99 100 | 
             
                      remove_default_constraint(table_name, column_name)
         | 
| 100 101 | 
             
                      column_object = schema_cache.columns(table_name).find { |c| c.name.to_s == column_name.to_s }
         | 
| 101 102 | 
             
                      do_execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{default_constraint_name(table_name, column_name)} DEFAULT #{quote_default_value(default, column_object)} FOR #{quote_column_name(column_name)}"
         | 
| @@ -8,6 +8,24 @@ module ActiveRecord | |
| 8 8 | 
             
                        :char
         | 
| 9 9 | 
             
                      end
         | 
| 10 10 |  | 
| 11 | 
            +
                      def type_cast_for_database(value)
         | 
| 12 | 
            +
                        return if value.nil?
         | 
| 13 | 
            +
                        return value if value.is_a?(Data)
         | 
| 14 | 
            +
                        Data.new(super)
         | 
| 15 | 
            +
                      end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                      class Data
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                        def initialize(value)
         | 
| 20 | 
            +
                          @value = value.to_s
         | 
| 21 | 
            +
                        end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                        def quoted
         | 
| 24 | 
            +
                          "'#{@value}'"
         | 
| 25 | 
            +
                        end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      end
         | 
| 28 | 
            +
             | 
| 11 29 | 
             
                    end
         | 
| 12 30 | 
             
                  end
         | 
| 13 31 | 
             
                end
         | 
| @@ -9,9 +9,13 @@ module ActiveRecord | |
| 9 9 |  | 
| 10 10 | 
             
                      def cast_fractional(value)
         | 
| 11 11 | 
             
                        return value if !value.respond_to?(fractional_property) || value.send(fractional_property).zero?
         | 
| 12 | 
            -
                         | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 12 | 
            +
                        frac_seconds = if fractional_scale == 0
         | 
| 13 | 
            +
                                         0
         | 
| 14 | 
            +
                                       else
         | 
| 15 | 
            +
                                         seconds = value.send(fractional_property).to_f / fractional_operator.to_f
         | 
| 16 | 
            +
                                         seconds = ((seconds * (1 / fractional_precision)).round / (1 / fractional_precision)).round(fractional_scale)
         | 
| 17 | 
            +
                                         (seconds * fractional_operator).to_i
         | 
| 18 | 
            +
                                       end
         | 
| 15 19 | 
             
                        value.change fractional_property => frac_seconds
         | 
| 16 20 | 
             
                      end
         | 
| 17 21 |  | 
| @@ -74,7 +74,10 @@ module Arel | |
| 74 74 | 
             
                  end
         | 
| 75 75 |  | 
| 76 76 | 
             
                  def visit_Arel_Table o, collector
         | 
| 77 | 
            -
                     | 
| 77 | 
            +
                    # Apparently, o.engine.connection can actually be a different adapter
         | 
| 78 | 
            +
                    # than sqlserver. Can be removed if fixed in ActiveRecord. See:
         | 
| 79 | 
            +
                    # github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/450
         | 
| 80 | 
            +
                    table_name = if o.engine.connection.respond_to?(:sqlserver?) && o.engine.connection.database_prefix_remote_server?
         | 
| 78 81 | 
             
                      remote_server_table_name(o)
         | 
| 79 82 | 
             
                    else
         | 
| 80 83 | 
             
                      quote_table_name(o.name)
         | 
| @@ -373,6 +373,13 @@ class ColumnTestSQLServer < ActiveRecord::TestCase | |
| 373 373 | 
             
                  obj.datetime2_1.must_equal time.change(nsec: 100000000), "Nanoseconds were <#{obj.datetime2_1.nsec}> vs <100000000>"
         | 
| 374 374 | 
             
                  obj.save! ; obj.reload
         | 
| 375 375 | 
             
                  obj.datetime2_1.must_equal time.change(nsec: 100000000), "Nanoseconds were <#{obj.datetime2_1.nsec}> vs <100000000>"
         | 
| 376 | 
            +
                  col = column('datetime2_0')
         | 
| 377 | 
            +
                  col.cast_type.precision.must_equal 0
         | 
| 378 | 
            +
                  time = Time.utc 2016, 4, 19, 16, 45, 40, 771036
         | 
| 379 | 
            +
                  obj.datetime2_0 = time
         | 
| 380 | 
            +
                  obj.datetime2_0.must_equal time.change(nsec: 0), "Nanoseconds were <#{obj.datetime2_0.nsec}> vs <0>"
         | 
| 381 | 
            +
                  obj.save! ; obj.reload
         | 
| 382 | 
            +
                  obj.datetime2_0.must_equal time.change(nsec: 0), "Nanoseconds were <#{obj.datetime2_0.nsec}> vs <0>"
         | 
| 376 383 | 
             
                end
         | 
| 377 384 |  | 
| 378 385 | 
             
                it 'datetimeoffset' do
         | 
| @@ -107,6 +107,24 @@ class SpecificSchemaTestSQLServer < ActiveRecord::TestCase | |
| 107 107 | 
             
                assert_equal r, SSTestEdgeSchema.where('crazy]]quote' => 'crazyqoute').first
         | 
| 108 108 | 
             
              end
         | 
| 109 109 |  | 
| 110 | 
            +
              it 'various methods to bypass national quoted columns for any column, but primarily useful for char/varchar' do
         | 
| 111 | 
            +
                value = Class.new do
         | 
| 112 | 
            +
                  def quoted_id
         | 
| 113 | 
            +
                    "'T'"
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
                # Using ActiveRecord's quoted_id feature for objects.
         | 
| 117 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: value.new).first }
         | 
| 118 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: value.new).first }
         | 
| 119 | 
            +
                # Using our custom char type data.
         | 
| 120 | 
            +
                data = ActiveRecord::Type::SQLServer::Char::Data
         | 
| 121 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: data.new('T')).first }
         | 
| 122 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: data.new('T')).first }
         | 
| 123 | 
            +
                # Taking care of everything.
         | 
| 124 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: 'T').first }
         | 
| 125 | 
            +
                assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: 'T').first }
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
             | 
| 110 128 | 
             
              # With column names that have spaces
         | 
| 111 129 |  | 
| 112 130 | 
             
              it 'create record using a custom attribute reader and be able to load it back in' do
         | 
| @@ -28,6 +28,7 @@ CREATE TABLE [sst_datatypes] ( | |
| 28 28 | 
             
              [datetime2_7] [datetime2](7) NULL DEFAULT '9999-12-31 23:59:59.9999999',
         | 
| 29 29 | 
             
              [datetime2_3] [datetime2](3) NULL,
         | 
| 30 30 | 
             
              [datetime2_1] [datetime2](1) NULL,
         | 
| 31 | 
            +
              [datetime2_0] [datetime2](0) NULL,
         | 
| 31 32 | 
             
              [datetimeoffset_7] [datetimeoffset](7) NULL DEFAULT '1984-01-24 04:20:00.1234567 -08:00',
         | 
| 32 33 | 
             
              [datetimeoffset_3] [datetimeoffset](3) NULL,
         | 
| 33 34 | 
             
              [datetimeoffset_1] [datetimeoffset](1) NULL,
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activerecord-sqlserver-adapter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.2. | 
| 4 | 
            +
              version: 4.2.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ken Collins
         | 
| @@ -14,7 +14,7 @@ authors: | |
| 14 14 | 
             
            autorequire: 
         | 
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 | 
            -
            date: 2016- | 
| 17 | 
            +
            date: 2016-04-24 00:00:00.000000000 Z
         | 
| 18 18 | 
             
            dependencies:
         | 
| 19 19 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 20 20 | 
             
              name: activerecord
         |