rroonga 4.0.4-x64-mingw32 → 4.0.5-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (481) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +73 -0
  3. data/Rakefile +13 -0
  4. data/doc/text/news.textile +26 -2
  5. data/ext/groonga/extconf.rb +3 -1
  6. data/ext/groonga/rb-grn-context.c +1 -1
  7. data/ext/groonga/rb-grn-double-array-trie.c +160 -4
  8. data/ext/groonga/rb-grn-object.c +10 -1
  9. data/ext/groonga/rb-grn-posting.c +4 -4
  10. data/ext/groonga/rb-grn-table-key-support.c +9 -4
  11. data/ext/groonga/rb-grn-table.c +1 -1
  12. data/ext/groonga/rb-grn-utils.c +2 -6
  13. data/ext/groonga/rb-grn-variable-size-column.c +2 -2
  14. data/ext/groonga/rb-grn.h +27 -2
  15. data/lib/1.9/groonga.so +0 -0
  16. data/lib/2.0/groonga.so +0 -0
  17. data/lib/2.1/groonga.so +0 -0
  18. data/lib/groonga/record.rb +19 -2
  19. data/lib/groonga/schema.rb +2 -2
  20. data/rroonga-build.rb +1 -1
  21. data/rroonga.gemspec +5 -5
  22. data/test/test-column.rb +6 -6
  23. data/test/test-database.rb +6 -2
  24. data/test/test-double-array-trie.rb +18 -0
  25. data/test/test-expression-builder.rb +3 -2
  26. data/test/test-hash.rb +13 -1
  27. data/test/test-plugin.rb +3 -1
  28. data/test/test-record.rb +10 -0
  29. data/test/test-variable-size-column.rb +4 -4
  30. data/vendor/local/bin/groonga-benchmark.exe +0 -0
  31. data/vendor/local/bin/groonga.exe +0 -0
  32. data/vendor/local/bin/libgroonga-0.dll +0 -0
  33. data/vendor/local/bin/libmecab-1.dll +0 -0
  34. data/vendor/local/bin/libmsgpack-3.dll +0 -0
  35. data/vendor/local/bin/libmsgpackc-2.dll +0 -0
  36. data/vendor/local/bin/libonig-5.dll +0 -0
  37. data/vendor/local/bin/libwinpthread-1.dll +0 -0
  38. data/vendor/local/bin/mecab.exe +0 -0
  39. data/vendor/local/bin/onig-config +78 -0
  40. data/vendor/local/include/oniggnu.h +85 -0
  41. data/vendor/local/include/onigposix.h +169 -0
  42. data/vendor/local/include/oniguruma.h +870 -0
  43. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.a +0 -0
  44. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll +0 -0
  45. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll.a +0 -0
  46. data/vendor/local/lib/groonga/plugins/ruby/eval.a +0 -0
  47. data/vendor/local/lib/groonga/plugins/ruby/eval.dll +0 -0
  48. data/vendor/local/lib/groonga/plugins/ruby/eval.dll.a +0 -0
  49. data/vendor/local/lib/groonga/plugins/ruby/eval.la +41 -0
  50. data/vendor/local/lib/groonga/plugins/ruby/load.a +0 -0
  51. data/vendor/local/lib/groonga/plugins/ruby/load.dll +0 -0
  52. data/vendor/local/lib/groonga/plugins/ruby/load.dll.a +0 -0
  53. data/vendor/local/lib/groonga/plugins/ruby/load.la +41 -0
  54. data/vendor/local/lib/groonga/plugins/suggest/suggest.a +0 -0
  55. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll +0 -0
  56. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll.a +0 -0
  57. data/vendor/local/lib/groonga/plugins/table/table.a +0 -0
  58. data/vendor/local/lib/groonga/plugins/table/table.dll +0 -0
  59. data/vendor/local/lib/groonga/plugins/table/table.dll.a +0 -0
  60. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.a +0 -0
  61. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll +0 -0
  62. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll.a +0 -0
  63. data/vendor/local/lib/groonga/scripts/ruby/backtrace_entry.rb +20 -0
  64. data/vendor/local/lib/groonga/scripts/ruby/context.rb +31 -0
  65. data/vendor/local/lib/groonga/scripts/ruby/context/error_level.rb +30 -0
  66. data/vendor/local/lib/groonga/scripts/ruby/context/rc.rb +99 -0
  67. data/vendor/local/lib/groonga/scripts/ruby/eval_context.rb +13 -0
  68. data/vendor/local/lib/groonga/scripts/ruby/expression.rb +13 -0
  69. data/vendor/local/lib/groonga/scripts/ruby/index_info.rb +10 -0
  70. data/vendor/local/lib/groonga/scripts/ruby/logger.rb +27 -0
  71. data/vendor/local/lib/groonga/scripts/ruby/logger/level.rb +32 -0
  72. data/vendor/local/lib/groonga/scripts/ruby/scan_info.rb +30 -0
  73. data/vendor/local/lib/groonga/scripts/ruby/scan_info_builder.rb +342 -0
  74. data/vendor/local/lib/groonga/scripts/ruby/scan_info_data.rb +198 -0
  75. data/vendor/local/lib/libgroonga.a +0 -0
  76. data/vendor/local/lib/libgroonga.dll.a +0 -0
  77. data/vendor/local/lib/libmecab.a +0 -0
  78. data/vendor/local/lib/libmecab.dll.a +0 -0
  79. data/vendor/local/lib/libmsgpack.a +0 -0
  80. data/vendor/local/lib/libmsgpack.dll.a +0 -0
  81. data/vendor/local/lib/libmsgpackc.a +0 -0
  82. data/vendor/local/lib/libmsgpackc.dll.a +0 -0
  83. data/vendor/local/lib/libonig.a +0 -0
  84. data/vendor/local/lib/libonig.dll.a +0 -0
  85. data/vendor/local/lib/libonig.la +41 -0
  86. data/vendor/local/lib/pkgconfig/groonga.pc +2 -2
  87. data/vendor/local/lib/pkgconfig/oniguruma.pc +14 -0
  88. data/vendor/local/libexec/mecab/mecab-cost-train.exe +0 -0
  89. data/vendor/local/libexec/mecab/mecab-dict-gen.exe +0 -0
  90. data/vendor/local/libexec/mecab/mecab-dict-index.exe +0 -0
  91. data/vendor/local/libexec/mecab/mecab-system-eval.exe +0 -0
  92. data/vendor/local/libexec/mecab/mecab-test-gen.exe +0 -0
  93. data/vendor/local/share/doc/groonga/en/html/.buildinfo +1 -1
  94. data/vendor/local/share/doc/groonga/en/html/_sources/contribution/report.txt +4 -5
  95. data/vendor/local/share/doc/groonga/en/html/_sources/install/centos.txt +46 -10
  96. data/vendor/local/share/doc/groonga/en/html/_sources/install/debian.txt +3 -87
  97. data/vendor/local/share/doc/groonga/en/html/_sources/install/fedora.txt +3 -3
  98. data/vendor/local/share/doc/groonga/en/html/_sources/install/mac_os_x.txt +3 -3
  99. data/vendor/local/share/doc/groonga/en/html/_sources/install/others.txt +3 -3
  100. data/vendor/local/share/doc/groonga/en/html/_sources/install/solaris.txt +3 -3
  101. data/vendor/local/share/doc/groonga/en/html/_sources/install/ubuntu.txt +3 -3
  102. data/vendor/local/share/doc/groonga/en/html/_sources/install/windows.txt +9 -9
  103. data/vendor/local/share/doc/groonga/en/html/_sources/news.txt +68 -0
  104. data/vendor/local/share/doc/groonga/en/html/_sources/reference/executables.txt +3 -3
  105. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/drilldown.txt +1 -1
  106. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/lexicon.txt +5 -4
  107. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/micro_blog.txt +265 -232
  108. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/query_expansion.txt +30 -23
  109. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/search.txt +2 -2
  110. data/vendor/local/share/doc/groonga/en/html/characteristic.html +5 -5
  111. data/vendor/local/share/doc/groonga/en/html/community.html +5 -5
  112. data/vendor/local/share/doc/groonga/en/html/contribution.html +5 -5
  113. data/vendor/local/share/doc/groonga/en/html/contribution/development.html +5 -5
  114. data/vendor/local/share/doc/groonga/en/html/contribution/development/com.html +5 -5
  115. data/vendor/local/share/doc/groonga/en/html/contribution/development/cooperation.html +5 -5
  116. data/vendor/local/share/doc/groonga/en/html/contribution/development/query.html +5 -5
  117. data/vendor/local/share/doc/groonga/en/html/contribution/development/release.html +5 -5
  118. data/vendor/local/share/doc/groonga/en/html/contribution/development/repository.html +5 -5
  119. data/vendor/local/share/doc/groonga/en/html/contribution/development/test.html +5 -5
  120. data/vendor/local/share/doc/groonga/en/html/contribution/documentation.html +5 -5
  121. data/vendor/local/share/doc/groonga/en/html/contribution/documentation/c-api.html +5 -5
  122. data/vendor/local/share/doc/groonga/en/html/contribution/documentation/i18n.html +5 -5
  123. data/vendor/local/share/doc/groonga/en/html/contribution/documentation/introduction.html +5 -5
  124. data/vendor/local/share/doc/groonga/en/html/contribution/report.html +8 -9
  125. data/vendor/local/share/doc/groonga/en/html/development.html +5 -5
  126. data/vendor/local/share/doc/groonga/en/html/development/travis-ci.html +5 -5
  127. data/vendor/local/share/doc/groonga/en/html/genindex.html +5 -5
  128. data/vendor/local/share/doc/groonga/en/html/geolocation_search.html +5 -5
  129. data/vendor/local/share/doc/groonga/en/html/index.html +17 -18
  130. data/vendor/local/share/doc/groonga/en/html/install.html +8 -9
  131. data/vendor/local/share/doc/groonga/en/html/install/centos.html +63 -10
  132. data/vendor/local/share/doc/groonga/en/html/install/debian.html +10 -108
  133. data/vendor/local/share/doc/groonga/en/html/install/fedora.html +8 -8
  134. data/vendor/local/share/doc/groonga/en/html/install/mac_os_x.html +8 -8
  135. data/vendor/local/share/doc/groonga/en/html/install/others.html +8 -8
  136. data/vendor/local/share/doc/groonga/en/html/install/solaris.html +8 -8
  137. data/vendor/local/share/doc/groonga/en/html/install/ubuntu.html +8 -8
  138. data/vendor/local/share/doc/groonga/en/html/install/windows.html +14 -14
  139. data/vendor/local/share/doc/groonga/en/html/limitations.html +5 -5
  140. data/vendor/local/share/doc/groonga/en/html/news.html +123 -48
  141. data/vendor/local/share/doc/groonga/en/html/news/0.x.html +5 -5
  142. data/vendor/local/share/doc/groonga/en/html/news/1.0.x.html +5 -5
  143. data/vendor/local/share/doc/groonga/en/html/news/1.1.x.html +5 -5
  144. data/vendor/local/share/doc/groonga/en/html/news/1.2.x.html +6 -6
  145. data/vendor/local/share/doc/groonga/en/html/news/1.3.x.html +5 -5
  146. data/vendor/local/share/doc/groonga/en/html/news/2.x.html +5 -5
  147. data/vendor/local/share/doc/groonga/en/html/news/3.x.html +5 -5
  148. data/vendor/local/share/doc/groonga/en/html/news/senna.html +5 -5
  149. data/vendor/local/share/doc/groonga/en/html/objects.inv +0 -0
  150. data/vendor/local/share/doc/groonga/en/html/reference.html +10 -10
  151. data/vendor/local/share/doc/groonga/en/html/reference/api.html +5 -5
  152. data/vendor/local/share/doc/groonga/en/html/reference/api/global_configurations.html +5 -5
  153. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_cache.html +5 -5
  154. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_column.html +5 -5
  155. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_command_version.html +5 -5
  156. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_ctx.html +5 -5
  157. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_db.html +5 -5
  158. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_encoding.html +5 -5
  159. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_expr.html +5 -5
  160. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_geo.html +5 -5
  161. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_hook.html +5 -5
  162. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_ii.html +5 -5
  163. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_index_cursor.html +5 -5
  164. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_info.html +5 -5
  165. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_match_escalation.html +5 -5
  166. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_obj.html +5 -5
  167. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_proc.html +5 -5
  168. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_search.html +5 -5
  169. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_table.html +5 -5
  170. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_table_cursor.html +5 -5
  171. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_type.html +5 -5
  172. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_user_data.html +5 -5
  173. data/vendor/local/share/doc/groonga/en/html/reference/api/plugin.html +5 -5
  174. data/vendor/local/share/doc/groonga/en/html/reference/cast.html +5 -5
  175. data/vendor/local/share/doc/groonga/en/html/reference/column.html +5 -5
  176. data/vendor/local/share/doc/groonga/en/html/reference/columns/pseudo.html +5 -5
  177. data/vendor/local/share/doc/groonga/en/html/reference/columns/vector.html +5 -5
  178. data/vendor/local/share/doc/groonga/en/html/reference/command.html +5 -5
  179. data/vendor/local/share/doc/groonga/en/html/reference/command/command_version.html +5 -5
  180. data/vendor/local/share/doc/groonga/en/html/reference/command/output_format.html +5 -5
  181. data/vendor/local/share/doc/groonga/en/html/reference/command/return_code.html +5 -5
  182. data/vendor/local/share/doc/groonga/en/html/reference/commands/cache_limit.html +5 -5
  183. data/vendor/local/share/doc/groonga/en/html/reference/commands/check.html +5 -5
  184. data/vendor/local/share/doc/groonga/en/html/reference/commands/clearlock.html +5 -5
  185. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_create.html +5 -5
  186. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_list.html +5 -5
  187. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_remove.html +5 -5
  188. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_rename.html +5 -5
  189. data/vendor/local/share/doc/groonga/en/html/reference/commands/define_selector.html +5 -5
  190. data/vendor/local/share/doc/groonga/en/html/reference/commands/defrag.html +5 -5
  191. data/vendor/local/share/doc/groonga/en/html/reference/commands/delete.html +5 -5
  192. data/vendor/local/share/doc/groonga/en/html/reference/commands/dump.html +5 -5
  193. data/vendor/local/share/doc/groonga/en/html/reference/commands/load.html +5 -5
  194. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_level.html +5 -5
  195. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_put.html +5 -5
  196. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_reopen.html +5 -5
  197. data/vendor/local/share/doc/groonga/en/html/reference/commands/normalize.html +5 -5
  198. data/vendor/local/share/doc/groonga/en/html/reference/commands/normalizer_list.html +5 -5
  199. data/vendor/local/share/doc/groonga/en/html/reference/commands/quit.html +5 -5
  200. data/vendor/local/share/doc/groonga/en/html/reference/commands/register.html +5 -5
  201. data/vendor/local/share/doc/groonga/en/html/reference/commands/ruby_eval.html +5 -5
  202. data/vendor/local/share/doc/groonga/en/html/reference/commands/ruby_load.html +5 -5
  203. data/vendor/local/share/doc/groonga/en/html/reference/commands/select.html +5 -5
  204. data/vendor/local/share/doc/groonga/en/html/reference/commands/shutdown.html +5 -5
  205. data/vendor/local/share/doc/groonga/en/html/reference/commands/status.html +5 -5
  206. data/vendor/local/share/doc/groonga/en/html/reference/commands/suggest.html +5 -5
  207. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_create.html +5 -5
  208. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_list.html +5 -5
  209. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_remove.html +5 -5
  210. data/vendor/local/share/doc/groonga/en/html/reference/commands/tokenize.html +5 -5
  211. data/vendor/local/share/doc/groonga/en/html/reference/commands/tokenizer_list.html +5 -5
  212. data/vendor/local/share/doc/groonga/en/html/reference/commands/truncate.html +5 -5
  213. data/vendor/local/share/doc/groonga/en/html/reference/executables.html +8 -8
  214. data/vendor/local/share/doc/groonga/en/html/reference/executables/grnslap.html +12 -12
  215. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-benchmark.html +8 -8
  216. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-httpd.html +8 -8
  217. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-server-http.html +8 -8
  218. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-create-dataset.html +8 -8
  219. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-httpd.html +8 -8
  220. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-learner.html +8 -8
  221. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga.html +8 -8
  222. data/vendor/local/share/doc/groonga/en/html/reference/function.html +5 -5
  223. data/vendor/local/share/doc/groonga/en/html/reference/functions/between.html +5 -5
  224. data/vendor/local/share/doc/groonga/en/html/reference/functions/edit_distance.html +5 -5
  225. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_distance.html +5 -5
  226. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_circle.html +5 -5
  227. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_rectangle.html +5 -5
  228. data/vendor/local/share/doc/groonga/en/html/reference/functions/highlight_full.html +5 -5
  229. data/vendor/local/share/doc/groonga/en/html/reference/functions/highlight_html.html +5 -5
  230. data/vendor/local/share/doc/groonga/en/html/reference/functions/html_untag.html +5 -5
  231. data/vendor/local/share/doc/groonga/en/html/reference/functions/now.html +5 -5
  232. data/vendor/local/share/doc/groonga/en/html/reference/functions/query.html +5 -5
  233. data/vendor/local/share/doc/groonga/en/html/reference/functions/rand.html +5 -5
  234. data/vendor/local/share/doc/groonga/en/html/reference/functions/snippet_html.html +5 -5
  235. data/vendor/local/share/doc/groonga/en/html/reference/functions/sub_filter.html +5 -5
  236. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr.html +5 -5
  237. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/query_syntax.html +5 -5
  238. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/script_syntax.html +5 -5
  239. data/vendor/local/share/doc/groonga/en/html/reference/indexing.html +5 -5
  240. data/vendor/local/share/doc/groonga/en/html/reference/log.html +5 -5
  241. data/vendor/local/share/doc/groonga/en/html/reference/normalizers.html +5 -5
  242. data/vendor/local/share/doc/groonga/en/html/reference/output.html +5 -5
  243. data/vendor/local/share/doc/groonga/en/html/reference/query_expanders.html +5 -5
  244. data/vendor/local/share/doc/groonga/en/html/reference/query_expanders/tsv.html +5 -5
  245. data/vendor/local/share/doc/groonga/en/html/reference/tables.html +5 -5
  246. data/vendor/local/share/doc/groonga/en/html/reference/tokenizers.html +5 -5
  247. data/vendor/local/share/doc/groonga/en/html/reference/tuning.html +5 -5
  248. data/vendor/local/share/doc/groonga/en/html/reference/types.html +5 -5
  249. data/vendor/local/share/doc/groonga/en/html/search.html +5 -5
  250. data/vendor/local/share/doc/groonga/en/html/searchindex.js +1 -1
  251. data/vendor/local/share/doc/groonga/en/html/server.html +5 -5
  252. data/vendor/local/share/doc/groonga/en/html/server/gqtp.html +5 -5
  253. data/vendor/local/share/doc/groonga/en/html/server/http.html +5 -5
  254. data/vendor/local/share/doc/groonga/en/html/server/http/comparison.html +5 -5
  255. data/vendor/local/share/doc/groonga/en/html/server/http/groonga-httpd.html +5 -5
  256. data/vendor/local/share/doc/groonga/en/html/server/http/groonga.html +5 -5
  257. data/vendor/local/share/doc/groonga/en/html/server/package.html +5 -5
  258. data/vendor/local/share/doc/groonga/en/html/spec.html +5 -5
  259. data/vendor/local/share/doc/groonga/en/html/spec/gqtp.html +5 -5
  260. data/vendor/local/share/doc/groonga/en/html/spec/search.html +5 -5
  261. data/vendor/local/share/doc/groonga/en/html/suggest.html +9 -9
  262. data/vendor/local/share/doc/groonga/en/html/suggest/completion.html +5 -5
  263. data/vendor/local/share/doc/groonga/en/html/suggest/correction.html +5 -5
  264. data/vendor/local/share/doc/groonga/en/html/suggest/introduction.html +5 -5
  265. data/vendor/local/share/doc/groonga/en/html/suggest/suggestion.html +5 -5
  266. data/vendor/local/share/doc/groonga/en/html/suggest/tutorial.html +5 -5
  267. data/vendor/local/share/doc/groonga/en/html/troubleshooting.html +5 -5
  268. data/vendor/local/share/doc/groonga/en/html/troubleshooting/different_results_with_the_same_keyword.html +5 -5
  269. data/vendor/local/share/doc/groonga/en/html/troubleshooting/mmap_cannot_allocate_memory.html +5 -5
  270. data/vendor/local/share/doc/groonga/en/html/tutorial.html +13 -13
  271. data/vendor/local/share/doc/groonga/en/html/tutorial/data.html +5 -5
  272. data/vendor/local/share/doc/groonga/en/html/tutorial/drilldown.html +6 -6
  273. data/vendor/local/share/doc/groonga/en/html/tutorial/index.html +5 -5
  274. data/vendor/local/share/doc/groonga/en/html/tutorial/introduction.html +5 -5
  275. data/vendor/local/share/doc/groonga/en/html/tutorial/lexicon.html +14 -13
  276. data/vendor/local/share/doc/groonga/en/html/tutorial/match_columns.html +5 -5
  277. data/vendor/local/share/doc/groonga/en/html/tutorial/micro_blog.html +264 -250
  278. data/vendor/local/share/doc/groonga/en/html/tutorial/network.html +5 -5
  279. data/vendor/local/share/doc/groonga/en/html/tutorial/patricia_trie.html +9 -9
  280. data/vendor/local/share/doc/groonga/en/html/tutorial/query_expansion.html +46 -41
  281. data/vendor/local/share/doc/groonga/en/html/tutorial/search.html +7 -7
  282. data/vendor/local/share/doc/groonga/ja/html/.buildinfo +1 -1
  283. data/vendor/local/share/doc/groonga/ja/html/_sources/contribution/report.txt +4 -5
  284. data/vendor/local/share/doc/groonga/ja/html/_sources/install/centos.txt +46 -10
  285. data/vendor/local/share/doc/groonga/ja/html/_sources/install/debian.txt +3 -87
  286. data/vendor/local/share/doc/groonga/ja/html/_sources/install/fedora.txt +3 -3
  287. data/vendor/local/share/doc/groonga/ja/html/_sources/install/mac_os_x.txt +3 -3
  288. data/vendor/local/share/doc/groonga/ja/html/_sources/install/others.txt +3 -3
  289. data/vendor/local/share/doc/groonga/ja/html/_sources/install/solaris.txt +3 -3
  290. data/vendor/local/share/doc/groonga/ja/html/_sources/install/ubuntu.txt +3 -3
  291. data/vendor/local/share/doc/groonga/ja/html/_sources/install/windows.txt +9 -9
  292. data/vendor/local/share/doc/groonga/ja/html/_sources/news.txt +68 -0
  293. data/vendor/local/share/doc/groonga/ja/html/_sources/reference/executables.txt +3 -3
  294. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/drilldown.txt +1 -1
  295. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/lexicon.txt +5 -4
  296. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/micro_blog.txt +265 -232
  297. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/query_expansion.txt +30 -23
  298. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/search.txt +2 -2
  299. data/vendor/local/share/doc/groonga/ja/html/characteristic.html +5 -5
  300. data/vendor/local/share/doc/groonga/ja/html/community.html +5 -5
  301. data/vendor/local/share/doc/groonga/ja/html/contribution.html +5 -5
  302. data/vendor/local/share/doc/groonga/ja/html/contribution/development.html +5 -5
  303. data/vendor/local/share/doc/groonga/ja/html/contribution/development/com.html +5 -5
  304. data/vendor/local/share/doc/groonga/ja/html/contribution/development/cooperation.html +5 -5
  305. data/vendor/local/share/doc/groonga/ja/html/contribution/development/query.html +5 -5
  306. data/vendor/local/share/doc/groonga/ja/html/contribution/development/release.html +5 -5
  307. data/vendor/local/share/doc/groonga/ja/html/contribution/development/repository.html +5 -5
  308. data/vendor/local/share/doc/groonga/ja/html/contribution/development/test.html +5 -5
  309. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation.html +5 -5
  310. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/c-api.html +5 -5
  311. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/i18n.html +5 -5
  312. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/introduction.html +5 -5
  313. data/vendor/local/share/doc/groonga/ja/html/contribution/report.html +7 -6
  314. data/vendor/local/share/doc/groonga/ja/html/development.html +5 -5
  315. data/vendor/local/share/doc/groonga/ja/html/development/travis-ci.html +5 -5
  316. data/vendor/local/share/doc/groonga/ja/html/genindex.html +5 -5
  317. data/vendor/local/share/doc/groonga/ja/html/geolocation_search.html +5 -5
  318. data/vendor/local/share/doc/groonga/ja/html/index.html +14 -15
  319. data/vendor/local/share/doc/groonga/ja/html/install.html +8 -9
  320. data/vendor/local/share/doc/groonga/ja/html/install/centos.html +57 -10
  321. data/vendor/local/share/doc/groonga/ja/html/install/debian.html +10 -102
  322. data/vendor/local/share/doc/groonga/ja/html/install/fedora.html +8 -8
  323. data/vendor/local/share/doc/groonga/ja/html/install/mac_os_x.html +8 -8
  324. data/vendor/local/share/doc/groonga/ja/html/install/others.html +8 -8
  325. data/vendor/local/share/doc/groonga/ja/html/install/solaris.html +8 -8
  326. data/vendor/local/share/doc/groonga/ja/html/install/ubuntu.html +8 -8
  327. data/vendor/local/share/doc/groonga/ja/html/install/windows.html +14 -14
  328. data/vendor/local/share/doc/groonga/ja/html/limitations.html +5 -5
  329. data/vendor/local/share/doc/groonga/ja/html/news.html +130 -48
  330. data/vendor/local/share/doc/groonga/ja/html/news/0.x.html +5 -5
  331. data/vendor/local/share/doc/groonga/ja/html/news/1.0.x.html +5 -5
  332. data/vendor/local/share/doc/groonga/ja/html/news/1.1.x.html +5 -5
  333. data/vendor/local/share/doc/groonga/ja/html/news/1.2.x.html +5 -5
  334. data/vendor/local/share/doc/groonga/ja/html/news/1.3.x.html +5 -5
  335. data/vendor/local/share/doc/groonga/ja/html/news/2.x.html +5 -5
  336. data/vendor/local/share/doc/groonga/ja/html/news/3.x.html +5 -5
  337. data/vendor/local/share/doc/groonga/ja/html/news/senna.html +5 -5
  338. data/vendor/local/share/doc/groonga/ja/html/objects.inv +0 -0
  339. data/vendor/local/share/doc/groonga/ja/html/reference.html +5 -5
  340. data/vendor/local/share/doc/groonga/ja/html/reference/api.html +5 -5
  341. data/vendor/local/share/doc/groonga/ja/html/reference/api/global_configurations.html +9 -9
  342. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_cache.html +17 -33
  343. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_column.html +23 -26
  344. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_command_version.html +5 -5
  345. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_ctx.html +10 -10
  346. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_db.html +6 -6
  347. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_encoding.html +10 -10
  348. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_expr.html +22 -37
  349. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_geo.html +5 -5
  350. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_hook.html +5 -5
  351. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_ii.html +5 -5
  352. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_index_cursor.html +5 -5
  353. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_info.html +5 -5
  354. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_match_escalation.html +5 -5
  355. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_obj.html +5 -5
  356. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_proc.html +5 -5
  357. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_search.html +5 -5
  358. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_table.html +5 -5
  359. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_table_cursor.html +5 -5
  360. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_type.html +5 -5
  361. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_user_data.html +5 -5
  362. data/vendor/local/share/doc/groonga/ja/html/reference/api/plugin.html +6 -6
  363. data/vendor/local/share/doc/groonga/ja/html/reference/cast.html +5 -5
  364. data/vendor/local/share/doc/groonga/ja/html/reference/column.html +5 -5
  365. data/vendor/local/share/doc/groonga/ja/html/reference/columns/pseudo.html +5 -5
  366. data/vendor/local/share/doc/groonga/ja/html/reference/columns/vector.html +5 -5
  367. data/vendor/local/share/doc/groonga/ja/html/reference/command.html +5 -5
  368. data/vendor/local/share/doc/groonga/ja/html/reference/command/command_version.html +5 -5
  369. data/vendor/local/share/doc/groonga/ja/html/reference/command/output_format.html +5 -5
  370. data/vendor/local/share/doc/groonga/ja/html/reference/command/return_code.html +5 -5
  371. data/vendor/local/share/doc/groonga/ja/html/reference/commands/cache_limit.html +5 -5
  372. data/vendor/local/share/doc/groonga/ja/html/reference/commands/check.html +5 -5
  373. data/vendor/local/share/doc/groonga/ja/html/reference/commands/clearlock.html +5 -5
  374. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_create.html +5 -5
  375. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_list.html +5 -5
  376. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_remove.html +5 -5
  377. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_rename.html +5 -5
  378. data/vendor/local/share/doc/groonga/ja/html/reference/commands/define_selector.html +5 -5
  379. data/vendor/local/share/doc/groonga/ja/html/reference/commands/defrag.html +5 -5
  380. data/vendor/local/share/doc/groonga/ja/html/reference/commands/delete.html +5 -5
  381. data/vendor/local/share/doc/groonga/ja/html/reference/commands/dump.html +5 -5
  382. data/vendor/local/share/doc/groonga/ja/html/reference/commands/load.html +5 -5
  383. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_level.html +5 -5
  384. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_put.html +5 -5
  385. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_reopen.html +5 -5
  386. data/vendor/local/share/doc/groonga/ja/html/reference/commands/normalize.html +5 -5
  387. data/vendor/local/share/doc/groonga/ja/html/reference/commands/normalizer_list.html +5 -5
  388. data/vendor/local/share/doc/groonga/ja/html/reference/commands/quit.html +5 -5
  389. data/vendor/local/share/doc/groonga/ja/html/reference/commands/register.html +5 -5
  390. data/vendor/local/share/doc/groonga/ja/html/reference/commands/ruby_eval.html +5 -5
  391. data/vendor/local/share/doc/groonga/ja/html/reference/commands/ruby_load.html +5 -5
  392. data/vendor/local/share/doc/groonga/ja/html/reference/commands/select.html +5 -5
  393. data/vendor/local/share/doc/groonga/ja/html/reference/commands/shutdown.html +5 -5
  394. data/vendor/local/share/doc/groonga/ja/html/reference/commands/status.html +5 -5
  395. data/vendor/local/share/doc/groonga/ja/html/reference/commands/suggest.html +5 -5
  396. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_create.html +5 -5
  397. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_list.html +5 -5
  398. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_remove.html +5 -5
  399. data/vendor/local/share/doc/groonga/ja/html/reference/commands/tokenize.html +5 -5
  400. data/vendor/local/share/doc/groonga/ja/html/reference/commands/tokenizer_list.html +5 -5
  401. data/vendor/local/share/doc/groonga/ja/html/reference/commands/truncate.html +5 -5
  402. data/vendor/local/share/doc/groonga/ja/html/reference/executables.html +7 -7
  403. data/vendor/local/share/doc/groonga/ja/html/reference/executables/grnslap.html +5 -5
  404. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-benchmark.html +5 -5
  405. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-httpd.html +5 -5
  406. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-server-http.html +5 -5
  407. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-create-dataset.html +5 -5
  408. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-httpd.html +5 -5
  409. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-learner.html +5 -5
  410. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga.html +5 -5
  411. data/vendor/local/share/doc/groonga/ja/html/reference/function.html +5 -5
  412. data/vendor/local/share/doc/groonga/ja/html/reference/functions/between.html +5 -5
  413. data/vendor/local/share/doc/groonga/ja/html/reference/functions/edit_distance.html +5 -5
  414. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_distance.html +5 -5
  415. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_circle.html +5 -5
  416. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_rectangle.html +5 -5
  417. data/vendor/local/share/doc/groonga/ja/html/reference/functions/highlight_full.html +5 -5
  418. data/vendor/local/share/doc/groonga/ja/html/reference/functions/highlight_html.html +5 -5
  419. data/vendor/local/share/doc/groonga/ja/html/reference/functions/html_untag.html +5 -5
  420. data/vendor/local/share/doc/groonga/ja/html/reference/functions/now.html +5 -5
  421. data/vendor/local/share/doc/groonga/ja/html/reference/functions/query.html +5 -5
  422. data/vendor/local/share/doc/groonga/ja/html/reference/functions/rand.html +5 -5
  423. data/vendor/local/share/doc/groonga/ja/html/reference/functions/snippet_html.html +5 -5
  424. data/vendor/local/share/doc/groonga/ja/html/reference/functions/sub_filter.html +5 -5
  425. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr.html +5 -5
  426. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/query_syntax.html +5 -5
  427. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/script_syntax.html +5 -5
  428. data/vendor/local/share/doc/groonga/ja/html/reference/indexing.html +5 -5
  429. data/vendor/local/share/doc/groonga/ja/html/reference/log.html +5 -5
  430. data/vendor/local/share/doc/groonga/ja/html/reference/normalizers.html +5 -5
  431. data/vendor/local/share/doc/groonga/ja/html/reference/output.html +5 -5
  432. data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders.html +5 -5
  433. data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders/tsv.html +5 -5
  434. data/vendor/local/share/doc/groonga/ja/html/reference/tables.html +5 -5
  435. data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers.html +5 -5
  436. data/vendor/local/share/doc/groonga/ja/html/reference/tuning.html +5 -5
  437. data/vendor/local/share/doc/groonga/ja/html/reference/types.html +5 -5
  438. data/vendor/local/share/doc/groonga/ja/html/search.html +5 -5
  439. data/vendor/local/share/doc/groonga/ja/html/searchindex.js +1 -1
  440. data/vendor/local/share/doc/groonga/ja/html/server.html +5 -5
  441. data/vendor/local/share/doc/groonga/ja/html/server/gqtp.html +5 -5
  442. data/vendor/local/share/doc/groonga/ja/html/server/http.html +5 -5
  443. data/vendor/local/share/doc/groonga/ja/html/server/http/comparison.html +5 -5
  444. data/vendor/local/share/doc/groonga/ja/html/server/http/groonga-httpd.html +5 -5
  445. data/vendor/local/share/doc/groonga/ja/html/server/http/groonga.html +5 -5
  446. data/vendor/local/share/doc/groonga/ja/html/server/package.html +5 -5
  447. data/vendor/local/share/doc/groonga/ja/html/spec.html +5 -5
  448. data/vendor/local/share/doc/groonga/ja/html/spec/gqtp.html +5 -5
  449. data/vendor/local/share/doc/groonga/ja/html/spec/search.html +5 -5
  450. data/vendor/local/share/doc/groonga/ja/html/suggest.html +5 -5
  451. data/vendor/local/share/doc/groonga/ja/html/suggest/completion.html +5 -5
  452. data/vendor/local/share/doc/groonga/ja/html/suggest/correction.html +5 -5
  453. data/vendor/local/share/doc/groonga/ja/html/suggest/introduction.html +5 -5
  454. data/vendor/local/share/doc/groonga/ja/html/suggest/suggestion.html +5 -5
  455. data/vendor/local/share/doc/groonga/ja/html/suggest/tutorial.html +5 -5
  456. data/vendor/local/share/doc/groonga/ja/html/troubleshooting.html +5 -5
  457. data/vendor/local/share/doc/groonga/ja/html/troubleshooting/different_results_with_the_same_keyword.html +5 -5
  458. data/vendor/local/share/doc/groonga/ja/html/troubleshooting/mmap_cannot_allocate_memory.html +5 -5
  459. data/vendor/local/share/doc/groonga/ja/html/tutorial.html +11 -11
  460. data/vendor/local/share/doc/groonga/ja/html/tutorial/data.html +5 -5
  461. data/vendor/local/share/doc/groonga/ja/html/tutorial/drilldown.html +6 -6
  462. data/vendor/local/share/doc/groonga/ja/html/tutorial/index.html +5 -5
  463. data/vendor/local/share/doc/groonga/ja/html/tutorial/introduction.html +5 -5
  464. data/vendor/local/share/doc/groonga/ja/html/tutorial/lexicon.html +9 -9
  465. data/vendor/local/share/doc/groonga/ja/html/tutorial/match_columns.html +5 -5
  466. data/vendor/local/share/doc/groonga/ja/html/tutorial/micro_blog.html +249 -237
  467. data/vendor/local/share/doc/groonga/ja/html/tutorial/network.html +5 -5
  468. data/vendor/local/share/doc/groonga/ja/html/tutorial/patricia_trie.html +9 -9
  469. data/vendor/local/share/doc/groonga/ja/html/tutorial/query_expansion.html +36 -36
  470. data/vendor/local/share/doc/groonga/ja/html/tutorial/search.html +7 -7
  471. data/vendor/local/share/license/mruby/AUTHORS +22 -0
  472. data/vendor/local/share/license/mruby/LEGAL +6 -0
  473. data/vendor/local/share/license/mruby/MITL +20 -0
  474. data/vendor/local/share/license/mruby/README.md +111 -0
  475. data/vendor/local/share/license/onigmo/AUTHORS +2 -0
  476. data/vendor/local/share/license/onigmo/COPYING +87 -0
  477. data/vendor/local/share/license/onigmo/README +249 -0
  478. data/vendor/local/share/man/ja/man1/groonga.1 +471 -485
  479. data/vendor/local/share/man/man1/groonga.1 +389 -454
  480. metadata +82 -46
  481. data/README.textile +0 -73
