arel-mysql-index-hint 0.2.0 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd3ea13829125be3b801b2bd5efd82ff211ad836
4
- data.tar.gz: 23697becdb7e827f158be683b9aa1ccd227b8f4c
3
+ metadata.gz: 4c394a75c7e804ce2a5310c2d82990542448f7da
4
+ data.tar.gz: 1aa537b4cfc0a6428c9009939be6904dc18faddc
5
5
  SHA512:
6
- metadata.gz: 5bdfff196ec5cce732a4efe3e260f03fd65228fb18b3998d8789968048f624112e08ecd11e8bdd1fc5e411592470537e4b8312cf8a20df2723aab612142f1973
7
- data.tar.gz: 3b97674afac1b123ec5e3ffdbd6e566d9fbc55ae2a23fab2db60dac6fbf3904fcb3a77e2fc4b6c6c1d1a4f06edf5a0a3532b30f9d420f21bbebe38209849d75b
6
+ metadata.gz: 457533a884cba18970f34048a2e43922a77136ef8d4d5e0a11752c605004e592dbfb4891380f0708fa2d821a3894e59ff6cc7e6d7098f9da87d22c7019605df0
7
+ data.tar.gz: 0ef7776f7604d29260d499a40963860de4a7933d557ba0aa58c28f93f0be2a43beaac0799f4c03fc9372f3ad4dd51660c7e42847d2b9b96f9b07c3babb47c9e9
@@ -1,8 +1,17 @@
1
+ dist: trusty
2
+ sudo: required
1
3
  language: ruby
2
4
  rvm:
3
5
  - 2.0.0
4
- - 2.1.5
5
- - 2.2.1
6
+ - 2.1.8
7
+ - 2.2.4
8
+ - 2.3.0
9
+ before_install:
10
+ - gem install bundler
11
+ before_script:
12
+ - docker-compose up -d
13
+ - function mysql_ping { mysqladmin -u root -h 127.0.0.1 -ppassword ping > /dev/null 2> /dev/null; }
14
+ - for i in {1..60}; do mysql_ping && break; sleep 1; done
6
15
  script:
7
16
  - bundle install
8
17
  - bundle exec rake
@@ -10,3 +19,9 @@ gemfile:
10
19
  - gemfiles/activerecord_4.0.gemfile
11
20
  - gemfiles/activerecord_4.1.gemfile
12
21
  - gemfiles/activerecord_4.2.gemfile
22
+ services:
23
+ - docker
24
+ addons:
25
+ apt:
26
+ packages:
27
+ - mysql-client-5.6
data/Appraisals CHANGED
@@ -1,11 +1,13 @@
1
1
  appraise "activerecord-4.0" do
2
- gem "activerecord", "4.0.13"
2
+ gem "activerecord", "~> 4.0.0"
3
+ gem "mysql2", "~> 0.3.10"
3
4
  end
4
5
 
5
6
  appraise "activerecord-4.1" do
6
- gem "activerecord", "4.1.10"
7
+ gem "activerecord", "~> 4.1.0"
8
+ gem "mysql2", "~> 0.3.10"
7
9
  end
8
10
 
9
11
  appraise "activerecord-4.2" do
10
- gem "activerecord", "4.2.1"
12
+ gem "activerecord", "~> 4.2.0"
11
13
  end
data/README.md CHANGED
@@ -41,6 +41,27 @@ Article.joins(:comments).hint(comments: {force: :idx_comment})
41
41
  #=> "SELECT `articles`.* FROM `articles` INNER JOIN `comments` FORCE INDEX (`idx_comment`) ON `comments"
