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/lib/groonga/context.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-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
|
@@ -28,22 +28,81 @@ module Groonga
|
|
28
28
|
Database.open(path, options, &block)
|
29
29
|
end
|
30
30
|
|
31
|
-
#
|
32
|
-
#
|
31
|
+
# This is convenience method. It wraps {Groonga::Database.create}
|
32
|
+
# for the context.
|
33
33
|
#
|
34
|
-
# @
|
35
|
-
#
|
36
|
-
# context.create_database
|
34
|
+
# @overload create_database
|
35
|
+
# Creates a new temproary database for the context.
|
37
36
|
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
|
37
|
+
# @return [Groonga::Database] A new temporary database.
|
38
|
+
#
|
39
|
+
# @example Creating a new temporary database
|
40
|
+
# temporary_database = context.create_database
|
41
|
+
#
|
42
|
+
# @overload create_database(&block)
|
43
|
+
# Creates a new temproary database for the context. The database
|
44
|
+
# is closed after the passed block is finished.
|
45
|
+
#
|
46
|
+
# @yield [database] Yields a newly created temporary database
|
47
|
+
# for the context. The database is available only in the
|
48
|
+
# block.
|
49
|
+
#
|
50
|
+
# @yieldparam [Groonga::Database] database A newly created
|
51
|
+
# temporary database for the context.
|
52
|
+
#
|
53
|
+
# @yieldreturn [Object] The returned value from the block is the
|
54
|
+
# returned value from this method.
|
55
|
+
#
|
56
|
+
# @return Returned value from the block.
|
57
|
+
#
|
58
|
+
# @example Creating a new temporary database with block
|
59
|
+
# context.create_database do |temporary_database|
|
60
|
+
# # ...
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# @overload create_database(path)
|
64
|
+
# Creates a new persistent database for the context to the _path_.
|
65
|
+
#
|
66
|
+
# @param [String] path Database path for a new persistent
|
67
|
+
# database.
|
68
|
+
#
|
69
|
+
# @return [Groonga::Database] A new persistent database for the
|
70
|
+
# context.
|
71
|
+
#
|
72
|
+
# @example Creating a new persistent database to _"/tmp/db.groonga"_
|
73
|
+
# database = context.create_database("/tmp/db.groonga")
|
74
|
+
#
|
75
|
+
# @overload create_database(path, &block)
|
76
|
+
# Creates a new persistent database for the context to the
|
77
|
+
# _path_. The database is closed after the passed block is
|
78
|
+
# finished.
|
79
|
+
#
|
80
|
+
# @param [String] path Database path for a new persistent
|
81
|
+
# database.
|
82
|
+
#
|
83
|
+
# @yield [database] Yields a newly created persistent database
|
84
|
+
# for the context. The database is available only in the
|
85
|
+
# block.
|
86
|
+
#
|
87
|
+
# @yieldparam [Groonga::Database] database A newly created
|
88
|
+
# persistent database for the context.
|
89
|
+
#
|
90
|
+
# @yieldreturn [Object] The returned value from the block is the
|
91
|
+
# returned value from this method.
|
92
|
+
#
|
93
|
+
# @return Returned value from the block.
|
94
|
+
#
|
95
|
+
# @example Creating a new persistent database to _"/tmp/db.groonga"_ database with block
|
96
|
+
# context.create_database("/tmp/db.groonga") do |persistent_database|
|
97
|
+
# # ...
|
98
|
+
# end
|
99
|
+
def create_database(path=nil, &block)
|
41
100
|
options = {:context => self}
|
42
101
|
if path
|
43
102
|
options[:path] = path
|
44
103
|
end
|
45
104
|
|
46
|
-
Database.create(options)
|
105
|
+
Database.create(options, &block)
|
47
106
|
end
|
48
107
|
|
49
108
|
# groongaのプラグインディレクトリにあるプラグイン _name_
|
@@ -78,28 +137,49 @@ module Groonga
|
|
78
137
|
|
79
138
|
# Restore commands dumped by "grndump" command.
|
80
139
|
#
|
81
|
-
# @example
|
140
|
+
# @example Restore dumped commands.
|
82
141
|
# dumped_commands = File.read("dump.grn")
|
83
142
|
# context.restore(dumped_commands)
|
84
143
|
#
|
144
|
+
# If block is given, response is yielded.
|
145
|
+
#
|
146
|
+
# @example Restore dumped commands and reports result.
|
147
|
+
# dumped_commands = File.read("dump.grn")
|
148
|
+
# context.restore(dumped_commands) do |command, response|
|
149
|
+
# puts("#{command} -> #{response}")
|
150
|
+
# end
|
151
|
+
#
|
85
152
|
# @param [String] dumped_commands commands dumped by grndump.
|
153
|
+
# @yield [command, response]
|
154
|
+
# Yields a sent command and its response if block is given.
|
155
|
+
# @yieldparam command [String] A sent command.
|
156
|
+
# @yieldparam response [String] A response for a command.
|
157
|
+
# @return [void]
|
86
158
|
def restore(dumped_commands)
|
87
159
|
buffer = ""
|
160
|
+
continued = false
|
88
161
|
dumped_commands.each_line do |line|
|
89
162
|
line = line.chomp
|
90
163
|
case line
|
91
164
|
when /\\\z/
|
165
|
+
continued = true
|
92
166
|
buffer << $PREMATCH
|
93
167
|
else
|
168
|
+
continued = false
|
94
169
|
buffer << line
|
95
170
|
send(buffer)
|
96
|
-
receive
|
171
|
+
_, response = receive
|
172
|
+
if block_given?
|
173
|
+
not_shared_command = continued ? buffer.dup : line
|
174
|
+
yield(not_shared_command, response)
|
175
|
+
end
|
97
176
|
buffer.clear
|
98
177
|
end
|
99
178
|
end
|
100
179
|
unless buffer.empty?
|
101
180
|
send(buffer)
|
102
|
-
receive
|
181
|
+
_, response = receive
|
182
|
+
yield(buffer.dup, response) if block_given?
|
103
183
|
end
|
104
184
|
end
|
105
185
|
end
|
data/rroonga-build.rb
CHANGED
data/test/groonga-test-utils.rb
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
require 'fileutils'
|
17
17
|
require 'pathname'
|
18
|
+
require 'tempfile'
|
18
19
|
require 'time'
|
19
20
|
require 'erb'
|
20
21
|
require 'stringio'
|
@@ -46,7 +47,7 @@ module GroongaTestUtils
|
|
46
47
|
|
47
48
|
def setup_tmp_directory
|
48
49
|
@base_tmp_dir = Pathname(File.dirname(__FILE__)) + "tmp"
|
49
|
-
memory_file_system = "/
|
50
|
+
memory_file_system = "/run/shm"
|
50
51
|
if File.exist?(memory_file_system)
|
51
52
|
FileUtils.mkdir_p(@base_tmp_dir.parent.to_s)
|
52
53
|
FileUtils.rm_f(@base_tmp_dir.to_s)
|
data/test/test-array.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2013 Kouhei Sutou <kou@clear-code.com>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -16,7 +16,7 @@
|
|
16
16
|
class ArrayTest < Test::Unit::TestCase
|
17
17
|
include GroongaTestUtils
|
18
18
|
|
19
|
-
setup :setup_database
|
19
|
+
setup :setup_database, :before => :append
|
20
20
|
|
21
21
|
def test_support_key?
|
22
22
|
assert_not_predicate(Groonga::Array.create(:name => "Users"), :support_key?)
|
@@ -143,4 +143,88 @@ class ArrayTest < Test::Unit::TestCase
|
|
143
143
|
user_ids = users.each.collect(&:id)
|
144
144
|
assert_equal([1, 2, 3], user_ids)
|
145
145
|
end
|
146
|
+
|
147
|
+
class TestPushPull < self
|
148
|
+
def setup
|
149
|
+
@queue = Groonga::Array.create(:name => "Queue")
|
150
|
+
@queue.define_column("content", "ShortText")
|
151
|
+
end
|
152
|
+
|
153
|
+
def teardown
|
154
|
+
@queue = nil
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_block?
|
158
|
+
Tempfile.open("output") do |output|
|
159
|
+
Tempfile.open("blocked_pull.rb") do |pull_rb|
|
160
|
+
pull_rb.puts(pull_rb_source(":block? => true"))
|
161
|
+
pull_rb.close
|
162
|
+
|
163
|
+
pid = spawn({}, RbConfig.ruby, pull_rb.path, :out => output.path)
|
164
|
+
sleep(0.5)
|
165
|
+
@queue.push do |record|
|
166
|
+
record.content = "The first record"
|
167
|
+
end
|
168
|
+
Process.waitpid(pid)
|
169
|
+
assert_equal(<<-EXPECTED_OUTPUT, output.read)
|
170
|
+
start
|
171
|
+
1, The first record
|
172
|
+
done
|
173
|
+
EXPECTED_OUTPUT
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_not_block?
|
179
|
+
Tempfile.open("output") do |output|
|
180
|
+
Tempfile.open("not_blocked_pull.rb") do |pull_rb|
|
181
|
+
pull_rb.puts(pull_rb_source(":block? => false"))
|
182
|
+
pull_rb.close
|
183
|
+
|
184
|
+
pid = spawn({}, RbConfig.ruby, pull_rb.path, :out => output.path)
|
185
|
+
Process.waitpid(pid)
|
186
|
+
assert_equal(<<-EXPECTED_OUTPUT, output.read)
|
187
|
+
start
|
188
|
+
done
|
189
|
+
EXPECTED_OUTPUT
|
190
|
+
|
191
|
+
@queue.push do |record|
|
192
|
+
record.content = "The first record"
|
193
|
+
end
|
194
|
+
pid = spawn({}, RbConfig.ruby, pull_rb.path, :out => output.path)
|
195
|
+
Process.waitpid(pid)
|
196
|
+
output.rewind
|
197
|
+
assert_equal(<<-EXPECTED_OUTPUT, output.read)
|
198
|
+
start
|
199
|
+
1, The first record
|
200
|
+
done
|
201
|
+
EXPECTED_OUTPUT
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
def pull_rb_source(options)
|
208
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
209
|
+
<<-CODE
|
210
|
+
base_dir = #{base_dir.dump}
|
211
|
+
ext_dir = File.join(base_dir, "ext", "groonga")
|
212
|
+
lib_dir = File.join(base_dir, "lib")
|
213
|
+
|
214
|
+
$LOAD_PATH.unshift(ext_dir)
|
215
|
+
$LOAD_PATH.unshift(lib_dir)
|
216
|
+
|
217
|
+
require "groonga"
|
218
|
+
|
219
|
+
puts("start")
|
220
|
+
Groonga::Context.default.open_database(#{@database_path.to_s.dump}) do
|
221
|
+
queue = Groonga["Queue"]
|
222
|
+
queue.pull(#{options}) do |record|
|
223
|
+
puts([record.id, record.content].join(", "))
|
224
|
+
end
|
225
|
+
end
|
226
|
+
puts("done")
|
227
|
+
CODE
|
228
|
+
end
|
229
|
+
end
|
146
230
|
end
|
data/test/test-context.rb
CHANGED
@@ -178,12 +178,32 @@ column_create Items title COLUMN_SCALAR Text
|
|
178
178
|
EOC
|
179
179
|
end
|
180
180
|
|
181
|
+
def test_block
|
182
|
+
table_create = "table_create Items TABLE_HASH_KEY --key_type ShortText"
|
183
|
+
column_create = "column_create Items title COLUMN_SCALAR Text"
|
184
|
+
commands = <<-COMMANDS
|
185
|
+
#{table_create}
|
186
|
+
|
187
|
+
#{column_create}
|
188
|
+
COMMANDS
|
189
|
+
responses = []
|
190
|
+
restore(commands) do |command, response|
|
191
|
+
responses << [command.dup, response]
|
192
|
+
end
|
193
|
+
assert_equal([
|
194
|
+
[table_create, "true"],
|
195
|
+
["", ""],
|
196
|
+
[column_create,"true"]
|
197
|
+
],
|
198
|
+
responses)
|
199
|
+
end
|
200
|
+
|
181
201
|
private
|
182
|
-
def restore(commands)
|
202
|
+
def restore(commands, &block)
|
183
203
|
restored_db_path = @tmp_dir + "restored.db"
|
184
204
|
Groonga::Database.create(:path => restored_db_path.to_s)
|
185
205
|
|
186
|
-
context.restore(commands)
|
206
|
+
context.restore(commands, &block)
|
187
207
|
end
|
188
208
|
|
189
209
|
def dump
|