sql_runner 0.3.0 → 0.4.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/.github/workflows/test.yml +81 -0
 - data/.gitignore +1 -0
 - data/.rubocop.yml +2 -1
 - data/CODE_OF_CONDUCT.md +12 -12
 - data/README.md +2 -5
 - data/lib/sql_runner/adapters/active_record.rb +17 -1
 - data/lib/sql_runner/adapters/sqlite.rb +91 -0
 - data/lib/sql_runner/adapters.rb +1 -0
 - data/lib/sql_runner/query.rb +8 -1
 - data/lib/sql_runner/version.rb +1 -1
 - data/lib/sql_runner.rb +2 -0
 - data/sql_runner.gemspec +2 -1
 - metadata +20 -5
 - data/.travis.yml +0 -29
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3224a627fbfdb75b22aff61e35fce3def752d203da72e6cfc89a80c539cfd413
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0b6102814d498c2fbf53b1b642f3d03b639af95514d5d1d9854d579deb79aee4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6a622ef1f472136f5298a3fa4c37ba3b46f3265e7538c126ad2718e950db0e24fcfd65b49dad8eee47cf7fa699ca0623cc970cebbaabc89f327092ef5998b910
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 126036d892682c63236f01dec9152fdf8cbc66e58846e04ca2e4767a408409e1f154cf57104d8cc59b78f03310f359293856e987d1271ab4efdbd72867f97dc1
         
     | 
| 
         @@ -0,0 +1,81 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: ruby-tests
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            on:
         
     | 
| 
      
 5 
     | 
    
         
            +
              pull_request_target:
         
     | 
| 
      
 6 
     | 
    
         
            +
              push:
         
     | 
| 
      
 7 
     | 
    
         
            +
                branches:
         
     | 
| 
      
 8 
     | 
    
         
            +
                  - main
         
     | 
| 
      
 9 
     | 
    
         
            +
              workflow_dispatch:
         
     | 
| 
      
 10 
     | 
    
         
            +
                inputs: {}
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            jobs:
         
     | 
| 
      
 13 
     | 
    
         
            +
              build:
         
     | 
| 
      
 14 
     | 
    
         
            +
                name: Tests with Ruby ${{ matrix.ruby }} and ${{ matrix.gemfile }}
         
     | 
| 
      
 15 
     | 
    
         
            +
                runs-on: "ubuntu-latest"
         
     | 
| 
      
 16 
     | 
    
         
            +
                if: |
         
     | 
| 
      
 17 
     | 
    
         
            +
                  github.actor == 'dependabot[bot]' && github.event_name == 'pull_request_target' ||
         
     | 
| 
      
 18 
     | 
    
         
            +
                  github.actor != 'dependabot[bot]'
         
     | 
| 
      
 19 
     | 
    
         
            +
                strategy:
         
     | 
| 
      
 20 
     | 
    
         
            +
                  fail-fast: false
         
     | 
| 
      
 21 
     | 
    
         
            +
                  matrix:
         
     | 
| 
      
 22 
     | 
    
         
            +
                    ruby: ["3.0", "3.1", "3.2"]
         
     | 
| 
      
 23 
     | 
    
         
            +
                    gemfile:
         
     | 
| 
      
 24 
     | 
    
         
            +
                      - Gemfile
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                services:
         
     | 
| 
      
 27 
     | 
    
         
            +
                  postgres:
         
     | 
| 
      
 28 
     | 
    
         
            +
                    image: postgres
         
     | 
| 
      
 29 
     | 
    
         
            +
                    env:
         
     | 
| 
      
 30 
     | 
    
         
            +
                      POSTGRES_DB: test
         
     | 
| 
      
 31 
     | 
    
         
            +
                      POSTGRES_HOST_AUTH_METHOD: trust
         
     | 
| 
      
 32 
     | 
    
         
            +
                    options: >-
         
     | 
| 
      
 33 
     | 
    
         
            +
                      --health-cmd pg_isready --health-interval 10s --health-timeout 5s
         
     | 
| 
      
 34 
     | 
    
         
            +
                      --health-retries 5
         
     | 
| 
      
 35 
     | 
    
         
            +
                    ports:
         
     | 
