gizzard 0.3.0 → 0.6.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: 2f44efd0bdab7a5fceb803cbf532fba8eaeda926ec15ae5911714ddb812bdc55
4
- data.tar.gz: c0ee7d56d4f49180f07f7a86d9e35558745bb0b130c3c9ddf382577cc8fe9554
3
+ metadata.gz: 88a877829e6aca4260c1d12ad9bb00ed8ea7f151da522788059ee05afc09201a
4
+ data.tar.gz: 2375d635f679a7276211a30864f0e07d12080072dce489c05a5968dc62bdba3c
5
5
  SHA512:
6
- metadata.gz: 120be5d5303c3a30ec15067424979cc8ea06aa22f8c5fb8253edba83a58c08aa65beed1c8dac7a86b6600c0b07e818e9ce325d2a2bbe1daba8857abba66b5da0
7
- data.tar.gz: 22969363c92181b754aa9d2440c85a6baf6093c897690eee04af0781702a90fcc1282799acad7854677da29cf6eb9c00675e3a14ec198c015f60207ae17176f1
6
+ metadata.gz: f10dbad52661dd6543b609f4855b2a034e866c96476ebb463a236108ef9bfdd65c2f83c5b239c92d7f3b2cc376fe51d75df4972c95a2429bf5665a82f393e89b
7
+ data.tar.gz: 658122a292e333b77a2926d96445184a1067589adf1577a00f4a6665b0ccb3204df56fd7b721ef9d7f19f32a6962baad6ce870b11a96dce3d2062ae77fe40751
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
@@ -3,6 +3,8 @@ module Gizzard
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
+ include Base
7
+
6
8
  scope :filtered_by, -> (column, value) do
7
9
  v = value.respond_to?(:strip) ? value.strip : value
8
10
  v.present? ? where(column => value) : all
@@ -30,9 +32,55 @@ module Gizzard
30
32
  from("#{table_name} FORCE INDEX(#{Array(indexes).join(', ')})")
31
33
  end
32
34
 
35
+ def joins_with_use_index(relation_name, indexes)
36
+ joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :use)
37
+ end
38
+
39
+ def joins_with_force_index(relation_name, indexes)
40
+ joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :force)
41
+ end
42
+
43
+ def left_outer_joins_with_use_index(relation_name, indexes)
44
+ joins_with_index_hint(relation_name, indexes, join_type: :left_outer_join, hint: :use)
45
+ end
46
+
47
+ def left_outer_joins_with_force_index(relation_name, indexes)
48
+ joins_with_index_hint(relation_name, indexes, join_type: :left_outer_join, hint: :force)
49
+ end
50
+
33
51
  def lock_in_share
34
52
  lock('LOCK IN SHARE MODE')
35
53
  end
54
+
55
+ private
56
+
57
+ def joins_with_index_hint(relation_name, indexes, join_type: :inner_join, hint: :use)
58
+ relation = reflections[relation_name.to_s]
59
+ join_table_name = relation.klass.table_name
60
+
61
+ join = case join_type
62
+ when :inner_join
63
+ 'INNER JOIN'
64
+ when :left_outer_join
65
+ 'LEFT OUTER JOIN'
66
+ else
67
+ raise
68
+ end
69
+
70
+ index_hint = case hint
71
+ when :use
72
+ 'USE INDEX'
73
+ when :force
74
+ 'FORCE INDEX'
75
+ else
76
+ raise
77
+ end
78
+
79
+ c = connection
80
+ joins <<-SQL
81
+ #{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)}
82
+ SQL
83
+ end
36
84
  end
37
85
 
38
86
  def to_id
@@ -1,3 +1,3 @@
1
1
  module Gizzard
2
- VERSION = "0.3.0"
2
+ VERSION = "0.6.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.3.0
4
+ version: 0.6.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-11-08 00:00:00.000000000 Z
11
+ date: 2022-02-25 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
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  version: '0'
121
121
  requirements: []
122
122
  rubygems_version: 3.0.3
123
- signing_key:
123
+ signing_key:
124
124
  specification_version: 4
125
125
  summary: Often use snippet for ActiveRecord.
126
126
  test_files: []