full_search 0.4.2 → 0.4.3

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: 2d5cf6b2007aa968f7243df89c2e957288336c03f64500278b88583e3a75035e
4
- data.tar.gz: b575ebcb9d41e2a16fe3a86f5201705551c41f2066b4db80e31b2b15ecd2be09
3
+ metadata.gz: 894bce4229c00412829f531fbb35c78a3b9a3b4ac869ddc23e67421d1abc773b
4
+ data.tar.gz: 3a9504c246aced49dcef0b9991efddf53fdbff873c0ddf7e6781e6551550af71
5
5
  SHA512:
6
- metadata.gz: '0740089cb32424858a53942ab6695e7b4c65963a6cfa1ed75ee42aa500f702203c02f460d735d82f1fc9712e8df82f27f1e8b203700cb7e6be793641d4050821'
7
- data.tar.gz: 02d341539689e75d8f2064fd457ae241f4008434804ba62931493c2bef64033197a968387b3ded9db17bbbfaa42687ae28249419a3ade9969ebee42aaced5e1c
6
+ metadata.gz: aea83a66af28bf651dd022c63725d012dea6783e57125c5febbf7e48582fe4ac8990cd30af6d9c72bc9544ae3fbf925e84c03a060c549a1b79aaf65668bb2705
7
+ data.tar.gz: 9d9d227f097f3c1b5629aa6ced3768e2cb99db6fdafa28ca15ce641afac2ed4af7f15892d6b7fc87316246eb1be7fd02cdd81db1d1f16407fcf2f8a574d20af6
@@ -29,6 +29,10 @@ module FullSearch
29
29
 
30
30
  create_metadata_table!
31
31
 
32
+ if table_exists?(model) && !healthy?(model)
33
+ rebuild!(model)
34
+ end
35
+
32
36
  fts_was_created = false
33
37
  unless table_exists?(model)
34
38
  conn.execute(create_virtual_table_sql(model))
@@ -162,8 +166,14 @@ module FullSearch
162
166
  return unless table_exists?(model)
163
167
 
164
168
  conn = connection
165
- conn.execute("DELETE FROM #{qt(fts_table_name(model))};")
166
- conn.execute("DELETE FROM #{qt(trigram_table_name(model))};") if trigram_table_needed?(model) && trigram_table_exists?(model)
169
+ begin
170
+ conn.execute("DELETE FROM #{qt(fts_table_name(model))};")
171
+ conn.execute("DELETE FROM #{qt(trigram_table_name(model))};") if trigram_table_needed?(model) && trigram_table_exists?(model)
172
+ rescue ActiveRecord::StatementInvalid => e
173
+ raise unless e.message.match?(/fts5: corruption|invalid fts5 file format|malformed database schema/i)
174
+
175
+ rebuild!(model)
176
+ end
167
177
  end
168
178
 
169
179
  def drop!(model)
@@ -211,6 +221,17 @@ module FullSearch
211
221
  !table_exists?(model)
212
222
  end
213
223
 
224
+ def healthy?(model)
225
+ return false unless table_exists?(model)
226
+
227
+ connection.execute("SELECT count(*) FROM #{qt(fts_table_name(model))}")
228
+ true
229
+ rescue ActiveRecord::StatementInvalid => e
230
+ raise unless e.message.match?(/fts5: corruption|invalid fts5 file format|malformed database schema/i)
231
+
232
+ false
233
+ end
234
+
214
235
  def trigram_table_needed?(model)
215
236
  model.full_search_dsl&.typo_tolerance? && model.full_search_dsl.tokenize != "trigram"
216
237
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FullSearch
4
- VERSION = "0.4.2"
4
+ VERSION = "0.4.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: full_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben D'Angelo
@@ -188,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  - !ruby/object:Gem::Version
189
189
  version: '2.0'
190
190
  requirements: []
191
- rubygems_version: 4.0.15
191
+ rubygems_version: 4.0.10
192
192
  specification_version: 4
193
193
  summary: SQLite FTS5 full-text search for Rails/ActiveRecord
194
194
  test_files: []