rroonga 2.1.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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