rroonga 0.9.4-x86-mingw32 → 0.9.5-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS.ja.rdoc +29 -0
- data/NEWS.rdoc +29 -0
- data/Rakefile +6 -6
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-context.c +15 -28
- data/ext/groonga/rb-grn-exception.c +46 -1
- data/ext/groonga/rb-grn-expression.c +22 -13
- data/ext/groonga/rb-grn-fix-size-column.c +2 -8
- data/ext/groonga/rb-grn-hash.c +8 -1
- data/ext/groonga/rb-grn-object.c +1 -1
- data/ext/groonga/rb-grn-patricia-trie.c +23 -1
- data/ext/groonga/rb-grn-table-key-support.c +22 -0
- data/ext/groonga/rb-grn-table.c +37 -5
- data/ext/groonga/rb-grn-utils.c +20 -2
- data/ext/groonga/rb-grn.h +1 -1
- data/ext/groonga/rb-groonga.c +76 -38
- data/extconf.rb +17 -1
- data/html/developer.html +32 -7
- data/html/footer.html.erb +5 -0
- data/html/heading-mark.svg +393 -0
- data/html/index.html +33 -3
- data/lib/1.8/groonga.so +0 -0
- data/lib/1.9/groonga.so +0 -0
- data/lib/groonga.rb +3 -7
- data/lib/groonga/context.rb +2 -13
- data/lib/groonga/expression-builder.rb +273 -67
- data/lib/groonga/pagination.rb +143 -0
- data/lib/groonga/record.rb +2 -0
- data/lib/groonga/schema.rb +140 -29
- data/pkg/rroonga-0.9.5/NEWS.ja.rdoc +156 -0
- data/pkg/rroonga-0.9.5/NEWS.rdoc +158 -0
- data/pkg/rroonga-0.9.5/README.ja.rdoc +65 -0
- data/pkg/rroonga-0.9.5/README.rdoc +66 -0
- data/pkg/rroonga-0.9.5/text/TUTORIAL.ja.rdoc +394 -0
- data/pkg/rroonga-0.9.5/text/expression.rdoc +285 -0
- data/rroonga-build.rb +2 -2
- data/test-unit/Rakefile +40 -0
- data/test-unit/TODO +5 -0
- data/test-unit/bin/testrb +5 -0
- data/test-unit/html/classic.html +15 -0
- data/test-unit/html/index.html +25 -0
- data/test-unit/html/index.html.ja +27 -0
- data/test-unit/lib/test/unit.rb +323 -0
- data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
- data/test-unit/lib/test/unit/assertions.rb +1230 -0
- data/test-unit/lib/test/unit/attribute.rb +125 -0
- data/test-unit/lib/test/unit/autorunner.rb +360 -0
- data/test-unit/lib/test/unit/collector.rb +36 -0
- data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
- data/test-unit/lib/test/unit/collector/dir.rb +108 -0
- data/test-unit/lib/test/unit/collector/load.rb +144 -0
- data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
- data/test-unit/lib/test/unit/color-scheme.rb +102 -0
- data/test-unit/lib/test/unit/color.rb +96 -0
- data/test-unit/lib/test/unit/diff.rb +724 -0
- data/test-unit/lib/test/unit/error.rb +130 -0
- data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
- data/test-unit/lib/test/unit/failure.rb +136 -0
- data/test-unit/lib/test/unit/fixture.rb +176 -0
- data/test-unit/lib/test/unit/notification.rb +129 -0
- data/test-unit/lib/test/unit/omission.rb +191 -0
- data/test-unit/lib/test/unit/pending.rb +150 -0
- data/test-unit/lib/test/unit/priority.rb +180 -0
- data/test-unit/lib/test/unit/runner/console.rb +52 -0
- data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
- data/test-unit/lib/test/unit/runner/tap.rb +8 -0
- data/test-unit/lib/test/unit/testcase.rb +476 -0
- data/test-unit/lib/test/unit/testresult.rb +89 -0
- data/test-unit/lib/test/unit/testsuite.rb +110 -0
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
- data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
- data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
- data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/test-unit/lib/test/unit/util/observable.rb +90 -0
- data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
- data/test-unit/lib/test/unit/version.rb +7 -0
- data/test-unit/sample/adder.rb +13 -0
- data/test-unit/sample/subtracter.rb +12 -0
- data/test-unit/sample/test_adder.rb +20 -0
- data/test-unit/sample/test_subtracter.rb +20 -0
- data/test-unit/sample/test_user.rb +23 -0
- data/test-unit/test/collector/test-descendant.rb +133 -0
- data/test-unit/test/collector/test-load.rb +442 -0
- data/test-unit/test/collector/test_dir.rb +406 -0
- data/test-unit/test/collector/test_objectspace.rb +100 -0
- data/test-unit/test/run-test.rb +15 -0
- data/test-unit/test/test-attribute.rb +86 -0
- data/test-unit/test/test-color-scheme.rb +67 -0
- data/test-unit/test/test-color.rb +47 -0
- data/test-unit/test/test-diff.rb +518 -0
- data/test-unit/test/test-emacs-runner.rb +60 -0
- data/test-unit/test/test-fixture.rb +287 -0
- data/test-unit/test/test-notification.rb +33 -0
- data/test-unit/test/test-omission.rb +81 -0
- data/test-unit/test/test-pending.rb +70 -0
- data/test-unit/test/test-priority.rb +119 -0
- data/test-unit/test/test-testcase.rb +544 -0
- data/test-unit/test/test_assertions.rb +1151 -0
- data/test-unit/test/test_error.rb +26 -0
- data/test-unit/test/test_failure.rb +33 -0
- data/test-unit/test/test_testresult.rb +113 -0
- data/test-unit/test/test_testsuite.rb +129 -0
- data/test-unit/test/testunit-test-util.rb +14 -0
- data/test-unit/test/ui/test_testrunmediator.rb +20 -0
- data/test-unit/test/util/test-method-owner-finder.rb +38 -0
- data/test-unit/test/util/test_backtracefilter.rb +41 -0
- data/test-unit/test/util/test_observable.rb +102 -0
- data/test-unit/test/util/test_procwrapper.rb +36 -0
- data/test/groonga-test-utils.rb +3 -2
- data/test/run-test.rb +14 -2
- data/test/test-column.rb +7 -7
- data/test/test-context-select.rb +34 -11
- data/test/test-exception.rb +3 -0
- data/test/test-expression-builder.rb +11 -0
- data/test/test-expression.rb +3 -6
- data/test/test-gqtp.rb +3 -5
- data/test/test-pagination.rb +249 -0
- data/test/test-record.rb +36 -8
- data/test/test-remote.rb +11 -4
- data/test/test-schema-create-table.rb +251 -0
- data/test/test-schema.rb +4 -24
- data/test/test-table-offset-and-limit.rb +3 -5
- data/test/test-table-select-mecab.rb +80 -0
- data/test/test-table-select-weight.rb +104 -0
- data/test/test-table.rb +22 -4
- data/test/test-version.rb +1 -1
- data/text/TUTORIAL.ja.rdoc +2 -0
- data/text/expression.rdoc +1 -0
- data/vendor/local/bin/grntest.exe +0 -0
- data/vendor/local/bin/groonga.exe +0 -0
- data/vendor/local/bin/libgroonga-0.dll +0 -0
- data/vendor/local/include/{groonga.h → groonga/groonga.h} +93 -32
- data/vendor/local/lib/groonga/modules/functions/cast.dll +0 -0
- data/vendor/local/lib/groonga/modules/functions/cast.la +41 -0
- data/vendor/local/lib/pkgconfig/groonga.pc +12 -0
- data/vendor/local/share/groonga/admin_html/css/admin.css +104 -0
- data/vendor/local/share/groonga/admin_html/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
- data/vendor/local/share/groonga/admin_html/index.html +1355 -0
- data/vendor/local/share/groonga/admin_html/js/jquery-1.4.2.min.js +154 -0
- data/vendor/local/share/groonga/admin_html/js/jquery-ui-1.8.1.custom.min.js +756 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +47 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +57 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_disk +162 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_memory +51 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_n_records +110 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +133 -0
- data/vendor/local/share/groonga/munin/plugins/groonga_status +84 -0
- metadata +126 -36
@@ -0,0 +1,143 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2010 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
#
|
5
|
+
# This library is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU Lesser General Public
|
7
|
+
# License version 2.1 as published by the Free Software Foundation.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
|
18
|
+
module Groonga
|
19
|
+
class TooSmallPage < Error
|
20
|
+
attr_reader :page, :available_pages
|
21
|
+
def initialize(page, available_pages)
|
22
|
+
@page = page
|
23
|
+
@available_pages = available_pages
|
24
|
+
super("too small page: #{@page}: " +
|
25
|
+
"available pages: #{@available_pages.inspect}")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class TooLargePage < Error
|
30
|
+
attr_reader :page, :available_pages
|
31
|
+
def initialize(page, available_pages)
|
32
|
+
@page = page
|
33
|
+
@available_pages = available_pages
|
34
|
+
super("too large page: #{@page}: " +
|
35
|
+
"available pages: #{@available_pages.inspect}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class TooSmallPageSize < Error
|
40
|
+
attr_reader :page_size, :available_page_sizes
|
41
|
+
def initialize(page_size, available_page_sizes)
|
42
|
+
@page_size = page_size
|
43
|
+
@available_page_sizes = available_page_sizes
|
44
|
+
super("too small page size: #{@page_size}: " +
|
45
|
+
"available page sizes: #{@available_page_sizes.inspect}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class Table
|
50
|
+
def paginate(sort_keys, options={})
|
51
|
+
_size = size
|
52
|
+
page_size = options[:size] || 10
|
53
|
+
minimum_size = [1, _size].min
|
54
|
+
if page_size < 1
|
55
|
+
raise TooSmallPageSize.new(page_size, minimum_size.._size)
|
56
|
+
end
|
57
|
+
|
58
|
+
max_page = [(_size / page_size.to_f).ceil, 1].max
|
59
|
+
page = options[:page] || 1
|
60
|
+
if page < 1
|
61
|
+
raise TooSmallPage.new(page, 1..max_page)
|
62
|
+
elsif max_page < page
|
63
|
+
raise TooLargePage.new(page, 1..max_page)
|
64
|
+
end
|
65
|
+
|
66
|
+
offset = (page - 1) * page_size
|
67
|
+
limit = page_size
|
68
|
+
records = sort(sort_keys, :offset => offset, :limit => limit)
|
69
|
+
records.extend(Pagination)
|
70
|
+
records.send(:set_pagination_info, page, page_size, _size)
|
71
|
+
records
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# ページネーション機能を追加するモジュール。
|
76
|
+
#
|
77
|
+
# ページ番号など、0ベースではなく1ベースです。
|
78
|
+
module Pagination
|
79
|
+
attr_reader :current_page, :page_size, :n_pages, :n_records
|
80
|
+
|
81
|
+
def have_pages?
|
82
|
+
@n_pages > 1
|
83
|
+
end
|
84
|
+
|
85
|
+
def first_page
|
86
|
+
1
|
87
|
+
end
|
88
|
+
|
89
|
+
def first_page?
|
90
|
+
@current_page == first_page
|
91
|
+
end
|
92
|
+
|
93
|
+
def last_page
|
94
|
+
@n_pages
|
95
|
+
end
|
96
|
+
|
97
|
+
def last_page?
|
98
|
+
@current_page == last_page
|
99
|
+
end
|
100
|
+
|
101
|
+
def have_next_page?
|
102
|
+
@current_page < @n_pages
|
103
|
+
end
|
104
|
+
|
105
|
+
def next_page
|
106
|
+
have_next_page? ? @current_page + 1 : nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def have_previous_page?
|
110
|
+
@current_page > 1
|
111
|
+
end
|
112
|
+
|
113
|
+
def previous_page
|
114
|
+
have_previous_page? ? @current_page - 1 : nil
|
115
|
+
end
|
116
|
+
|
117
|
+
def n_records_in_page
|
118
|
+
size
|
119
|
+
end
|
120
|
+
|
121
|
+
def start_offset
|
122
|
+
return nil if @n_records.zero?
|
123
|
+
1 + (@current_page - 1) * @page_size
|
124
|
+
end
|
125
|
+
|
126
|
+
def end_offset
|
127
|
+
return nil if @n_records.zero?
|
128
|
+
[start_offset + @page_size - 1, @n_records].min
|
129
|
+
end
|
130
|
+
|
131
|
+
def pages
|
132
|
+
first_page..last_page
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
def set_pagination_info(current_page, page_size, n_records)
|
137
|
+
@current_page = current_page
|
138
|
+
@page_size = page_size
|
139
|
+
@n_records = n_records
|
140
|
+
@n_pages = [(@n_records / @page_size.to_f).ceil, 1].max
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/lib/groonga/record.rb
CHANGED
data/lib/groonga/schema.rb
CHANGED
@@ -43,6 +43,77 @@ module Groonga
|
|
43
43
|
# end
|
44
44
|
# end
|
45
45
|
class Schema
|
46
|
+
# スキーマ操作で発生する例外のスーパークラス。
|
47
|
+
class Error < Groonga::Error
|
48
|
+
end
|
49
|
+
|
50
|
+
# テーブルが存在しないときに発生する。
|
51
|
+
class TableNotExists < Error
|
52
|
+
attr_reader :name
|
53
|
+
def initialize(name)
|
54
|
+
@name = name
|
55
|
+
super("table doesn't exist: <#{@name}>")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# すでに存在するテーブルと違うオプションでテーブルを作ろ
|
60
|
+
# うとしたときに発生する。
|
61
|
+
class TableCreationWithDifferentOptions < Error
|
62
|
+
attr_reader :table, :options
|
63
|
+
def initialize(table, options)
|
64
|
+
@table = table
|
65
|
+
@options = options
|
66
|
+
super("creating table with differnt options: " +
|
67
|
+
"#{@table.inspect}: #{@options.inspect}")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# すでに存在するカラムと違うオプションでテーブルを作ろ
|
72
|
+
# うとしたときに発生する。
|
73
|
+
class ColumnCreationWithDifferentOptions < Error
|
74
|
+
attr_reader :column, :options
|
75
|
+
def initialize(column, options)
|
76
|
+
@column = column
|
77
|
+
@options = options
|
78
|
+
super("creating column with differnt option: " +
|
79
|
+
"#{@column.inspect}: #{@options.inspect}")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# 未知のインデックス対象を指定したときに発生する。
|
84
|
+
class UnknownIndexTarget < Error
|
85
|
+
attr_reader :target_name
|
86
|
+
def initialize(target_name)
|
87
|
+
@target_name = target_name
|
88
|
+
super("unknown index target: <#{@target_name}>")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# 未知のオプションを指定したときに発生する。
|
93
|
+
class UnknownOptions < Error
|
94
|
+
attr_reader :options, :unknown_keys, :available_keys
|
95
|
+
def initialize(options, unknown_keys, available_keys)
|
96
|
+
@options = options
|
97
|
+
@unknown_keys = unknown_keys
|
98
|
+
@available_keys = available_keys
|
99
|
+
message = "unknown keys are specified: #{u@nknown_keys.inspect}"
|
100
|
+
message << ": available keys: #{@available_keys.inspect}"
|
101
|
+
message << ": options: #{@options.inspect}"
|
102
|
+
super(message)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# 未知のテーブルの種類を指定したときに発生する。
|
107
|
+
class UnknownTableType < Error
|
108
|
+
attr_reader :type, :available_types
|
109
|
+
def initialize(type, available_types)
|
110
|
+
@type = type
|
111
|
+
@available_types = available_types
|
112
|
+
super("unknown table type: #{@type.inspect}: " +
|
113
|
+
"available types: #{@available_types.inspect}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
46
117
|
class << self
|
47
118
|
|
48
119
|
# call-seq:
|
@@ -144,11 +215,14 @@ module Groonga
|
|
144
215
|
# ルにGroonga::IndexColumnを定義する場合は
|
145
216
|
# <tt>"TokenBigram"</tt>などを指定する必要がある。
|
146
217
|
#
|
147
|
-
# 以下は+:type+に+:patricia_trie
|
218
|
+
# 以下は+:type+に+:hash+または+:patricia_trie+を指定し
|
219
|
+
# た時に指定可能。
|
148
220
|
#
|
149
221
|
# [+:key_normalize+]
|
150
222
|
# +true+を指定するとキーを正規化する。
|
151
223
|
#
|
224
|
+
# 以下は+:type+に+:patricia_trie+を指定した時に指定可能。
|
225
|
+
#
|
152
226
|
# [+:key_with_sis+]
|
153
227
|
# +true+を指定するとキーの文字列の全suffixが自動的に
|
154
228
|
# 登録される。
|
@@ -569,11 +643,18 @@ module Groonga
|
|
569
643
|
def define # :nodoc:
|
570
644
|
table = context[@name]
|
571
645
|
if @options[:change]
|
572
|
-
raise
|
646
|
+
raise TableNotExists.new(@name) if table.nil?
|
573
647
|
else
|
574
|
-
if table
|
575
|
-
table
|
576
|
-
|
648
|
+
if table
|
649
|
+
unless same_table?(table, create_options)
|
650
|
+
if @options[:force]
|
651
|
+
table.remove
|
652
|
+
table = nil
|
653
|
+
else
|
654
|
+
options = create_options
|
655
|
+
raise TableCreationWithDifferentOptions.new(table, options)
|
656
|
+
end
|
657
|
+
end
|
577
658
|
end
|
578
659
|
table ||= @table_type.create(create_options)
|
579
660
|
end
|
@@ -832,9 +913,7 @@ module Groonga
|
|
832
913
|
return if options.nil?
|
833
914
|
unknown_keys = options.keys - AVAILABLE_OPTION_KEYS
|
834
915
|
unless unknown_keys.empty?
|
835
|
-
|
836
|
-
message << ": available keys: #{AVAILABLE_OPTION_KEYS.inspect}"
|
837
|
-
raise ArgumentError, message
|
916
|
+
raise UnknownOptions.new(options, unknown_keys, AVAILABLE_OPTION_KEYS)
|
838
917
|
end
|
839
918
|
end
|
840
919
|
|
@@ -848,7 +927,7 @@ module Groonga
|
|
848
927
|
when :patricia_trie
|
849
928
|
Groonga::PatriciaTrie
|
850
929
|
else
|
851
|
-
raise
|
930
|
+
raise UnknownTableType.new(type, [nil, :array, :hash, :patricia_trie])
|
852
931
|
end
|
853
932
|
end
|
854
933
|
|
@@ -863,6 +942,7 @@ module Groonga
|
|
863
942
|
}
|
864
943
|
key_support_table_common = {
|
865
944
|
:key_type => Schema.normalize_type(@options[:key_type]),
|
945
|
+
:key_normalize => @options[:key_normalize],
|
866
946
|
:default_tokenizer => @options[:default_tokenizer],
|
867
947
|
}
|
868
948
|
|
@@ -872,12 +952,9 @@ module Groonga
|
|
872
952
|
common.merge(key_support_table_common)
|
873
953
|
elsif @table_type == Groonga::PatriciaTrie
|
874
954
|
options = {
|
875
|
-
:key_normalize => @options[:key_normalize],
|
876
955
|
:key_with_sis => @options[:key_with_sis],
|
877
956
|
}
|
878
957
|
common.merge(key_support_table_common).merge(options)
|
879
|
-
else
|
880
|
-
raise ArgumentError, "unknown table type: #{@table_type.inspect}"
|
881
958
|
end
|
882
959
|
end
|
883
960
|
|
@@ -903,6 +980,44 @@ module Groonga
|
|
903
980
|
definition.options.merge!(column_options.merge(options))
|
904
981
|
self
|
905
982
|
end
|
983
|
+
|
984
|
+
def same_table?(table, options)
|
985
|
+
return false unless table.class == @table_type
|
986
|
+
return false unless table.range == resolve_name(options[:value_type])
|
987
|
+
sub_records = options[:sub_records]
|
988
|
+
sub_records = false if sub_records.nil?
|
989
|
+
return false unless table.support_sub_records? == sub_records
|
990
|
+
|
991
|
+
case table
|
992
|
+
when Groonga::Array
|
993
|
+
true
|
994
|
+
when Groonga::Hash, Groonga::PatriciaTrie
|
995
|
+
return false unless table.domain == resolve_name(options[:key_type])
|
996
|
+
default_tokenizer = resolve_name(options[:default_tokenizer])
|
997
|
+
return false unless table.default_tokenizer == default_tokenizer
|
998
|
+
key_normalize = options[:key_normalize]
|
999
|
+
key_normalize = false if key_normalize.nil?
|
1000
|
+
return false unless table.normalize_key? == key_normalize
|
1001
|
+
if table.is_a?(Groonga::PatriciaTrie)
|
1002
|
+
key_with_sis = options[:key_with_sis]
|
1003
|
+
key_with_sis = false if key_with_sis.nil?
|
1004
|
+
return false unless table.register_key_with_sis? == key_with_sis
|
1005
|
+
end
|
1006
|
+
true
|
1007
|
+
else
|
1008
|
+
false
|
1009
|
+
end
|
1010
|
+
end
|
1011
|
+
|
1012
|
+
def resolve_name(type)
|
1013
|
+
if type.nil?
|
1014
|
+
nil
|
1015
|
+
elsif type.is_a?(String)
|
1016
|
+
context[type]
|
1017
|
+
else
|
1018
|
+
type
|
1019
|
+
end
|
1020
|
+
end
|
906
1021
|
end
|
907
1022
|
|
908
1023
|
class TableRemoveDefinition # :nodoc:
|
@@ -935,7 +1050,7 @@ module Groonga
|
|
935
1050
|
def define # :nodoc:
|
936
1051
|
view = context[@name]
|
937
1052
|
if @options[:change]
|
938
|
-
raise
|
1053
|
+
raise TableNotExists.new(@name) if view.nil?
|
939
1054
|
else
|
940
1055
|
if view and @options[:force]
|
941
1056
|
view.remove
|
@@ -945,9 +1060,11 @@ module Groonga
|
|
945
1060
|
end
|
946
1061
|
_context = context
|
947
1062
|
@tables.each do |table|
|
948
|
-
|
949
|
-
|
950
|
-
|
1063
|
+
unless table.is_a?(Groonga::Table)
|
1064
|
+
table_name = table
|
1065
|
+
table = context[table_name]
|
1066
|
+
raise TableNotExists.new(table_name) if table.nil?
|
1067
|
+
end
|
951
1068
|
view.add_table(table)
|
952
1069
|
end
|
953
1070
|
view
|
@@ -971,9 +1088,7 @@ module Groonga
|
|
971
1088
|
return if options.nil?
|
972
1089
|
unknown_keys = options.keys - AVAILABLE_OPTION_KEYS
|
973
1090
|
unless unknown_keys.empty?
|
974
|
-
|
975
|
-
message << ": available keys: #{AVAILABLE_OPTION_KEYS.inspect}"
|
976
|
-
raise ArgumentError, message
|
1091
|
+
raise UnknownOptions.new(options, unknown_keys, AVAILABLE_OPTION_KEYS)
|
977
1092
|
end
|
978
1093
|
end
|
979
1094
|
|
@@ -1021,10 +1136,8 @@ module Groonga
|
|
1021
1136
|
if @options.delete(:force)
|
1022
1137
|
column.remove
|
1023
1138
|
else
|
1024
|
-
|
1025
|
-
|
1026
|
-
"already defined: #{@type.inspect}(#{@options.inspect}): " +
|
1027
|
-
"#{column.inspect}"
|
1139
|
+
options = @options.merge(:type => @type)
|
1140
|
+
raise ColumnCreationWithDifferentOptions.new(column, options)
|
1028
1141
|
end
|
1029
1142
|
end
|
1030
1143
|
table.define_column(@name,
|
@@ -1073,7 +1186,7 @@ module Groonga
|
|
1073
1186
|
if target_table.nil? or
|
1074
1187
|
!(@target_column == "_key" or
|
1075
1188
|
target_table.have_column?(@target_column))
|
1076
|
-
raise
|
1189
|
+
raise UnknownIndexTarget.new(target_name)
|
1077
1190
|
end
|
1078
1191
|
index = table.column(@name)
|
1079
1192
|
if index
|
@@ -1081,11 +1194,9 @@ module Groonga
|
|
1081
1194
|
if @options.delete(:force)
|
1082
1195
|
index.remove
|
1083
1196
|
else
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
"already defined: #{target_name.inspect}" +
|
1088
|
-
"(#{@options.inspect}): #{index.inspect}"
|
1197
|
+
options = @options.merge(:type => :index,
|
1198
|
+
:target_name => target_name)
|
1199
|
+
raise ColumnCreationWithDifferentOptions.new(index, options)
|
1089
1200
|
end
|
1090
1201
|
end
|
1091
1202
|
index = table.define_index_column(@name,
|
@@ -0,0 +1,156 @@
|
|
1
|
+
= お知らせ
|
2
|
+
|
3
|
+
== 0.9.5: 2010-07-29
|
4
|
+
|
5
|
+
* groonga 0.7.4対応。
|
6
|
+
* Groonga::Table#selectの改良:
|
7
|
+
* 重み付きマッチ対応:
|
8
|
+
|
9
|
+
sourceカラムとtitleカラムにマッチするが、
|
10
|
+
titleカラムの方がスコアが大きくなる例:
|
11
|
+
table.select do |record|
|
12
|
+
(record.title * 10 | record.source) =~ "query"
|
13
|
+
end
|
14
|
+
* 配列で複数条件のand表現に対応:
|
15
|
+
|
16
|
+
以下は同じ条件になる:
|
17
|
+
table.select do |record|
|
18
|
+
conditions = []
|
19
|
+
conditions << record.title =~ "query"
|
20
|
+
conditions << record.updated_at > Time.parse("2010-07-29T21:14:29+09:00")
|
21
|
+
conditions
|
22
|
+
end
|
23
|
+
|
24
|
+
table.select do |record|
|
25
|
+
(record.title =~ "query") &
|
26
|
+
(record.updated_at > Time.parse("2010-07-29T21:14:29+09:00"))
|
27
|
+
end
|
28
|
+
* 利用しているgroongaのバージョン取得対応: Groonga::VERSION
|
29
|
+
* Groonga::Table#support_sub_records?追加
|
30
|
+
* ページネーション対応: Groonga::Table#paginate, Groonga::Pagination
|
31
|
+
|
32
|
+
== 0.9.4: 2010-04-22
|
33
|
+
|
34
|
+
* リリースミス修正。
|
35
|
+
|
36
|
+
== 0.9.3: 2010-04-22
|
37
|
+
|
38
|
+
* リリースミス修正。
|
39
|
+
|
40
|
+
== 0.9.2: 2010-04-22
|
41
|
+
|
42
|
+
* groonga 0.1.9対応。
|
43
|
+
* たくさん。
|
44
|
+
|
45
|
+
== 0.9.1: 2010-02-09
|
46
|
+
|
47
|
+
* groonga 0.1.6対応
|
48
|
+
|
49
|
+
== 0.9.0: 2010-02-09
|
50
|
+
|
51
|
+
* groonga 0.1.5対応
|
52
|
+
* APIの追加
|
53
|
+
* Groonga::Object#context
|
54
|
+
* Groonga::Record#n_sub_records
|
55
|
+
* Groonga::Context#send
|
56
|
+
* Groonga::Context#receive
|
57
|
+
* Groonga::PatriciaTrie#prefix_search [Tasuku SUENAGA]
|
58
|
+
* Groonga::Object#path [Ryo Onodera]
|
59
|
+
* Groonga::Object#lock [Tasuku SUENAGA]
|
60
|
+
* Groonga::Object#unlock [Tasuku SUENAGA]
|
61
|
+
* Groonga::Object#locked? [Tasuku SUENAGA]
|
62
|
+
* Groonga::Object#temporary?
|
63
|
+
* Groonga::Object#persistent?
|
64
|
+
* Groonga::ObjectClosed
|
65
|
+
* Groonga::Context.[]
|
66
|
+
* Groonga::Table#column_value
|
67
|
+
* Groonga::Table#set_column_value
|
68
|
+
* APIの変更
|
69
|
+
* Groonga::Table#select, Groonga::Column#select
|
70
|
+
* Groonga::Expressionも受け付けるようになった
|
71
|
+
* grn式のシンタックスを指定する:syntaxオプションの追加
|
72
|
+
* Groonga::Table#open_cursor
|
73
|
+
* 開始位置を指定する:offsetオプションの追加
|
74
|
+
* 最大レコード数を指定する:limitオプションの追加
|
75
|
+
* Groonga::Expression.parseの引数を変更
|
76
|
+
* (nil (default) -> :column) -> (nil (default) -> :query)
|
77
|
+
* :column -> 廃止
|
78
|
+
* :table -> :query
|
79
|
+
* :table_query -> :query
|
80
|
+
* :expression -> :script
|
81
|
+
* :language -> :script
|
82
|
+
* Groonga::Table#define_column, Groonga::Table#define_index_column
|
83
|
+
* 永続テーブルをデフォルトにした
|
84
|
+
* Groonga::Table#[]をGroonga::Table#valueに変更
|
85
|
+
* Groonga::Table#[]=をGroonga::Table#set_valueに変更
|
86
|
+
* Groonga::Table#findをGroonga::Table#[]に変更
|
87
|
+
* Groonga::Table#findは非推奨
|
88
|
+
* Groonga::Table#[]=を削除
|
89
|
+
* Groonga::TableKeySupport#[]=はGroonga::TableKeySupport#addの別名
|
90
|
+
* Groonga::Recordで存在しないカラムにアクセスしたときの例外を
|
91
|
+
Groonga::InvalidArgumentからGroonga::NoSuchColumnに変更
|
92
|
+
* バグ修正
|
93
|
+
* スキーマにコンテキストが伝搬されない問題の修正 [dara]
|
94
|
+
* Groonga::PatriciaTrie#tag_keysが最後のテキストを返さない問題の修正
|
95
|
+
[Ryo Onodera]
|
96
|
+
* extconf.rbにデバッグモードでビルドする--with-debugオプションを追加
|
97
|
+
* Ruby 1.9.1でextconf.rbが失敗する問題の修正
|
98
|
+
|
99
|
+
=== 感謝
|
100
|
+
|
101
|
+
* dara
|
102
|
+
* Ryo Onodera
|
103
|
+
* Tasuku SUENAGA
|
104
|
+
|
105
|
+
== 0.0.7: 2009-10-02
|
106
|
+
|
107
|
+
* groonga 0.1.4対応
|
108
|
+
* APIの追加
|
109
|
+
* Groonga::PatriciaTrie#scan
|
110
|
+
* Groonga::PatriciaTrie#tag_keys
|
111
|
+
* Groonga::Expression#snippet
|
112
|
+
* Groonga::Object#append
|
113
|
+
* Groonga::Object#prepend
|
114
|
+
|
115
|
+
== 0.0.6: 2009-07-31
|
116
|
+
|
117
|
+
* groonga 0.1.1対応
|
118
|
+
* ドキュメントの修正 [id:mat_aki]
|
119
|
+
* Groonga::Table#selectでのg式対応
|
120
|
+
* APIの追加
|
121
|
+
* Groonga::Table#union!
|
122
|
+
* Groonga::Table#intersect!
|
123
|
+
* Groonga::Table#differene!
|
124
|
+
* Groonga::Table#merge!
|
125
|
+
* tar.gzも提供 [id:m_seki]
|
126
|
+
* メモリリークの修正
|
127
|
+
|
128
|
+
== 0.0.3: 2009-07-18
|
129
|
+
|
130
|
+
* [#26145] Groonga::TableKeySupport#has_key?の追加 [Tasuku SUENAGA]
|
131
|
+
* [#26146] カラム名が存在しない場合はGroonga::Record#[]が例外
|
132
|
+
をあげるように変更 [Tasuku SUENAGA]
|
133
|
+
* 32ビット環境をサポート [niku]
|
134
|
+
* N-gramインデックスサーチのテストを追加 [dara]
|
135
|
+
* APIの追加
|
136
|
+
* Groonga::Record#incemrent!
|
137
|
+
* Groonga::Record#decemrent!
|
138
|
+
* Groonga::Record#lock
|
139
|
+
* Groonga::Table#lock
|
140
|
+
* Groonga::Schema: スキーマ定義用DSL
|
141
|
+
* Groonga::Expression
|
142
|
+
|
143
|
+
== 0.0.2: 2009-06-04
|
144
|
+
|
145
|
+
* groonga 0.0.8対応 [mori]
|
146
|
+
* 性能向上: キー、値、ドメイン、レンジをキャッシュ
|
147
|
+
* API改良
|
148
|
+
* ドキュメントの追加
|
149
|
+
* Ruby 1.9対応
|
150
|
+
* バグ修正:
|
151
|
+
* インストール処理の修正 [Tasuku SUENAGA]
|
152
|
+
* メモリリーク修正
|
153
|
+
|
154
|
+
== 0.0.1: 2009-04-30
|
155
|
+
|
156
|
+
* 最初のリリース!
|