groonga 0.9.1 → 1.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.
- metadata +38 -227
- data/AUTHORS +0 -5
- data/NEWS.ja.rdoc +0 -114
- data/NEWS.rdoc +0 -116
- data/README.ja.rdoc +0 -63
- data/README.rdoc +0 -64
- data/Rakefile +0 -216
- data/benchmark/common.rb +0 -49
- data/benchmark/read-write-many-small-items.rb +0 -144
- data/benchmark/write-many-small-items.rb +0 -135
- data/example/bookmark.rb +0 -161
- data/example/index-html.rb +0 -89
- data/example/search/config.ru +0 -211
- data/example/search/public/css/groonga.css +0 -122
- data/ext/.gitignore +0 -2
- data/ext/rb-grn-accessor.c +0 -52
- data/ext/rb-grn-array-cursor.c +0 -36
- data/ext/rb-grn-array.c +0 -210
- data/ext/rb-grn-column.c +0 -570
- data/ext/rb-grn-context.c +0 -655
- data/ext/rb-grn-database.c +0 -415
- data/ext/rb-grn-encoding-support.c +0 -64
- data/ext/rb-grn-encoding.c +0 -257
- data/ext/rb-grn-exception.c +0 -1110
- data/ext/rb-grn-expression-builder.c +0 -75
- data/ext/rb-grn-expression.c +0 -732
- data/ext/rb-grn-fix-size-column.c +0 -166
- data/ext/rb-grn-hash-cursor.c +0 -38
- data/ext/rb-grn-hash.c +0 -294
- data/ext/rb-grn-index-column.c +0 -488
- data/ext/rb-grn-logger.c +0 -325
- data/ext/rb-grn-object.c +0 -1335
- data/ext/rb-grn-operation.c +0 -198
- data/ext/rb-grn-patricia-trie-cursor.c +0 -39
- data/ext/rb-grn-patricia-trie.c +0 -488
- data/ext/rb-grn-procedure.c +0 -52
- data/ext/rb-grn-query.c +0 -260
- data/ext/rb-grn-record.c +0 -40
- data/ext/rb-grn-snippet.c +0 -328
- data/ext/rb-grn-table-cursor-key-support.c +0 -69
- data/ext/rb-grn-table-cursor.c +0 -246
- data/ext/rb-grn-table-key-support.c +0 -731
- data/ext/rb-grn-table.c +0 -2038
- data/ext/rb-grn-type.c +0 -181
- data/ext/rb-grn-utils.c +0 -769
- data/ext/rb-grn-variable-size-column.c +0 -36
- data/ext/rb-grn-variable.c +0 -108
- data/ext/rb-grn.h +0 -684
- data/ext/rb-groonga.c +0 -113
- data/extconf.rb +0 -216
- data/html/bar.svg +0 -153
- data/html/developer.html +0 -121
- data/html/developer.svg +0 -469
- data/html/download.svg +0 -253
- data/html/favicon.ico +0 -0
- data/html/favicon.xcf +0 -0
- data/html/footer.html.erb +0 -28
- data/html/head.html.erb +0 -4
- data/html/header.html.erb +0 -17
- data/html/index.html +0 -147
- data/html/install.svg +0 -636
- data/html/logo.xcf +0 -0
- data/html/ranguba.css +0 -248
- data/html/tutorial.svg +0 -559
- data/lib/groonga.rb +0 -83
- data/lib/groonga/expression-builder.rb +0 -285
- data/lib/groonga/patricia-trie.rb +0 -53
- data/lib/groonga/record.rb +0 -276
- data/lib/groonga/schema.rb +0 -916
- data/license/GPL +0 -340
- data/license/LGPL +0 -504
- data/license/RUBY +0 -59
- data/misc/grnop2ruby.rb +0 -49
- data/pkg-config.rb +0 -333
- data/src/rb-grn-table-cursor.c +0 -296
- data/test-unit/Rakefile +0 -40
- data/test-unit/TODO +0 -5
- data/test-unit/bin/testrb +0 -5
- data/test-unit/html/classic.html +0 -15
- data/test-unit/html/index.html +0 -25
- data/test-unit/html/index.html.ja +0 -27
- data/test-unit/lib/test/unit.rb +0 -323
- data/test-unit/lib/test/unit/assertionfailederror.rb +0 -25
- data/test-unit/lib/test/unit/assertions.rb +0 -1230
- data/test-unit/lib/test/unit/attribute.rb +0 -125
- data/test-unit/lib/test/unit/autorunner.rb +0 -353
- data/test-unit/lib/test/unit/collector.rb +0 -36
- data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
- data/test-unit/lib/test/unit/collector/dir.rb +0 -108
- data/test-unit/lib/test/unit/collector/load.rb +0 -136
- data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
- data/test-unit/lib/test/unit/color-scheme.rb +0 -102
- data/test-unit/lib/test/unit/color.rb +0 -96
- data/test-unit/lib/test/unit/diff.rb +0 -724
- data/test-unit/lib/test/unit/error.rb +0 -130
- data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
- data/test-unit/lib/test/unit/failure.rb +0 -136
- data/test-unit/lib/test/unit/fixture.rb +0 -176
- data/test-unit/lib/test/unit/notification.rb +0 -129
- data/test-unit/lib/test/unit/omission.rb +0 -191
- data/test-unit/lib/test/unit/pending.rb +0 -150
- data/test-unit/lib/test/unit/priority.rb +0 -181
- data/test-unit/lib/test/unit/runner/console.rb +0 -52
- data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
- data/test-unit/lib/test/unit/runner/tap.rb +0 -8
- data/test-unit/lib/test/unit/testcase.rb +0 -476
- data/test-unit/lib/test/unit/testresult.rb +0 -89
- data/test-unit/lib/test/unit/testsuite.rb +0 -110
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -464
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -63
- data/test-unit/lib/test/unit/ui/tap/testrunner.rb +0 -92
- data/test-unit/lib/test/unit/ui/testrunner.rb +0 -28
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
- data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -41
- data/test-unit/lib/test/unit/util/method-owner-finder.rb +0 -28
- data/test-unit/lib/test/unit/util/observable.rb +0 -90
- data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
- data/test-unit/lib/test/unit/version.rb +0 -7
- data/test-unit/sample/adder.rb +0 -13
- data/test-unit/sample/subtracter.rb +0 -12
- data/test-unit/sample/test_adder.rb +0 -20
- data/test-unit/sample/test_subtracter.rb +0 -20
- data/test-unit/sample/test_user.rb +0 -23
- data/test-unit/test/collector/test-descendant.rb +0 -133
- data/test-unit/test/collector/test-load.rb +0 -329
- data/test-unit/test/collector/test_dir.rb +0 -406
- data/test-unit/test/collector/test_objectspace.rb +0 -100
- data/test-unit/test/run-test.rb +0 -15
- data/test-unit/test/test-attribute.rb +0 -86
- data/test-unit/test/test-color-scheme.rb +0 -67
- data/test-unit/test/test-color.rb +0 -47
- data/test-unit/test/test-diff.rb +0 -518
- data/test-unit/test/test-emacs-runner.rb +0 -60
- data/test-unit/test/test-fixture.rb +0 -287
- data/test-unit/test/test-notification.rb +0 -33
- data/test-unit/test/test-omission.rb +0 -81
- data/test-unit/test/test-pending.rb +0 -70
- data/test-unit/test/test-priority.rb +0 -119
- data/test-unit/test/test-testcase.rb +0 -554
- data/test-unit/test/test_assertions.rb +0 -1151
- data/test-unit/test/test_error.rb +0 -26
- data/test-unit/test/test_failure.rb +0 -33
- data/test-unit/test/test_testresult.rb +0 -113
- data/test-unit/test/test_testsuite.rb +0 -129
- data/test-unit/test/testunit-test-util.rb +0 -14
- data/test-unit/test/ui/test_testrunmediator.rb +0 -20
- data/test-unit/test/util/test-method-owner-finder.rb +0 -38
- data/test-unit/test/util/test_backtracefilter.rb +0 -41
- data/test-unit/test/util/test_observable.rb +0 -102
- data/test-unit/test/util/test_procwrapper.rb +0 -36
- data/test/.gitignore +0 -1
- data/test/groonga-test-utils.rb +0 -106
- data/test/run-test.rb +0 -58
- data/test/test-array.rb +0 -97
- data/test/test-column.rb +0 -298
- data/test/test-context.rb +0 -73
- data/test/test-database.rb +0 -113
- data/test/test-encoding.rb +0 -33
- data/test/test-exception.rb +0 -93
- data/test/test-expression-builder.rb +0 -156
- data/test/test-expression.rb +0 -133
- data/test/test-fix-size-column.rb +0 -65
- data/test/test-gqtp.rb +0 -70
- data/test/test-hash.rb +0 -312
- data/test/test-index-column.rb +0 -81
- data/test/test-patricia-trie.rb +0 -189
- data/test/test-procedure.rb +0 -37
- data/test/test-query.rb +0 -22
- data/test/test-record.rb +0 -268
- data/test/test-remote.rb +0 -53
- data/test/test-schema.rb +0 -416
- data/test/test-snippet.rb +0 -121
- data/test/test-table-cursor.rb +0 -153
- data/test/test-table-offset-and-limit.rb +0 -102
- data/test/test-table-select-normalize.rb +0 -48
- data/test/test-table-select.rb +0 -145
- data/test/test-table.rb +0 -642
- data/test/test-type.rb +0 -61
- data/test/test-variable-size-column.rb +0 -98
- data/test/test-variable.rb +0 -28
- data/test/test-vector-column.rb +0 -76
- data/test/test-version.rb +0 -31
- data/text/TUTORIAL.ja.rdoc +0 -392
- data/text/expression.rdoc +0 -284
data/lib/groonga.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright (C) 2009 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
|
-
require 'pathname'
|
19
|
-
|
20
|
-
base_dir = Pathname.new(__FILE__).dirname.dirname
|
21
|
-
local_groonga_library_dir = base_dir + "vendor" + "local" + "lib"
|
22
|
-
if local_groonga_library_dir.exist?
|
23
|
-
prepend_path = Proc.new do |environment_name, separator|
|
24
|
-
paths = (ENV[environment_name] || '').split(/#{separator}/)
|
25
|
-
unless paths.include?(local_groonga_library_dir.to_s)
|
26
|
-
paths = [local_groonga_library_dir.to_s] + paths
|
27
|
-
ENV[environment_name] = paths.join(separator)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
case RUBY_PLATFORM
|
32
|
-
when /mingw|mswin/
|
33
|
-
prepend_path.call("PATH", ";")
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
require 'groonga/record'
|
38
|
-
require 'groonga/expression-builder'
|
39
|
-
require 'groonga.so'
|
40
|
-
|
41
|
-
##
|
42
|
-
# Ruby/groonga用のネームスペース。Ruby/groongaのクラスやメソッ
|
43
|
-
# ドなどはこのモジュール以下に定義される。
|
44
|
-
module Groonga
|
45
|
-
class << self
|
46
|
-
##
|
47
|
-
# BUILD_VERSIONを"."で結合して<tt>"メジャーバージョン.マ
|
48
|
-
# イナーバージョン.マイクロバージョン"</tt>という形式の
|
49
|
-
# 文字列にしたもの。
|
50
|
-
def build_version
|
51
|
-
BUILD_VERSION.join(".")
|
52
|
-
end
|
53
|
-
|
54
|
-
##
|
55
|
-
# VERSIONを"."で結合して<tt>"メジャーバージョン.マイナー
|
56
|
-
# バージョン.マイクロバージョン"</tt>という形式の文字列に
|
57
|
-
# したもの。
|
58
|
-
def version
|
59
|
-
VERSION.join(".")
|
60
|
-
end
|
61
|
-
|
62
|
-
##
|
63
|
-
# BINDINGS_VERSIONを"."で結合して<tt>"メジャーバージョン.マ
|
64
|
-
# イナーバージョン.マイクロバージョン"</tt>という形式の文
|
65
|
-
# 字列にしたもの。
|
66
|
-
def bindings_version
|
67
|
-
BINDINGS_VERSION.join(".")
|
68
|
-
end
|
69
|
-
|
70
|
-
##
|
71
|
-
# call-seq:
|
72
|
-
# Groonga[name] -> Groonga::Object or nil
|
73
|
-
# Groonga[id] -> Groonga::Object or nil
|
74
|
-
#
|
75
|
-
# 便利メソッド。Groonga::Context.default[name]と同じ。
|
76
|
-
def [](name)
|
77
|
-
Context.default[name]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
require 'groonga/patricia-trie'
|
83
|
-
require 'groonga/schema'
|
@@ -1,285 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright (C) 2009 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
|
-
module ExpressionBuildable # :nodoc:
|
20
|
-
attr_reader :table
|
21
|
-
attr_accessor :query
|
22
|
-
attr_accessor :syntax
|
23
|
-
attr_accessor :allow_pragma
|
24
|
-
attr_accessor :allow_column
|
25
|
-
attr_accessor :allow_update
|
26
|
-
attr_accessor :default_column
|
27
|
-
|
28
|
-
def initialize(*args)
|
29
|
-
@table = nil
|
30
|
-
@name = nil
|
31
|
-
@query = nil
|
32
|
-
@syntax = nil
|
33
|
-
@allow_pragma = nil
|
34
|
-
@allow_column = nil
|
35
|
-
@allow_update = nil
|
36
|
-
@default_column = nil
|
37
|
-
end
|
38
|
-
|
39
|
-
def build
|
40
|
-
expression = Expression.new(:name => @name)
|
41
|
-
variable = expression.define_variable(:domain => @table)
|
42
|
-
|
43
|
-
builder = nil
|
44
|
-
builder = match(@query, default_parse_options) if @query
|
45
|
-
if block_given?
|
46
|
-
if builder
|
47
|
-
builder &= yield(self)
|
48
|
-
else
|
49
|
-
builder = yield(self)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
if builder.nil? or builder == self
|
53
|
-
expression.append_constant(1)
|
54
|
-
expression.append_constant(1)
|
55
|
-
expression.append_operation(Groonga::Operation::OR, 2)
|
56
|
-
else
|
57
|
-
builder.build(expression, variable)
|
58
|
-
end
|
59
|
-
|
60
|
-
expression.compile
|
61
|
-
expression
|
62
|
-
end
|
63
|
-
|
64
|
-
def &(other)
|
65
|
-
other
|
66
|
-
end
|
67
|
-
|
68
|
-
def |(other)
|
69
|
-
other
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
def default_parse_options
|
74
|
-
{
|
75
|
-
:syntax => @syntax,
|
76
|
-
:allow_pragma => @allow_pragma,
|
77
|
-
:allow_column => @allow_column,
|
78
|
-
:allow_update => @allow_update,
|
79
|
-
:default_column => @default_column,
|
80
|
-
}
|
81
|
-
end
|
82
|
-
|
83
|
-
class ExpressionBuilder # :nodoc:
|
84
|
-
def initialize
|
85
|
-
super()
|
86
|
-
end
|
87
|
-
|
88
|
-
def &(other)
|
89
|
-
AndExpressionBuilder.new(self, other)
|
90
|
-
end
|
91
|
-
|
92
|
-
def |(other)
|
93
|
-
OrExpressionBuilder.new(self, other)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
class SetExpressionBuilder < ExpressionBuilder # :nodoc:
|
98
|
-
def initialize(operation, *expression_builders)
|
99
|
-
super()
|
100
|
-
@operation = operation
|
101
|
-
@expression_builders = expression_builders
|
102
|
-
end
|
103
|
-
|
104
|
-
def build(expression, variable)
|
105
|
-
return if @expression_builders.empty?
|
106
|
-
@expression_builders.each do |builder|
|
107
|
-
builder.build(expression, variable)
|
108
|
-
end
|
109
|
-
expression.append_operation(@operation, @expression_builders.size)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class AndExpressionBuilder < SetExpressionBuilder # :nodoc:
|
114
|
-
def initialize(*expression_builders)
|
115
|
-
super(Groonga::Operation::AND, *expression_builders)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
class OrExpressionBuilder < SetExpressionBuilder # :nodoc:
|
120
|
-
def initialize(*expression_builders)
|
121
|
-
super(Groonga::Operation::OR, *expression_builders)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
class BinaryExpressionBuilder < ExpressionBuilder # :nodoc:
|
126
|
-
def initialize(operation, column, value)
|
127
|
-
super()
|
128
|
-
@operation = operation
|
129
|
-
@default_column = column
|
130
|
-
@value = value
|
131
|
-
end
|
132
|
-
|
133
|
-
def build(expression, variable)
|
134
|
-
expression.append_object(variable)
|
135
|
-
if @default_column.is_a?(String)
|
136
|
-
expression.append_constant(@default_column)
|
137
|
-
else
|
138
|
-
expression.append_object(@default_column)
|
139
|
-
end
|
140
|
-
expression.append_operation(Groonga::Operation::GET_VALUE, 2)
|
141
|
-
expression.append_constant(@value)
|
142
|
-
expression.append_operation(@operation, 2)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
class EqualExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
147
|
-
def initialize(column, value)
|
148
|
-
super(Groonga::Operation::EQUAL, column, value)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
class MatchExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
153
|
-
def initialize(column, value)
|
154
|
-
super(Groonga::Operation::MATCH, column, value)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
class LessExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
159
|
-
def initialize(column, value)
|
160
|
-
super(Groonga::Operation::LESS, column, value)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
class LessEqualExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
165
|
-
def initialize(column, value)
|
166
|
-
super(Groonga::Operation::LESS_EQUAL, column, value)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
class GreaterExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
171
|
-
def initialize(column, value)
|
172
|
-
super(Groonga::Operation::GREATER, column, value)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
class GreaterEqualExpressionBuilder < BinaryExpressionBuilder # :nodoc:
|
177
|
-
def initialize(column, value)
|
178
|
-
super(Groonga::Operation::GREATER_EQUAL, column, value)
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
class SubExpressionBuilder < ExpressionBuilder # :nodoc:
|
183
|
-
def initialize(query, options)
|
184
|
-
super()
|
185
|
-
@query = query
|
186
|
-
@options = options
|
187
|
-
end
|
188
|
-
|
189
|
-
def build(expression, variable)
|
190
|
-
expression.parse(@query, @options)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
class RecordExpressionBuilder # :nodoc:
|
196
|
-
include ExpressionBuildable
|
197
|
-
|
198
|
-
def initialize(table, name)
|
199
|
-
super()
|
200
|
-
@table = table
|
201
|
-
@name = name
|
202
|
-
end
|
203
|
-
|
204
|
-
def [](name)
|
205
|
-
column = @table.column(name)
|
206
|
-
if column.nil?
|
207
|
-
message = "unknown column <#{name.inspect}> " +
|
208
|
-
"for table <#{@table.inspect}>"
|
209
|
-
raise ArgumentError, message
|
210
|
-
end
|
211
|
-
ColumnExpressionBuilder.new(column, nil, nil,
|
212
|
-
:table => @table,
|
213
|
-
:column_name => name)
|
214
|
-
end
|
215
|
-
|
216
|
-
def match(query, options_or_default_column={})
|
217
|
-
if options_or_default_column.is_a?(String)
|
218
|
-
options = {:default_column => options_or_default_column}
|
219
|
-
else
|
220
|
-
options = options_or_default_column
|
221
|
-
end
|
222
|
-
options = options.dup
|
223
|
-
options[:syntax] ||= :query
|
224
|
-
SubExpressionBuilder.new(query, options)
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
class ColumnExpressionBuilder # :nodoc:
|
229
|
-
include ExpressionBuildable
|
230
|
-
|
231
|
-
def initialize(column, name, query, options={})
|
232
|
-
super()
|
233
|
-
@table = options[:table] || column.table
|
234
|
-
@default_column = column
|
235
|
-
@column_name = options[:column_name] || @default_column.local_name
|
236
|
-
@range = @default_column.range
|
237
|
-
@name = name
|
238
|
-
@query = query
|
239
|
-
end
|
240
|
-
|
241
|
-
def ==(other)
|
242
|
-
EqualExpressionBuilder.new(@default_column, normalize(other))
|
243
|
-
end
|
244
|
-
|
245
|
-
def =~(other)
|
246
|
-
if other.nil?
|
247
|
-
full_column_name = "#{@table.name}.#{@column_name}"
|
248
|
-
raise ArgumentError, "match word should not be nil: #{full_column_name}"
|
249
|
-
end
|
250
|
-
MatchExpressionBuilder.new(@default_column, normalize(other))
|
251
|
-
end
|
252
|
-
|
253
|
-
def <(other)
|
254
|
-
LessExpressionBuilder.new(@default_column, normalize(other))
|
255
|
-
end
|
256
|
-
|
257
|
-
def <=(other)
|
258
|
-
LessEqualExpressionBuilder.new(@default_column, normalize(other))
|
259
|
-
end
|
260
|
-
|
261
|
-
def >(other)
|
262
|
-
GreaterExpressionBuilder.new(@default_column, normalize(other))
|
263
|
-
end
|
264
|
-
|
265
|
-
def >=(other)
|
266
|
-
GreaterEqualExpressionBuilder.new(@default_column, normalize(other))
|
267
|
-
end
|
268
|
-
|
269
|
-
def match(query, options={})
|
270
|
-
options = options.dup
|
271
|
-
options[:syntax] ||= :query
|
272
|
-
options[:default_column] = @column_name
|
273
|
-
SubExpressionBuilder.new(query, options)
|
274
|
-
end
|
275
|
-
|
276
|
-
private
|
277
|
-
def normalize(other)
|
278
|
-
if @range.is_a?(Groonga::Table) and other.is_a?(Integer)
|
279
|
-
Groonga::Record.new(@range, other)
|
280
|
-
else
|
281
|
-
other
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright (C) 2009 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 PatriciaTrie
|
20
|
-
# call-seq:
|
21
|
-
# patricia_trie.tag_keys(text) {|record, word| ...} -> String
|
22
|
-
#
|
23
|
-
# _text_を走査し、レコードのキーとマッチする部分文字列ごとに
|
24
|
-
# そのレコードが_record_として、その部分文字列が_word_として、
|
25
|
-
# ブロックが呼び出される。ブロックから返された文字列が元の部
|
26
|
-
# 分文字列と置換される。全てのヒットに対してのその置換処理が
|
27
|
-
# 行われた文字列が返される。
|
28
|
-
def tag_keys(text)
|
29
|
-
position = 0
|
30
|
-
result = ''
|
31
|
-
if text.respond_to?(:encoding)
|
32
|
-
encoding = text.encoding
|
33
|
-
bytes = text.dup.force_encoding("ascii-8bit")
|
34
|
-
else
|
35
|
-
encoding = nil
|
36
|
-
bytes = text
|
37
|
-
end
|
38
|
-
scan(text) do |record, word, start, length|
|
39
|
-
previous_text = bytes[position...start]
|
40
|
-
previous_text.force_encoding(encoding) if encoding
|
41
|
-
result << previous_text
|
42
|
-
result << yield(record, word)
|
43
|
-
position = start + length
|
44
|
-
end
|
45
|
-
last_text = bytes[position..-1]
|
46
|
-
unless last_text.empty?
|
47
|
-
last_text.force_encoding(encoding) if encoding
|
48
|
-
result << last_text
|
49
|
-
end
|
50
|
-
result
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/groonga/record.rb
DELETED
@@ -1,276 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright (C) 2009-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 Record
|
20
|
-
# レコードが所属するテーブル
|
21
|
-
attr_reader :table
|
22
|
-
# レコードのID
|
23
|
-
attr_reader :id
|
24
|
-
# _table_の_id_に対応するレコードを作成する。_values_には各
|
25
|
-
# カラムに設定する値を以下のような形式で指定する。
|
26
|
-
#
|
27
|
-
# [
|
28
|
-
# ["カラム名", 値],
|
29
|
-
# ["カラム名", 値],
|
30
|
-
# ...,
|
31
|
-
# ]
|
32
|
-
def initialize(table, id, values=nil)
|
33
|
-
@table = table
|
34
|
-
@id = id
|
35
|
-
if values
|
36
|
-
values.each do |name, value|
|
37
|
-
self[name] = value
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# call-seq:
|
43
|
-
# record == other -> true/false
|
44
|
-
#
|
45
|
-
# _record_と_other_が同じgroongaのレコードなら+true+を返し、
|
46
|
-
# そうでなければ+false+を返す。
|
47
|
-
def ==(other)
|
48
|
-
self.class == other.class and
|
49
|
-
[table, id] == [other.table, other.id]
|
50
|
-
end
|
51
|
-
|
52
|
-
# call-seq:
|
53
|
-
# record[column_name] -> 値
|
54
|
-
#
|
55
|
-
# このレコードの_column_name_で指定されたカラムの値を返す。
|
56
|
-
def [](column_name)
|
57
|
-
@table.column_value(@id, column_name, :id => true)
|
58
|
-
end
|
59
|
-
|
60
|
-
# call-seq:
|
61
|
-
# record[column_name] = 値
|
62
|
-
#
|
63
|
-
# このレコードの_column_name_で指定されたカラムの値を設定す
|
64
|
-
# る。
|
65
|
-
def []=(column_name, value)
|
66
|
-
@table.set_column_value(@id, column_name, value, :id => true)
|
67
|
-
end
|
68
|
-
|
69
|
-
# call-seq:
|
70
|
-
# record.append(column_name, value)
|
71
|
-
#
|
72
|
-
# このレコードの_column_name_で指定されたカラムの値の最後に
|
73
|
-
# _value_を追加する。
|
74
|
-
def append(column_name, value)
|
75
|
-
column(column_name).append(@id, value)
|
76
|
-
end
|
77
|
-
|
78
|
-
# call-seq:
|
79
|
-
# record.prepend(column_name, value)
|
80
|
-
#
|
81
|
-
# このレコードの_column_name_で指定されたカラムの値の最初に
|
82
|
-
# _value_を追加する。
|
83
|
-
def prepend(column_name, value)
|
84
|
-
column(column_name).prepend(@id, value)
|
85
|
-
end
|
86
|
-
|
87
|
-
# call-seq:
|
88
|
-
# record.have_column?(name) -> true/false
|
89
|
-
#
|
90
|
-
# 名前が_name_のカラムがレコードの所属するテーブルで定義され
|
91
|
-
# ているなら+true+を返す。
|
92
|
-
def have_column?(name)
|
93
|
-
column(name).is_a?(Groonga::Column)
|
94
|
-
rescue Groonga::NoSuchColumn
|
95
|
-
false
|
96
|
-
end
|
97
|
-
|
98
|
-
# call-seq:
|
99
|
-
# record.reference_column?(name) -> true/false
|
100
|
-
#
|
101
|
-
# 名前が_name_のカラムが参照カラムであるなら+true+を返す。
|
102
|
-
def reference_column?(name)
|
103
|
-
column(name).range.is_a?(Groonga::Table)
|
104
|
-
end
|
105
|
-
|
106
|
-
# call-seq:
|
107
|
-
# record.search(name, query, options={}) -> Groonga::Hash
|
108
|
-
#
|
109
|
-
# 名前が_name_のGroonga::IndexColumnのsearchメソッドを呼ぶ。
|
110
|
-
# _query_と_options_はそのメソッドにそのまま渡される。詳しく
|
111
|
-
# はGroonga::IndexColumn#searchを参照。
|
112
|
-
def search(name, query, options={})
|
113
|
-
column(name).search(query, options)
|
114
|
-
end
|
115
|
-
|
116
|
-
# call-seq:
|
117
|
-
# record.key -> 主キー
|
118
|
-
#
|
119
|
-
# レコードの主キーを返す。
|
120
|
-
#
|
121
|
-
# _record_が所属するテーブルがGroonga:::Arrayの場合は常
|
122
|
-
# に+nil+を返す。
|
123
|
-
def key
|
124
|
-
if @table.is_a?(Groonga::Array)
|
125
|
-
nil
|
126
|
-
else
|
127
|
-
@key ||= @table.key(@id)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# call-seq:
|
132
|
-
# record.score -> スコア値
|
133
|
-
#
|
134
|
-
# レコードのスコア値を返す。検索結果として生成されたテーブル
|
135
|
-
# のみに定義される。
|
136
|
-
def score
|
137
|
-
self["._score"]
|
138
|
-
end
|
139
|
-
|
140
|
-
# call-seq:
|
141
|
-
# record.n_sub_records -> 件数
|
142
|
-
#
|
143
|
-
# 主キーの値が同一であったレコードの件数を返す。検索結果とし
|
144
|
-
# て生成されたテーブルのみに定義される。
|
145
|
-
def n_sub_records
|
146
|
-
self["._nsubrecs"]
|
147
|
-
end
|
148
|
-
|
149
|
-
# call-seq:
|
150
|
-
# record.value -> 値
|
151
|
-
#
|
152
|
-
# レコードの値を返す。
|
153
|
-
def value
|
154
|
-
@table.value(@id, :id => true)
|
155
|
-
end
|
156
|
-
|
157
|
-
# call-seq:
|
158
|
-
# record.value = 値
|
159
|
-
#
|
160
|
-
# レコードの値を設定する。既存の値は上書きされる。
|
161
|
-
def value=(value)
|
162
|
-
@table.set_value(@id, value, :id => true)
|
163
|
-
end
|
164
|
-
|
165
|
-
# call-seq:
|
166
|
-
# record.increment!(name, delta=nil)
|
167
|
-
#
|
168
|
-
# このレコードの_name_で指定されたカラムの値を_delta_だけ増
|
169
|
-
# 加する。_delta_が+nil+の場合は1増加する。
|
170
|
-
def increment!(name, delta=nil)
|
171
|
-
column(name).increment!(@id, delta)
|
172
|
-
end
|
173
|
-
|
174
|
-
# call-seq:
|
175
|
-
# record.decrement!(name, delta=nil)
|
176
|
-
#
|
177
|
-
# このレコードの_name_で指定されたカラムの値を_delta_だけ減
|
178
|
-
# 少する。_delta_が+nil+の場合は1減少する。
|
179
|
-
def decrement!(name, delta=nil)
|
180
|
-
column(name).decrement!(@id, delta)
|
181
|
-
end
|
182
|
-
|
183
|
-
# call-seq:
|
184
|
-
# record.columns -> Groonga::Columnの配列
|
185
|
-
#
|
186
|
-
# レコードが所属するテーブルの全てのカラムを返す。
|
187
|
-
def columns
|
188
|
-
@table.columns
|
189
|
-
end
|
190
|
-
|
191
|
-
# call-seq:
|
192
|
-
# attributes -> Hash
|
193
|
-
#
|
194
|
-
# レコードが所属しているテーブルで定義されているインデックス
|
195
|
-
# 型のカラムでない全カラムを対象とし、カラムの名前をキーとし
|
196
|
-
# たこのレコードのカラムの値のハッシュを返す。
|
197
|
-
def attributes
|
198
|
-
attributes = {"id" => id}
|
199
|
-
_key = key
|
200
|
-
attributes["key"] = _key if _key
|
201
|
-
table_name = @table.name
|
202
|
-
columns.each do |column|
|
203
|
-
next if column.is_a?(Groonga::IndexColumn)
|
204
|
-
value = column[@id]
|
205
|
-
# TODO: support recursive reference.
|
206
|
-
value = value.attributes if value.is_a?(Groonga::Record)
|
207
|
-
attributes[column.local_name] = value
|
208
|
-
end
|
209
|
-
attributes
|
210
|
-
end
|
211
|
-
|
212
|
-
# call-seq:
|
213
|
-
# record.delete
|
214
|
-
#
|
215
|
-
# レコードを削除する。
|
216
|
-
def delete
|
217
|
-
@table.delete(@id)
|
218
|
-
end
|
219
|
-
|
220
|
-
# call-seq:
|
221
|
-
# record.lock(options={})
|
222
|
-
# record.lock(options={}) {...}
|
223
|
-
#
|
224
|
-
# レコードが所属するテーブルをロックする。ロックに失敗した場
|
225
|
-
# 合はGroonga::ResourceDeadlockAvoided例外が発生する。
|
226
|
-
#
|
227
|
-
# ブロックを指定した場合はブロックを抜けたときにunlockする。
|
228
|
-
#
|
229
|
-
# 利用可能なオプションは以下の通り。
|
230
|
-
#
|
231
|
-
# [_:timeout_]
|
232
|
-
# ロックを獲得できなかった場合は_:timeout_秒間ロックの獲
|
233
|
-
# 得を試みる。_:timeout_秒以内にロックを獲得できなかった
|
234
|
-
# 場合は例外が発生する。
|
235
|
-
def lock(options={}, &block)
|
236
|
-
@table.lock(options.merge(:id => @id), &block)
|
237
|
-
end
|
238
|
-
|
239
|
-
# call-seq:
|
240
|
-
# record.unlock(options={})
|
241
|
-
#
|
242
|
-
# レコードが所属するテーブルのロックを解除する。
|
243
|
-
#
|
244
|
-
# 利用可能なオプションは現在は無い。
|
245
|
-
def unlock(options={})
|
246
|
-
@table.unlock(options.merge(:id => @id))
|
247
|
-
end
|
248
|
-
|
249
|
-
# call-seq:
|
250
|
-
# record.clear_lock(options={})
|
251
|
-
#
|
252
|
-
# レコードが所属するテーブルのロックを強制的に解除する。
|
253
|
-
#
|
254
|
-
# 利用可能なオプションは現在は無い。
|
255
|
-
def clear_lock(options={})
|
256
|
-
@table.clear_lock(options.merge(:id => @id))
|
257
|
-
end
|
258
|
-
|
259
|
-
# call-seq:
|
260
|
-
# record.locked?(options={}) -> true/false
|
261
|
-
#
|
262
|
-
# レコードが所属するテーブルがロックされていれば+true+を返す。
|
263
|
-
#
|
264
|
-
# 利用可能なオプションは現在は無い。
|
265
|
-
def locked?(options={})
|
266
|
-
@table.locked?(options.merge(:id => @id))
|
267
|
-
end
|
268
|
-
|
269
|
-
private
|
270
|
-
def column(name) # :nodoc:
|
271
|
-
_column = @table.column(name.to_s)
|
272
|
-
raise NoSuchColumn, "column(#{name.inspect}) is nil" if _column.nil?
|
273
|
-
_column
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|