ardm-do-adapter 1.2.0 → 1.2.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/Gemfile +1 -1
- data/README.md +18 -0
- data/ardm-do-adapter.gemspec +1 -1
- data/lib/dm-do-adapter/adapter.rb +50 -30
- data/lib/dm-do-adapter/version.rb +1 -1
- metadata +4 -4
- data/README.rdoc +0 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c82bd91805f6089e2010a5ce2b19fdc7d10d620f
         | 
| 4 | 
            +
              data.tar.gz: 6a3737cdcd799f08b304d808efd0ede9792fb19a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 90a587c722695538d67e414858d9c27dfa02055fe3df80c234b3a115ce47378fe26b0b4d22ca101f0e80992f61e442831a8bb86b5ba6bd038a3e1bf4c60547e5
         | 
| 7 | 
            +
              data.tar.gz: da5713ace4d2fe7b8619b203042890dccf71446f45f320b166d0261a1f4d6a8871d1ae3c225d3ff888166cbf2f7f426898568dd37289860ec80d1a9625da555e
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -7,7 +7,7 @@ gemspec | |
| 7 7 | 
             
            SOURCE         = ENV.fetch('SOURCE', :git).to_sym
         | 
| 8 8 | 
             
            REPO_POSTFIX   = SOURCE == :path ? ''                                : '.git'
         | 
| 9 9 | 
             
            DATAMAPPER     = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/ar-dm'
         | 
| 10 | 
            -
            DM_VERSION     = '~> 1.2 | 
| 10 | 
            +
            DM_VERSION     = '~> 1.2'
         | 
| 11 11 | 
             
            DO_VERSION     = '~> 0.10.6'
         | 
| 12 12 | 
             
            CURRENT_BRANCH = ENV.fetch('GIT_BRANCH', 'master')
         | 
| 13 13 |  | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            [][gem]
         | 
| 2 | 
            +
            [][travis]
         | 
| 3 | 
            +
            [][gemnasium]
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [gem]: https://rubygems.org/gems/ardm-do-adapter
         | 
| 6 | 
            +
            [travis]: https://travis-ci.org/ar-dm/ardm-do-adapter
         | 
