activerecord-cipherstash-pg-adapter 0.7.0 → 0.7.1
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 +24 -0
- data/README.md +6 -1
- data/activerecord-cipherstash-pg-adapter.gemspec +1 -1
- data/lib/active_record/connection_adapters/6.1/postgres_cipherstash_adapter.rb +33 -33
- data/lib/version.rb +1 -1
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 662a206227829df410fe299405dd9b1fff2d62b879998fb8f29f59bcc88d8baa
         | 
| 4 | 
            +
              data.tar.gz: 638a5f17b08d880a3ac7fd671905f6d3a42f95d0bdcd0bcd3564422435ae6b9b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 39fecf791d8bee80a099b108c84284c8bc8a1d748089256152eb35858df3b8d5150394bb19f5f13ea6c76b2d50c1dab033afd37d13ba4b4e54281c279c374d09
         | 
| 7 | 
            +
              data.tar.gz: 8f34eeaa73a3f58c23ac15655d11f76e79073768ca096c0722dee1ca56ac64974e09d460739867a6d2982e2c8c1c5028ae44719330905145978d1b004220efb7
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,28 @@ | |
| 1 | 
            +
            # Changelog
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            All notable changes to this project will be documented in this file.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            ## [Unreleased]
         | 
| 2 8 |  | 
| 9 | 
            +
            ## [0.7.1] - 2023-05-02
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### Changed
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - Bump version of cipherstash-pg.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ### Fixed
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            - Fix module names in ActiveRecord 6 adapter
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ## [0.7.0] - 2023-05-01
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ### Changed
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            - Update PG namespace to use CipherStashPG.
         | 
| 24 | 
            +
            - Bump version of cipherstash-pg.
         | 
| 25 | 
            +
             | 
| 3 26 | 
             
            ## [0.6.1] - 2023-04-26
         | 
| 4 27 |  | 
| 5 28 | 
             
            ### Fixed
         | 
| @@ -33,6 +56,7 @@ | |
| 33 56 | 
             
            - Bump version of cipherstash-pg.
         | 
| 34 57 |  | 
| 35 58 | 
             
            ## [0.3.0] - 2023-04-04
         | 
| 59 | 
            +
             | 
| 36 60 | 
             
            ### Added
         | 
| 37 61 |  | 
| 38 62 | 
             
            - Support for both Rails 6 + 7.
         | 
    
        data/README.md
    CHANGED
    
    | @@ -26,7 +26,12 @@ development: | |
| 26 26 |  | 
| 27 27 | 
             
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         | 
| 28 28 |  | 
| 29 | 
            -
            To release a new version | 
| 29 | 
            +
            To release a new version:
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            - update the version number in `version.rb`.
         | 
| 32 | 
            +
            - update the CHANGELOG.
         | 
| 33 | 
            +
            - raise a PR and merge.
         | 
| 34 | 
            +
            - run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
         | 
| 30 35 |  | 
| 31 36 | 
             
            In the github repo:
         | 
| 32 37 |  | 
| @@ -31,5 +31,5 @@ Gem::Specification.new do |spec| | |
| 31 31 |  | 
| 32 32 | 
             
              # Runtime dependencies here; dev+test go in Gemfile.
         | 
| 33 33 | 
             
              spec.add_dependency "activerecord", ">= 6.0.0", "< 8.0.0"
         | 
| 34 | 
            -
              spec.add_dependency "cipherstash-pg", ">= 1.0.0.beta. | 
| 34 | 
            +
              spec.add_dependency "cipherstash-pg", ">= 1.0.0.beta.4"
         | 
| 35 35 | 
             
            end
         | 
| @@ -38,8 +38,8 @@ module ActiveRecord | |
| 38 38 | 
             
                  conn_params[:user] = conn_params.delete(:username) if conn_params[:username]
         | 
| 39 39 | 
             
                  conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database]
         | 
| 40 40 |  | 
| 41 | 
            -
                  # Forward only valid config params to  | 
| 42 | 
            -
                  valid_conn_param_keys =  | 
| 41 | 
            +
                  # Forward only valid config params to ::CipherStashPG::Connection.connect.
         | 
| 42 | 
            +
                  valid_conn_param_keys = ::CipherStashPG::Connection.conndefaults_hash.keys + [:requiressl]
         | 
| 43 43 | 
             
                  conn_params.slice!(*valid_conn_param_keys)
         | 
