rroonga 2.1.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/grndump +1 -1
- data/doc/text/news.textile +22 -4
- data/ext/groonga/rb-grn-accessor.c +1 -1
- data/ext/groonga/rb-grn-array-cursor.c +1 -1
- data/ext/groonga/rb-grn-array.c +218 -2
- data/ext/groonga/rb-grn-column.c +1 -1
- data/ext/groonga/rb-grn-context.c +1 -1
- data/ext/groonga/rb-grn-database.c +1 -1
- data/ext/groonga/rb-grn-double-array-trie-cursor.c +1 -1
- data/ext/groonga/rb-grn-double-array-trie.c +1 -1
- data/ext/groonga/rb-grn-encoding-support.c +1 -1
- data/ext/groonga/rb-grn-encoding.c +1 -1
- data/ext/groonga/rb-grn-exception.c +1 -1
- data/ext/groonga/rb-grn-expression-builder.c +1 -1
- data/ext/groonga/rb-grn-expression.c +1 -1
- data/ext/groonga/rb-grn-fix-size-column.c +1 -1
- data/ext/groonga/rb-grn-geo-point.c +1 -1
- data/ext/groonga/rb-grn-hash-cursor.c +1 -1
- data/ext/groonga/rb-grn-hash.c +1 -1
- data/ext/groonga/rb-grn-index-column.c +1 -1
- data/ext/groonga/rb-grn-index-cursor.c +1 -1
- data/ext/groonga/rb-grn-logger.c +1 -1
- data/ext/groonga/rb-grn-normalizer.c +1 -1
- data/ext/groonga/rb-grn-object.c +7 -7
- data/ext/groonga/rb-grn-operator.c +1 -1
- data/ext/groonga/rb-grn-patricia-trie-cursor.c +1 -1
- data/ext/groonga/rb-grn-patricia-trie.c +1 -1
- data/ext/groonga/rb-grn-plugin.c +1 -1
- data/ext/groonga/rb-grn-posting.c +1 -1
- data/ext/groonga/rb-grn-procedure.c +1 -1
- data/ext/groonga/rb-grn-record.c +1 -1
- data/ext/groonga/rb-grn-snippet.c +1 -1
- data/ext/groonga/rb-grn-table-cursor-key-support.c +1 -1
- data/ext/groonga/rb-grn-table-cursor.c +1 -1
- data/ext/groonga/rb-grn-table-key-support.c +1 -1
- data/ext/groonga/rb-grn-table.c +1 -1
- data/ext/groonga/rb-grn-type.c +1 -1
- data/ext/groonga/rb-grn-utils.c +1 -1
- data/ext/groonga/rb-grn-variable-size-column.c +1 -1
- data/ext/groonga/rb-grn-variable.c +1 -1
- data/ext/groonga/rb-grn.h +4 -4
- data/ext/groonga/rb-groonga.c +1 -1
- data/lib/groonga/context.rb +93 -13
- data/rroonga-build.rb +2 -2
- data/test/groonga-test-utils.rb +2 -1
- data/test/test-array.rb +86 -2
- data/test/test-context.rb +22 -2
- metadata +296 -288
data/bin/grndump
CHANGED
@@ -67,7 +67,7 @@ option_parser = OptionParser.new do |parser|
|
|
67
67
|
|
68
68
|
types = ["id", "key"]
|
69
69
|
parser.on("--order-by=TYPE", types,
|
70
|
-
"sort output
|
70
|
+
"sort output records by TYPE.",
|
71
71
|
"available TYPEs: #{types.join(', ')}",
|
72
72
|
"(#{options.order_by})") do |type|
|
73
73
|
options.order_by = type
|
data/doc/text/news.textile
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
h1. NEWS
|
2
2
|
|
3
|
+
h2(#2-1-4). 2.1.4: 2013-03-29
|
4
|
+
|
5
|
+
h3. Improvements
|
6
|
+
|
7
|
+
* Required groonga >= 3.0.2.
|
8
|
+
* Added block support to {Groonga::Context#create_database}. If a
|
9
|
+
block is given, created database is closed on block exit.
|
10
|
+
* [experimental] Added {Groonga::Array#push}.
|
11
|
+
* [experimental] Added {Groonga::Array#pull}.
|
12
|
+
* Added more closed object checks.
|
13
|
+
[GitHub #8][Reported by KITAITI Makoto]
|
14
|
+
* Added block support to {Groonga::Context#restore}. If a block is
|
15
|
+
given, command and its response are yielded.
|
16
|
+
|
17
|
+
h3. Thanks
|
18
|
+
|
19
|
+
* KITAITI Makoto
|
20
|
+
|
3
21
|
h2(#2-1-3). 2.1.3: 2013-01-29
|
4
22
|
|
5
23
|
h3. Improvements
|
@@ -15,14 +33,14 @@ h3. Improvements
|
|
15
33
|
dumped_commands = File.read("dump.grn")
|
16
34
|
context.restore(dumped_commands)
|
17
35
|
</pre>
|
36
|
+
* Supported new logger API in groonga. Old API isn't used anymore.
|
37
|
+
* For installing groonga with this gem:
|
38
|
+
** Stopped to install documentation about groonga. See "Web site":http://groonga.org/docs/ instead.
|
39
|
+
** Stopped to build static library because it isn't used by rroonga.
|
18
40
|
|
19
41
|
h3. Fixes
|
20
42
|
|
21
|
-
* Added missing Groonga::Logger.
|
22
43
|
* [dumper] Reduced needless new lines in dumped commands.
|
23
|
-
* For installing groonga with this gem:
|
24
|
-
** Fix the needless install of documents.
|
25
|
-
** Fix the needless build of static library.
|
26
44
|
|
27
45
|
* For ranguba project:
|
28
46
|
** [template] Removed needless block for sponsor by rubyforge.
|
data/ext/groonga/rb-grn-array.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
/* -*- coding: utf-8; c-
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2009-
|
3
|
+
Copyright (C) 2009-2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
|
5
5
|
This library is free software; you can redistribute it and/or
|
6
6
|
modify it under the terms of the GNU Lesser General Public
|
@@ -192,6 +192,220 @@ rb_grn_array_add (int argc, VALUE *argv, VALUE self)
|
|
192
192
|
}
|
193
193
|
}
|
194
194
|
|
195
|
+
typedef struct _YieldRecordCallbackData
|
196
|
+
{
|
197
|
+
VALUE self;
|
198
|
+
VALUE record;
|
199
|
+
grn_id id;
|
200
|
+
int status;
|
201
|
+
} YieldRecordCallbackData;
|
202
|
+
|
203
|
+
static VALUE
|
204
|
+
yield_record (VALUE user_data)
|
205
|
+
{
|
206
|
+
YieldRecordCallbackData *data = (YieldRecordCallbackData *)user_data;
|
207
|
+
volatile VALUE record;
|
208
|
+
|
209
|
+
if (data->id == GRN_ID_NIL) {
|
210
|
+
record = Qnil;
|
211
|
+
} else {
|
212
|
+
record = rb_grn_record_new(data->self, data->id, Qnil);
|
213
|
+
}
|
214
|
+
data->record = record;
|
215
|
+
|
216
|
+
return rb_yield(record);
|
217
|
+
}
|
218
|
+
|
219
|
+
static void
|
220
|
+
yield_record_callback (grn_ctx *ctx, grn_array *array,
|
221
|
+
grn_id id, void *user_data)
|
222
|
+
{
|
223
|
+
YieldRecordCallbackData *data = user_data;
|
224
|
+
|
225
|
+
data->id = id;
|
226
|
+
rb_protect(yield_record, (VALUE)(data), &(data->status));
|
227
|
+
}
|
228
|
+
|
229
|
+
/*
|
230
|
+
* Pushes a record to the array. The record should be filled in the
|
231
|
+
* given block. The pushed record can be pulled by
|
232
|
+
* {Groonga::Array#pull}.
|
233
|
+
*
|
234
|
+
* @example A program that pushes a job without error handling
|
235
|
+
* queue = Groonga::Array.create(:name => "CrawlURLQueue")
|
236
|
+
* queue.define_column("url", "ShortText")
|
237
|
+
* urls = ["http://groonga.org/", "http://ranguba.org/"]
|
238
|
+
* urls.each do |url|
|
239
|
+
* queue.push do |record|
|
240
|
+
* record.url = url
|
241
|
+
* end
|
242
|
+
* end
|
243
|
+
*
|
244
|
+
* @example A program that pulls a job without error handling
|
245
|
+
* queue = Groonga::Array.open(:name => "CrawlURLQueue")
|
246
|
+
* loop do
|
247
|
+
* url = nil
|
248
|
+
* queue.pull do |record|
|
249
|
+
* url = record.url
|
250
|
+
* record.delete
|
251
|
+
* end
|
252
|
+
* # Crawl URL
|
253
|
+
* end
|
254
|
+
*
|
255
|
+
* The record that is passed to the given block may be nil. You need
|
256
|
+
* to handle the case. For example, just ignoring it or reports an
|
257
|
+
* error.
|
258
|
+
*
|
259
|
+
* @example A program that pushes a job with error handling
|
260
|
+
* queue = Groonga::Array.create(:name => "CrawlURLQueue")
|
261
|
+
* queue.define_column("url", "ShortText")
|
262
|
+
* urls = ["http://groonga.org/", "http://ranguba.org/"]
|
263
|
+
* urls.each do |url|
|
264
|
+
* queue.push do |record|
|
265
|
+
* record.url = url if record # check record is not nil
|
266
|
+
* end
|
267
|
+
* end
|
268
|
+
*
|
269
|
+
* If an error is occurred in the given block, the pushed record may
|
270
|
+
* not be filled completely. You should handle the case in pull side.
|
271
|
+
*
|
272
|
+
* @example A program that has an error in push block
|
273
|
+
* queue = Groonga::Array.create(:name => "CrawlURLQueue")
|
274
|
+
* queue.define_column("url", "ShortText")
|
275
|
+
* urls = ["http://groonga.org/", "http://ranguba.org/"]
|
276
|
+
* urls.each do |url|
|
277
|
+
* queue.push do |record|
|
278
|
+
* record.url = uri # Typo! It should be ur*l* not ur*i*
|
279
|
+
* # record.url isn't set
|
280
|
+
* end
|
281
|
+
* end
|
282
|
+
*
|
283
|
+
* @example A program that pulls a job with error handling
|
284
|
+
* queue = Groonga::Array.open(:name => "CrawlURLQueue")
|
285
|
+
* loop do
|
286
|
+
* url = nil
|
287
|
+
* queue.pull do |record|
|
288
|
+
* url = record.url # record.url is nil!
|
289
|
+
* record.delete
|
290
|
+
* end
|
291
|
+
* next if url.nil? # Ignore an uncompleted added job
|
292
|
+
* # Crawl URL
|
293
|
+
* end
|
294
|
+
*
|
295
|
+
* @overload push
|
296
|
+
* @yield [record] Filles columns of a pushed record in the given block.
|
297
|
+
* @yieldparam record [Groonga::Record or nil]
|
298
|
+
* A pushed record. It is nil when pushing is failed.
|
299
|
+
* @return [Groonga::Record or nil] A pushed record that is yielded.
|
300
|
+
*
|
301
|
+
*/
|
302
|
+
static VALUE
|
303
|
+
rb_grn_array_push (VALUE self)
|
304
|
+
{
|
305
|
+
grn_ctx *context = NULL;
|
306
|
+
grn_obj *table;
|
307
|
+
YieldRecordCallbackData data;
|
308
|
+
|
309
|
+
if (!rb_block_given_p()) {
|
310
|
+
rb_raise(rb_eArgError,
|
311
|
+
"tried to call Groonga::Array#push without a block");
|
312
|
+
}
|
313
|
+
|
314
|
+
table = SELF(self, &context);
|
315
|
+
|
316
|
+
data.self = self;
|
317
|
+
data.record = Qnil;
|
318
|
+
data.status = 0;
|
319
|
+
grn_array_push(context, (grn_array *)table, yield_record_callback, &data);
|
320
|
+
if (data.status != 0) {
|
321
|
+
rb_jump_tag(data.status);
|
322
|
+
}
|
323
|
+
rb_grn_context_check(context, self);
|
324
|
+
|
325
|
+
return data.record;
|
326
|
+
}
|
327
|
+
|
328
|
+
/*
|
329
|
+
* Pulles a record from the array. The required values should be
|
330
|
+
* retrieved in the given block.
|
331
|
+
*
|
332
|
+
* If {Groonga::Array#push} failes to fill values of the pushed
|
333
|
+
* record, the pulled record may be uncompleted. It should be handled
|
334
|
+
* by your application.
|
335
|
+
*
|
336
|
+
* If you passes @:block? => true@ option, the pull operation blocks
|
337
|
+
* until a pushed record is pushed. It is the default behavior.
|
338
|
+
*
|
339
|
+
* If you passes @:block? => false@ option, the pull operation returns
|
340
|
+
* immediately, the given block isn't called and returns nil when no
|
341
|
+
* record exist in the array.
|
342
|
+
*
|
343
|
+
* @example A program that pulls with non-block mode
|
344
|
+
* queue = Groonga::Array.open(:name => "CrawlURLQueue")
|
345
|
+
* loop do
|
346
|
+
* url = nil
|
347
|
+
* # The case for no pushed records in the array.
|
348
|
+
* pulled_record = queue.pull(:block? => false) do |record|
|
349
|
+
* # This block isn't called
|
350
|
+
* url = record.url
|
351
|
+
* record.delete
|
352
|
+
* end
|
353
|
+
* p pulled_record.nil? # => true
|
354
|
+
* end
|
355
|
+
*
|
356
|
+
* @see {Groonga::Array#push} Examples exist in the push documentation.
|
357
|
+
*
|
358
|
+
* @overload pull(options={})
|
359
|
+
* @param [::Hash] options The option parameters.
|
360
|
+
* @option options [Boolean] :block? (true)
|
361
|
+
* Whether the pull operation is blocked or not when no record exist
|
362
|
+
* in the array.
|
363
|
+
* @yield [record] Gets required values for a pull record in the given block.
|
364
|
+
* @yieldparam record [Groonga::Record or nil]
|
365
|
+
* A pulled record. It is nil when no records exist in the array
|
366
|
+
* and @block?@ parameter is not @true@.
|
367
|
+
* @return [Groonga::Record or nil] A pulled record that is yielded.
|
368
|
+
*
|
369
|
+
*/
|
370
|
+
static VALUE
|
371
|
+
rb_grn_array_pull (int argc, VALUE *argv, VALUE self)
|
372
|
+
{
|
373
|
+
grn_ctx *context = NULL;
|
374
|
+
grn_obj *table;
|
375
|
+
VALUE options;
|
376
|
+
VALUE rb_block_p;
|
377
|
+
YieldRecordCallbackData data;
|
378
|
+
|
379
|
+
rb_scan_args(argc, argv, "01", &options);
|
380
|
+
|
381
|
+
rb_grn_scan_options(options,
|
382
|
+
"block?", &rb_block_p,
|
383
|
+
NULL);
|
384
|
+
|
385
|
+
if (!rb_block_given_p()) {
|
386
|
+
rb_raise(rb_eArgError,
|
387
|
+
"tried to call Groonga::Array#pull without a block");
|
388
|
+
}
|
389
|
+
|
390
|
+
table = SELF(self, &context);
|
391
|
+
|
392
|
+
if (NIL_P(rb_block_p)) {
|
393
|
+
rb_block_p = Qtrue;
|
394
|
+
}
|
395
|
+
|
396
|
+
data.self = self;
|
397
|
+
data.record = Qnil;
|
398
|
+
data.status = 0;
|
399
|
+
grn_array_pull(context, (grn_array *)table, RVAL2CBOOL(rb_block_p),
|
400
|
+
yield_record_callback, &data);
|
401
|
+
if (data.status != 0) {
|
402
|
+
rb_jump_tag(data.status);
|
403
|
+
}
|
404
|
+
rb_grn_context_check(context, self);
|
405
|
+
|
406
|
+
return data.record;
|
407
|
+
}
|
408
|
+
|
195
409
|
void
|
196
410
|
rb_grn_init_array (VALUE mGrn)
|
197
411
|
{
|
@@ -201,4 +415,6 @@ rb_grn_init_array (VALUE mGrn)
|
|
201
415
|
rb_grn_array_s_create, -1);
|
202
416
|
|
203
417
|
rb_define_method(rb_cGrnArray, "add", rb_grn_array_add, -1);
|
418
|
+
rb_define_method(rb_cGrnArray, "push", rb_grn_array_push, 0);
|
419
|
+
rb_define_method(rb_cGrnArray, "pull", rb_grn_array_pull, -1);
|
204
420
|
}
|
data/ext/groonga/rb-grn-column.c
CHANGED
data/ext/groonga/rb-grn-hash.c
CHANGED
data/ext/groonga/rb-grn-logger.c
CHANGED
data/ext/groonga/rb-grn-object.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* -*- coding: utf-8; c-
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
|
@@ -75,6 +75,12 @@ rb_grn_object_from_ruby_object (VALUE object, grn_ctx **context)
|
|
75
75
|
if (!rb_grn_object)
|
76
76
|
rb_raise(rb_eGrnError, "groonga object is NULL");
|
77
77
|
|
78
|
+
if (!rb_grn_object->object) {
|
79
|
+
rb_raise(rb_eGrnClosed,
|
80
|
+
"can't access already closed groonga object: %s",
|
81
|
+
rb_grn_inspect(CLASS_OF(rb_grn_object->self)));
|
82
|
+
}
|
83
|
+
|
78
84
|
if (context && !*context)
|
79
85
|
*context = rb_grn_object->context;
|
80
86
|
|
@@ -520,12 +526,6 @@ rb_grn_object_deconstruct (RbGrnObject *rb_grn_object,
|
|
520
526
|
if (!rb_grn_object)
|
521
527
|
return;
|
522
528
|
|
523
|
-
if (!rb_grn_object->object) {
|
524
|
-
rb_raise(rb_eGrnClosed,
|
525
|
-
"can't access already closed groonga object: %s",
|
526
|
-
rb_grn_inspect(CLASS_OF(rb_grn_object->self)));
|
527
|
-
}
|
528
|
-
|
529
529
|
if (object)
|
530
530
|
*object = rb_grn_object->object;
|
531
531
|
if (context)
|
data/ext/groonga/rb-grn-plugin.c
CHANGED
data/ext/groonga/rb-grn-record.c
CHANGED
data/ext/groonga/rb-grn-table.c
CHANGED
data/ext/groonga/rb-grn-type.c
CHANGED
data/ext/groonga/rb-grn-utils.c
CHANGED
data/ext/groonga/rb-grn.h
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* -*- c-
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
|
@@ -74,9 +74,9 @@ RB_GRN_BEGIN_DECLS
|
|
74
74
|
# define debug(...)
|
75
75
|
#endif
|
76
76
|
|
77
|
-
#define RB_GRN_MAJOR_VERSION
|
78
|
-
#define RB_GRN_MINOR_VERSION
|
79
|
-
#define RB_GRN_MICRO_VERSION
|
77
|
+
#define RB_GRN_MAJOR_VERSION 3
|
78
|
+
#define RB_GRN_MINOR_VERSION 0
|
79
|
+
#define RB_GRN_MICRO_VERSION 0
|
80
80
|
|
81
81
|
#define RB_GRN_QUERY_DEFAULT_MAX_EXPRESSIONS 32
|
82
82
|
|
data/ext/groonga/rb-groonga.c
CHANGED