42
42
  ```
43
43
 
44
+ ## Running tests
45
+
46
+ ```sh
47
+ docker-compose up -d
48
+ bundle install
49
+ bundle exec appraisal install
50
+ bundle exec appraisal activerecord-4.0 rake
51
+ bundle exec appraisal activerecord-4.1 rake
52
+ bundle exec appraisal activerecord-4.2 rake
53
+ ```
54
+
55
+ **Notice:** mysql-client is required.
56
+
57
+ ### on OS X (docker-machine & VirtualBox)
58
+
59
+ Port forwarding is required.
60
+
61
+ ```sh
62
+ VBoxManage controlvm default natpf1 "mysql,tcp,127.0.0.1,3306,,3306"
63
+ ```
64
+
44
65
  ## Related Links
45
66
 
46
67
  * [MySQL::MySQL 5.6 Reference Manual::13.2.9.3 Index Hint Syntax](https://dev.mysql.com/doc/refman/5.6/en/index-hints.html)
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activerecord", ">= 4.0.0"
21
+ spec.add_dependency "activerecord", ">= 4.0.0", "< 5"
22
22
  spec.add_dependency "arel", ">= 4.0.0"
23
23
 
24
24
  spec.add_development_dependency "bundler"
@@ -0,0 +1,6 @@
1
+ mysql:
2
+ image: "mysql:5.6"
3
+ ports:
4
+ - "3306:3306"
5
+ environment:
6
+ MYSQL_ROOT_PASSWORD: password
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "4.0.13"
5
+ gem "activerecord", "~> 4.0.0"
6
+ gem "mysql2", "~> 0.3.10"
6
7
 
7
8
  gemspec :path => "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "4.1.10"
5
+ gem "activerecord", "~> 4.1.0"
6
+ gem "mysql2", "~> 0.3.10"
6
7
 
7
8
  gemspec :path => "../"
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "4.2.1"
5
+ gem "activerecord", "~> 4.2.0"
6
6
 
7
7
  gemspec :path => "../"
@@ -7,7 +7,7 @@ ActiveSupport.on_load :active_record do
7
7
  require "arel-mysql-index-hint/arel-visitors-mysql"
8
8
 
9
9
  ActiveRecord::Relation.class_eval do
10
- include ArelMysqlIndexHint::ActiveRecordHintMethods
10
+ prepend ArelMysqlIndexHint::ActiveRecordHintMethods
11
11
  end
12
12
 
13
13
  ActiveRecord::Querying.class_eval do
@@ -15,10 +15,10 @@ ActiveSupport.on_load :active_record do
15
15
  end
16
16
 
17
17
  Arel::Table.class_eval do
18
- include ArelMysqlIndexHint::ArelTable
18
+ prepend ArelMysqlIndexHint::ArelTable
19
19
  end
20
20
 
21
21
  Arel::Visitors::MySQL.class_eval do
22
- include ArelMysqlIndexHint::ArelVisitorsMySQL
22
+ prepend ArelMysqlIndexHint::ArelVisitorsMySQL
23
23
  end
24
24
  end
@@ -1,11 +1,5 @@
1
1
  module ArelMysqlIndexHint
2
2
  module ActiveRecordHintMethods
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- alias_method_chain :build_arel, :mysql_index_hint
7
- end
8
-
9
3
  def mysql_index_hint_value=(value)
10
4
  @values[:mysql_index_hint] = value
11
5
  end
@@ -20,8 +14,8 @@ module ArelMysqlIndexHint
20
14
  self
21
15
  end
22
16
 
23
- def build_arel_with_mysql_index_hint
24
- arel = build_arel_without_mysql_index_hint
17
+ def build_arel
18
+ arel = super
25
19
 
26
20
  if mysql_index_hint_value.present?
27
21
  if mysql_index_hint_value.values.any? {|i| i.is_a?(Hash) }
@@ -1,13 +1,7 @@
1
1
  module ArelMysqlIndexHint
2
2
  module ArelVisitorsMySQL
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- alias_method_chain :visit_Arel_Table, :mysql_index_hint
7
- end
8
-
9
- def visit_Arel_Table_with_mysql_index_hint(o, a)
10
- sql = visit_Arel_Table_without_mysql_index_hint(o, a)
3
+ def visit_Arel_Table(o, a)
4
+ sql = super
11
5
 
12
6
  if o.index_hint
13
7
  append_index_hint(sql, o.index_hint)
@@ -1,3 +1,3 @@
1
1
  module ArelMysqlIndexHint
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -15,6 +15,12 @@ require "models"
15
15
 
16
16
  $__arel_mysql_index_hint_sql_log__ = []
17
17
 
18
+ TEST_MYSQL_HOST = '127.0.0.1'
19
+ TEST_MYSQL_PORT = 3306
20
+ TEST_MYSQL_USER = 'root'
21
+ TEST_MYSQL_PASS = 'password'
22
+ MYSQL_CLI = "MYSQL_PWD=#{TEST_MYSQL_PASS} mysql -h #{TEST_MYSQL_HOST} -P #{TEST_MYSQL_PORT} -u #{TEST_MYSQL_USER}"
23
+
18
24
  ActiveSupport::Notifications.subscribe('sql.active_record') do |name, start, finish, id, payload|
19
25
  sql = payload[:sql]
20
26
  $__arel_mysql_index_hint_sql_log__ << sql.gsub(/\s+/, " ") if sql
@@ -26,7 +32,11 @@ RSpec.configure do |config|
26
32
 
27
33
  ActiveRecord::Base.establish_connection(
28
34
  adapter: 'mysql2',
29
- database: 'arel_mysql_index_hint_test'
35
+ database: 'arel_mysql_index_hint_test',
36
+ host: TEST_MYSQL_HOST,
37
+ port: TEST_MYSQL_PORT,
38
+ username: TEST_MYSQL_USER,
39
+ password: TEST_MYSQL_PASS,
30
40
  )
31
41
  end
32
42
 
@@ -37,7 +47,7 @@ end
37
47
 
38
48
  def init_database
39
49
  sql_file = File.expand_path('../init.sql', __FILE__)
40
- system("mysql -uroot < #{sql_file}")
50
+ system("#{MYSQL_CLI} < #{sql_file}")
41
51
  end
42
52
 
43
53
  def sql_log
metadata CHANGED
@@ -1,139 +1,145 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel-mysql-index-hint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-18 00:00:00.000000000 Z
11
+ date: 2016-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - '>='
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 4.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: arel
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - '>='
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: 4.0.0
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - '>='
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
46
  version: 4.0.0
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - '>='
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - '>='
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - '>='
65
+ - - ">="
60
66
  - !ruby/object:Gem::Version
61
67
  version: '0'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - '>='
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
74
  version: '0'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: mysql2
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - '>='
79
+ - - ">="
74
80
  - !ruby/object:Gem::Version
75
81
  version: '0'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - '>='
86
+ - - ">="
81
87
  - !ruby/object:Gem::Version
82
88
  version: '0'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: rspec
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - '>='
93
+ - - ">="
88
94
  - !ruby/object:Gem::Version
89
95
  version: 3.0.0
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - '>='
100
+ - - ">="
95
101
  - !ruby/object:Gem::Version
96
102
  version: 3.0.0
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: factory_girl
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - '>='
107
+ - - ">="
102
108
  - !ruby/object:Gem::Version
103
109
  version: '0'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - '>='
114
+ - - ">="
109
115
  - !ruby/object:Gem::Version
110
116
  version: '0'
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: coveralls
113
119
  requirement: !ruby/object:Gem::Requirement
114
120
  requirements:
115
- - - '>='
121
+ - - ">="
116
122
  - !ruby/object:Gem::Version
117
123
  version: '0'
118
124
  type: :development
119
125
  prerelease: false
120
126
  version_requirements: !ruby/object:Gem::Requirement
121
127
  requirements:
122
- - - '>='
128
+ - - ">="
123
129
  - !ruby/object:Gem::Version
124
130
  version: '0'
125
131
  - !ruby/object:Gem::Dependency
126
132
  name: appraisal
127
133
  requirement: !ruby/object:Gem::Requirement
128
134
  requirements:
129
- - - '>='
135
+ - - ">="
130
136
  - !ruby/object:Gem::Version
131
137
  version: '0'
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
- - - '>='
142
+ - - ">="
137
143
  - !ruby/object:Gem::Version
138
144
  version: '0'
139
145
  description: Add index hint to MySQL query in Arel.
@@ -143,16 +149,16 @@ executables: []
143
149
  extensions: []
144
150
  extra_rdoc_files: []
145
151
  files:
146
- - .gitignore
147
- - .rspec
148
- - .travis.yml
152
+ - ".gitignore"
153
+ - ".rspec"
154
+ - ".travis.yml"
149
155
  - Appraisals
150
156
  - Gemfile
151
157
  - LICENSE.txt
152
158
  - README.md
153
159
  - Rakefile
154
- - Schemafile
155
160
  - arel-mysql-index-hint.gemspec
161
+ - docker-compose.yml
156
162
  - gemfiles/activerecord_4.0.gemfile
157
163
  - gemfiles/activerecord_4.1.gemfile
158
164
  - gemfiles/activerecord_4.2.gemfile
@@ -180,17 +186,17 @@ require_paths:
180
186
  - lib
181
187
  required_ruby_version: !ruby/object:Gem::Requirement
182
188
  requirements:
183
- - - '>='
189
+ - - ">="
184
190
  - !ruby/object:Gem::Version
185
191
  version: '0'
186
192
  required_rubygems_version: !ruby/object:Gem::Requirement
187
193
  requirements:
188
- - - '>='
194
+ - - ">="
189
195
  - !ruby/object:Gem::Version
190
196
  version: '0'
191
197
  requirements: []
192
198
  rubyforge_project:
193
- rubygems_version: 2.0.14
199
+ rubygems_version: 2.4.5.1
194
200
  signing_key:
195
201
  specification_version: 4
196
202
  summary: Add index hint to MySQL query in Arel.
data/Schemafile DELETED
@@ -1,33 +0,0 @@
1
- create_table "microposts", force: true do |t|
2
- t.string "content"
3
- t.integer "user_id"
4
- t.datetime "created_at"
5
- t.datetime "updated_at"
6
- end
7
-
8
- add_index "microposts", ["user_id", "created_at"], name: "index_microposts_on_user_id_and_created_at"
9
-
10
- create_table "relationships", force: true do |t|
11
- t.integer "follower_id"
12
- t.integer "followed_id"
13
- t.datetime "created_at"
14
- t.datetime "updated_at"
15
- end
16
-
17
- add_index "relationships", ["followed_id"], name: "index_relationships_on_followed_id"
18
- add_index "relationships", ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true
19
- add_index "relationships", ["follower_id"], name: "index_relationships_on_follower_id"
20
-
21
- create_table "users", force: true do |t|
22
- t.string "name"
23
- t.string "email"
24
- t.datetime "created_at"
25
- t.datetime "updated_at"
26
- t.string "password_digest"
27
- t.string "remember_token"
28
- t.boolean "admin"
29
- end
30
-
31
- add_index "users", ["email"], name: "index_users_on_email", unique: true
32
- add_index "users", ["remember_token"], name: "index_users_on_remember_token"
33
-