@@ -0,0 +1,342 @@
1
+ module Groonga
2
+ # TODO: Move me
3
+ class ExpressionCode
4
+ module Flags
5
+ RELATIONAL_EXPRESSION = 0x01
6
+ end
7
+ end
8
+
9
+ class ScanInfoBuilder
10
+ module Status
11
+ START = 0
12
+ VAR = 1
13
+ COL1 = 2
14
+ COL2 = 3
15
+ CONST = 4
16
+ end
17
+
18
+ def initialize(expression, operator, size)
19
+ @data_list = []
20
+ @expression = expression
21
+ @operator = operator
22
+ @size = size
23
+ end
24
+
25
+ RELATION_OPERATORS = [
26
+ Operator::MATCH,
27
+ Operator::NEAR,
28
+ Operator::NEAR2,
29
+ Operator::SIMILAR,
30
+ Operator::PREFIX,
31
+ Operator::SUFFIX,
32
+ Operator::EQUAL,
33
+ Operator::NOT_EQUAL,
34
+ Operator::LESS,
35
+ Operator::GREATER,
36
+ Operator::LESS_EQUAL,
37
+ Operator::GREATER_EQUAL,
38
+ Operator::GEO_WITHINP5,
39
+ Operator::GEO_WITHINP6,
40
+ Operator::GEO_WITHINP8,
41
+ Operator::TERM_EXTRACT,
42
+ ]
43
+
44
+ LOGICAL_OPERATORS = [
45
+ Operator::AND,
46
+ Operator::OR,
47
+ Operator::AND_NOT,
48
+ Operator::ADJUST,
49
+ ]
50
+ def build
51
+ return nil unless valid?
52
+
53
+ status = Status::START
54
+ variable = @expression.get_var_by_offset(0)
55
+ data = nil
56
+ codes = @expression.codes
57
+ n_codes = codes.size
58
+ codes.each_with_index do |code, i|
59
+ case code.op
60
+ when *RELATION_OPERATORS
61
+ status = Status::START
62
+ data.op = code.op
63
+ data.end = i
64
+ data.match_resolve_index
65
+ @data_list << data
66
+ data = nil
67
+ when *LOGICAL_OPERATORS
68
+ put_logical_op(code.op, i)
69
+ # TODO: rescue and return nil
70
+ status = Status::START
71
+ when Operator::PUSH
72
+ data ||= ScanInfoData.new(i)
73
+ if code.value == variable
74
+ status = Status::VAR
75
+ else
76
+ data.args << code.value
77
+ if status == Status::START
78
+ data.flags |= ScanInfo::Flags::PRE_CONST
79
+ end
80
+ status = Status::CONST
81
+ end
82
+ when Operator::GET_VALUE
83
+ case status
84
+ when Status::START
85
+ data ||= ScanInfoData.new(i)
86
+ status = Status::COL1
87
+ data.args << code.value
88
+ when Status::CONST, Status::VAR
89
+ status = Status::COL1
90
+ data.args << code.value
91
+ when Status::COL1
92
+ raise "invalid expression: can't use column as a value: <#{code.value.name}>: <#{@expression.grn_inspect}>"
93
+ status = Status::COL2
94
+ when Status::COL2
95
+ # Do nothing
96
+ end
97
+ when Operator::CALL
98
+ data ||= ScanInfoData.new(i)
99
+ if (code.flags & ExpressionCode::Flags::RELATIONAL_EXPRESSION) != 0 or
100
+ (i + 1) == n_codes
101
+ status = Status::START
102
+ data.op = code.op
103
+ data.end = i
104
+ data.call_relational_resolve_indexes
105
+ @data_list << data
106
+ data = nil
107
+ else
108
+ status = Status::COL2
109
+ end
110
+ end
111
+ end
112
+
113
+ if @operator == Operator::OR and @size == 0
114
+ first_data = @data_list.first
115
+ if (first_data.flags & ScanInfo::Flags::PUSH) == 0 or
116
+ first_data.logical_op != @operator
117
+ raise "invalid expr"
118
+ else
119
+ first_data.flags &= ~ScanInfo::Flags::PUSH
120
+ first_data.logical_op = @operator
121
+ end
122
+ else
123
+ put_logical_op(@operator, n_codes)
124
+ end
125
+
126
+ optimize
127
+ end
128
+
129
+ private
130
+ def valid?
131
+ n_relation_expressions = 0
132
+ n_logical_expressions = 0
133
+ status = Status::START
134
+ variable = @expression.get_var_by_offset(0)
135
+ codes = @expression.codes
136
+ codes.each do |code|
137
+ case code.op
138
+ when *RELATION_OPERATORS
139
+ return false if status < Status::COL1
140
+ return false if status > Status::CONST
141
+ status = Status::START
142
+ n_relation_expressions += 1
143
+ when *LOGICAL_OPERATORS
144
+ return false if status != Status::START
145
+ n_logical_expressions += 1
146
+ return false if n_logical_expressions >= n_relation_expressions
147
+ when Operator::PUSH
148
+ if code.value == variable
149
+ status = Status::VAR
150
+ else
151
+ status = Status::CONST
152
+ end
153
+ when Operator::GET_VALUE
154
+ case status
155
+ when Status::START, Status::CONST, Status::VAR
156
+ status = Status::COL1
157
+ when Status::COL1
158
+ status = Status::COL2
159
+ when Status::COL2
160
+ # Do nothing
161
+ else
162
+ return false
163
+ end
164
+ when Operator::CALL
165
+ if (code.flags & ExpressionCode::Flags::RELATIONAL_EXPRESSION) != 0 or
166
+ code == codes.last
167
+ status = Status::START
168
+ n_relation_expressions += 1
169
+ else
170
+ status = Status::COL2
171
+ end
172
+ else
173
+ return false
174
+ end
175
+ end
176
+
177
+ return false if status != Status::START
178
+ return false if n_relation_expressions != (n_logical_expressions + 1)
179
+
180
+ true
181
+ end
182
+
183
+ def put_logical_op(operator, start)
184
+ n_parens = 1
185
+ n_dif_ops = 0
186
+ r = 0
187
+ j = @data_list.size
188
+ while j > 0
189
+ j -= 1
190
+ data = @data_list[j]
191
+ if (data.flags & ScanInfo::Flags::POP) != 0
192
+ n_dif_ops += 1
193
+ n_parens += 1
194
+ else
195
+ if (data.flags & ScanInfo::Flags::PUSH) != 0
196
+ n_parens -= 1
197
+ if n_parens == 0
198
+ if r == 0
199
+ if n_dif_ops > 0
200
+ if j > 0 and operator != Operator::AND_NOT
201
+ n_parens = 1
202
+ n_dif_ops = 0
203
+ r = j
204
+ else
205
+ new_data = ScanInfoData.new(start)
206
+ new_data.flags = ScanInfo::Flags::POP
207
+ new_data.logical_op = operator
208
+ @data_list << new_data
209
+ end
210
+ else
211
+ data.flags &= ~ScanInfo::Flags::PUSH
212
+ data.logical_op = operator
213
+ end
214
+ else
215
+ if n_dif_ops > 0
216
+ new_data = ScanInfoData.new(start)
217
+ new_data.flags = ScanInfo::Flags::POP
218
+ new_data.logical_op = operator
219
+ @data_list << new_data
220
+ else
221
+ data.flags &= ~ScanInfo::Flags::PUSH
222
+ data.logical_op = operator
223
+ @data_list =
224
+ @data_list[0...j] +
225
+ @data_list[r..-1] +
226
+ @data_list[j...r]
227
+ end
228
+ end
229
+ end
230
+ else
231
+ if operator == Operator::AND_NOT or operator != data.logical_op
232
+ n_dif_ops += 1
233
+ end
234
+ end
235
+ end
236
+
237
+ if j < 0
238
+ raise GRN_INVALID_ARGUMENT.new("unmatched nesting level")
239
+ end
240
+ end
241
+ end
242
+
243
+ def optimize
244
+ optimized_data_list = []
245
+ i = 0
246
+ n = @data_list.size
247
+ while i < n
248
+ data = @data_list[i]
249
+ next_data = @data_list[i + 1]
250
+ i += 1
251
+ if next_data.nil?
252
+ optimized_data_list << data
253
+ next
254
+ end
255
+ if range_operations?(data, next_data)
256
+ between_data = create_between_data(data, next_data)
257
+ optimized_data_list << between_data
258
+ i += 1
259
+ next
260
+ end
261
+ optimized_data_list << data
262
+ end
263
+ optimized_data_list
264
+ end
265
+
266
+ def range_operations?(data, next_data)
267
+ return false unless next_data.logical_op == Operator::AND
268
+
269
+ op, next_op = data.op, next_data.op
270
+ return false if !(lower_condition?(op) or lower_condition?(next_op))
271
+ return false if !(upper_condition?(op) or upper_condition?(next_op))
272
+
273
+ data.args[0] == next_data.args[0] and data.indexes == next_data.indexes
274
+ end
275
+
276
+ def lower_condition?(operator)
277
+ case operator
278
+ when Operator::GREATER, Operator::GREATER_EQUAL
279
+ true
280
+ else
281
+ false
282
+ end
283
+ end
284
+
285
+ def upper_condition?(operator)
286
+ case operator
287
+ when Operator::LESS, Operator::LESS_EQUAL
288
+ true
289
+ else
290
+ false
291
+ end
292
+ end
293
+
294
+ def create_between_data(data, next_data)
295
+ between_data = ScanInfoData.new(data.start)
296
+ between_data.end = next_data.end
297
+ between_data.flags = data.flags
298
+ between_data.op = Operator::CALL
299
+ between_data.logical_op = data.logical_op
300
+ between_data.args = create_between_data_args(data, next_data)
301
+ between_data.indexes = data.indexes
302
+ between_data
303
+ end
304
+
305
+ def create_between_data_args(data, next_data)
306
+ between = Context.instance["between"]
307
+ @expression.take_object(between)
308
+ column = data.args[0]
309
+ op, next_op = data.op, next_data.op
310
+ if lower_condition?(op)
311
+ min = data.args[1]
312
+ min_operator = op
313
+ max = next_data.args[1]
314
+ max_operator = next_op
315
+ else
316
+ min = next_data.args[1]
317
+ min_operator = next_op
318
+ max = data.args[1]
319
+ max_operator = op
320
+ end
321
+ if min_operator == Operator::GREATER
322
+ min_border = "exclude"
323
+ else
324
+ min_border = "include"
325
+ end
326
+ if max_operator == Operator::LESS
327
+ max_border = "exclude"
328
+ else
329
+ max_border = "include"
330
+ end
331
+
332
+ [
333
+ between,
334
+ column,
335
+ min,
336
+ @expression.allocate_constant(min_border),
337
+ max,
338
+ @expression.allocate_constant(max_border),
339
+ ]
340
+ end
341
+ end
342
+ end
@@ -0,0 +1,198 @@
1
+ module Groonga
2
+ class ScanInfoData
3
+ attr_accessor :start
4
+ attr_accessor :end
5
+ attr_accessor :op
6
+ attr_accessor :logical_op
7
+ attr_accessor :query
8
+ attr_accessor :args
9
+ attr_accessor :indexes
10
+ attr_accessor :flags
11
+ attr_accessor :max_interval
12
+ attr_accessor :similarity_threshold
13
+ def initialize(start)
14
+ @start = start
15
+ @end = 0
16
+ @op = 0
17
+ @logical_op = Operator::OR
18
+ @query = nil
19
+ @args = []
20
+ @indexes = []
21
+ @flags = ScanInfo::Flags::PUSH
22
+ @max_interval = nil
23
+ @similarity_threshold = nil
24
+ end
25
+
26
+ def match_resolve_index
27
+ if near_search?
28
+ match_near_resolve_index
29
+ elsif similar_search?
30
+ match_similar_resolve_index
31
+ else
32
+ match_generic_resolve_index
33
+ end
34
+ end
35
+
36
+ def call_relational_resolve_indexes
37
+ # better index resolving framework for functions should be implemented
38
+ @args.each do |arg|
39
+ call_relational_resolve_index(arg)
40
+ end
41
+ end
42
+
43
+ private
44
+ def near_search?
45
+ (@op == Operator::NEAR or @op == Operator::NEAR2) and @args.size == 3
46
+ end
47
+
48
+ def match_near_resolve_index
49
+ arg = @args[0]
50
+ case arg
51
+ when Expression
52
+ match_resolve_index_expression(arg)
53
+ when Accessor
54
+ match_resolve_index_accessor(arg)
55
+ when Object
56
+ match_resolve_index_db_obj(arg)
57
+ else
58
+ message =
59
+ "The first argument of NEAR/NEAR2 must be Expression, Accessor or Object: #{arg.class}"
60
+ raise message
61
+ end
62
+
63
+ self.query = @args[1]
64
+ self.max_interval = @args[2].value
65
+ end
66
+
67
+ def similar_search?
68
+ @op == Operator::SIMILAR and @args.size == 3
69
+ end
70
+
71
+ def match_similar_resolve_index
72
+ arg = @args[0]
73
+ case arg
74
+ when Expression
75
+ match_resolve_index_expression(arg)
76
+ when Accessor
77
+ match_resolve_index_accessor(arg)
78
+ when Object
79
+ match_resolve_index_db_obj(arg)
80
+ else
81
+ message =
82
+ "The first argument of SIMILAR must be Expression, Accessor or Object: #{arg.class}"
83
+ raise message
84
+ end
85
+
86
+ self.query = @args[1]
87
+ self.similarity_threshold = @args[2].value
88
+ end
89
+
90
+ def match_generic_resolve_index
91
+ @args.each do |arg|
92
+ case arg
93
+ when Expression
94
+ match_resolve_index_expression(arg)
95
+ when Accessor
96
+ match_resolve_index_accessor(arg)
97
+ when Object
98
+ match_resolve_index_db_obj(arg)
99
+ else
100
+ self.query = arg
101
+ end
102
+ end
103
+ end
104
+
105
+ def match_resolve_index_expression(expression)
106
+ codes = expression.codes
107
+ n_codes = codes.size
108
+ i = 0
109
+ while i < n_codes
110
+ code = codes[i]
111
+ value = code.value
112
+ case value
113
+ when Accessor
114
+ match_resolve_index_expression_accessor(code)
115
+ when FixedSizeColumn, VariableSizeColumn
116
+ match_resolve_index_expression_data_column(code)
117
+ when IndexColumn
118
+ section_id = 0
119
+ rest_n_codes = n_codes - i
120
+ if rest_n_codes >= 2 and
121
+ codes[i + 1].value.is_a?(Bulk) and
122
+ codes[i + 1].value.domain == ID::UINT32 and
123
+ codes[i + 2].op == Operator::GET_MEMBER
124
+ section_id = codes[i + 1].value.value + 1
125
+ code = codes[i + 2]
126
+ i += 2
127
+ end
128
+ put_index(value, section_id, code.weight)
129
+ end
130
+ i += 1
131
+ end
132
+ end
133
+
134
+ def match_resolve_index_expression_accessor(expr_code)
135
+ accessor = expr_code.value
136
+ self.flags |= ScanInfo::Flags::ACCESSOR
137
+ index_info = accessor.find_index(op)
138
+ return if index_info.nil?
139
+ if accessor.next
140
+ put_index(accessor, index_info.section_id, expr_code.weight)
141
+ else
142
+ put_index(index_info.index, index_info.section_id, expr_code.weight)
143
+ end
144
+ end
145
+
146
+ def match_resolve_index_expression_data_column(expr_code)
147
+ column = expr_code.value
148
+ index_info = column.find_index(op)
149
+ return if index_info.nil?
150
+ put_index(index_info.index, index_info.section_id, expr_code.weight)
151
+ end
152
+
153
+ def match_resolve_index_db_obj(db_obj)
154
+ index_info = db_obj.find_index(op)
155
+ return if index_info.nil?
156
+ put_index(index_info.index, index_info.section_id, 1)
157
+ end
158
+
159
+ def match_resolve_index_accessor(accessor)
160
+ self.flags |= ScanInfo::Flags::ACCESSOR
161
+ index_info = accessor.find_index(op)
162
+ return if index_info.nil?
163
+ if accessor.next
164
+ put_index(accessor, index_info.section_id, 1)
165
+ else
166
+ put_index(index_info.index, index_info.section_id, 1)
167
+ end
168
+ end
169
+
170
+ def call_relational_resolve_index(object)
171
+ case object
172
+ when Accessor
173
+ call_relational_resolve_index_accessor(object)
174
+ when Bulk
175
+ self.query = object
176
+ else
177
+ call_relational_resolve_index_db_obj(object)
178
+ end
179
+ end
180
+
181
+ def call_relational_resolve_index_db_obj(db_obj)
182
+ index_info = db_obj.find_index(op)
183
+ return if index_info.nil?
184
+ put_index(index_info.index, index_info.section_id, 1)
185
+ end
186
+
187
+ def call_relational_resolve_index_accessor(accessor)
188
+ self.flags |= ScanInfo::Flags::ACCESSOR
189
+ index_info = accessor.find_index(op)
190
+ return if index_info.nil?
191
+ put_index(index_info.index, index_info.section_id, 1)
192
+ end
193
+
194
+ def put_index(index, section_id, weight)
195
+ @indexes << [index, section_id, weight]
196
+ end
197
+ end
198
+ end