| 44 44 |  | 
| 45 45 | 
             
                  ConnectionAdapters::CipherStashPGAdapter.new(
         | 
| @@ -58,7 +58,7 @@ module ActiveRecord | |
| 58 58 | 
             
                  class << self
         | 
| 59 59 | 
             
                    def new_client(conn_params)
         | 
| 60 60 | 
             
                    ::CipherStashPG.connect(**conn_params)
         | 
| 61 | 
            -
                    rescue :: | 
| 61 | 
            +
                    rescue ::CipherStashPG::Error => error
         | 
| 62 62 | 
             
                      if conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname])
         | 
| 63 63 | 
             
                        raise ActiveRecord::NoDatabaseError
         | 
| 64 64 | 
             
                      else
         | 
| @@ -215,12 +215,12 @@ module ActiveRecord | |
| 215 215 | 
             
                    private
         | 
| 216 216 | 
             
                      def dealloc(key)
         | 
| 217 217 | 
             
                        @connection.query "DEALLOCATE #{key}" if connection_active?
         | 
| 218 | 
            -
                      rescue  | 
| 218 | 
            +
                      rescue ::CipherStashPG::Error
         | 
| 219 219 | 
             
                      end
         | 
| 220 220 |  | 
| 221 221 | 
             
                      def connection_active?
         | 
| 222 | 
            -
                        @connection.status ==  | 
| 223 | 
            -
                      rescue  | 
| 222 | 
            +
                        @connection.status == ::CipherStashPG::CONNECTION_OK
         | 
| 223 | 
            +
                      rescue ::CipherStashPG::Error
         | 
| 224 224 | 
             
                        false
         | 
| 225 225 | 
             
                      end
         | 
| 226 226 | 
             
                  end
         | 
| @@ -257,7 +257,7 @@ module ActiveRecord | |
| 257 257 | 
             
                      @connection.query "SELECT 1"
         | 
| 258 258 | 
             
                    end
         | 
| 259 259 | 
             
                    true
         | 
| 260 | 
            -
                  rescue  | 
| 260 | 
            +
                  rescue ::CipherStashPG::Error
         | 
| 261 261 | 
             
                    false
         | 
| 262 262 | 
             
                  end
         | 
| 263 263 |  | 
| @@ -267,7 +267,7 @@ module ActiveRecord | |
| 267 267 | 
             
                      super
         | 
| 268 268 | 
             
                      @connection.reset
         | 
| 269 269 | 
             
                      configure_connection
         | 
| 270 | 
            -
                    rescue  | 
| 270 | 
            +
                    rescue ::CipherStashPG::ConnectionBad
         | 
| 271 271 | 
             
                      connect
         | 
| 272 272 | 
             
                    end
         | 
| 273 273 | 
             
                  end
         | 
| @@ -276,7 +276,7 @@ module ActiveRecord | |
| 276 276 | 
             
                    @lock.synchronize do
         | 
| 277 277 | 
             
                      clear_cache!
         | 
| 278 278 | 
             
                      reset_transaction
         | 
| 279 | 
            -
                      unless @connection.transaction_status == :: | 
| 279 | 
            +
                      unless @connection.transaction_status == ::CipherStashPG::PQTRANS_IDLE
         | 
| 280 280 | 
             
                        @connection.query "ROLLBACK"
         | 
| 281 281 | 
             
                      end
         | 
| 282 282 | 
             
                      @connection.query "DISCARD ALL"
         | 
| @@ -450,7 +450,7 @@ module ActiveRecord | |
| 450 450 | 
             
                    def translate_exception(exception, message:, sql:, binds:)
         | 
| 451 451 | 
             
                      return exception unless exception.respond_to?(:result)
         | 
