arel-mysql-index-hint 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
-