| 
      
 36 
     | 
    
         
            +
                      - 5432:5432
         
     | 
| 
      
 37 
     | 
    
         
            +
                  mysql:
         
     | 
| 
      
 38 
     | 
    
         
            +
                    image: mysql:8.0
         
     | 
| 
      
 39 
     | 
    
         
            +
                    env:
         
     | 
| 
      
 40 
     | 
    
         
            +
                      MYSQL_ROOT_PASSWORD: test
         
     | 
| 
      
 41 
     | 
    
         
            +
                      MYSQL_PASSWORD: test
         
     | 
| 
      
 42 
     | 
    
         
            +
                      MYSQL_DATABASE: test
         
     | 
| 
      
 43 
     | 
    
         
            +
                      MYSQL_USER: test
         
     | 
| 
      
 44 
     | 
    
         
            +
                    ports:
         
     | 
| 
      
 45 
     | 
    
         
            +
                      - 3306:3306
         
     | 
| 
      
 46 
     | 
    
         
            +
                    options:
         
     | 
| 
      
 47 
     | 
    
         
            +
                      --health-cmd="mysqladmin ping" --health-interval=10s
         
     | 
| 
      
 48 
     | 
    
         
            +
                      --health-timeout=5s --health-retries=3
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                steps:
         
     | 
| 
      
 51 
     | 
    
         
            +
                  - uses: actions/checkout@v3
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  - uses: actions/cache@v3
         
     | 
| 
      
 54 
     | 
    
         
            +
                    with:
         
     | 
| 
      
 55 
     | 
    
         
            +
                      path: vendor/bundle
         
     | 
| 
      
 56 
     | 
    
         
            +
                      key: >
         
     | 
| 
      
 57 
     | 
    
         
            +
                        ${{ runner.os }}-${{ matrix.ruby }}-gems-${{
         
     | 
| 
      
 58 
     | 
    
         
            +
                        hashFiles(matrix.gemfile) }}
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  - name: Set up Ruby
         
     | 
| 
      
 61 
     | 
    
         
            +
                    uses: ruby/setup-ruby@v1
         
     | 
| 
      
 62 
     | 
    
         
            +
                    with:
         
     | 
| 
      
 63 
     | 
    
         
            +
                      ruby-version: ${{ matrix.ruby }}
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  - name: Install gem dependencies
         
     | 
| 
      
 66 
     | 
    
         
            +
                    env:
         
     | 
| 
      
 67 
     | 
    
         
            +
                      BUNDLE_GEMFILE: ${{ matrix.gemfile }}
         
     | 
| 
      
 68 
     | 
    
         
            +
                    run: |
         
     | 
| 
      
 69 
     | 
    
         
            +
                      gem install bundler
         
     | 
| 
      
 70 
     | 
    
         
            +
                      bundle config path vendor/bundle
         
     | 
| 
      
 71 
     | 
    
         
            +
                      bundle update --jobs 4 --retry 3
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  - name: Run Tests
         
     | 
| 
      
 74 
     | 
    
         
            +
                    env:
         
     | 
| 
      
 75 
     | 
    
         
            +
                      PGHOST: localhost
         
     | 
| 
      
 76 
     | 
    
         
            +
                      PGUSER: postgres
         
     | 
| 
      
 77 
     | 
    
         
            +
                      PG_DATABASE_URL: "postgres://127.0.0.1/test?application_name=sql_runner"
         
     | 
| 
      
 78 
     | 
    
         
            +
                      MYSQL_DATABASE_URL: "mysql2://test:test@127.0.0.1/test?application_name=sql_runner"
         
     | 
| 
      
 79 
     | 
    
         
            +
                      BUNDLE_GEMFILE: ${{ matrix.gemfile }}
         
     | 
| 
      
 80 
     | 
    
         
            +
                    run: |
         
     | 
| 
      
 81 
     | 
    
         
            +
                      bundle exec rake
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/CODE_OF_CONDUCT.md
    CHANGED
    
    | 
         @@ -12,19 +12,19 @@ body size, race, ethnicity, age, religion, or nationality. 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            Examples of unacceptable behavior by participants include:
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            - The use of sexualized language or imagery
         
     | 