| 452 452 |  | 
| 453 | 
            -
                      case exception.result.try(:error_field,  | 
| 453 | 
            +
                      case exception.result.try(:error_field, ::CipherStashPG::PG_DIAG_SQLSTATE)
         | 
| 454 454 | 
             
                      when nil
         | 
| 455 455 | 
             
                        if exception.message.match?(/connection is closed/i)
         | 
| 456 456 | 
             
                          ConnectionNotEstablished.new(exception)
         | 
| @@ -550,7 +550,7 @@ module ActiveRecord | |
| 550 550 | 
             
                        # places before decimal = (fmod - 4) >> 16 & 0xffff
         | 
| 551 551 | 
             
                        if fmod && (fmod - 4 & 0xffff).zero?
         | 
| 552 552 | 
             
                          # FIXME: Remove this class, and the second argument to
         | 
| 553 | 
            -
                          # lookups on  | 
| 553 | 
            +
                          # lookups on ::CipherStashPG
         | 
| 554 554 | 
             
                          Type::DecimalWithoutScale.new(precision: precision)
         | 
| 555 555 | 
             
                        else
         | 
| 556 556 | 
             
                          OID::Decimal.new(precision: precision, scale: scale)
         | 
| @@ -704,8 +704,8 @@ module ActiveRecord | |
| 704 704 | 
             
                    # https://git.cipherstash_pg.org/gitweb/?p=cipherstash_pg.git;a=blob;f=src/backend/utils/cache/plancache.c#l573
         | 
| 705 705 | 
             
                    def is_cached_plan_failure?(e)
         | 
| 706 706 | 
             
                      pgerror = e.cause
         | 
| 707 | 
            -
                      pgerror.result.result_error_field( | 
| 708 | 
            -
                        pgerror.result.result_error_field( | 
| 707 | 
            +
                      pgerror.result.result_error_field(::CipherStashPG::PG_DIAG_SQLSTATE) == FEATURE_NOT_SUPPORTED &&
         | 
| 708 | 
            +
                        pgerror.result.result_error_field(::CipherStashPG::PG_DIAG_SOURCE_FUNCTION) == "RevalidateCachedQuery"
         | 
| 709 709 | 
             
                    rescue
         | 
| 710 710 | 
             
                      false
         | 
| 711 711 | 
             
                    end
         | 
| @@ -870,18 +870,18 @@ module ActiveRecord | |
| 870 870 | 
             
                    end
         | 
| 871 871 |  | 
| 872 872 | 
             
                    def add_pg_encoders
         | 
| 873 | 
            -
                      map =  | 
| 874 | 
            -
                      map[Integer] =  | 
| 875 | 
            -
                      map[TrueClass] =  | 
| 876 | 
            -
                      map[FalseClass] =  | 
| 873 | 
            +
                      map = ::CipherStashPG::TypeMapByClass.new
         | 
| 874 | 
            +
                      map[Integer] = ::CipherStashPG::TextEncoder::Integer.new
         | 
| 875 | 
            +
                      map[TrueClass] = ::CipherStashPG::TextEncoder::Boolean.new
         | 
| 876 | 
            +
                      map[FalseClass] = ::CipherStashPG::TextEncoder::Boolean.new
         | 
| 877 877 | 
             
                      @connection.type_map_for_queries = map
         | 
| 878 878 | 
             
                    end
         | 
| 879 879 |  | 
| 880 880 | 
             
                    def update_typemap_for_default_timezone
         | 
| 881 881 | 
             
                      if @default_timezone != ActiveRecord::Base.default_timezone && @timestamp_decoder
         | 
| 882 882 | 
             
                        decoder_class = ActiveRecord::Base.default_timezone == :utc ?
         | 
| 883 | 
            -
                           | 
| 884 | 
            -
                           | 
| 883 | 
            +
                          ::CipherStashPG::TextDecoder::TimestampUtc :
         | 
| 884 | 
            +
                          ::CipherStashPG::TextDecoder::TimestampWithoutTimeZone
         | 
| 885 885 |  | 
| 886 886 | 
             
                        @timestamp_decoder = decoder_class.new(@timestamp_decoder.to_h)
         | 
| 887 887 | 
             
                        @connection.type_map_for_results.add_coder(@timestamp_decoder)
         | 
| @@ -894,16 +894,16 @@ module ActiveRecord | |
| 894 894 | 
             
                      @timestamp_decoder = nil
         | 
| 895 895 |  | 
| 896 896 | 
             
                      coders_by_name = {
         | 
| 897 | 
            -
                        "int2" =>  | 
| 898 | 
            -
                        "int4" =>  | 
| 899 | 
            -
                        "int8" =>  | 
| 900 | 
            -
                        "oid" =>  | 
| 901 | 
            -
                        "float4" =>  | 
| 902 | 
            -
                        "float8" =>  | 
| 903 | 
            -
                        "numeric" =>  | 
| 904 | 
            -
                        "bool" =>  | 
| 905 | 
            -
                        "timestamp" =>  | 
| 906 | 
            -
                        "timestamptz" =>  | 
| 897 | 
            +
                        "int2" => ::CipherStashPG::TextDecoder::Integer,
         | 
| 898 | 
            +
                        "int4" => ::CipherStashPG::TextDecoder::Integer,
         | 
| 899 | 
            +
                        "int8" => ::CipherStashPG::TextDecoder::Integer,
         | 
| 900 | 
            +
                        "oid" => ::CipherStashPG::TextDecoder::Integer,
         | 
| 901 | 
            +
                        "float4" => ::CipherStashPG::TextDecoder::Float,
         | 
| 902 | 
            +
                        "float8" => ::CipherStashPG::TextDecoder::Float,
         | 
| 903 | 
            +
                        "numeric" => ::CipherStashPG::TextDecoder::Numeric,
         | 
| 904 | 
            +
                        "bool" => ::CipherStashPG::TextDecoder::Boolean,
         | 
| 905 | 
            +
                        "timestamp" => ::CipherStashPG::TextDecoder::TimestampUtc,
         | 
| 906 | 
            +
                        "timestamptz" => ::CipherStashPG::TextDecoder::TimestampWithTimeZone,
         | 
| 907 907 | 
             
                      }
         | 
| 908 908 |  | 
| 909 909 | 
             
                      known_coder_types = coders_by_name.keys.map { |n| quote(n) }
         | 
| @@ -918,13 +918,13 @@ module ActiveRecord | |
| 918 918 | 
             
                          .compact
         | 
| 919 919 | 
             
                      end
         | 
| 920 920 |  | 
| 921 | 
            -
                      map =  | 
| 921 | 
            +
                      map = ::CipherStashPG::TypeMapByOid.new
         | 
| 922 922 | 
             
                      coders.each { |coder| map.add_coder(coder) }
         | 
| 923 923 | 
             
                      @connection.type_map_for_results = map
         | 
| 924 924 |  | 
| 925 | 
            -
                      @type_map_for_results =  | 
| 925 | 
            +
                      @type_map_for_results = ::CipherStashPG::TypeMapByOid.new
         | 
| 926 926 | 
             
                      @type_map_for_results.default_type_map = map
         | 
| 927 | 
            -
                      @type_map_for_results.add_coder( | 
| 927 | 
            +
                      @type_map_for_results.add_coder(::CipherstashPG::TextDecoder::Bytea.new(oid: 17, name: "bytea"))
         | 
| 928 928 | 
             
                      @type_map_for_results.add_coder(MoneyDecoder.new(oid: 790, name: "money"))
         | 
| 929 929 |  | 
| 930 930 | 
             
                      # extract timestamp decoder for use in update_typemap_for_default_timezone
         | 
| @@ -937,7 +937,7 @@ module ActiveRecord | |
| 937 937 | 
             
                      coder_class.new(oid: row["oid"].to_i, name: row["typname"])
         | 
| 938 938 | 
             
                    end
         | 
| 939 939 |  | 
| 940 | 
            -
                    class MoneyDecoder < CipherstashPG::SimpleDecoder # :nodoc:
         | 
| 940 | 
            +
                    class MoneyDecoder < ::CipherstashPG::SimpleDecoder # :nodoc:
         | 
| 941 941 | 
             
                      TYPE = OID::Money.new
         | 
| 942 942 |  | 
| 943 943 | 
             
                      def decode(value, tuple = nil, field = nil)
         | 
    
        data/lib/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activerecord-cipherstash-pg-adapter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Robin Howard
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-05- | 
| 11 | 
            +
            date: 2023-05-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         | 
| @@ -36,14 +36,14 @@ dependencies: | |
| 36 36 | 
             
                requirements:
         | 
| 37 37 | 
             
                - - ">="
         | 
| 38 38 | 
             
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            -
                    version: 1.0.0.beta. | 
| 39 | 
            +
                    version: 1.0.0.beta.4
         | 
| 40 40 | 
             
              type: :runtime
         | 
| 41 41 | 
             
              prerelease: false
         | 
| 42 42 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 43 43 | 
             
                requirements:
         | 
| 44 44 | 
             
                - - ">="
         | 
| 45 45 | 
             
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            -
                    version: 1.0.0.beta. | 
| 46 | 
            +
                    version: 1.0.0.beta.4
         | 
| 47 47 | 
             
            description: CipherStash PostgreSQL adapter for ActiveRecord.
         | 
| 48 48 | 
             
            email:
         | 
| 49 49 | 
             
            - robin@cipherstash.com
         |