groonga 0.0.7 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS.ja.rdoc +56 -0
- data/NEWS.rdoc +58 -0
- data/Rakefile +2 -3
- data/benchmark/read-write-many-small-items.rb +16 -32
- data/benchmark/write-many-small-items.rb +14 -28
- data/example/bookmark.rb +19 -17
- data/example/index-html.rb +11 -1
- data/example/search/config.ru +14 -9
- data/ext/rb-grn-array.c +6 -6
- data/ext/rb-grn-column.c +348 -18
- data/ext/rb-grn-context.c +8 -4
- data/ext/rb-grn-database.c +6 -7
- data/ext/rb-grn-exception.c +101 -5
- data/ext/rb-grn-expression.c +206 -23
- data/ext/rb-grn-fix-size-column.c +6 -39
- data/ext/rb-grn-hash.c +24 -24
- data/ext/rb-grn-index-column.c +74 -19
- data/ext/rb-grn-logger.c +48 -0
- data/ext/rb-grn-object.c +281 -67
- data/ext/rb-grn-operation.c +1 -1
- data/ext/rb-grn-patricia-trie-cursor.c +10 -1
- data/ext/rb-grn-patricia-trie.c +268 -7
- data/ext/rb-grn-query.c +52 -1
- data/ext/rb-grn-record.c +8 -2
- data/ext/rb-grn-snippet.c +63 -1
- data/ext/rb-grn-table-cursor-key-support.c +15 -1
- data/ext/rb-grn-table-cursor.c +57 -0
- data/ext/rb-grn-table-key-support.c +382 -46
- data/ext/rb-grn-table.c +729 -192
- data/ext/rb-grn-type.c +63 -12
- data/ext/rb-grn-utils.c +156 -158
- data/ext/rb-grn-variable.c +18 -0
- data/ext/rb-grn.h +85 -21
- data/ext/rb-groonga.c +13 -3
- data/extconf.rb +19 -4
- data/html/developer.html +1 -1
- data/html/header.html.erb +1 -1
- data/html/index.html +4 -4
- data/lib/groonga.rb +10 -0
- data/lib/groonga/expression-builder.rb +81 -42
- data/lib/groonga/patricia-trie.rb +13 -0
- data/lib/groonga/record.rb +158 -13
- data/lib/groonga/schema.rb +339 -33
- data/pkg-config.rb +6 -1
- data/test-unit/lib/test/unit.rb +23 -42
- data/test-unit/lib/test/unit/assertionfailederror.rb +11 -0
- data/test-unit/lib/test/unit/assertions.rb +87 -9
- data/test-unit/lib/test/unit/autorunner.rb +20 -11
- data/test-unit/lib/test/unit/collector.rb +1 -8
- data/test-unit/lib/test/unit/collector/load.rb +2 -3
- data/test-unit/lib/test/unit/color-scheme.rb +13 -1
- data/test-unit/lib/test/unit/diff.rb +223 -37
- data/test-unit/lib/test/unit/error.rb +4 -0
- data/test-unit/lib/test/unit/failure.rb +31 -5
- data/test-unit/lib/test/unit/notification.rb +8 -4
- data/test-unit/lib/test/unit/omission.rb +51 -3
- data/test-unit/lib/test/unit/pending.rb +4 -0
- data/test-unit/lib/test/unit/testcase.rb +55 -4
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +190 -4
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +14 -0
- data/test-unit/lib/test/unit/ui/testrunner.rb +8 -0
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/sample/{tc_adder.rb → test_adder.rb} +3 -1
- data/test-unit/sample/{tc_subtracter.rb → test_subtracter.rb} +3 -1
- data/test-unit/sample/test_user.rb +1 -0
- data/test-unit/test/collector/test-descendant.rb +2 -4
- data/test-unit/test/collector/test_objectspace.rb +7 -5
- data/test-unit/test/run-test.rb +2 -0
- data/test-unit/test/test-color-scheme.rb +7 -0
- data/test-unit/test/test-diff.rb +48 -7
- data/test-unit/test/test-omission.rb +1 -1
- data/test-unit/test/test-testcase.rb +47 -0
- data/test-unit/test/test_assertions.rb +79 -10
- data/test/groonga-test-utils.rb +6 -1
- data/test/test-array.rb +29 -14
- data/test/test-column.rb +107 -55
- data/test/test-context.rb +5 -0
- data/test/test-database.rb +2 -37
- data/test/test-exception.rb +9 -1
- data/test/test-expression-builder.rb +23 -5
- data/test/test-expression.rb +44 -8
- data/test/test-fix-size-column.rb +16 -5
- data/test/test-gqtp.rb +70 -0
- data/test/test-hash.rb +142 -43
- data/test/test-index-column.rb +9 -9
- data/test/test-patricia-trie.rb +79 -20
- data/test/test-procedure.rb +4 -2
- data/test/test-record.rb +32 -20
- data/test/test-remote.rb +3 -2
- data/test/test-schema.rb +226 -92
- data/test/test-table-cursor.rb +103 -1
- data/test/test-table-offset-and-limit.rb +102 -0
- data/test/test-table-select-normalize.rb +4 -4
- data/test/test-table-select.rb +52 -8
- data/test/test-table.rb +235 -116
- data/test/test-type.rb +2 -2
- data/test/test-variable-size-column.rb +21 -5
- data/test/test-vector-column.rb +76 -0
- data/{TUTORIAL.ja.rdoc → text/TUTORIAL.ja.rdoc} +52 -52
- data/text/expression.rdoc +284 -0
- metadata +11 -7
- data/test-unit/sample/ts_examples.rb +0 -7
data/lib/groonga/schema.rb
CHANGED
@@ -27,17 +27,17 @@ module Groonga
|
|
27
27
|
# のようなスキーマを定義する場合は以下のようになる。
|
28
28
|
#
|
29
29
|
# Groonga::Schema.define do |schema|
|
30
|
-
# schema.create_table("
|
30
|
+
# schema.create_table("Items") do |table|
|
31
31
|
# table.short_text("title")
|
32
32
|
# end
|
33
33
|
#
|
34
|
-
# schema.create_table("
|
34
|
+
# schema.create_table("Users") do |table|
|
35
35
|
# table.short_text("name")
|
36
36
|
# end
|
37
37
|
#
|
38
38
|
# schema.create_table("comments") do |table|
|
39
|
-
# table.reference("item", "
|
40
|
-
# table.reference("author", "
|
39
|
+
# table.reference("item", "Items")
|
40
|
+
# table.reference("author", "Users")
|
41
41
|
# table.text("content")
|
42
42
|
# table.time("issued")
|
43
43
|
# end
|
@@ -50,7 +50,11 @@ module Groonga
|
|
50
50
|
#
|
51
51
|
# スキーマを定義する。ブロックにはGroonga::Schemaオブ
|
52
52
|
# ジェクトがわたるので、そのオブジェクトを利用してスキー
|
53
|
-
#
|
53
|
+
# マを定義する。以下の省略形。
|
54
|
+
#
|
55
|
+
# schema = Groonga::Scheme.new(options)
|
56
|
+
# ...
|
57
|
+
# schema.define
|
54
58
|
#
|
55
59
|
# _options_に指定可能な値は以下の通り。
|
56
60
|
#
|
@@ -80,6 +84,15 @@ module Groonga
|
|
80
84
|
#
|
81
85
|
# _options_に指定可能な値は以下の通り。
|
82
86
|
#
|
87
|
+
# [+:force+]
|
88
|
+
# +true+を指定すると既存の同名のテーブルが存在してい
|
89
|
+
# ても、強制的にテーブルを作成する。
|
90
|
+
#
|
91
|
+
# [+:type+]
|
92
|
+
# テーブルの型を指定する。+:array+, +:hash+,
|
93
|
+
# +:patricia_trie+のいずれかを指定する。デフォルトで
|
94
|
+
# は+:array+になる。
|
95
|
+
#
|
83
96
|
# [+:context+]
|
84
97
|
# スキーマ定義時に使用するGroonga::Contextを指定する。
|
85
98
|
# 省略した場合はGroonga::Context.defaultを使用する。
|
@@ -96,6 +109,49 @@ module Groonga
|
|
96
109
|
# [+:value_type+]
|
97
110
|
# 値の型を指定する。省略すると値のための領域を確保しない。
|
98
111
|
# 値を保存したい場合は必ず指定すること。
|
112
|
+
#
|
113
|
+
# [+:sub_records+]
|
114
|
+
# +true+を指定するとGroonga::Table#groupでグループ化
|
115
|
+
# したときに、Groonga::Record#n_sub_recordsでグルー
|
116
|
+
# プに含まれるレコードの件数を取得できる。
|
117
|
+
#
|
118
|
+
# 以下は+:type+に+:hash+あるいは+:patricia_trie+を指定
|
119
|
+
# した時に指定可能。
|
120
|
+
#
|
121
|
+
# [+:key_type+]
|
122
|
+
# キーの種類を示すオブジェクトを指定する。キーの種類
|
123
|
+
# には型名("Int32"や"ShortText"など)または
|
124
|
+
# Groonga::Typeまたはテーブル(Groonga::Array、
|
125
|
+
# Groonga::Hash、Groonga::PatriciaTrieのどれか)を指
|
126
|
+
# 定する。
|
127
|
+
#
|
128
|
+
# Groonga::Typeを指定した場合は、その型が示す範囲の
|
129
|
+
# 値をキーとして使用する。ただし、キーの最大サイズは
|
130
|
+
# 4096バイトであるため、Groonga::Type::TEXTや
|
131
|
+
# Groonga::Type::LONG_TEXTは使用できない。
|
132
|
+
#
|
133
|
+
# テーブルを指定した場合はレコードIDをキーとして使用
|
134
|
+
# する。指定したテーブルのGroonga::Recordをキーとし
|
135
|
+
# て使用することもでき、その場合は自動的に
|
136
|
+
# Groonga::RecordからレコードIDを取得する。
|
137
|
+
#
|
138
|
+
# 省略した場合は文字列をキーとして使用する。この場合、
|
139
|
+
# 4096バイトまで使用可能である。
|
140
|
+
#
|
141
|
+
# [+:default_tokenizer+]
|
142
|
+
# Groonga::IndexColumnで使用するトークナイザを指定す
|
143
|
+
# る。デフォルトでは何も設定されていないので、テーブ
|
144
|
+
# ルにGroonga::IndexColumnを定義する場合は
|
145
|
+
# <tt>"TokenBigram"</tt>などを指定する必要がある。
|
146
|
+
#
|
147
|
+
# 以下は+:type+に+:patricia_trie+を指定した時に指定可能。
|
148
|
+
#
|
149
|
+
# [+:key_normalize+]
|
150
|
+
# +true+を指定するとキーを正規化する。
|
151
|
+
#
|
152
|
+
# [+:key_with_sis+]
|
153
|
+
# +true+を指定するとキーの文字列の全suffixが自動的に
|
154
|
+
# 登録される。
|
99
155
|
def create_table(name, options={}, &block)
|
100
156
|
define do |schema|
|
101
157
|
schema.create_table(name, options, &block)
|
@@ -103,6 +159,7 @@ module Groonga
|
|
103
159
|
end
|
104
160
|
|
105
161
|
# 名前が_name_のテーブルを削除する。
|
162
|
+
#
|
106
163
|
# _options_に指定可能な値は以下の通り。
|
107
164
|
#
|
108
165
|
# [+:context+]
|
@@ -114,6 +171,26 @@ module Groonga
|
|
114
171
|
end
|
115
172
|
end
|
116
173
|
|
174
|
+
# call-seq:
|
175
|
+
# Groonga::Schema.change_table(name, options={}) {|table| ...}
|
176
|
+
#
|
177
|
+
# 名前が_name_のテーブルを変更する。以下の省略形。
|
178
|
+
#
|
179
|
+
# Groonga::Schema.define do |schema|
|
180
|
+
# schema.change_table(name, options) do |table|
|
181
|
+
# ...
|
182
|
+
# end
|
183
|
+
# end
|
184
|
+
#
|
185
|
+
# ブロックにはGroonga::Schema::TableDefinitionオブジェ
|
186
|
+
# クトがわたるので、そのオブジェクトを利用してテーブル
|
187
|
+
# の詳細を定義する。
|
188
|
+
#
|
189
|
+
# _options_に指定可能な値は以下の通り。
|
190
|
+
#
|
191
|
+
# [+:context+]
|
192
|
+
# スキーマ定義時に使用するGroonga::Contextを指定する。
|
193
|
+
# 省略した場合はGroonga::Context.defaultを使用する。
|
117
194
|
def change_table(name, options={}, &block)
|
118
195
|
define do |schema|
|
119
196
|
schema.change_table(name, options, &block)
|
@@ -203,13 +280,25 @@ module Groonga
|
|
203
280
|
instance_eval(dumped_text)
|
204
281
|
end
|
205
282
|
|
283
|
+
# call-seq:
|
284
|
+
# schema.create_table(name, options={}) {|table| ...}
|
285
|
+
#
|
206
286
|
# 名前が_name_のテーブルを作成する。
|
207
287
|
#
|
208
|
-
#
|
209
|
-
#
|
288
|
+
# テーブルの作成は#defineを呼び出すまでは実行されないこ
|
289
|
+
# とに注意すること。
|
210
290
|
#
|
211
291
|
# _options_に指定可能な値は以下の通り。
|
212
292
|
#
|
293
|
+
# [+:force+]
|
294
|
+
# +true+を指定すると既存の同名のテーブルが存在してい
|
295
|
+
# ても、強制的にテーブルを作成する。
|
296
|
+
#
|
297
|
+
# [+:type+]
|
298
|
+
# テーブルの型を指定する。+:array+, +:hash+,
|
299
|
+
# +:patricia_trie+のいずれかを指定する。デフォルトで
|
300
|
+
# は+:array+になる。
|
301
|
+
#
|
213
302
|
# [+:context+]
|
214
303
|
# スキーマ定義時に使用するGroonga::Contextを指定する。
|
215
304
|
# 省略した場合はGroonga::Schema.newで指定した
|
@@ -230,17 +319,83 @@ module Groonga
|
|
230
319
|
# い。値を保存したい場合は必ず指定すること。
|
231
320
|
#
|
232
321
|
# 参考: Groonga::Type.new
|
322
|
+
#
|
323
|
+
# [+:sub_records+]
|
324
|
+
# +true+を指定するとGroonga::Table#groupでグループ化
|
325
|
+
# したときに、Groonga::Record#n_sub_recordsでグルー
|
326
|
+
# プに含まれるレコードの件数を取得できる。
|
327
|
+
#
|
328
|
+
# 以下は+:type+に+:hash+あるいは+:patricia_trie+を指定
|
329
|
+
# した時に指定可能。
|
330
|
+
#
|
331
|
+
# [+:key_type+]
|
332
|
+
# キーの種類を示すオブジェクトを指定する。キーの種類
|
333
|
+
# には型名("Int32"や"ShortText"など)または
|
334
|
+
# Groonga::Typeまたはテーブル(Groonga::Array、
|
335
|
+
# Groonga::Hash、Groonga::PatriciaTrieのどれか)を指
|
336
|
+
# 定する。
|
337
|
+
#
|
338
|
+
# Groonga::Typeを指定した場合は、その型が示す範囲の
|
339
|
+
# 値をキーとして使用する。ただし、キーの最大サイズは
|
340
|
+
# 4096バイトであるため、Groonga::Type::TEXTや
|
341
|
+
# Groonga::Type::LONG_TEXTは使用できない。
|
342
|
+
#
|
343
|
+
# テーブルを指定した場合はレコードIDをキーとして使用
|
344
|
+
# する。指定したテーブルのGroonga::Recordをキーとし
|
345
|
+
# て使用することもでき、その場合は自動的に
|
346
|
+
# Groonga::RecordからレコードIDを取得する。
|
347
|
+
#
|
348
|
+
# 省略した場合は文字列をキーとして使用する。この場合、
|
349
|
+
# 4096バイトまで使用可能である。
|
350
|
+
#
|
351
|
+
# [+:default_tokenizer+]
|
352
|
+
# Groonga::IndexColumnで使用するトークナイザを指定す
|
353
|
+
# る。デフォルトでは何も設定されていないので、テーブ
|
354
|
+
# ルにGroonga::IndexColumnを定義する場合は
|
355
|
+
# <tt>"TokenBigram"</tt>などを指定する必要がある。
|
356
|
+
#
|
357
|
+
# 以下は+:type+に+:patricia_trie+を指定した時に指定可能。
|
358
|
+
#
|
359
|
+
# [+:key_normalize+]
|
360
|
+
# +true+を指定するとキーを正規化する。
|
361
|
+
#
|
362
|
+
# [+:key_with_sis+]
|
363
|
+
# +true+を指定するとキーの文字列の全suffixが自動的に
|
364
|
+
# 登録される。
|
233
365
|
def create_table(name, options={})
|
234
366
|
definition = TableDefinition.new(name, @options.merge(options || {}))
|
235
367
|
yield(definition)
|
236
368
|
@definitions << definition
|
237
369
|
end
|
238
370
|
|
371
|
+
# 名前が_name_のテーブルを削除する。
|
372
|
+
#
|
373
|
+
# テーブルの削除は#defineを呼び出すまでは実行されないこ
|
374
|
+
# とに注意すること。
|
375
|
+
#
|
376
|
+
# _options_に指定可能な値は以下の通り。
|
377
|
+
#
|
378
|
+
# [+:context+]
|
379
|
+
# スキーマ定義時に使用するGroonga::Contextを指定する。
|
380
|
+
# 省略した場合はGroonga::Context.defaultを使用する。
|
239
381
|
def remove_table(name, options={})
|
240
382
|
definition = TableRemoveDefinition.new(name, @options.merge(options || {}))
|
241
383
|
@definitions << definition
|
242
384
|
end
|
243
385
|
|
386
|
+
# call-seq:
|
387
|
+
# schema.change_table(name, options={}) {|table| ...}
|
388
|
+
#
|
389
|
+
# 名前が_name_のテーブルを変更する。
|
390
|
+
#
|
391
|
+
# テーブルの変更は#defineを呼び出すまでは実行されないこ
|
392
|
+
# とに注意すること。
|
393
|
+
#
|
394
|
+
# _options_に指定可能な値は以下の通り。
|
395
|
+
#
|
396
|
+
# [+:context+]
|
397
|
+
# スキーマ定義時に使用するGroonga::Contextを指定する。
|
398
|
+
# 省略した場合はGroonga::Context.defaultを使用する。
|
244
399
|
def change_table(name, options={})
|
245
400
|
options = @options.merge(options || {}).merge(:change => true)
|
246
401
|
definition = TableDefinition.new(name, options)
|
@@ -248,10 +403,14 @@ module Groonga
|
|
248
403
|
@definitions << definition
|
249
404
|
end
|
250
405
|
|
406
|
+
# スキーマ定義時にGroonga::Schema.create_tableや
|
407
|
+
# Groonga::Schema#create_tableからブロックに渡されてくる
|
408
|
+
# オブジェクト
|
251
409
|
class TableDefinition
|
410
|
+
# テーブルの名前
|
252
411
|
attr_reader :name
|
253
412
|
|
254
|
-
def initialize(name, options)
|
413
|
+
def initialize(name, options) # :nodoc:
|
255
414
|
@name = name
|
256
415
|
@name = @name.to_s if @name.is_a?(Symbol)
|
257
416
|
@definitions = []
|
@@ -260,22 +419,56 @@ module Groonga
|
|
260
419
|
@table_type = table_type
|
261
420
|
end
|
262
421
|
|
263
|
-
def define
|
422
|
+
def define # :nodoc:
|
423
|
+
table = context[@name]
|
264
424
|
if @options[:change]
|
265
|
-
table
|
425
|
+
raise ArgumentError, "table doesn't exist: #{@name}" if table.nil?
|
266
426
|
else
|
267
|
-
table = context[@name]
|
268
427
|
if table and @options[:force]
|
269
428
|
table.remove
|
429
|
+
table = nil
|
270
430
|
end
|
271
|
-
table
|
431
|
+
table ||= @table_type.create(create_options)
|
272
432
|
end
|
273
433
|
@definitions.each do |definition|
|
274
|
-
definition.define(table)
|
434
|
+
definition.define(self, table)
|
275
435
|
end
|
276
436
|
table
|
277
437
|
end
|
278
438
|
|
439
|
+
# 名前が_name_で型が_type_のカラムを作成する。
|
440
|
+
#
|
441
|
+
# _options_に指定可能な値は以下の通り。
|
442
|
+
#
|
443
|
+
# [+:force+]
|
444
|
+
# +true+を指定すると既存の同名のカラムが存在してい
|
445
|
+
# ても、強制的に新しいカラムを作成する。
|
446
|
+
#
|
447
|
+
# [+:path+]
|
448
|
+
# カラムを保存するパス。
|
449
|
+
#
|
450
|
+
# [+:persistent+]
|
451
|
+
# +true+を指定すると永続カラムとなる。+:path+を省略
|
452
|
+
# した場合は自動的にパスが付加される。
|
453
|
+
#
|
454
|
+
# [+:type+]
|
455
|
+
# カラムの値の格納方法について指定する。省略した場合は、
|
456
|
+
# +:scalar+になる。
|
457
|
+
#
|
458
|
+
# [+:scalar+]
|
459
|
+
# スカラ値(単独の値)を格納する。
|
460
|
+
#
|
461
|
+
# [+:vector+]
|
462
|
+
# 値の配列を格納する。
|
463
|
+
#
|
464
|
+
# [+:compress+]
|
465
|
+
# 値の圧縮方法を指定する。省略した場合は、圧縮しない。
|
466
|
+
#
|
467
|
+
# [+:zlib+]
|
468
|
+
# 値をzlib圧縮して格納する。
|
469
|
+
#
|
470
|
+
# [+:lzo+]
|
471
|
+
# 値をlzo圧縮して格納する。
|
279
472
|
def column(name, type, options={})
|
280
473
|
definition = self[name, ColumnDefinition]
|
281
474
|
if definition.nil?
|
@@ -287,6 +480,10 @@ module Groonga
|
|
287
480
|
self
|
288
481
|
end
|
289
482
|
|
483
|
+
# 名前が_name_のカラムを削除する。
|
484
|
+
#
|
485
|
+
# _options_に指定可能な値はない(TODO _options_は不要?)。
|
486
|
+
#
|
290
487
|
def remove_column(name, options={})
|
291
488
|
definition = self[name, ColumnRemoveDefinition]
|
292
489
|
if definition.nil?
|
@@ -297,6 +494,33 @@ module Groonga
|
|
297
494
|
self
|
298
495
|
end
|
299
496
|
|
497
|
+
# _taget_column_を対象とするインデックスカラムを作成す
|
498
|
+
# る。
|
499
|
+
#
|
500
|
+
# _options_に指定可能な値は以下の通り。
|
501
|
+
#
|
502
|
+
# [+:name+]
|
503
|
+
# インデックスカラムのカラム名を任意に指定する。
|
504
|
+
#
|
505
|
+
# [+:force+]
|
506
|
+
# +true+を指定すると既存の同名のカラムが存在してい
|
507
|
+
# ても、強制的に新しいカラムを作成する。
|
508
|
+
#
|
509
|
+
# [+:path+]
|
510
|
+
# カラムを保存するパス。
|
511
|
+
#
|
512
|
+
# [+:persistent+]
|
513
|
+
# +true+を指定すると永続カラムとなる。+:path+を省略
|
514
|
+
# した場合は自動的にパスが付加される。
|
515
|
+
#
|
516
|
+
# [+:with_section+]
|
517
|
+
# 転置索引にsection(段落情報)を合わせて格納する。
|
518
|
+
#
|
519
|
+
# [+:with_weight+]
|
520
|
+
# 転置索引にweight情報を合わせて格納する。
|
521
|
+
#
|
522
|
+
# [+:with_position+]
|
523
|
+
# 転置索引に出現位置情報を合わせて格納する。
|
300
524
|
def index(target_column, options={})
|
301
525
|
name = options.delete(:name)
|
302
526
|
if name.nil?
|
@@ -319,66 +543,112 @@ module Groonga
|
|
319
543
|
self
|
320
544
|
end
|
321
545
|
|
546
|
+
# 名前が_name_の32bit符号付き整数のカラムを作成する。
|
547
|
+
#
|
548
|
+
# _options_に指定可能な値は
|
549
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
322
550
|
def integer32(name, options={})
|
323
551
|
column(name, "Int32", options)
|
324
552
|
end
|
325
553
|
alias_method :integer, :integer32
|
326
554
|
alias_method :int32, :integer32
|
327
555
|
|
556
|
+
# 名前が_name_の64bit符号付き整数のカラムを作成する。
|
557
|
+
#
|
558
|
+
# _options_に指定可能な値は
|
559
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
328
560
|
def integer64(name, options={})
|
329
561
|
column(name, "Int64", options)
|
330
562
|
end
|
331
563
|
alias_method :int64, :integer64
|
332
564
|
|
565
|
+
# 名前が_name_の32bit符号なし整数のカラムを作成する。
|
566
|
+
#
|
567
|
+
# _options_に指定可能な値は
|
568
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
333
569
|
def unsigned_integer32(name, options={})
|
334
570
|
column(name, "UInt32", options)
|
335
571
|
end
|
336
572
|
alias_method :unsigned_integer, :unsigned_integer32
|
337
573
|
alias_method :uint32, :unsigned_integer32
|
338
574
|
|
575
|
+
# 名前が_name_の64bit符号なし整数のカラムを作成する。
|
576
|
+
#
|
577
|
+
# _options_に指定可能な値は
|
578
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
339
579
|
def unsigned_integer64(name, options={})
|
340
580
|
column(name, "UInt64", options)
|
341
581
|
end
|
342
582
|
alias_method :uint64, :unsigned_integer64
|
343
583
|
|
584
|
+
# 名前が_name_のieee754形式の64bit浮動小数点数のカラム
|
585
|
+
# を作成する。
|
586
|
+
#
|
587
|
+
# _options_に指定可能な値は
|
588
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
344
589
|
def float(name, options={})
|
345
590
|
column(name, "Float", options)
|
346
591
|
end
|
347
592
|
|
593
|
+
# 名前が_name_の64bit符号付き整数で1970年1月1日0時0分
|
594
|
+
# 0秒からの経過マイクロ秒数を格納するカラムを作成する。
|
595
|
+
#
|
596
|
+
# _options_に指定可能な値は
|
597
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
348
598
|
def time(name, options={})
|
349
599
|
column(name, "Time", options)
|
350
600
|
end
|
351
601
|
|
602
|
+
# 名前が_name_の4Kbyte以下の文字列を格納できるカラムを
|
603
|
+
# 作成する。
|
604
|
+
#
|
605
|
+
# _options_に指定可能な値は
|
606
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
352
607
|
def short_text(name, options={})
|
353
608
|
column(name, "ShortText", options)
|
354
609
|
end
|
355
610
|
alias_method :string, :short_text
|
356
611
|
|
612
|
+
# 名前が_name_の64Kbyte以下の文字列を格納できるカラムを
|
613
|
+
# 作成する。
|
614
|
+
#
|
615
|
+
# _options_に指定可能な値は
|
616
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
357
617
|
def text(name, options={})
|
358
618
|
column(name, "Text", options)
|
359
619
|
end
|
360
620
|
|
621
|
+
# 名前が_name_の2Gbyte以下の文字列を格納できるカラムを
|
622
|
+
# 作成する。
|
623
|
+
#
|
624
|
+
# _options_に指定可能な値は
|
625
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
361
626
|
def long_text(name, options={})
|
362
627
|
column(name, "LongText", options)
|
363
628
|
end
|
364
629
|
|
630
|
+
# 名前が_name_で_table_のレコードIDを格納する参照カラ
|
631
|
+
# ムを作成する。
|
632
|
+
#
|
633
|
+
# _options_に指定可能な値は
|
634
|
+
# Groonga::Schema::TableDefinition#columnを参照。
|
365
635
|
def reference(name, table, options={})
|
366
636
|
column(name, table, options)
|
367
637
|
end
|
368
638
|
|
369
|
-
def [](name, definition_class=nil)
|
639
|
+
def [](name, definition_class=nil) # :nodoc:
|
370
640
|
@definitions.find do |definition|
|
371
641
|
definition.name.to_s == name.to_s and
|
372
642
|
(definition_class.nil? or definition.is_a?(definition_class))
|
373
643
|
end
|
374
644
|
end
|
375
645
|
|
376
|
-
def context
|
646
|
+
def context # :nodoc:
|
377
647
|
@options[:context] || Groonga::Context.default
|
378
648
|
end
|
379
649
|
|
380
650
|
private
|
381
|
-
def update_definition(name, definition_class, definition)
|
651
|
+
def update_definition(name, definition_class, definition) # :nodoc:
|
382
652
|
old_definition = self[name, definition_class]
|
383
653
|
if old_definition
|
384
654
|
index = @definitions.index(old_definition)
|
@@ -392,8 +662,8 @@ module Groonga
|
|
392
662
|
:type, :path, :persistent,
|
393
663
|
:key_type, :value_type, :sub_records,
|
394
664
|
:default_tokenizer,
|
395
|
-
:key_normalize, :key_with_sis]
|
396
|
-
def validate_options(options)
|
665
|
+
:key_normalize, :key_with_sis] # :nodoc:
|
666
|
+
def validate_options(options) # :nodoc:
|
397
667
|
return if options.nil?
|
398
668
|
unknown_keys = options.keys - AVAILABLE_OPTION_KEYS
|
399
669
|
unless unknown_keys.empty?
|
@@ -403,7 +673,7 @@ module Groonga
|
|
403
673
|
end
|
404
674
|
end
|
405
675
|
|
406
|
-
def table_type
|
676
|
+
def table_type # :nodoc:
|
407
677
|
type = @options[:type]
|
408
678
|
case type
|
409
679
|
when :array, nil
|
@@ -417,7 +687,7 @@ module Groonga
|
|
417
687
|
end
|
418
688
|
end
|
419
689
|
|
420
|
-
def create_options
|
690
|
+
def create_options # :nodoc:
|
421
691
|
common = {
|
422
692
|
:name => @name,
|
423
693
|
:path => @options[:path],
|
@@ -446,16 +716,16 @@ module Groonga
|
|
446
716
|
end
|
447
717
|
end
|
448
718
|
|
449
|
-
def column_options
|
719
|
+
def column_options # :nodoc:
|
450
720
|
{:persistent => persistent?}
|
451
721
|
end
|
452
722
|
|
453
|
-
def persistent?
|
723
|
+
def persistent? # :nodoc:
|
454
724
|
@options[:persistent].nil? ? true : @options[:persistent]
|
455
725
|
end
|
456
726
|
end
|
457
727
|
|
458
|
-
class TableRemoveDefinition
|
728
|
+
class TableRemoveDefinition # :nodoc:
|
459
729
|
def initialize(name, options={})
|
460
730
|
@name = name
|
461
731
|
@options = options
|
@@ -467,7 +737,7 @@ module Groonga
|
|
467
737
|
end
|
468
738
|
end
|
469
739
|
|
470
|
-
class ColumnDefinition
|
740
|
+
class ColumnDefinition # :nodoc:
|
471
741
|
attr_accessor :name, :type
|
472
742
|
attr_reader :options
|
473
743
|
|
@@ -478,14 +748,33 @@ module Groonga
|
|
478
748
|
@type = nil
|
479
749
|
end
|
480
750
|
|
481
|
-
def define(table)
|
751
|
+
def define(table_definition, table)
|
752
|
+
column = table.column(@name)
|
753
|
+
if column
|
754
|
+
return column if same_column?(table_definition, column)
|
755
|
+
if @options.delete(:force)
|
756
|
+
column.remove
|
757
|
+
else
|
758
|
+
raise ArgumentError,
|
759
|
+
"the same name column with different type is " +
|
760
|
+
"already defined: #{@type.inspect}(#{@options.inspect}): " +
|
761
|
+
"#{column.inspect}"
|
762
|
+
end
|
763
|
+
end
|
482
764
|
table.define_column(@name,
|
483
765
|
Schema.normalize_type(@type),
|
484
766
|
@options)
|
485
767
|
end
|
768
|
+
|
769
|
+
private
|
770
|
+
def same_column?(table_definition, column)
|
771
|
+
context = table_definition.context
|
772
|
+
# TODO: should check column type and other options.
|
773
|
+
column.range == context[Schema.normalize_type(@type)]
|
774
|
+
end
|
486
775
|
end
|
487
776
|
|
488
|
-
class ColumnRemoveDefinition
|
777
|
+
class ColumnRemoveDefinition # :nodoc:
|
489
778
|
attr_accessor :name
|
490
779
|
attr_reader :options
|
491
780
|
|
@@ -495,12 +784,12 @@ module Groonga
|
|
495
784
|
@options = (options || {}).dup
|
496
785
|
end
|
497
786
|
|
498
|
-
def define(table)
|
787
|
+
def define(table_definition, table)
|
499
788
|
table.column(@name).remove
|
500
789
|
end
|
501
790
|
end
|
502
791
|
|
503
|
-
class IndexColumnDefinition
|
792
|
+
class IndexColumnDefinition # :nodoc:
|
504
793
|
attr_accessor :name, :target
|
505
794
|
attr_reader :options
|
506
795
|
|
@@ -511,12 +800,27 @@ module Groonga
|
|
511
800
|
@target = nil
|
512
801
|
end
|
513
802
|
|
514
|
-
def define(table)
|
803
|
+
def define(table_definition, table)
|
515
804
|
target = @target
|
516
|
-
|
805
|
+
unless target.is_a?(Groonga::Object)
|
806
|
+
target = table_definition.context[target]
|
807
|
+
end
|
517
808
|
if target.nil?
|
518
809
|
raise ArgumentError, "Unknown index target: #{@target.inspect}"
|
519
810
|
end
|
811
|
+
index = table.column(@name)
|
812
|
+
if index
|
813
|
+
return index if same_index?(table_definition, index, target)
|
814
|
+
if @options.delete(:force)
|
815
|
+
index.remove
|
816
|
+
else
|
817
|
+
raise ArgumentError,
|
818
|
+
"the same name index column with " +
|
819
|
+
"different target or options is " +
|
820
|
+
"already defined: #{target.inspect}(#{@options.inspect}): " +
|
821
|
+
"#{index.inspect}"
|
822
|
+
end
|
823
|
+
end
|
520
824
|
index = table.define_index_column(@name,
|
521
825
|
target.table,
|
522
826
|
@options)
|
@@ -525,12 +829,14 @@ module Groonga
|
|
525
829
|
end
|
526
830
|
|
527
831
|
private
|
528
|
-
def
|
529
|
-
|
832
|
+
def same_index?(table_definition, index, target)
|
833
|
+
context = table_definition.context
|
834
|
+
# TODO: should check column type and other options.
|
835
|
+
index.range == target.table and index.sources == [target]
|
530
836
|
end
|
531
837
|
end
|
532
838
|
|
533
|
-
class Dumper
|
839
|
+
class Dumper # :nodoc:
|
534
840
|
def initialize(options={})
|
535
841
|
@options = (options || {}).dup
|
536
842
|
end
|