full_search 0.4.1 → 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: 1fb6eb3fd61b593c1cbea4a28c2db11d73ed11abd422f1685d6e31422cec6607
4
- data.tar.gz: c8553a64b3e0b111e311478c448d6f9de5f826b122d3c3f64cd22b92b6020f25
3
+ metadata.gz: 894bce4229c00412829f531fbb35c78a3b9a3b4ac869ddc23e67421d1abc773b
4
+ data.tar.gz: 3a9504c246aced49dcef0b9991efddf53fdbff873c0ddf7e6781e6551550af71
5
5
  SHA512:
6
- metadata.gz: 71fe8b5515334c6eaf826022f34c415459365856ae0a38115dde0a984e23d8cd0dfae90ece9d05b07605c7942e2a2edf4d98dd0fdb35a3e0ecaaf4d2f0f86a2e
7
- data.tar.gz: df84b3bcffde7393428589dc3bed5c92a7b50974ea027829c20c800760a2b69b7bbf3a3170e96fef232892d5e1461cb230715e6e2ec06a01d4dc46cf9b4750f2
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))
@@ -154,6 +158,24 @@ module FullSearch
154
158
  end
155
159
  end
156
160
 
161
+ def truncate!(model)
162
+ IndexCache.clear!
163
+ sqlite!(model)
164
+ dsl = model.full_search_dsl
165
+ return unless dsl
166
+ return unless table_exists?(model)
167
+
168
+ conn = connection
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
177
+ end
178
+
157
179
  def drop!(model)
158
180
  IndexCache.clear!
159
181
  verified_tables.delete(model.table_name)
@@ -199,6 +221,17 @@ module FullSearch
199
221
  !table_exists?(model)
200
222
  end
201
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
+
202
235
  def trigram_table_needed?(model)
203
236
  model.full_search_dsl&.typo_tolerance? && model.full_search_dsl.tokenize != "trigram"
204
237
  end
@@ -43,6 +43,11 @@ module FullSearch
43
43
  models.each { |model| rebuild_full_search_index(model) }
44
44
  end
45
45
 
46
+ def truncate_full_search!(*models)
47
+ models = FullSearch.models.to_a if models.empty?
48
+ models.each { |model| FullSearch::Index.truncate!(model) }
49
+ end
50
+
46
51
  def ensure_full_search_tables
47
52
  FullSearch.models.each do |model|
48
53
  FullSearch::Index.ensure_table!(model)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FullSearch
4
- VERSION = "0.4.1"
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.1
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: []