| 
      
 16 
     | 
    
         
            +
            - Personal attacks
         
     | 
| 
      
 17 
     | 
    
         
            +
            - Trolling or insulting/derogatory comments
         
     | 
| 
      
 18 
     | 
    
         
            +
            - Public or private harassment
         
     | 
| 
      
 19 
     | 
    
         
            +
            - Publishing other's private information, such as physical or electronic
         
     | 
| 
       20 
20 
     | 
    
         
             
              addresses, without explicit permission
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
            - Other unethical or unprofessional conduct
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            Project maintainers have the right and responsibility to remove, edit, or
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
            Project maintainers have the right and responsibility to remove, edit, or reject
         
     | 
| 
      
 24 
     | 
    
         
            +
            comments, commits, code, wiki edits, issues, and other contributions that are
         
     | 
| 
      
 25 
     | 
    
         
            +
            not aligned to this Code of Conduct, or to ban temporarily or permanently any
         
     | 
| 
      
 26 
     | 
    
         
            +
            contributor for other behaviors that they deem inappropriate, threatening,
         
     | 
| 
      
 27 
     | 
    
         
            +
            offensive, or harmful.
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            By adopting this Code of Conduct, project maintainers commit themselves to
         
     | 
| 
       30 
30 
     | 
    
         
             
            fairly and consistently applying these principles to every aspect of managing
         
     | 
| 
         @@ -46,4 +46,4 @@ version 1.3.0, available at 
     | 
|
| 
       46 
