thinking-sphinx 2.1.0 → 3.0.0.pre

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.
Files changed (352) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +13 -0
  3. data/Appraisals +7 -0
  4. data/Gemfile +10 -0
  5. data/HISTORY +2 -267
  6. data/LICENCE +1 -1
  7. data/README.textile +194 -226
  8. data/Rakefile +24 -0
  9. data/gemfiles/.gitignore +1 -0
  10. data/gemfiles/rails_3_1.gemfile +11 -0
  11. data/gemfiles/rails_3_2.gemfile +11 -0
  12. data/lib/thinking-sphinx.rb +1 -1
  13. data/lib/thinking_sphinx.rb +34 -292
  14. data/lib/thinking_sphinx/active_record.rb +22 -383
  15. data/lib/thinking_sphinx/active_record/association.rb +9 -0
  16. data/lib/thinking_sphinx/active_record/association_proxy.rb +68 -0
  17. data/lib/thinking_sphinx/active_record/associations.rb +68 -0
  18. data/lib/thinking_sphinx/active_record/attribute.rb +20 -0
  19. data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +32 -0
  20. data/lib/thinking_sphinx/active_record/attribute/type.rb +79 -0
  21. data/lib/thinking_sphinx/active_record/attribute/values.rb +18 -0
  22. data/lib/thinking_sphinx/active_record/base.rb +36 -0
  23. data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +31 -0
  24. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +55 -0
  25. data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +59 -0
  26. data/lib/thinking_sphinx/active_record/column.rb +30 -0
  27. data/lib/thinking_sphinx/active_record/database_adapters.rb +51 -0
  28. data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +13 -0
  29. data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +23 -0
  30. data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +25 -0
  31. data/lib/thinking_sphinx/active_record/field.rb +11 -0
  32. data/lib/thinking_sphinx/active_record/index.rb +55 -0
  33. data/lib/thinking_sphinx/active_record/interpreter.rb +47 -0
  34. data/lib/thinking_sphinx/active_record/log_subscriber.rb +10 -58
  35. data/lib/thinking_sphinx/active_record/property.rb +28 -0
  36. data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +60 -0
  37. data/lib/thinking_sphinx/active_record/sql_builder.rb +159 -0
  38. data/lib/thinking_sphinx/active_record/sql_source.rb +138 -0
  39. data/lib/thinking_sphinx/active_record/sql_source/template.rb +46 -0
  40. data/lib/thinking_sphinx/batched_search.rb +26 -0
  41. data/lib/thinking_sphinx/callbacks.rb +15 -0
  42. data/lib/thinking_sphinx/configuration.rb +80 -331
  43. data/lib/thinking_sphinx/configuration/consistent_ids.rb +31 -0
  44. data/lib/thinking_sphinx/configuration/defaults.rb +5 -0
  45. data/lib/thinking_sphinx/core.rb +6 -0
  46. data/lib/thinking_sphinx/core/index.rb +68 -0
  47. data/lib/thinking_sphinx/core/interpreter.rb +19 -0
  48. data/lib/thinking_sphinx/deltas.rb +35 -26
  49. data/lib/thinking_sphinx/deltas/default_delta.rb +56 -56
  50. data/lib/thinking_sphinx/excerpter.rb +23 -21
  51. data/lib/thinking_sphinx/facet.rb +22 -127
  52. data/lib/thinking_sphinx/facet_search.rb +95 -162
  53. data/lib/thinking_sphinx/index.rb +39 -143
  54. data/lib/thinking_sphinx/index_set.rb +51 -0
  55. data/lib/thinking_sphinx/masks.rb +8 -0
  56. data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +23 -0
  57. data/lib/thinking_sphinx/masks/pagination_mask.rb +60 -0
  58. data/lib/thinking_sphinx/masks/scopes_mask.rb +35 -0
  59. data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +11 -0
  60. data/lib/thinking_sphinx/middlewares.rb +36 -0
  61. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +73 -0
  62. data/lib/thinking_sphinx/middlewares/geographer.rb +53 -0
  63. data/lib/thinking_sphinx/middlewares/glazier.rb +39 -0
  64. data/lib/thinking_sphinx/middlewares/ids_only.rb +13 -0
  65. data/lib/thinking_sphinx/middlewares/inquirer.rb +62 -0
  66. data/lib/thinking_sphinx/middlewares/middleware.rb +9 -0
  67. data/lib/thinking_sphinx/middlewares/sphinxql.rb +149 -0
  68. data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +45 -0
  69. data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +46 -0
  70. data/lib/thinking_sphinx/panes.rb +8 -0
  71. data/lib/thinking_sphinx/panes/attributes_pane.rb +9 -0
  72. data/lib/thinking_sphinx/panes/distance_pane.rb +13 -0
  73. data/lib/thinking_sphinx/panes/excerpts_pane.rb +37 -0
  74. data/lib/thinking_sphinx/panes/weight_pane.rb +9 -0
  75. data/lib/thinking_sphinx/railtie.rb +6 -40
  76. data/lib/thinking_sphinx/rake_interface.rb +47 -0
  77. data/lib/thinking_sphinx/real_time.rb +11 -0
  78. data/lib/thinking_sphinx/real_time/attribute.rb +5 -0
  79. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +48 -0
  80. data/lib/thinking_sphinx/real_time/field.rb +3 -0
  81. data/lib/thinking_sphinx/real_time/index.rb +47 -0
  82. data/lib/thinking_sphinx/real_time/index/template.rb +33 -0
  83. data/lib/thinking_sphinx/real_time/interpreter.rb +23 -0
  84. data/lib/thinking_sphinx/real_time/property.rb +16 -0
  85. data/lib/thinking_sphinx/scopes.rb +22 -0
  86. data/lib/thinking_sphinx/search.rb +90 -1028
  87. data/lib/thinking_sphinx/search/batch_inquirer.rb +27 -0
  88. data/lib/thinking_sphinx/search/context.rb +26 -0
  89. data/lib/thinking_sphinx/search/glaze.rb +32 -0
  90. data/lib/thinking_sphinx/search/merger.rb +24 -0
  91. data/lib/thinking_sphinx/search/query.rb +43 -0
  92. data/lib/thinking_sphinx/search/stale_ids_exception.rb +11 -0
  93. data/lib/thinking_sphinx/search/translator.rb +50 -0
  94. data/lib/thinking_sphinx/tasks.rb +22 -125
  95. data/lib/thinking_sphinx/test.rb +9 -19
  96. data/sketchpad.rb +58 -0
  97. data/spec/acceptance/association_scoping_spec.rb +23 -0
  98. data/spec/acceptance/attribute_access_spec.rb +39 -0
  99. data/spec/acceptance/attribute_updates_spec.rb +16 -0
  100. data/spec/acceptance/batch_searching_spec.rb +21 -0
  101. data/spec/acceptance/big_integers_spec.rb +27 -0
  102. data/spec/acceptance/excerpts_spec.rb +14 -0
  103. data/spec/acceptance/facets_spec.rb +122 -0
  104. data/spec/acceptance/geosearching_spec.rb +39 -0
  105. data/spec/acceptance/grouping_by_attributes_spec.rb +77 -0
  106. data/spec/acceptance/paginating_search_results_spec.rb +24 -0
  107. data/spec/acceptance/remove_deleted_records_spec.rb +23 -0
  108. data/spec/acceptance/search_counts_spec.rb +18 -0
  109. data/spec/acceptance/search_for_just_ids_spec.rb +19 -0
  110. data/spec/acceptance/searching_across_models_spec.rb +28 -0
  111. data/spec/acceptance/searching_on_fields_spec.rb +56 -0
  112. data/spec/acceptance/searching_with_filters_spec.rb +109 -0
  113. data/spec/acceptance/searching_with_sti_spec.rb +55 -0
  114. data/spec/acceptance/searching_within_a_model_spec.rb +52 -0
  115. data/spec/acceptance/sorting_search_results_spec.rb +41 -0
  116. data/spec/acceptance/spec_helper.rb +4 -0
  117. data/spec/acceptance/specifying_sql_spec.rb +62 -0
  118. data/spec/acceptance/sphinx_scopes_spec.rb +49 -0
  119. data/spec/acceptance/sql_deltas_spec.rb +43 -0
  120. data/spec/acceptance/support/database_cleaner.rb +11 -0
  121. data/spec/acceptance/support/sphinx_controller.rb +39 -0
  122. data/spec/acceptance/support/sphinx_helpers.rb +24 -0
  123. data/spec/acceptance/suspended_deltas_spec.rb +20 -0
  124. data/spec/internal/.gitignore +1 -0
  125. data/spec/internal/app/indices/animal_index.rb +3 -0
  126. data/spec/internal/app/indices/article_index.rb +24 -0
  127. data/spec/internal/app/indices/book_index.rb +8 -0
  128. data/spec/internal/app/indices/city_index.rb +6 -0
  129. data/spec/internal/app/indices/product_index.rb +3 -0
  130. data/spec/internal/app/indices/tee_index.rb +4 -0
  131. data/spec/internal/app/indices/user_index.rb +5 -0
  132. data/spec/internal/app/models/animal.rb +2 -0
  133. data/spec/internal/app/models/article.rb +5 -0
  134. data/spec/internal/app/models/bird.rb +2 -0
  135. data/spec/internal/app/models/book.rb +11 -0
  136. data/spec/internal/app/models/city.rb +2 -0
  137. data/spec/internal/app/models/colour.rb +3 -0
  138. data/spec/internal/app/models/flightless_bird.rb +2 -0
  139. data/spec/internal/app/models/mammal.rb +2 -0
  140. data/spec/internal/app/models/product.rb +3 -0
  141. data/spec/internal/app/models/tag.rb +4 -0
  142. data/{features/thinking_sphinx → spec/internal/app}/models/tagging.rb +1 -1
  143. data/spec/internal/app/models/tee.rb +3 -0
  144. data/spec/internal/app/models/tweet.rb +3 -0
  145. data/spec/internal/app/models/user.rb +3 -0
  146. data/spec/internal/config/database.yml +5 -0
  147. data/spec/internal/db/schema.rb +65 -0
  148. data/spec/internal/log/.gitignore +1 -0
  149. data/spec/spec_helper.rb +8 -49
  150. data/spec/support/sphinx_yaml_helpers.rb +9 -0
  151. data/spec/thinking_sphinx/active_record/association_spec.rb +12 -0
  152. data/spec/thinking_sphinx/active_record/associations_spec.rb +184 -0
  153. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +147 -0
  154. data/spec/thinking_sphinx/active_record/base_spec.rb +61 -0
  155. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +80 -0
  156. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +147 -0
  157. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +69 -0
  158. data/spec/thinking_sphinx/active_record/column_spec.rb +47 -0
  159. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +31 -0
  160. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +43 -0
  161. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +45 -0
  162. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +108 -0
  163. data/spec/thinking_sphinx/active_record/field_spec.rb +36 -0
  164. data/spec/thinking_sphinx/active_record/index_spec.rb +208 -0
  165. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +293 -0
  166. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +162 -0
  167. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +666 -0
  168. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +401 -0
  169. data/spec/thinking_sphinx/configuration_spec.rb +264 -171
  170. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +116 -0
  171. data/spec/thinking_sphinx/deltas_spec.rb +58 -0
  172. data/spec/thinking_sphinx/excerpter_spec.rb +40 -38
  173. data/spec/thinking_sphinx/facet_search_spec.rb +49 -151
  174. data/spec/thinking_sphinx/index_set_spec.rb +68 -0
  175. data/spec/thinking_sphinx/index_spec.rb +91 -155
  176. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +121 -0
  177. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +68 -0
  178. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +132 -0
  179. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +89 -0
  180. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +62 -0
  181. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +55 -0
  182. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +271 -0
  183. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +47 -0
  184. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +91 -0
  185. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +21 -0
  186. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +41 -0
  187. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
  188. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +20 -0
  189. data/spec/thinking_sphinx/rake_interface_spec.rb +147 -0
  190. data/spec/thinking_sphinx/real_time/attribute_spec.rb +62 -0
  191. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +76 -0
  192. data/spec/thinking_sphinx/real_time/field_spec.rb +54 -0
  193. data/spec/thinking_sphinx/real_time/index_spec.rb +154 -0
  194. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +147 -0
  195. data/spec/thinking_sphinx/scopes_spec.rb +38 -0
  196. data/spec/thinking_sphinx/search/glaze_spec.rb +55 -0
  197. data/spec/thinking_sphinx/search/query_spec.rb +46 -0
  198. data/spec/thinking_sphinx/search_spec.rb +65 -1357
  199. data/spec/thinking_sphinx_spec.rb +19 -182
  200. data/thinking-sphinx.gemspec +33 -0
  201. metadata +318 -431
  202. data/features/abstract_inheritance.feature +0 -10
  203. data/features/alternate_primary_key.feature +0 -27
  204. data/features/attribute_transformation.feature +0 -22
  205. data/features/attribute_updates.feature +0 -79
  206. data/features/deleting_instances.feature +0 -70
  207. data/features/direct_attributes.feature +0 -11
  208. data/features/excerpts.feature +0 -21
  209. data/features/extensible_delta_indexing.feature +0 -9
  210. data/features/facets.feature +0 -88
  211. data/features/facets_across_model.feature +0 -29
  212. data/features/field_sorting.feature +0 -18
  213. data/features/handling_edits.feature +0 -97
  214. data/features/retry_stale_indexes.feature +0 -24
  215. data/features/searching_across_models.feature +0 -20
  216. data/features/searching_by_index.feature +0 -41
  217. data/features/searching_by_model.feature +0 -175
  218. data/features/searching_with_find_arguments.feature +0 -56
  219. data/features/sphinx_detection.feature +0 -25
  220. data/features/sphinx_scopes.feature +0 -68
  221. data/features/step_definitions/alpha_steps.rb +0 -16
  222. data/features/step_definitions/beta_steps.rb +0 -7
  223. data/features/step_definitions/common_steps.rb +0 -205
  224. data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
  225. data/features/step_definitions/facet_steps.rb +0 -96
  226. data/features/step_definitions/find_arguments_steps.rb +0 -36
  227. data/features/step_definitions/gamma_steps.rb +0 -15
  228. data/features/step_definitions/scope_steps.rb +0 -19
  229. data/features/step_definitions/search_steps.rb +0 -94
  230. data/features/step_definitions/sphinx_steps.rb +0 -35
  231. data/features/sti_searching.feature +0 -19
  232. data/features/support/env.rb +0 -24
  233. data/features/support/lib/generic_delta_handler.rb +0 -8
  234. data/features/thinking_sphinx/database.example.yml +0 -3
  235. data/features/thinking_sphinx/db/.gitignore +0 -1
  236. data/features/thinking_sphinx/db/fixtures/alphas.rb +0 -8
  237. data/features/thinking_sphinx/db/fixtures/authors.rb +0 -1
  238. data/features/thinking_sphinx/db/fixtures/betas.rb +0 -11
  239. data/features/thinking_sphinx/db/fixtures/boxes.rb +0 -9
  240. data/features/thinking_sphinx/db/fixtures/categories.rb +0 -1
  241. data/features/thinking_sphinx/db/fixtures/cats.rb +0 -3
  242. data/features/thinking_sphinx/db/fixtures/comments.rb +0 -24
  243. data/features/thinking_sphinx/db/fixtures/developers.rb +0 -31
  244. data/features/thinking_sphinx/db/fixtures/dogs.rb +0 -3
  245. data/features/thinking_sphinx/db/fixtures/extensible_betas.rb +0 -10
  246. data/features/thinking_sphinx/db/fixtures/foxes.rb +0 -3
  247. data/features/thinking_sphinx/db/fixtures/gammas.rb +0 -10
  248. data/features/thinking_sphinx/db/fixtures/music.rb +0 -4
  249. data/features/thinking_sphinx/db/fixtures/people.rb +0 -1001
  250. data/features/thinking_sphinx/db/fixtures/post_keywords.txt +0 -1
  251. data/features/thinking_sphinx/db/fixtures/posts.rb +0 -10
  252. data/features/thinking_sphinx/db/fixtures/robots.rb +0 -8
  253. data/features/thinking_sphinx/db/fixtures/tags.rb +0 -27
  254. data/features/thinking_sphinx/db/migrations/create_alphas.rb +0 -8
  255. data/features/thinking_sphinx/db/migrations/create_animals.rb +0 -5
  256. data/features/thinking_sphinx/db/migrations/create_authors.rb +0 -3
  257. data/features/thinking_sphinx/db/migrations/create_authors_posts.rb +0 -6
  258. data/features/thinking_sphinx/db/migrations/create_betas.rb +0 -5
  259. data/features/thinking_sphinx/db/migrations/create_boxes.rb +0 -5
  260. data/features/thinking_sphinx/db/migrations/create_categories.rb +0 -3
  261. data/features/thinking_sphinx/db/migrations/create_comments.rb +0 -10
  262. data/features/thinking_sphinx/db/migrations/create_developers.rb +0 -7
  263. data/features/thinking_sphinx/db/migrations/create_extensible_betas.rb +0 -5
  264. data/features/thinking_sphinx/db/migrations/create_gammas.rb +0 -3
  265. data/features/thinking_sphinx/db/migrations/create_genres.rb +0 -3
  266. data/features/thinking_sphinx/db/migrations/create_music.rb +0 -6
  267. data/features/thinking_sphinx/db/migrations/create_people.rb +0 -13
  268. data/features/thinking_sphinx/db/migrations/create_posts.rb +0 -6
  269. data/features/thinking_sphinx/db/migrations/create_robots.rb +0 -4
  270. data/features/thinking_sphinx/db/migrations/create_taggings.rb +0 -5
  271. data/features/thinking_sphinx/db/migrations/create_tags.rb +0 -4
  272. data/features/thinking_sphinx/models/alpha.rb +0 -23
  273. data/features/thinking_sphinx/models/andrew.rb +0 -17
  274. data/features/thinking_sphinx/models/animal.rb +0 -5
  275. data/features/thinking_sphinx/models/author.rb +0 -3
  276. data/features/thinking_sphinx/models/beta.rb +0 -13
  277. data/features/thinking_sphinx/models/box.rb +0 -8
  278. data/features/thinking_sphinx/models/cat.rb +0 -3
  279. data/features/thinking_sphinx/models/category.rb +0 -4
  280. data/features/thinking_sphinx/models/comment.rb +0 -10
  281. data/features/thinking_sphinx/models/developer.rb +0 -21
  282. data/features/thinking_sphinx/models/dog.rb +0 -3
  283. data/features/thinking_sphinx/models/extensible_beta.rb +0 -9
  284. data/features/thinking_sphinx/models/fox.rb +0 -5
  285. data/features/thinking_sphinx/models/gamma.rb +0 -5
  286. data/features/thinking_sphinx/models/genre.rb +0 -3
  287. data/features/thinking_sphinx/models/medium.rb +0 -5
  288. data/features/thinking_sphinx/models/music.rb +0 -10
  289. data/features/thinking_sphinx/models/person.rb +0 -24
  290. data/features/thinking_sphinx/models/post.rb +0 -22
  291. data/features/thinking_sphinx/models/robot.rb +0 -12
  292. data/features/thinking_sphinx/models/tag.rb +0 -3
  293. data/lib/cucumber/thinking_sphinx/external_world.rb +0 -12
  294. data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -137
  295. data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -28
  296. data/lib/thinking_sphinx/action_controller.rb +0 -31
  297. data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -54
  298. data/lib/thinking_sphinx/active_record/collection_proxy.rb +0 -47
  299. data/lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb +0 -27
  300. data/lib/thinking_sphinx/active_record/delta.rb +0 -67
  301. data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -44
  302. data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
  303. data/lib/thinking_sphinx/active_record/scopes.rb +0 -110
  304. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -94
  305. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -62
  306. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -188
  307. data/lib/thinking_sphinx/association.rb +0 -230
  308. data/lib/thinking_sphinx/attribute.rb +0 -405
  309. data/lib/thinking_sphinx/auto_version.rb +0 -40
  310. data/lib/thinking_sphinx/bundled_search.rb +0 -40
  311. data/lib/thinking_sphinx/class_facet.rb +0 -20
  312. data/lib/thinking_sphinx/connection.rb +0 -71
  313. data/lib/thinking_sphinx/context.rb +0 -81
  314. data/lib/thinking_sphinx/core/string.rb +0 -15
  315. data/lib/thinking_sphinx/deltas/delete_job.rb +0 -16
  316. data/lib/thinking_sphinx/deltas/index_job.rb +0 -17
  317. data/lib/thinking_sphinx/deploy/capistrano.rb +0 -99
  318. data/lib/thinking_sphinx/field.rb +0 -98
  319. data/lib/thinking_sphinx/index/builder.rb +0 -315
  320. data/lib/thinking_sphinx/index/faux_column.rb +0 -118
  321. data/lib/thinking_sphinx/join.rb +0 -37
  322. data/lib/thinking_sphinx/property.rb +0 -187
  323. data/lib/thinking_sphinx/search_methods.rb +0 -439
  324. data/lib/thinking_sphinx/sinatra.rb +0 -7
  325. data/lib/thinking_sphinx/source.rb +0 -194
  326. data/lib/thinking_sphinx/source/internal_properties.rb +0 -51
  327. data/lib/thinking_sphinx/source/sql.rb +0 -174
  328. data/spec/fixtures/data.sql +0 -32
  329. data/spec/fixtures/database.yml.default +0 -3
  330. data/spec/fixtures/models.rb +0 -164
  331. data/spec/fixtures/structure.sql +0 -146
  332. data/spec/sphinx_helper.rb +0 -60
  333. data/spec/support/rails.rb +0 -25
  334. data/spec/thinking_sphinx/active_record/delta_spec.rb +0 -123
  335. data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +0 -173
  336. data/spec/thinking_sphinx/active_record/scopes_spec.rb +0 -177
  337. data/spec/thinking_sphinx/active_record_spec.rb +0 -573
  338. data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +0 -163
  339. data/spec/thinking_sphinx/association_spec.rb +0 -250
  340. data/spec/thinking_sphinx/attribute_spec.rb +0 -552
  341. data/spec/thinking_sphinx/auto_version_spec.rb +0 -103
  342. data/spec/thinking_sphinx/connection_spec.rb +0 -77
  343. data/spec/thinking_sphinx/context_spec.rb +0 -127
  344. data/spec/thinking_sphinx/core/array_spec.rb +0 -9
  345. data/spec/thinking_sphinx/core/string_spec.rb +0 -9
  346. data/spec/thinking_sphinx/facet_spec.rb +0 -359
  347. data/spec/thinking_sphinx/field_spec.rb +0 -127
  348. data/spec/thinking_sphinx/index/builder_spec.rb +0 -532
  349. data/spec/thinking_sphinx/index/faux_column_spec.rb +0 -36
  350. data/spec/thinking_sphinx/search_methods_spec.rb +0 -156
  351. data/spec/thinking_sphinx/source_spec.rb +0 -267
  352. data/spec/thinking_sphinx/test_spec.rb +0 -20
