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 +4 -4
- data/.travis.yml +17 -2
- data/Appraisals +5 -3
- data/README.md +21 -0
- data/arel-mysql-index-hint.gemspec +1 -1
- data/docker-compose.yml +6 -0
- data/gemfiles/activerecord_4.0.gemfile +2 -1
- data/gemfiles/activerecord_4.1.gemfile +2 -1
- data/gemfiles/activerecord_4.2.gemfile +1 -1
- data/lib/arel-mysql-index-hint.rb +3 -3
- data/lib/arel-mysql-index-hint/active_record-hint_methods.rb +2 -8
- data/lib/arel-mysql-index-hint/arel-visitors-mysql.rb +2 -8
- data/lib/arel-mysql-index-hint/version.rb +1 -1
- data/spec/spec_helper.rb +12 -2
- metadata +33 -27
- data/Schemafile +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c394a75c7e804ce2a5310c2d82990542448f7da
|
4
|
+
data.tar.gz: 1aa537b4cfc0a6428c9009939be6904dc18faddc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 457533a884cba18970f34048a2e43922a77136ef8d4d5e0a11752c605004e592dbfb4891380f0708fa2d821a3894e59ff6cc7e6d7098f9da87d22c7019605df0
|
7
|
+
data.tar.gz: 0ef7776f7604d29260d499a40963860de4a7933d557ba0aa58c28f93f0be2a43beaac0799f4c03fc9372f3ad4dd51660c7e42847d2b9b96f9b07c3babb47c9e9
|
data/.travis.yml
CHANGED
@@ -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
|
-
- 2.2.
|
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.
|
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.
|
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.
|
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"
|
data/docker-compose.yml
ADDED
@@ -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
|
-
|
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
|
-
|
18
|
+
prepend ArelMysqlIndexHint::ArelTable
|
19
19
|
end
|
20
20
|
|
21
21
|
Arel::Visitors::MySQL.class_eval do
|
22
|
-
|
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
|
24
|
-
arel =
|
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
|
-
|
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)
|
data/spec/spec_helper.rb
CHANGED
@@ -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("
|
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.
|
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:
|
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.
|
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
|
-
|