46 
     | 
    
         
             
            [http://contributor-covenant.org/version/1/3/0/][version]
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            [homepage]: http://contributor-covenant.org
         
     | 
| 
       49 
     | 
    
         
            -
            [version]: http://contributor-covenant.org/version/1/3/0/
         
     | 
| 
      
 49 
     | 
    
         
            +
            [version]: http://contributor-covenant.org/version/1/3/0/
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,8 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # SQLRunner
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            [](https://travis-ci.org/fnando/sql_runner)
         
     | 
| 
       4 
     | 
    
         
            -
            [](https://codeclimate.com/github/fnando/sql_runner)
         
     | 
| 
       5 
     | 
    
         
            -
            [](https://codeclimate.com/github/fnando/sql_runner/coverage)
         
     | 
| 
       6 
3 
     | 
    
         
             
            [](https://rubygems.org/gems/sql_runner)
         
     | 
| 
       7 
4 
     | 
    
         
             
            [](https://rubygems.org/gems/sql_runner)
         
     | 
| 
       8 
5 
     | 
    
         | 
| 
         @@ -48,7 +45,7 @@ Run SQL files: 
     | 
|
| 
       48 
45 
     | 
    
         
             
            SQLRunner.root_dir = "#{__dir__}/sql"
         
     | 
| 
       49 
46 
     | 
    
         | 
| 
       50 
47 
     | 
    
         
             
            class GetMembers < SQLRunner::Query
         
     | 
| 
       51 
     | 
    
         
            -
              # by default will use root_dir/get_members.sql
         
     | 
| 
      
 48 
     | 
    
         
            +
              # by default will use root_dir/get_members.{sql,psql}
         
     | 
| 
       52 
49 
     | 
    
         
             
            end
         
     | 
| 
       53 
50 
     | 
    
         
             
            ```
         
     | 
| 
       54 
51 
     | 
    
         | 
| 
         @@ -72,7 +69,7 @@ Specify other options: 
     | 
|
| 
       72 
69 
     | 
    
         | 
| 
       73 
70 
     | 
    
         
             
            ```ruby
         
     | 
| 
       74 
71 
     | 
    
         
             
            class GetMembers < SQLRunner::Query
         
     | 
| 
       75 
     | 
    
         
            -
              query_name "users" #=> will load root_dir/users.sql
         
     | 
| 
      
 72 
     | 
    
         
            +
              query_name "users" #=> will load root_dir/users.{psql,sql}
         
     | 
| 
       76 
73 
     | 
    
         
             
              root_dir "/some/path"
         
     | 
| 
       77 
74 
     | 
    
         
             
            end
         
     | 
| 
       78 
75 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -27,6 +27,18 @@ module SQLRunner 
     | 
|
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                  class SQLite < SQLRunner::Adapters::SQLite
         
     | 
| 
      
 31 
     | 
    
         
            +
                    def initialize(connection) # rubocop:disable Lint/MissingSuper
         
     | 
| 
      
 32 
     | 
    
         
            +
                      @connection = connection
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    def connect(*)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    def disconnect(*)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       30 
42 
     | 
    
         
             
                  class ConnectionPool
         
     | 
| 
       31 
43 
     | 
    
         
             
                    def with
         
     | 
| 
       32 
44 
     | 
    
         
             
                      ::ActiveRecord::Base.connection_pool.with_connection do |connection|
         
     | 
| 
         @@ -37,8 +49,12 @@ module SQLRunner 
     | 
|
| 
       37 
49 
     | 
    
         
             
                                    PostgreSQL.new(connection)
         
     | 
| 
       38 
50 
     | 
    
         
             
                                  when "Mysql2::Client"
         
     | 
| 
       39 
51 
     | 
    
         
             
                                    MySQL.new(connection)
         
     | 
| 
      
 52 
     | 
    
         
            +
                                  when "SQLite3::Database"
         
     | 
| 
      
 53 
     | 
    
         
            +
                                    SQLite.new(connection)
         
     | 
| 
       40 
54 
     | 
    
         
             
                                  else
         
     | 
| 
       41 
     | 
    
         
            -
                                    raise UnsupportedDatabase
         
     | 
| 
      
 55 
     | 
    
         
            +
                                    raise UnsupportedDatabase,
         
     | 
| 
      
 56 
     | 
    
         
            +
                                          "#{connection.class.name} is not yet supported " \
         
     | 
| 
      
 57 
     | 
    
         
            +
                                          "by the SQLRunner's ActiveRecord adapter"
         
     | 
| 
       42 
58 
     | 
    
         
             
                                  end
         
     | 
| 
       43 
59 
     | 
    
         | 
| 
       44 
60 
     | 
    
         
             
                        yield(adapter)
         
     | 
| 
         @@ -0,0 +1,91 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module SQLRunner
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Adapters
         
     | 
| 
      
 5 
     | 
    
         
            +
                class SQLite
         
     | 
| 
      
 6 
     | 
    
         
            +
                  InvalidPreparedStatement = Class.new(StandardError)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  def self.load
         
     | 
| 
      
 9 
     | 
    
         
            +
                    require "sqlite3"
         
     | 
| 
      
 10 
     | 
    
         
            +
                  rescue LoadError
         
     | 
| 
      
 11 
     | 
    
         
            +
                    raise MissingDependency, "make sure the `sqlite3` gem is available"
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.create_connection_pool(timeout:, size:, connection_string:)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    ConnectionPool.new(timeout: timeout, size: size) do
         
     | 
| 
      
 16 
     | 
    
         
            +
                      new(connection_string)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def initialize(connection_string)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @connection_string = connection_string
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @uri = URI(connection_string)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    connect
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def connect
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @connection = SQLite3::Database.new(
         
     | 
| 
      
 28 
     | 
    
         
            +
                      @uri.hostname || @uri.opaque,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      results_as_hash: true
         
     | 
| 
      
 30 
     | 
    
         
            +
                    )
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def disconnect
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @connection&.close && (@connection = nil)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def reconnect
         
     | 
| 
      
 38 
     | 
    
         
            +
                    disconnect
         
     | 
| 
      
 39 
     | 
    
         
            +
                    connect
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  def execute(query, **bind_vars)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    _, _, names = parse(query, bind_vars)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    validate_bindings(query, bind_vars, names)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    @connection.execute(query, **bind_vars)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  def active?
         
     | 
| 
      
 50 
     | 
    
         
            +
                    !@connection&.closed?
         
     | 
| 
      
 51 
     | 
    
         
            +
                  rescue SQLite3::Exception
         
     | 
| 
      
 52 
     | 
    
         
            +
                    false
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  def to_s
         
     | 
| 
      
 56 
     | 
    
         
            +
                    %[#<#{self.class.name} #{format('0x00%x', (object_id << 1))}>]
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 60 
     | 
    
         
            +
                    to_s
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  def parse(query, bind_vars)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    bindings = []
         
     | 
| 
      
 65 
     | 
    
         
            +
                    names = []
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    parsed_query = query.gsub(/(:?):([a-zA-Z]\w*)/) do |match|
         
     | 
| 
      
 68 
     | 
    
         
            +
                      next match if Regexp.last_match(1) == ":" # skip type casting
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                      name = match[1..-1]
         
     | 
| 
      
 71 
     | 
    
         
            +
                      sym_name = name.to_sym
         
     | 
| 
      
 72 
     | 
    
         
            +
                      names << sym_name
         
     | 
| 
      
 73 
     | 
    
         
            +
                      bindings << bind_vars[sym_name]
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                      "?"
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    [parsed_query, bindings, names]
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  private def validate_bindings(query, bind_vars, names)
         
     | 
| 
      
 82 
     | 
    
         
            +
                    names.each do |name|
         
     | 
| 
      
 83 
     | 
    
         
            +
                      next if bind_vars.key?(name)
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                      raise InvalidPreparedStatement,
         
     | 
| 
      
 86 
     | 
    
         
            +
                            "missing value for :#{name} in #{query}"
         
     | 
| 
      
 87 
     | 
    
         
            +
                    end
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/sql_runner/adapters.rb
    CHANGED
    
    
    
        data/lib/sql_runner/query.rb
    CHANGED
    
    | 
         @@ -37,7 +37,14 @@ module SQLRunner 
     | 
|
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                def self.query(*value)
         
     | 
| 
       39 
39 
     | 
    
         
             
                  @query = value.first if value.any?
         
     | 
| 
       40 
     | 
    
         
            -
                  @query || (@query = File.read( 
     | 
| 
      
 40 
     | 
    
         
            +
                  @query || (@query = File.read(find_query_file))
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def self.find_query_file
         
     | 
| 
      
 44 
     | 
    
         
            +
                  [
         
     | 
| 
      
 45 
     | 
    
         
            +
                    File.join(root_dir, "#{query_name}.psql"),
         
     | 
| 
      
 46 
     | 
    
         
            +
                    File.join(root_dir, "#{query_name}.sql")
         
     | 
| 
      
 47 
     | 
    
         
            +
                  ].find {|file| File.file?(file) }
         
     | 
| 
       41 
48 
     | 
    
         
             
                end
         
     | 
| 
       42 
49 
     | 
    
         | 
| 
       43 
50 
     | 
    
         
             
                def self.connection_pool
         
     | 
    
        data/lib/sql_runner/version.rb
    CHANGED
    
    
    
        data/lib/sql_runner.rb
    CHANGED
    
    | 
         @@ -22,6 +22,8 @@ module SQLRunner 
     | 
|
| 
       22 
22 
     | 
    
         
             
              Adapters.register("postgresql", Adapters::PostgreSQL)
         
     | 
| 
       23 
23 
     | 
    
         
             
              Adapters.register("mysql", Adapters::MySQL)
         
     | 
| 
       24 
24 
     | 
    
         
             
              Adapters.register("mysql2", Adapters::MySQL)
         
     | 
| 
      
 25 
     | 
    
         
            +
              Adapters.register("sqlite", Adapters::SQLite)
         
     | 
| 
      
 26 
     | 
    
         
            +
              Adapters.register("sqlite3", Adapters::SQLite)
         
     | 
| 
       25 
27 
     | 
    
         | 
| 
       26 
28 
     | 
    
         
             
              Query.register_plugin :one, Query::One
         
     | 
| 
       27 
29 
     | 
    
         
             
              Query.register_plugin :many, Query::Many
         
     | 
    
        data/sql_runner.gemspec
    CHANGED
    
    | 
         @@ -7,7 +7,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       7 
7 
     | 
    
         
             
              spec.version       = SQLRunner::VERSION
         
     | 
| 
       8 
8 
     | 
    
         
             
              spec.authors       = ["Nando Vieira"]
         
     | 
| 
       9 
9 
     | 
    
         
             
              spec.email         = ["me@fnando.com"]
         
     | 
| 
       10 
     | 
    
         
            -
              spec.required_ruby_version = Gem::Requirement.new(">=  
     | 
| 
      
 10 
     | 
    
         
            +
              spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
         
     | 
| 
       11 
11 
     | 
    
         
             
              spec.metadata = {"rubygems_mfa_required" => "true"}
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
              spec.summary = <<~TEXT.tr("\n", " ")
         
     | 
| 
         @@ -39,4 +39,5 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       39 
39 
     | 
    
         
             
              spec.add_development_dependency "rubocop"
         
     | 
| 
       40 
40 
     | 
    
         
             
              spec.add_development_dependency "rubocop-fnando"
         
     | 
| 
       41 
41 
     | 
    
         
             
              spec.add_development_dependency "simplecov"
         
     | 
| 
      
 42 
     | 
    
         
            +
              spec.add_development_dependency "sqlite3"
         
     | 
| 
       42 
43 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sql_runner
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Nando Vieira
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-01-04 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: connection_pool
         
     | 
| 
         @@ -178,6 +178,20 @@ dependencies: 
     | 
|
| 
       178 
178 
     | 
    
         
             
                - - ">="
         
     | 
| 
       179 
179 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       180 
180 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 181 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 182 
     | 
    
         
            +
              name: sqlite3
         
     | 
| 
      
 183 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 184 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 185 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 186 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 187 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 188 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 189 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 190 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 191 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 192 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 193 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 194 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       181 
195 
     | 
    
         
             
            description: SQLRunner allows you to load your queries out of SQL files, without using
         
     | 
| 
       182 
196 
     | 
    
         
             
              ORMs.
         
     | 
| 
       183 
197 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -187,9 +201,9 @@ extensions: [] 
     | 
|
| 
       187 
201 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       188 
202 
     | 
    
         
             
            files:
         
     | 
| 
       189 
203 
     | 
    
         
             
            - ".github/FUNDING.yml"
         
     | 
| 
      
 204 
     | 
    
         
            +
            - ".github/workflows/test.yml"
         
     | 
| 
       190 
205 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       191 
206 
     | 
    
         
             
            - ".rubocop.yml"
         
     | 
| 
       192 
     | 
    
         
            -
            - ".travis.yml"
         
     | 
| 
       193 
207 
     | 
    
         
             
            - CODE_OF_CONDUCT.md
         
     | 
| 
       194 
208 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       195 
209 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
         @@ -211,6 +225,7 @@ files: 
     | 
|
| 
       211 
225 
     | 
    
         
             
            - lib/sql_runner/adapters/active_record.rb
         
     | 
| 
       212 
226 
     | 
    
         
             
            - lib/sql_runner/adapters/mysql.rb
         
     | 
| 
       213 
227 
     | 
    
         
             
            - lib/sql_runner/adapters/postgresql.rb
         
     | 
| 
      
 228 
     | 
    
         
            +
            - lib/sql_runner/adapters/sqlite.rb
         
     | 
| 
       214 
229 
     | 
    
         
             
            - lib/sql_runner/configuration.rb
         
     | 
| 
       215 
230 
     | 
    
         
             
            - lib/sql_runner/connection.rb
         
     | 
| 
       216 
231 
     | 
    
         
             
            - lib/sql_runner/query.rb
         
     | 
| 
         @@ -233,14 +248,14 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       233 
248 
     | 
    
         
             
              requirements:
         
     | 
| 
       234 
249 
     | 
    
         
             
              - - ">="
         
     | 
| 
       235 
250 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       236 
     | 
    
         
            -
                  version:  
     | 
| 
      
 251 
     | 
    
         
            +
                  version: 3.0.0
         
     | 
| 
       237 
252 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       238 
253 
     | 
    
         
             
              requirements:
         
     | 
| 
       239 
254 
     | 
    
         
             
              - - ">="
         
     | 
| 
       240 
255 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       241 
256 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       242 
257 
     | 
    
         
             
            requirements: []
         
     | 
| 
       243 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 258 
     | 
    
         
            +
            rubygems_version: 3.4.1
         
     | 
| 
       244 
259 
     | 
    
         
             
            signing_key:
         
     | 
| 
       245 
260 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       246 
261 
     | 
    
         
             
            summary: SQLRunner allows you to load your queries out of SQL files, without using
         
     | 
    
        data/.travis.yml
    DELETED
    
    | 
         @@ -1,29 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ---
         
     | 
| 
       2 
     | 
    
         
            -
            language: ruby
         
     | 
| 
       3 
     | 
    
         
            -
            cache: bundler
         
     | 
| 
       4 
     | 
    
         
            -
            sudo: false
         
     | 
| 
       5 
     | 
    
         
            -
            rvm:
         
     | 
| 
       6 
     | 
    
         
            -
              - 2.7.0
         
     | 
| 
       7 
     | 
    
         
            -
            services:
         
     | 
| 
       8 
     | 
    
         
            -
              - mysql
         
     | 
| 
       9 
     | 
    
         
            -
            addons:
         
     | 
| 
       10 
     | 
    
         
            -
              postgresql: "10"
         
     | 
| 
       11 
     | 
    
         
            -
              apt:
         
     | 
| 
       12 
     | 
    
         
            -
                packages:
         
     | 
| 
       13 
     | 
    
         
            -
                - postgresql-10
         
     | 
| 
       14 
     | 
    
         
            -
                - postgresql-client-10
         
     | 
| 
       15 
     | 
    
         
            -
            before_script:
         
     | 
| 
       16 
     | 
    
         
            -
              - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
         
     | 
| 
       17 
     | 
    
         
            -
              - chmod +x ./cc-test-reporter
         
     | 
| 
       18 
     | 
    
         
            -
              - "./cc-test-reporter before-build"
         
     | 
| 
       19 
     | 
    
         
            -
            after_script:
         
     | 
| 
       20 
     | 
    
         
            -
              - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
         
     | 
| 
       21 
     | 
    
         
            -
            before_install:
         
     | 
| 
       22 
     | 
    
         
            -
              - gem install bundler
         
     | 
| 
       23 
     | 
    
         
            -
              - createdb test
         
     | 
| 
       24 
     | 
    
         
            -
              - mysql -e 'CREATE DATABASE IF NOT EXISTS test;'
         
     | 
| 
       25 
     | 
    
         
            -
            notifications:
         
     | 
| 
       26 
     | 
    
         
            -
              email: false
         
     | 
| 
       27 
     | 
    
         
            -
            env:
         
     | 
| 
       28 
     | 
    
         
            -
              global:
         
     | 
| 
       29 
     | 
    
         
            -
                secure: 4dDrl8nCItKPRKpoA2KJVWsDm3o7U0pIsdY8t19pJXbziteT3zw5pEmFh+/qWGB1VszzFFZzXcZCIoKv3NX/x24g+LU+qvL7vLYLyhUR8ZjR4rGzGkwBCgEYBWgVtqg9ncYTbYsdbAqryt6f+HvpFj8EFvGSjIWVqJyh59qHdwAVT+BUKjllEH+t5Dbjd2knIQw83af+0A5ljP2uMziNcuHD7MUBIKY1DfFnBYQ5YA50o/mZe8sG5h6bZU/sf0pdoa+z2xDIJOPO7qaCwANACetDtsfs1DN39DsubvlFLg0s2z0XCuYyWSsJQ4zhRipHgnqYn+Rmpql17t0WmhVPA1xvLyk0/4X8rjRcYyYHMM3ryga5bnrpvSiPsqG+JFNhDczpN394KGa7o+/jCuNA0MVFcCzsvW2AMkYpUbPtADY7/Tl4iUJWmFbl0nO1n1wh5dDJ7Wo7mdkPAmdV7hNmMUmHbPeh8mSjMnuS2gcMc11wDgmR56TEMu/B7LUM31og7L+JouEJAOWtzThtpdYLpqDQ3Xe1G5uMl1oZ0lNOqag5Bg+AQCAIGr1N4G2m8fI74M9lUQUfhu87L+zycYMHInOH+Czc+RamlkH3vLl9Fu6aOKoXA0+zh85sVDj3Er+X2NEHaoRe4PSkOHOBNYSkAUd36TYMt8J5MgAD0w7HqmY=
         
     |