@@ -1,7 +0,0 @@
1
- require 'thinking_sphinx'
2
-
3
- ThinkingSphinx::Configuration.instance
4
-
5
- ActiveSupport.on_load :active_record do
6
- include ThinkingSphinx::ActiveRecord
7
- end
@@ -1,194 +0,0 @@
1
- require 'thinking_sphinx/source/internal_properties'
2
- require 'thinking_sphinx/source/sql'
3
-
4
- module ThinkingSphinx
5
- class Source
6
- include ThinkingSphinx::Source::InternalProperties
7
- include ThinkingSphinx::Source::SQL
8
-
9
- attr_accessor :model, :fields, :attributes, :joins, :conditions, :groupings,
10
- :options
11
- attr_reader :base, :index, :database_configuration
12
-
13
- def initialize(index, options = {})
14
- @index = index
15
- @model = index.model
16
- @fields = []
17
- @attributes = []
18
- @joins = []
19
- @conditions = []
20
- @groupings = []
21
- @options = options
22
- @associations = {}
23
- @database_configuration = @model.connection.
24
- instance_variable_get(:@config).clone
25
-
26
- @base = join_dependency_class.new(
27
- @model, [], initial_joins
28
- )
29
-
30
- add_internal_attributes_and_facets
31
- end
32
-
33
- def name
34
- index.name
35
- end
36
-
37
- def to_riddle_for_core(offset, position)
38
- source = Riddle::Configuration::SQLSource.new(
39
- "#{index.core_name}_#{position}", adapter.sphinx_identifier
40
- )
41
-
42
- set_source_database_settings source
43
- set_source_fields source
44
- set_source_attributes source, offset
45
- set_source_settings source
46
- set_source_sql source, offset
47
-
48
- source
49
- end
50
-
51
- def to_riddle_for_delta(offset, position)
52
- source = Riddle::Configuration::SQLSource.new(
53
- "#{index.delta_name}_#{position}", adapter.sphinx_identifier
54
- )
55
- source.parent = "#{index.core_name}_#{position}"
56
-
57
- set_source_database_settings source
58
- set_source_fields source
59
- set_source_attributes source, offset, true
60
- set_source_settings source
61
- set_source_sql source, offset, true
62
-
63
- source
64
- end
65
-
66
- def delta?
67
- !@index.delta_object.nil?
68
- end
69
-
70
- # Gets the association stack for a specific key.
71
- #
72
- def association(key)
73
- @associations[key] ||= Association.children(@model, key)
74
- end
75
-
76
- private
77
-
78
- def adapter
79
- @adapter ||= @model.sphinx_database_adapter
80
- end
81
-
82
- def available_attributes
83
- attributes.select { |attrib| attrib.available? }
84
- end
85
-
86
- def set_source_database_settings(source)
87
- config = @database_configuration
88
-
89
- source.sql_host = config[:host] || "localhost"
90
- source.sql_user = config[:username] || config[:user] || ENV['USER']
91
- source.sql_pass = (config[:password].to_s || "").gsub('#', '\#')
92
- source.sql_db = config[:database]
93
- source.sql_port = config[:port]
94
- source.sql_sock = config[:socket]
95
-
96
- # MySQL SSL support
97
- source.mysql_ssl_ca = config[:sslca] if config[:sslca]
98
- source.mysql_ssl_cert = config[:sslcert] if config[:sslcert]
99
- source.mysql_ssl_key = config[:sslkey] if config[:sslkey]
100
- end
101
-
102
- def set_source_fields(source)
103
- fields.each do |field|
104
- source.sql_file_field << field.unique_name if field.file?
105
- source.sql_field_string << field.unique_name if field.with_attribute?
106
- source.sql_field_str2wordcount << field.unique_name if field.with_wordcount?
107
- end
108
- end
109
-
110
- def set_source_attributes(source, offset, delta = false)
111
- available_attributes.each do |attrib|
112
- source.send(attrib.type_to_config) << attrib.config_value(offset, delta)
113
- end
114
- end
115
-
116
- def set_source_sql(source, offset, delta = false)
117
- source.sql_query = to_sql(:offset => offset, :delta => delta).gsub(/\n/, ' ')
118
- source.sql_query_range = to_sql_query_range(:delta => delta)
119
- source.sql_query_info = to_sql_query_info(offset)
120
-
121
- source.sql_query_pre += send(!delta ? :sql_query_pre_for_core : :sql_query_pre_for_delta)
122
-
123
- if @index.local_options[:group_concat_max_len]
124
- source.sql_query_pre << "SET SESSION group_concat_max_len = #{@index.local_options[:group_concat_max_len]}"
125
- end
126
-
127
- source.sql_query_pre += [adapter.utf8_query_pre].compact if utf8?
128
- source.sql_query_pre << adapter.utc_query_pre
129
- end
130
-
131
- def set_source_settings(source)
132
- config = ThinkingSphinx::Configuration.instance
133
- config.source_options.each do |key, value|
134
- source.send("#{key}=".to_sym, value)
135
- end
136
-
137
- source_options = ThinkingSphinx::Configuration::SourceOptions
138
- @options.each do |key, value|
139
- if source_options.include?(key.to_s) && !value.nil?
140
- source.send("#{key}=".to_sym, value)
141
- end
142
- end
143
- end
144
-
145
- # Returns all associations used amongst all the fields and attributes.
146
- # This includes all associations between the model and what the actual
147
- # columns are from.
148
- #
149
- def all_associations
150
- @all_associations ||= (
151
- # field associations
152
- @fields.collect { |field|
153
- field.associations.values
154
- }.flatten +
155
- # attribute associations
156
- @attributes.collect { |attrib|
157
- attrib.associations.values if attrib.include_as_association?
158
- }.compact.flatten +
159
- # explicit joins
160
- @joins.collect { |join|
161
- join.associations
162
- }.flatten
163
- ).uniq.collect { |assoc|
164
- # get ancestors as well as column-level associations
165
- assoc.ancestors
166
- }.flatten.uniq
167
- end
168
-
169
- def utf8?
170
- @index.options[:charset_type] =~ /utf-8|zh_cn.utf-8/
171
- end
172
-
173
- def join_dependency_class
174
- if rails_3_1?
175
- ::ActiveRecord::Associations::JoinDependency
176
- else
177
- ::ActiveRecord::Associations::ClassMethods::JoinDependency
178
- end
179
- end
180
-
181
- def initial_joins
182
- if rails_3_1?
183
- []
184
- else
185
- nil
186
- end
187
- end
188
-
189
- def rails_3_1?
190
- ::ActiveRecord::Associations.constants.include?(:JoinDependency) ||
191
- ::ActiveRecord::Associations.constants.include?('JoinDependency')
192
- end
193
- end
194
- end
@@ -1,51 +0,0 @@
1
- module ThinkingSphinx
2
- class Source
3
- module InternalProperties
4
- def add_internal_attributes_and_facets
5
- add_internal_attribute :sphinx_internal_id, nil,
6
- @model.primary_key_for_sphinx.to_sym
7
- add_internal_attribute :sphinx_deleted, :integer, "0"
8
- add_internal_attribute :class_crc, :integer, crc_column, true
9
-
10
- unless Riddle.loaded_version.to_i < 2
11
- add_internal_attribute :sphinx_internal_class, :string, internal_class_column, true
12
- add_internal_facet :sphinx_internal_class
13
- else
14
- add_internal_facet :class_crc
15
- end
16
- end
17
-
18
- def add_internal_attribute(name, type, contents, facet = false)
19
- return unless attribute_by_alias(name).nil?
20
-
21
- Attribute.new(self,
22
- ThinkingSphinx::Index::FauxColumn.new(contents),
23
- :type => type,
24
- :as => name,
25
- :facet => facet,
26
- :admin => true
27
- )
28
- end
29
-
30
- def add_internal_facet(name)
31
- return unless facet_by_alias(name).nil?
32
-
33
- @model.sphinx_facets << ClassFacet.new(attribute_by_alias(name))
34
- end
35
-
36
- def attribute_by_alias(attr_alias)
37
- @attributes.detect { |attrib| attrib.alias == attr_alias }
38
- end
39
-
40
- def facet_by_alias(name)
41
- @model.sphinx_facets.detect { |facet| facet.name == name }
42
- end
43
-
44
- def subclasses_to_s
45
- "'" + (@model.send(:descendants).collect { |klass|
46
- klass.to_crc32.to_s
47
- } << @model.to_crc32.to_s).join(",") + "'"
48
- end
49
- end
50
- end
51
- end
@@ -1,174 +0,0 @@
1
- module ThinkingSphinx
2
- class Source
3
- module SQL
4
- # Generates the big SQL statement to get the data back for all the fields
5
- # and attributes, using all the relevant association joins. If you want
6
- # the version filtered for delta values, send through :delta => true in
7
- # the options. Won't do much though if the index isn't set up to support a
8
- # delta sibling.
9
- #
10
- # Examples:
11
- #
12
- # source.to_sql
13
- # source.to_sql(:delta => true)
14
- #
15
- def to_sql(options={})
16
- relation = @model.unscoped
17
- pre_select = 'SQL_NO_CACHE ' if adapter.sphinx_identifier == "mysql"
18
- relation = relation.select(
19
- pre_select.to_s + sql_select_clause(options[:offset])
20
- )
21
-
22
- all_associations.each do |assoc|
23
- relation = relation.joins(assoc.arel_join)
24
- end
25
-
26
- relation = relation.where(sql_where_clause(options))
27
- relation = relation.group(sql_group_clause)
28
- relation = relation.order('NULL') if adapter.sphinx_identifier == "mysql"
29
- relation.to_sql
30
- end
31
-
32
- # Simple helper method for the query range SQL - which is a statement that
33
- # returns minimum and maximum id values. These can be filtered by delta -
34
- # so pass in :delta => true to get the delta version of the SQL.
35
- #
36
- def to_sql_query_range(options={})
37
- return nil if @index.options[:disable_range]
38
-
39
- min_statement = adapter.convert_nulls(
40
- "MIN(#{quote_column(@model.primary_key_for_sphinx)})", 1
41
- )
42
- max_statement = adapter.convert_nulls(
43
- "MAX(#{quote_column(@model.primary_key_for_sphinx)})", 1
44
- )
45
-
46
- sql = "SELECT #{min_statement}, #{max_statement} " +
47
- "FROM #{@model.quoted_table_name} "
48
- if self.delta? && !@index.delta_object.clause(@model, options[:delta]).blank?
49
- sql << "WHERE #{@index.delta_object.clause(@model, options[:delta])}"
50
- end
51
-
52
- sql
53
- end
54
-
55
- # Simple helper method for the query info SQL - which is a statement that
56
- # returns the single row for a corresponding id.
57
- #
58
- def to_sql_query_info(offset)
59
- "SELECT * FROM #{@model.quoted_table_name} WHERE " +
60
- "#{quote_column(@model.primary_key_for_sphinx)} = (($id - #{offset}) / #{ThinkingSphinx.context.indexed_models.size})"
61
- end
62
-
63
- def sql_select_clause(offset)
64
- unique_id_expr = ThinkingSphinx.unique_id_expression(adapter, offset)
65
-
66
- (
67
- ["#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} #{unique_id_expr} AS #{quote_column(@model.primary_key_for_sphinx)} "] +
68
- @fields.collect { |field| field.to_select_sql } +
69
- @attributes.collect { |attribute| attribute.to_select_sql }
70
- ).compact.join(", ")
71
- end
72
-
73
- def sql_where_clause(options)
74
- logic = []
75
- logic += [
76
- "#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} >= $start",
77
- "#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} <= $end"
78
- ] unless @index.options[:disable_range]
79
-
80
- if self.delta? && !@index.delta_object.clause(@model, options[:delta]).blank?
81
- logic << "#{@index.delta_object.clause(@model, options[:delta])}"
82
- end
83
-
84
- logic += (@conditions || [])
85
- logic.join(' AND ')
86
- end
87
-
88
- def sql_group_clause
89
- internal_groupings = []
90
- if @model.column_names.include?(@model.inheritance_column)
91
- internal_groupings << "#{@model.quoted_table_name}.#{quote_column(@model.inheritance_column)}"
92
- end
93
-
94
- (
95
- ["#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)}"] +
96
- @fields.collect { |field| field.to_group_sql }.compact +
97
- @attributes.collect { |attribute| attribute.to_group_sql }.compact +
98
- @groupings + internal_groupings
99
- ).join(", ")
100
- end
101
-
102
- def sql_query_pre_for_core
103
- if self.delta? && !@index.delta_object.reset_query(@model).blank?
104
- [@index.delta_object.reset_query(@model)]
105
- else
106
- []
107
- end
108
- end
109
-
110
- def sql_query_pre_for_delta
111
- [""]
112
- end
113
-
114
- def quote_column(column)
115
- @model.connection.quote_column_name(column)
116
- end
117
-
118
- def crc_column
119
- if @model.table_exists? &&
120
- @model.column_names.include?(@model.inheritance_column)
121
-
122
- types = types_to_crcs
123
- return @model.to_crc32.to_s if types.empty?
124
-
125
- adapter.case(adapter.convert_nulls(
126
- adapter.quote_with_table(@model.inheritance_column), @model.name),
127
- types, @model.to_crc32)
128
- else
129
- @model.to_crc32.to_s
130
- end
131
- end
132
-
133
- def internal_class_column
134
- quoted_name = "'#{@model.name}'"
135
-
136
- if @model.table_exists? &&
137
- @model.column_names.include?(@model.inheritance_column)
138
-
139
- types = types_to_hash
140
- return quoted_name if types.empty?
141
-
142
- adapter.case(adapter.convert_nulls(
143
- adapter.quote_with_table(@model.inheritance_column), @model.name),
144
- types, quoted_name)
145
- else
146
- quoted_name
147
- end
148
- end
149
-
150
- def type_values
151
- return @model.sphinx_types unless @model.sphinx_types.nil?
152
-
153
- @model.connection.select_values <<-SQL
154
- SELECT DISTINCT #{@model.inheritance_column}
155
- FROM #{@model.table_name}
156
- SQL
157
- end
158
-
159
- def types_to_crcs
160
- type_values.compact.inject({}) { |hash, type|
161
- hash[type] = type.to_crc32
162
- hash
163
- }
164
- end
165
-
166
- def types_to_hash
167
- type_values.compact.inject({}) { |hash, type|
168
- hash[type] = "'#{type}'"
169
- hash
170
- }
171
- end
172
- end
173
- end
174
- end
@@ -1,32 +0,0 @@
1
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Ellie','K','Ford','38 Mills Street','Eagle Farm Bc','QLD','4009','Ellie.K.Ford@mailinator.com','1970/1/23 00:00:00', 3, 'CricketTeam');
2
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Aaliyah','E','Allen','71 Murphy Street','Wyola West','WA','6407','Aaliyah.E.Allen@dodgit.com','1980/3/23 00:00:00', 3, 'CricketTeam');
3
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Callum','C','Miah','89 Dalgarno Street','Bullawa Creek','NSW','2390','Callum.C.Miah@trashymail.com','1973/3/25 00:00:00', 3, 'CricketTeam');
4
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Finley','L','Buckley','18 Queen Street','Manly Vale','NSW','2093','Finley.L.Buckley@spambob.com','1962/11/20 00:00:00', 3, 'CricketTeam');
5
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Poppy','A','Hilton','36 Nerrigundah Drive','Nyora','VIC','3987','Poppy.A.Hilton@dodgit.com','1972/10/30 00:00:00', 3, 'CricketTeam');
6
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Eloise','Z','Kennedy','18 Mt Berryman Road','Lilydale','QLD','4344','Eloise.Z.Kennedy@spambob.com','1973/9/28 00:00:00', 3, 'CricketTeam');
7
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Shannon','L','Manning','60 Ocean Pde','Greenvale','QLD','4816','Shannon.L.Manning@dodgit.com','1956/6/13 00:00:00', 3, 'FootballTeam');
8
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Oscar','C','Lawson','43 Feather Street','Battery Hill','QLD','4551','Oscar.C.Lawson@spambob.com','1979/10/17 00:00:00', 3, 'CricketTeam');
9
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('female','Sofia','K','Bray','26 Clifton Street','Pental Island','VIC','3586','Sofia.K.Bray@mailinator.com','1970/5/10 00:00:00', 3, 'CricketTeam');
10
- insert into `people` (gender, first_name, middle_initial, last_name, street_address, city, state, postcode, email, birthday, team_id, team_type) values('male','Andrew','N','Byrne','35 Cecil Street','Monash Park','NSW','2111','Andrew.N.Byrne@spambob.com','1983/2/16 00:00:00', 3, 'CricketTeam');
11
-
12
- insert into `alphas` (name) values ('one');
13
- insert into `alphas` (name) values ('two');
14
- insert into `alphas` (name) values ('three');
15
- insert into `alphas` (name) values ('four');
16
- insert into `alphas` (name) values ('five');
17
- insert into `alphas` (name) values ('six');
18
- insert into `alphas` (name) values ('seven');
19
- insert into `alphas` (name) values ('eight');
20
- insert into `alphas` (name) values ('nine');
21
- insert into `alphas` (name) values ('ten');
22
-
23
- insert into `betas` (name) values ('one');
24
- insert into `betas` (name) values ('two');
25
- insert into `betas` (name) values ('three');
26
- insert into `betas` (name) values ('four');
27
- insert into `betas` (name) values ('five');
28
- insert into `betas` (name) values ('six');
29
- insert into `betas` (name) values ('seven');
30
- insert into `betas` (name) values ('eight');
31
- insert into `betas` (name) values ('nine');
32
- insert into `betas` (name) values ('ten');