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 +4 -4
- data/lib/full_search/index.rb +33 -0
- data/lib/full_search/test_helpers.rb +5 -0
- data/lib/full_search/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 894bce4229c00412829f531fbb35c78a3b9a3b4ac869ddc23e67421d1abc773b
|
|
4
|
+
data.tar.gz: 3a9504c246aced49dcef0b9991efddf53fdbff873c0ddf7e6781e6551550af71
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aea83a66af28bf651dd022c63725d012dea6783e57125c5febbf7e48582fe4ac8990cd30af6d9c72bc9544ae3fbf925e84c03a060c549a1b79aaf65668bb2705
|
|
7
|
+
data.tar.gz: 9d9d227f097f3c1b5629aa6ced3768e2cb99db6fdafa28ca15ce641afac2ed4af7f15892d6b7fc87316246eb1be7fd02cdd81db1d1f16407fcf2f8a574d20af6
|
data/lib/full_search/index.rb
CHANGED
|
@@ -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)
|
data/lib/full_search/version.rb
CHANGED
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.
|
|
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.
|
|
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: []
|