| 7 | 
            +
            [gemnasium]: https://gemnasium.com/ar-dm/ardm-do-adapter
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # ardm-do-adapter
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            A fork of [`dm-do-adapter`](https://github.com/datamapper/dm-do-adapter).
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ## Install
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            See [ardm-core](https://github.com/ar-dm/ardm-core) for more information.
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Unless they are specific to this gem, please ask general `ardm-` questions
         | 
| 18 | 
            +
            and open issues on `ardm-core`.
         | 
    
        data/ardm-do-adapter.gemspec
    CHANGED
    
    | @@ -14,7 +14,7 @@ Gem::Specification.new do |gem| | |
| 14 14 |  | 
| 15 15 | 
             
              gem.files         = `git ls-files`.split("\n")
         | 
| 16 16 | 
             
              gem.test_files    = `git ls-files -- {spec}/*`.split("\n")
         | 
| 17 | 
            -
              gem.extra_rdoc_files = %w[LICENSE README. | 
| 17 | 
            +
              gem.extra_rdoc_files = %w[LICENSE README.md]
         | 
| 18 18 | 
             
              gem.require_paths = [ "lib" ]
         | 
| 19 19 |  | 
| 20 20 | 
             
              gem.add_runtime_dependency 'data_objects', '~> 0.10.6'
         | 
| @@ -310,19 +310,39 @@ module DataMapper | |
| 310 310 | 
             
                  # Adapter below.
         | 
| 311 311 | 
             
                  module SQL #:nodoc:
         | 
| 312 312 | 
             
                    IDENTIFIER_MAX_LENGTH = 128
         | 
| 313 | 
            +
                    QUESTION_MARK    = '?'.freeze
         | 
| 314 | 
            +
                    GT_OPERATOR      = '>'.freeze
         | 
| 315 | 
            +
                    LT_OPERATOR      = '<'.freeze
         | 
| 316 | 
            +
                    GTE_OPERATOR     = '>='.freeze
         | 
| 317 | 
            +
                    LTE_OPERATOR     = '<='.freeze
         | 
| 318 | 
            +
                    IS_OPERATOR      = 'IS'.freeze
         | 
| 319 | 
            +
                    EQ_OPERATOR      = '='.freeze
         | 
| 320 | 
            +
                    IN_OPERATOR      = 'IN'.freeze
         | 
| 321 | 
            +
                    BETWEEN_OPERATOR = 'BETWEEN'.freeze
         | 
| 322 | 
            +
                    REGEXP_OPERATOR  = '~'.freeze
         | 
| 323 | 
            +
                    LIKE_OPERATOR    = 'LIKE'.freeze
         | 
| 324 | 
            +
                    NULL_KEYWORD     = 'NULL'.freeze
         | 
| 325 | 
            +
                    AND_KEYWORD      = ' AND '.freeze
         | 
| 326 | 
            +
                    ON_KEYWORD       = 'ON'.freeze
         | 
| 327 | 
            +
                    COLUMN_SEPARATOR = ', '.freeze
         | 
| 328 | 
            +
                    SPACE            = ' '.freeze
         | 
| 329 | 
            +
                    ONE_EQ_ZERO      = '1 = 0'.freeze
         | 
| 330 | 
            +
                    SINGLE_QUOTE     = /"/.freeze
         | 
| 331 | 
            +
                    DOUBLE_QUOTE     = '""'.freeze
         | 
| 313 332 |  | 
| 314 333 | 
             
                    # @api semipublic
         | 
| 315 334 | 
             
                    def property_to_column_name(property, qualify)
         | 
| 316 | 
            -
                      column_name =  | 
| 335 | 
            +
                      column_name = quote_name(property.field)
         | 
| 317 336 |  | 
| 318 337 | 
             
                      case qualify
         | 
| 319 | 
            -
             | 
| 320 | 
            -
             | 
| 321 | 
            -
             | 
| 322 | 
            -
             | 
| 338 | 
            +
                      when true
         | 
| 339 | 
            +
                        "#{quote_name(property.model.storage_name(name))}.#{column_name}"
         | 
| 340 | 
            +
                      when String
         | 
| 341 | 
            +
                        "#{quote_name(qualify)}.#{column_name}"
         | 
| 342 | 
            +
                      else
         | 
| 343 | 
            +
                        column_name
         | 
| 323 344 | 
             
                      end
         | 
| 324 345 |  | 
| 325 | 
            -
                      column_name << quote_name(property.field)
         | 
| 326 346 | 
             
                    end
         | 
| 327 347 |  | 
| 328 348 | 
             
                    private
         | 
| @@ -396,9 +416,9 @@ module DataMapper | |
| 396 416 | 
             
                        statement << default_values_clause
         | 
| 397 417 | 
             
                      else
         | 
| 398 418 | 
             
                        statement << DataMapper::Ext::String.compress_lines(<<-SQL)
         | 
| 399 | 
            -
                          (#{properties.map { |property| quote_name(property.field) }.join( | 
| 419 | 
            +
                          (#{properties.map { |property| quote_name(property.field) }.join(COLUMN_SEPARATOR)})
         | 
| 400 420 | 
             
                          VALUES
         | 
| 401 | 
            -
                          (#{([ | 
| 421 | 
            +
                          (#{([QUESTION_MARK] * properties.size).join(COLUMN_SEPARATOR)})
         | 
| 402 422 | 
             
                        SQL
         | 
| 403 423 | 
             
                      end
         | 
| 404 424 |  | 
| @@ -438,7 +458,7 @@ module DataMapper | |
| 438 458 | 
             
                      end
         | 
| 439 459 |  | 
| 440 460 | 
             
                      statement = "UPDATE #{quote_name(model.storage_name(name))}"
         | 
| 441 | 
            -
                      statement << " SET #{properties.map { |property| "#{quote_name(property.field)} = ?" }.join( | 
| 461 | 
            +
                      statement << " SET #{properties.map { |property| "#{quote_name(property.field)} = ?" }.join(COLUMN_SEPARATOR)}"
         | 
| 442 462 | 
             
                      statement << " WHERE #{conditions_statement}" unless DataMapper::Ext.blank?(conditions_statement)
         | 
| 443 463 |  | 
| 444 464 | 
             
                      return statement, bind_values
         | 
| @@ -473,7 +493,7 @@ module DataMapper | |
| 473 493 | 
             
                    #
         | 
| 474 494 | 
             
                    # @api private
         | 
| 475 495 | 
             
                    def columns_statement(properties, qualify)
         | 
| 476 | 
            -
                      properties.map { |property| property_to_column_name(property, qualify) }.join( | 
| 496 | 
            +
                      properties.map { |property| property_to_column_name(property, qualify) }.join(COLUMN_SEPARATOR)
         | 
| 477 497 | 
             
                    end
         | 
| 478 498 |  | 
| 479 499 | 
             
                    # Constructs joins clause
         | 
| @@ -504,7 +524,7 @@ module DataMapper | |
| 504 524 | 
             
                          seen[source_alias] = 0
         | 
| 505 525 | 
             
                        end
         | 
| 506 526 |  | 
| 507 | 
            -
                        statements <<  | 
| 527 | 
            +
                        statements << ON_KEYWORD
         | 
| 508 528 |  | 
| 509 529 | 
             
                        add_join_conditions(relationship, target_alias, source_alias, statements)
         | 
| 510 530 | 
             
                        add_extra_join_conditions(relationship, target_alias, statements, join_bind_values)
         | 
| @@ -513,13 +533,13 @@ module DataMapper | |
| 513 533 | 
             
                      # prepend the join bind values to the statement bind values
         | 
| 514 534 | 
             
                      bind_values.unshift(*join_bind_values)
         | 
| 515 535 |  | 
| 516 | 
            -
                      statements.join( | 
| 536 | 
            +
                      statements.join(SPACE)
         | 
| 517 537 | 
             
                    end
         | 
| 518 538 |  | 
| 519 539 | 
             
                    def add_join_conditions(relationship, target_alias, source_alias, statements)
         | 
| 520 540 | 
             
                      statements << relationship.target_key.zip(relationship.source_key).map do |target_property, source_property|
         | 
| 521 541 | 
             
                        "#{property_to_column_name(target_property, target_alias)} = #{property_to_column_name(source_property, source_alias)}"
         | 
| 522 | 
            -
                      end.join( | 
| 542 | 
            +
                      end.join(AND_KEYWORD)
         | 
| 523 543 | 
             
                    end
         | 
| 524 544 |  | 
| 525 545 | 
             
                    def add_extra_join_conditions(relationship, target_alias, statements, bind_values)
         | 
| @@ -575,10 +595,10 @@ module DataMapper | |
| 575 595 | 
             
                      statement = if target_key.size == 1
         | 
| 576 596 | 
             
                        property_to_column_name(target_key.first, qualify)
         | 
| 577 597 | 
             
                      else
         | 
| 578 | 
            -
                        "(#{target_key.map { |property| property_to_column_name(property, qualify) }.join( | 
| 598 | 
            +
                        "(#{target_key.map { |property| property_to_column_name(property, qualify) }.join(COLUMN_SEPARATOR)})"
         | 
| 579 599 | 
             
                      end
         | 
| 580 600 |  | 
| 581 | 
            -
                      statement  | 
| 601 | 
            +
                      statement = "#{statement} IN (#{select_statement})"
         | 
| 582 602 |  | 
| 583 603 | 
             
                      return statement, bind_values
         | 
| 584 604 | 
             
                    end
         | 
| @@ -592,7 +612,7 @@ module DataMapper | |
| 592 612 | 
             
                      if conditions.valid?
         | 
| 593 613 | 
             
                        conditions_statement(conditions, qualify)
         | 
| 594 614 | 
             
                      else
         | 
| 595 | 
            -
                        [  | 
| 615 | 
            +
                        [ ONE_EQ_ZERO, [] ]
         | 
| 596 616 | 
             
                      end
         | 
| 597 617 | 
             
                    end
         | 
| 598 618 |  | 
| @@ -626,11 +646,11 @@ module DataMapper | |
| 626 646 | 
             
                    def order_statement(order, qualify)
         | 
| 627 647 | 
             
                      statements = order.map do |direction|
         | 
| 628 648 | 
             
                        statement = property_to_column_name(direction.target, qualify)
         | 
| 629 | 
            -
                        statement  | 
| 649 | 
            +
                        statement = "#{statement} DESC" if direction.operator == :desc
         | 
| 630 650 | 
             
                        statement
         | 
| 631 651 | 
             
                      end
         | 
| 632 652 |  | 
| 633 | 
            -
                      statements.join( | 
| 653 | 
            +
                      statements.join(COLUMN_SEPARATOR)
         | 
| 634 654 | 
             
                    end
         | 
| 635 655 |  | 
| 636 656 | 
             
                    # @api private
         | 
| @@ -699,10 +719,10 @@ module DataMapper | |
| 699 719 |  | 
| 700 720 | 
             
                      # if operator return value contains ? then it means that it is function call
         | 
| 701 721 | 
             
                      # and it contains placeholder (%s) for property name as well (used in Oracle adapter for regexp operator)
         | 
| 702 | 
            -
                      if operator.include?( | 
| 722 | 
            +
                      if operator.include?(QUESTION_MARK)
         | 
| 703 723 | 
             
                        return operator % column_name, [ value ]
         | 
| 704 724 | 
             
                      else
         | 
| 705 | 
            -
                        return "#{column_name} #{operator} #{value.nil? ?  | 
| 725 | 
            +
                        return "#{column_name} #{operator} #{value.nil? ? NULL_KEYWORD : QUESTION_MARK}", [ value ].compact
         | 
| 706 726 | 
             
                      end
         | 
| 707 727 | 
             
                    end
         | 
| 708 728 |  | 
| @@ -715,39 +735,39 @@ module DataMapper | |
| 715 735 | 
             
                        when :in     then include_operator(subject, value)
         | 
| 716 736 | 
             
                        when :regexp then regexp_operator(value)
         | 
| 717 737 | 
             
                        when :like   then like_operator(value)
         | 
| 718 | 
            -
                        when :gt     then  | 
| 719 | 
            -
                        when :lt     then  | 
| 720 | 
            -
                        when :gte    then  | 
| 721 | 
            -
                        when :lte    then  | 
| 738 | 
            +
                        when :gt     then GT_OPERATOR
         | 
| 739 | 
            +
                        when :lt     then LT_OPERATOR
         | 
| 740 | 
            +
                        when :gte    then GTE_OPERATOR
         | 
| 741 | 
            +
                        when :lte    then LTE_OPERATOR
         | 
| 722 742 | 
             
                      end
         | 
| 723 743 | 
             
                    end
         | 
| 724 744 |  | 
| 725 745 | 
             
                    # @api private
         | 
| 726 746 | 
             
                    def equality_operator(property, operand)
         | 
| 727 | 
            -
                      operand.nil? ?  | 
| 747 | 
            +
                      operand.nil? ? IS_OPERATOR : EQ_OPERATOR
         | 
| 728 748 | 
             
                    end
         | 
| 729 749 |  | 
| 730 750 | 
             
                    # @api private
         | 
| 731 751 | 
             
                    def include_operator(property, operand)
         | 
| 732 752 | 
             
                      case operand
         | 
| 733 | 
            -
                        when Array then  | 
| 734 | 
            -
                        when Range then  | 
| 753 | 
            +
                        when Array then IN_OPERATOR
         | 
| 754 | 
            +
                        when Range then BETWEEN_OPERATOR
         | 
| 735 755 | 
             
                      end
         | 
| 736 756 | 
             
                    end
         | 
| 737 757 |  | 
| 738 758 | 
             
                    # @api private
         | 
| 739 759 | 
             
                    def regexp_operator(operand)
         | 
| 740 | 
            -
                       | 
| 760 | 
            +
                      REGEXP_OPERATOR
         | 
| 741 761 | 
             
                    end
         | 
| 742 762 |  | 
| 743 763 | 
             
                    # @api private
         | 
| 744 764 | 
             
                    def like_operator(operand)
         | 
| 745 | 
            -
                       | 
| 765 | 
            +
                      LIKE_OPERATOR
         | 
| 746 766 | 
             
                    end
         | 
| 747 767 |  | 
| 748 768 | 
             
                    # @api private
         | 
| 749 769 | 
             
                    def quote_name(name)
         | 
| 750 | 
            -
                      "\"#{name[0, self.class::IDENTIFIER_MAX_LENGTH].gsub( | 
| 770 | 
            +
                      "\"#{name[0, self.class::IDENTIFIER_MAX_LENGTH].gsub(SINGLE_QUOTE,DOUBLE_QUOTE)}\""
         | 
| 751 771 | 
             
                    end
         | 
| 752 772 |  | 
| 753 773 | 
             
                  end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ardm-do-adapter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 4 | 
            +
              version: 1.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Martin Emde
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2015- | 
| 12 | 
            +
            date: 2015-02-10 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: data_objects
         | 
| @@ -75,12 +75,12 @@ executables: [] | |
| 75 75 | 
             
            extensions: []
         | 
| 76 76 | 
             
            extra_rdoc_files:
         | 
| 77 77 | 
             
            - LICENSE
         | 
| 78 | 
            -
            - README. | 
| 78 | 
            +
            - README.md
         | 
| 79 79 | 
             
            files:
         | 
| 80 80 | 
             
            - ".gitignore"
         | 
| 81 81 | 
             
            - Gemfile
         | 
| 82 82 | 
             
            - LICENSE
         | 
| 83 | 
            -
            - README. | 
| 83 | 
            +
            - README.md
         | 
| 84 84 | 
             
            - Rakefile
         | 
| 85 85 | 
             
            - ardm-do-adapter.gemspec
         | 
| 86 86 | 
             
            - lib/ardm-do-adapter.rb
         | 
    
        data/README.rdoc
    DELETED