gizzard 0.1.0 → 0.5.0

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
  SHA256:
3
- metadata.gz: 1919164041a938c909f217d14d353d6e97e17eccd4b549dec4523e640f074d88
4
- data.tar.gz: 0012ec1fd45e5b4808ee8880dc48b17cf7fdabc7634134ebf2ebc942cb920ba0
3
+ metadata.gz: ab2fd2bacd07d67c5fb0e8212bcff33b651bb3e7777215a9843baf5a7be0d589
4
+ data.tar.gz: 7a5ed063eaa28b8acd5d9e0a79938ffaa71e1462fdc21dd6ccf78547f93e8d03
5
5
  SHA512:
6
- metadata.gz: d8ec69760f6e4de3aa76f464e840cd0c018af7b1aa38cfabf55441fd843859e5b36b174d5323cb7698658ea082e368c629e918062abfbc85d36b1bb7a8377d5e
7
- data.tar.gz: 54ec5602da5d311a4203e5f286c21d7e9e3c41e5253339ad9a788129f323307175c29db04943c4bf16bbb86d10cf40292ba73782e6cd14cf72174689493ec5f1
6
+ metadata.gz: 3eef2a837fbf4141c4dd422d18826feedd0b9f0e1fd2b3a0fa4bea7ea879af10d56af0347c7a6505d6fcbe3a1569899d4e866197a1ca42f2c6c91dca14494338
7
+ data.tar.gz: d8a0657863f48522c18bf0a37a567e46239cf64a9cb5d70f0e72e1d9c9c3f496cc4ff5f70cf78abbbcb2671b20e1c09b3ad887a372dcebf1fa97dfe850a27bfa
data/gizzard.gemspec CHANGED
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "activesupport", ">= 5.2"
27
27
 
28
28
  spec.add_development_dependency "bundler"
29
- spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rake", ">= 12.3.3"
30
30
  spec.add_development_dependency "rspec", "~> 3.0"
31
31
  end
data/lib/gizzard/base.rb CHANGED
@@ -3,6 +3,15 @@ module Gizzard
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  class_methods do
6
+ def delete_all_by_id(batch_size: 1000)
7
+ ids = pluck(:id)
8
+ ids.sort!
9
+ ids.each_slice(batch_size) do |chunked_ids|
10
+ # unscoped入れないと既に適用されているスコープが引き継がれる
11
+ unscoped.all.where(id: chunked_ids).delete_all
12
+ end
13
+ end
14
+
6
15
  def less_than_id(id)
7
16
  less_than(:id, id)
8
17
  end
data/lib/gizzard/mysql.rb CHANGED
@@ -8,8 +8,8 @@ module Gizzard
8
8
  v.present? ? where(column => value) : all
9
9
  end
10
10
 
11
- scope :forward_matching_by, -> (column, value) { where("`#{table_name}`.`#{column}` LIKE ?", "%#{sanitize_sql_like(value)}") }
12
- scope :backward_matching_by, -> (column, value) { where("`#{table_name}`.`#{column}` LIKE ?", "#{sanitize_sql_like(value)}%") }
11
+ scope :forward_matching_by, -> (column, value) { where("`#{table_name}`.`#{column}` LIKE ?", "#{sanitize_sql_like(value)}%") }
12
+ scope :backward_matching_by, -> (column, value) { where("`#{table_name}`.`#{column}` LIKE ?", "%#{sanitize_sql_like(value)}") }
13
13
  scope :partial_matching_by, -> (column, value) { where("`#{table_name}`.`#{column}` LIKE ?", "%#{sanitize_sql_like(value)}%") }
14
14
  end
15
15
 
@@ -22,13 +22,63 @@ module Gizzard
22
22
  order_by_field(:id, ids)
23
23
  end
24
24
 
25
- def force_index(indexes)
25
+ def use_index(indexes)
26
26
  from("#{table_name} USE INDEX(#{Array(indexes).join(', ')})")
27
27
  end
28
28
 
29
+ def force_index(indexes)
30
+ from("#{table_name} FORCE INDEX(#{Array(indexes).join(', ')})")
31
+ end
32
+
33
+ def joins_with_use_index(relation_name, indexes)
34
+ joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :use)
35
+ end
36
+
37
+ def joins_with_force_index(relation_name, indexes)
38
+ joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :force)
39
+ end
40
+
41
+ def left_outer_joins_with_use_index(relation_name, indexes)
42
+ joins_with_index_hint(relation_name, indexes, join_type: :left_outer_join, hint: :use)
43
+ end
44
+
45
+ def left_outer_joins_with_force_index(relation_name, indexes)
46
+ joins_with_index_hint(relation_name, indexes, join_type: :left_outer_join, hint: :force)
47
+ end
48
+
29
49
  def lock_in_share
30
50
  lock('LOCK IN SHARE MODE')
31
51
  end
52
+
53
+ private
54
+
55
+ def joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :use)
56
+ relation = reflections[relation_name.to_s]
57
+ join_table_name = relation.klass.table_name
58
+
59
+ join = case join_type
60
+ when :inner_join
61
+ 'INNER JOIN'
62
+ when :left_outer_join
63
+ 'LEFT OUTER JOIN'
64
+ else
65
+ raise
66
+ end
67
+
68
+ index_hint = case hint
69
+ when :use
70
+ 'USE INDEX'
71
+ when :force
72
+ 'FORCE INDEX'
73
+ else
74
+ raise
75
+ end
76
+
77
+ c = connection
78
+ joins <<-SQL
79
+ #{join} #{c.quote_table_name(join_table_name)} #{index_hint} (#{Array(indexes).join(', ')}) ON #{c.quote_table_name(table_name)}.#{c.quote_column_name(relation.association_primary_key)} = #{c.quote_table_name(join_table_name)}.#{c.quote_column_name(relation.foreign_key)}
80
+ SQL
81
+ end
32
82
  end
33
83
 
34
84
  def to_id
@@ -1,3 +1,3 @@
1
1
  module Gizzard
2
- VERSION = "0.1.0"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gizzard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Ooishi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-12 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: 12.3.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: 12.3.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -104,7 +104,7 @@ files:
104
104
  homepage: https://github.com/taka0125/gizzard
105
105
  licenses: []
106
106
  metadata: {}
107
- post_install_message:
107
+ post_install_message:
108
108
  rdoc_options: []
109
109
  require_paths:
110
110
  - lib
@@ -119,8 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  requirements: []
122
- rubygems_version: 3.0.3
123
- signing_key:
122
+ rubygems_version: 3.2.22
123
+ signing_key:
124
124
  specification_version: 4
125
125
  summary: Often use snippet for ActiveRecord.
126
126
  test_files: []