rroonga 1.2.9 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/Gemfile +1 -0
  2. data/Rakefile +1 -0
  3. data/bin/grntest-log-analyze +123 -0
  4. data/bin/groonga-query-log-extract +117 -0
  5. data/ext/groonga/rb-grn-accessor.c +7 -5
  6. data/ext/groonga/rb-grn-array-cursor.c +1 -1
  7. data/ext/groonga/rb-grn-array.c +34 -44
  8. data/ext/groonga/rb-grn-column.c +74 -38
  9. data/ext/groonga/rb-grn-context.c +19 -15
  10. data/ext/groonga/rb-grn-database.c +47 -42
  11. data/ext/groonga/rb-grn-double-array-trie-cursor.c +40 -0
  12. data/ext/groonga/rb-grn-double-array-trie.c +530 -0
  13. data/ext/groonga/rb-grn-encoding-support.c +1 -1
  14. data/ext/groonga/rb-grn-encoding.c +1 -1
  15. data/ext/groonga/rb-grn-exception.c +1 -1
  16. data/ext/groonga/rb-grn-expression-builder.c +1 -1
  17. data/ext/groonga/rb-grn-expression.c +63 -51
  18. data/ext/groonga/rb-grn-fix-size-column.c +7 -7
  19. data/ext/groonga/rb-grn-hash-cursor.c +1 -1
  20. data/ext/groonga/rb-grn-hash.c +42 -39
  21. data/ext/groonga/rb-grn-index-column.c +35 -31
  22. data/ext/groonga/rb-grn-index-cursor.c +1 -1
  23. data/ext/groonga/rb-grn-logger.c +23 -18
  24. data/ext/groonga/rb-grn-object.c +40 -27
  25. data/ext/groonga/rb-grn-operator.c +1 -1
  26. data/ext/groonga/rb-grn-patricia-trie-cursor.c +1 -1
  27. data/ext/groonga/rb-grn-patricia-trie.c +122 -90
  28. data/ext/groonga/rb-grn-plugin.c +8 -7
  29. data/ext/groonga/rb-grn-posting.c +1 -1
  30. data/ext/groonga/rb-grn-procedure.c +1 -1
  31. data/ext/groonga/rb-grn-query.c +12 -12
  32. data/ext/groonga/rb-grn-record.c +1 -1
  33. data/ext/groonga/rb-grn-snippet.c +26 -19
  34. data/ext/groonga/rb-grn-table-cursor-key-support.c +1 -1
  35. data/ext/groonga/rb-grn-table-cursor.c +4 -3
  36. data/ext/groonga/rb-grn-table-key-support.c +23 -23
  37. data/ext/groonga/rb-grn-table.c +268 -153
  38. data/ext/groonga/rb-grn-type.c +11 -7
  39. data/ext/groonga/rb-grn-utils.c +4 -1
  40. data/ext/groonga/rb-grn-variable-size-column.c +1 -1
  41. data/ext/groonga/rb-grn-variable.c +2 -2
  42. data/ext/groonga/rb-grn-view-accessor.c +1 -1
  43. data/ext/groonga/rb-grn-view-cursor.c +1 -1
  44. data/ext/groonga/rb-grn-view-record.c +1 -1
  45. data/ext/groonga/rb-grn-view.c +43 -34
  46. data/ext/groonga/rb-grn.h +6 -2
  47. data/ext/groonga/rb-groonga.c +1 -1
  48. data/lib/groonga.rb +4 -2
  49. data/lib/groonga/context.rb +16 -41
  50. data/lib/groonga/dumper.rb +6 -4
  51. data/lib/groonga/expression-builder.rb +52 -26
  52. data/lib/groonga/grntest-log.rb +206 -0
  53. data/lib/groonga/pagination.rb +21 -19
  54. data/lib/groonga/patricia-trie.rb +7 -10
  55. data/lib/groonga/posting.rb +1 -1
  56. data/lib/groonga/query-log.rb +348 -0
  57. data/lib/groonga/record.rb +47 -143
  58. data/lib/groonga/schema.rb +679 -406
  59. data/lib/groonga/view-record.rb +4 -10
  60. data/rroonga-build.rb +1 -1
  61. data/test/test-array.rb +25 -4
  62. data/test/test-column.rb +8 -8
  63. data/test/test-database.rb +2 -3
  64. data/test/test-double-array-trie.rb +164 -0
  65. data/test/test-expression-builder.rb +2 -2
  66. data/test/test-expression.rb +10 -9
  67. data/test/test-gqtp.rb +2 -2
  68. data/test/test-hash.rb +32 -8
  69. data/test/test-patricia-trie.rb +34 -10
  70. data/test/test-query-log.rb +258 -0
  71. data/test/test-record.rb +6 -5
  72. data/test/test-schema-create-table.rb +8 -0
  73. data/test/test-schema.rb +491 -234
  74. data/test/test-table.rb +17 -24
  75. metadata +123 -100
  76. data/ext/groonga/Makefile +0 -233
data/Gemfile CHANGED
@@ -18,6 +18,7 @@
18
18
  source "http://rubygems.org/"
19
19
 
20
20
  gem 'pkg-config'
21
+ gem 'json'
21
22
 
22
23
  group :development, :test do
23
24
  gem "test-unit"
data/Rakefile CHANGED
@@ -106,6 +106,7 @@ end
106
106
  document_task = Packnga::DocumentTask.new(spec) do |t|
107
107
  t.yard do |yard_task|
108
108
  yard_task.files += FileList["ext/**/*.c"]
109
+ yard_task.options += ["--markup", "textile"]
109
110
  end
110
111
  end
111
112
 
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License version 2.1 as published by the Free Software Foundation.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'ostruct'
20
+ require 'optparse'
21
+ require 'pathname'
22
+
23
+ require 'groonga/grntest-log'
24
+
25
+ options = OpenStruct.new
26
+ options.format = "tsv"
27
+ options.resolution = 1
28
+ options.output_items = ["qps"]
29
+ options.output_path = nil
30
+ option_parser = OptionParser.new do |parser|
31
+ parser.banner += " LOG1 ..."
32
+
33
+ available_formats = ["tsv", "csv"]
34
+ parser.on("--format=FORMAT",
35
+ available_formats,
36
+ "Output as FORMAT format.",
37
+ "(#{available_formats.join(', ')})",
38
+ "[#{options.format}]") do |format|
39
+ options.format = format
40
+ end
41
+
42
+ parser.on("--resolution=RESOLUTION",
43
+ Integer,
44
+ "Data resolution in seconds.",
45
+ "[#{options.resolution}]") do |resolution|
46
+ options.resolution = resolution
47
+ end
48
+
49
+ available_items = ["qps"]
50
+ parser.on("--output-item=ITEM",
51
+ available_items,
52
+ "Output ITEM.",
53
+ "To output multiple items, specify this option n times.",
54
+ "(#{available_items.join(', ')})",
55
+ "[#{options.output_items.join(', ')}]") do |item|
56
+ options.output_items << item
57
+ end
58
+
59
+ parser.on("--output=PATH",
60
+ "Output to PATH.",
61
+ "[standard output]") do |path|
62
+ options.output_path = path
63
+ end
64
+ end
65
+ args = option_parser.parse!(ARGV)
66
+
67
+ if args.empty?
68
+ puts(option_parser)
69
+ exit(false)
70
+ end
71
+
72
+ def analyze(output, options)
73
+ parser = Groonga::GrntestLog::Parser.new
74
+ previous_second = 0
75
+ current_second = 0
76
+ n_queries = 0
77
+ min_elapsed = nil
78
+ max_elapsed = nil
79
+ parser.parse(ARGF) do |event|
80
+ next unless event.is_a?(Groonga::GrntestLog::TaskEvent)
81
+ case options.format
82
+ when "tsv"
83
+ new_second = event.relative_end_time / 1_000_000
84
+ if current_second < new_second
85
+ if (current_second % options.resolution).zero? or
86
+ ((current_second - previous_second) >= options.resolution)
87
+ qps = n_queries / options.resolution.to_f
88
+ data = [current_second, qps, min_elapsed || 0, max_elapsed || 0]
89
+ output.puts(data.join("\t"))
90
+ n_queries = 0
91
+ min_elapsed = nil
92
+ max_elapsed = nil
93
+ previous_second = current_second
94
+ end
95
+ current_second = new_second
96
+ end
97
+ n_queries += 1
98
+ elapsed_time_in_millisecond = event.elapsed_time / 1_000.0
99
+ min_elapsed ||= elapsed_time_in_millisecond
100
+ max_elapsed ||= elapsed_time_in_millisecond
101
+ min_elapsed = [min_elapsed, elapsed_time_in_millisecond].min
102
+ max_elapsed = [max_elapsed, elapsed_time_in_millisecond].max
103
+ end
104
+ end
105
+ if n_queries > 0
106
+ last_resolution = current_second % options.resolution
107
+ if last_resolution.zero?
108
+ qps = n_queries / options.resolution.to_f
109
+ else
110
+ qps = n_queries / last_resolution.to_f
111
+ end
112
+ data = [current_second, qps, min_elapsed || 0, max_elapsed || 0]
113
+ output.puts(data.join("\t"))
114
+ end
115
+ end
116
+
117
+ if options.output_path
118
+ File.open(options.output_path, "w") do |output|
119
+ analyze(output, options)
120
+ end
121
+ else
122
+ analyze($stdout, options)
123
+ end
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License version 2.1 as published by the Free Software Foundation.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'ostruct'
20
+ require 'optparse'
21
+ require 'pathname'
22
+
23
+ require 'groonga/query-log'
24
+
25
+ options = OpenStruct.new
26
+ options.unify_format = nil
27
+ options.commands = []
28
+ options.exclude_commands = []
29
+ options.output_path = nil
30
+ option_parser = OptionParser.new do |parser|
31
+ parser.banner += " QUERY_LOG1 ..."
32
+
33
+ available_formats = ["uri", "command"]
34
+ parser.on("--unify-format=FORMAT",
35
+ available_formats,
36
+ "Unify command format to FORMAT.",
37
+ "(#{available_formats.join(', ')})",
38
+ "[not unify]") do |format|
39
+ options.unify_format = format
40
+ end
41
+
42
+ parser.on("--command=COMMAND",
43
+ "Extract only COMMAND.",
44
+ "To extract one or more commands,",
45
+ "specify this command a number of times.",
46
+ "Use /.../ as COMMAND to match command with regular expression.",
47
+ "[all commands]") do |command|
48
+ case command
49
+ when /\A\/(.*)\/(i)?\z/
50
+ options.commands << Regexp.new($1, $2 == "i")
51
+ when
52
+ options.commands << command
53
+ end
54
+ end
55
+
56
+ parser.on("--exclude-command=COMMAND",
57
+ "Don't extract COMMAND.",
58
+ "To ignore one or more commands,",
59
+ "specify this command a number of times.",
60
+ "Use /.../ as COMMAND to match command with regular expression.",
61
+ "[no commands]") do |command|
62
+ case command
63
+ when /\A\/(.*)\/(i)?\z/
64
+ options.exclude_commands << Regexp.new($1, $2 == "i")
65
+ when
66
+ options.exclude_commands << command
67
+ end
68
+ end
69
+
70
+ parser.on("--output=PATH",
71
+ "Output to PATH.",
72
+ "[standard output]") do |path|
73
+ options.output_path = path
74
+ end
75
+ end
76
+ args = option_parser.parse!(ARGV)
77
+
78
+ if args.empty?
79
+ puts(option_parser)
80
+ exit(false)
81
+ end
82
+
83
+ def target?(command, options)
84
+ name = command.name
85
+ if options.commands.any? {|target_command| target_command === name}
86
+ true
87
+ elsif options.exclude_commands.any? {|exclude_command| exclude_command == name}
88
+ false
89
+ else
90
+ true
91
+ end
92
+ end
93
+
94
+ def extract(output, options)
95
+ parser = Groonga::QueryLog::Parser.new
96
+ parser.parse(ARGF) do |statistic|
97
+ command = statistic.command
98
+ next unless target?(command, options)
99
+ command_text = nil
100
+ case options.unify_format
101
+ when "uri"
102
+ command_text = command.to_uri_format unless command.uri_format?
103
+ when "command"
104
+ command_text = command.to_command_format unless command.command_format?
105
+ end
106
+ command_text ||= statistic.raw_command
107
+ output.puts(command_text)
108
+ end
109
+ end
110
+
111
+ if options.output_path
112
+ File.open(options.output_path, "w") do |output|
113
+ extract(output, options)
114
+ end
115
+ else
116
+ extract($stdout, options)
117
+ end
@@ -1,4 +1,4 @@
1
- /* -*- c-file-style: "ruby" -*- */
1
+ /* -*- coding: utf-8; c-file-style: "ruby" -*- */
2
2
  /*
3
3
  Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
4
4
 
@@ -79,10 +79,12 @@ rb_grn_accessor_finalizer (grn_ctx *context, grn_obj *grn_object,
79
79
  *
80
80
  * アクセサ名を返す。
81
81
  *
82
- * items = Groonga::Array.create(:name => "Items")
83
- * id = items.column("_id")
84
- * id.name # => nil
85
- * id.local_name # => "_id"
82
+ * <pre>
83
+ * items = Groonga::Array.create(:name => "Items")
84
+ * id = items.column("_id")
85
+ * id.name # => nil
86
+ * id.local_name # => "_id"
87
+ * </pre>
86
88
  */
87
89
  static VALUE
88
90
  rb_grn_accessor_get_local_name (VALUE self)
@@ -1,4 +1,4 @@
1
- /* -*- c-file-style: "ruby" -*- */
1
+ /* -*- coding: utf-8; c-file-style: "ruby" -*- */
2
2
  /*
3
3
  Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
4
4
 
@@ -1,4 +1,4 @@
1
- /* -*- c-file-style: "ruby" -*- */
1
+ /* -*- coding: utf-8; c-file-style: "ruby" -*- */
2
2
  /*
3
3
  Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
4
4
 
@@ -38,57 +38,47 @@ VALUE rb_cGrnArray;
38
38
  * ロックに生成したテーブルが渡され、ブロックを抜けると自動的
39
39
  * にテーブルが破棄される。
40
40
  *
41
- * _options_に指定可能な値は以下の通り。
41
+ * @example
42
+ * #無名一時テーブルを生成する。
43
+ * Groonga::Array.create
44
+ *
45
+ * #無名永続テーブルを生成する。
46
+ * Groonga::Array.create(:path => "/tmp/array.grn")
47
+ *
48
+ * #名前付き永続テーブルを生成する。ただし、ファイル名は気にしない。
49
+ * Groonga::Array.create(:name => "Bookmarks",
50
+ * :persistent => true)
42
51
  *
43
- * [+:context+]
44
- * テーブルが利用するGroonga::Context。省略すると
45
- * Groonga::Context.defaultを用いる。
52
+ * #それぞれのレコードに512バイトの値を格納できる無名一時テーブルを生成する。
53
+ * Groonga::Array.create(:value => 512)
46
54
  *
47
- * [+:name+]
55
+ * @param [::Hash] options The name and value
56
+ * pairs. Omitted names are initialized as the default value.
57
+ * @option options [Grrnga::Context] :context (Groonga::Context.default) The context
58
+ * テーブルが利用するGrrnga::Context
59
+ * @option options :name The name
48
60
  * テーブルの名前。名前をつけると、Groonga::Context#[]に名
49
61
  * 前を指定してテーブルを取得することができる。省略すると
50
62
  * 無名テーブルになり、テーブルIDでのみ取得できる。
51
- *
52
- * [+:path+]
63
+ * @option options :path The path
53
64
  * テーブルを保存するパス。パスを指定すると永続テーブルとな
54
65
  * り、プロセス終了後もレコードは保持される。次回起動時に
55
66
  * Groonga::Context#[]で保存されたレコードを利用することが
56
67
  * できる。省略すると一時テーブルになり、プロセスが終了する
57
68
  * とレコードは破棄される。
58
- *
59
- * [+:persistent+]
60
- * +true+を指定すると永続テーブルとなる。+path+を省略した
61
- * 場合は自動的にパスが付加される。+:context+で指定した
69
+ * @option options :persistent The persistent
70
+ * +true+ を指定すると永続テーブルとなる。 +path+ を省略した
71
+ * 場合は自動的にパスが付加される。 +:context+ で指定した
62
72
  * Groonga::Contextに結びついているデータベースが一時デー
63
73
  * タベースの場合は例外が発生する。
64
- *
65
- * [+:value_type+]
74
+ * @option options :value_type (nil) The value_type
66
75
  * 値の型を指定する。省略すると値のための領域を確保しない。
67
76
  * 値を保存したい場合は必ず指定すること。
68
- *
69
77
  * 参考: Groonga::Type.new
70
- *
71
- * [+:sub_records+]
72
- * +true+を指定すると#groupでグループ化したときに、
78
+ * @option options [Groonga::Record#n_sub_records] :sub_records The sub_records
79
+ * +true+ を指定すると#groupでグループ化したときに、
73
80
  * Groonga::Record#n_sub_recordsでグループに含まれるレコー
74
81
  * ドの件数を取得できる。
75
- *
76
- * 使用例:
77
- *
78
- * 無名一時テーブルを生成する。
79
- * Groonga::Array.create
80
- *
81
- * 無名永続テーブルを生成する。
82
- * Groonga::Array.create(:path => "/tmp/array.grn")
83
- *
84
- * 名前付き永続テーブルを生成する。ただし、ファイル名は気に
85
- * しない。
86
- * Groonga::Array.create(:name => "Bookmarks",
87
- * :persistent => true)
88
- *
89
- * それぞれのレコードに512バイトの値を格納できる無名一時テー
90
- * ブルを生成する。
91
- * Groonga::Array.create(:value => 512)
92
82
  */
93
83
  static VALUE
94
84
  rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
@@ -154,26 +144,26 @@ rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
154
144
  * array.add(values=nil) -> Groonga::Recordまたはnil
155
145
  *
156
146
  * レコード追加し、追加したレコードを返す。レコードの追加に失
157
- * 敗した場合は+nil+を返す。
147
+ * 敗した場合は +nil+ を返す。
158
148
  *
159
- * _values_にはレコードのカラムに設定する値を指定する。省略
160
- * した場合または+nil+を指定した場合はカラムは設定しない。カ
149
+ * _values_ にはレコードのカラムに設定する値を指定する。省略
150
+ * した場合または +nil+ を指定した場合はカラムは設定しない。カ
161
151
  * ラムの値は<tt>{:カラム名1 => 値1, :カラム名2 => 値2,
162
152
  * ...}</tt>と指定する。
163
153
  *
164
- * 使用例では、以下のようなユーザを格納するGroonga::Arrayが
165
- * 定義されているものとする。
154
+ * @example
155
+ * #以下のようなユーザを格納するGroonga::Arrayが
156
+ * #定義されているものとする。
166
157
  * users = Groonga::Array.create(:name => "Users")
167
158
  * users.define_column("name", "ShortText")
168
159
  * users.define_column("uri", "ShortText")
169
- *
170
- * ユーザを追加する。
160
+ * #ユーザを追加する。
171
161
  * user = users.add
172
162
  *
173
- * daijiroユーザを追加する。
163
+ * #daijiroユーザを追加する。
174
164
  * daijiro = users.add(:name => "daijiro")
175
165
  *
176
- * gunyara-kunユーザを追加する。
166
+ * #gunyara-kunユーザを追加する。
177
167
  * gunyara_kun = users.add(:name => "gunyara-kun",
178
168
  * :uri => "http://d.hatena.ne.jp/tasukuchan/")
179
169
  */
@@ -1,4 +1,4 @@
1
- /* -*- c-file-style: "ruby" -*- */
1
+ /* -*- coding: utf-8; c-file-style: "ruby" -*- */
2
2
  /* vim: set sts=4 sw=4 ts=8 noet: */
3
3
  /*
4
4
  Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
@@ -135,8 +135,7 @@ rb_grn_column_get_table (VALUE self)
135
135
  * call-seq:
136
136
  * column.local_name
137
137
  *
138
- * テーブル名を除いたカラム名を返す。
139
- *
138
+ * @example テーブル名を除いたカラム名を返す。
140
139
  * items = Groonga::Array.create(:name => "Items")
141
140
  * title = items.define_column("title", "ShortText")
142
141
  * title.name # => "Items.title"
@@ -176,11 +175,11 @@ rb_grn_column_get_local_name (VALUE self)
176
175
  *
177
176
  * カラムが所属するテーブルからブロックまたは文字列で指定し
178
177
  * た条件にマッチするレコードを返す。返されたテーブルには
179
- * +expression+という特異メソッドがあり、指定した条件を表し
178
+ * +expression+ という特異メソッドがあり、指定した条件を表し
180
179
  * ているGroonga::Expressionを取得できる。
181
180
  * Groonga::Expression#snippetを使うことにより、指定した条件
182
181
  * 用のスニペットを簡単に生成できる。
183
- *
182
+ * <pre>
184
183
  * results = description_column.select do |column|
185
184
  * column =~ "groonga"
186
185
  * end
@@ -193,14 +192,14 @@ rb_grn_column_get_local_name (VALUE self)
193
192
  * puts "---"
194
193
  * end
195
194
  * end
196
- *
197
195
  * 出力例
198
196
  * Ruby/groongaの説明文の中で「groonga」が含まれる部分
199
197
  * ---
200
198
  * Ruby/<em>groonga</em>は<em>groonga</em>のいわゆるDB-APIの層の...
201
199
  * ---
200
+ * </pre>
202
201
  *
203
- * _query_には「[カラム名]:[演算子][値]」という書式で条件を
202
+ * _query_ には「[カラム名]:[演算子][値]」という書式で条件を
204
203
  * 指定する。演算子は以下の通り。
205
204
  *
206
205
  * [なし]
@@ -219,23 +218,24 @@ rb_grn_column_get_local_name (VALUE self)
219
218
  * [カラム値]が[値]を含んでいるかどうか
220
219
  *
221
220
  * 例:
222
- * "groonga" # _column_カラムの値が"groonga"のレコードにマッチ
223
- * "name:daijiro" # _column_カラムが属しているテーブルの
221
+ * "groonga" # _column_ カラムの値が"groonga"のレコードにマッチ
222
+ * "name:daijiro" # _column_ カラムが属しているテーブルの
224
223
  * # "name"カラムの値が"daijiro"のレコードにマッチ
225
- * "description:@groonga" # _column_カラムが属しているテーブルの
224
+ * "description:@groonga" # _column_ カラムが属しているテーブルの
226
225
  * # "description"カラムが
227
226
  * # "groonga"を含んでいるレコードにマッチ
228
227
  *
229
- * _expression_には既に作成済みのGroonga::Expressionを渡す
228
+ * _expression_ には既に作成済みのGroonga::Expressionを渡す
230
229
  *
231
230
  * ブロックで条件を指定する場合は
232
- * Groonga::ColumnExpressionBuilderを参照。
233
- *
234
- * _options_に指定可能な値は以下の通り。
231
+ * {Groonga::ColumnExpressionBuilder} を参照。
235
232
  *
236
- * [+:operator+]
233
+ * _options_ に指定可能な値は以下の通り。
234
+ * @param [::Hash] options The name and value
235
+ * pairs. Omitted names are initialized as the default value.
236
+ * @option options :operator (Groonga::Operator::OR) The operator
237
237
  * マッチしたレコードをどのように扱うか。指定可能な値は以
238
- * 下の通り。省略した場合はGroonga::Operator::OR。
238
+ * 下の通り。
239
239
  *
240
240
  * [Groonga::Operator::OR]
241
241
  * マッチしたレコードを追加。すでにレコードが追加され
@@ -248,31 +248,31 @@ rb_grn_column_get_local_name (VALUE self)
248
248
  * [Groonga::Operator::ADJUST]
249
249
  * マッチしたレコードのスコアを増加。
250
250
  *
251
- * [+:result+]
251
+ * @option options :result The result
252
252
  * 検索結果を格納するテーブル。マッチしたレコードが追加さ
253
253
  * れていく。省略した場合は新しくテーブルを作成して返す。
254
254
  *
255
- * [+:name+]
255
+ * @option options :name The name
256
256
  * 条件の名前。省略した場合は名前を付けない。
257
257
  *
258
- * [+:syntax+]
259
- * _query_の構文。省略した場合は+:query+。
258
+ * @option options :syntax (:query) The syntax
259
+ * _query_の構文。
260
260
  *
261
261
  * 参考: Groonga::Expression#parse.
262
262
  *
263
- * [+:allow_pragma+]
263
+ * @option options :allow_pragma The allow_pragma
264
264
  * query構文時にプラグマを利用するかどうか。省略した場合は
265
265
  * 利用する。
266
266
  *
267
267
  * 参考: Groonga::Expression#parse.
268
268
  *
269
- * [+:allow_column+]
269
+ * @option options :allow_column The allow_column
270
270
  * query構文時にカラム指定を利用するかどうか。省略した場合
271
271
  * は利用する。
272
272
  *
273
273
  * 参考: Groonga::Expression#parse.
274
274
  *
275
- * [+:allow_update+]
275
+ * @option options :allow_update
276
276
  * script構文時に更新操作を利用するかどうか。省略した場合
277
277
  * は利用する。
278
278
  *
@@ -367,13 +367,13 @@ rb_grn_column_select (int argc, VALUE *argv, VALUE self)
367
367
  * call-seq:
368
368
  * column.unlock(options={})
369
369
  *
370
- * _column_のロックを解除する。
370
+ * _column_ のロックを解除する。
371
371
  *
372
372
  * 利用可能なオプションは以下の通り。
373
373
  *
374
374
  * [_:id_]
375
- * _:id_で指定したレコードのロックを解除する。(注:
376
- * groonga側が未実装のため、現在は無視される)
375
+ * _:id_ で指定したレコードのロックを解除する。
376
+ * (注: groonga側が未実装のため、現在は無視される)
377
377
  */
378
378
  static VALUE
379
379
  rb_grn_column_unlock (int argc, VALUE *argv, VALUE self)
@@ -417,7 +417,7 @@ rb_grn_column_unlock_ensure (VALUE self)
417
417
  * column.lock(options={})
418
418
  * column.lock(options={}) {...}
419
419
  *
420
- * _column_をロックする。ロックに失敗した場合は
420
+ * _column_ をロックする。ロックに失敗した場合は
421
421
  * Groonga::ResourceDeadlockAvoided例外が発生する。
422
422
  *
423
423
  * ブロックを指定した場合はブロックを抜けたときにunlockする。
@@ -518,12 +518,12 @@ rb_grn_column_clear_lock (int argc, VALUE *argv, VALUE self)
518
518
  * call-seq:
519
519
  * column.locked?(options={})
520
520
  *
521
- * _column_がロックされていれば+true+を返す。
521
+ * _column_ がロックされていれば +true+ を返す。
522
522
  *
523
523
  * 利用可能なオプションは以下の通り。
524
524
  *
525
525
  * [_:id_]
526
- * _:id_で指定したレコードがロックされていれば+true+を返す。
526
+ * _:id_で指定したレコードがロックされていれば +true+ を返す。
527
527
  * (注: groonga側が未実装のため、現在は無視される。実装さ
528
528
  * れるのではないかと思っているが、実装されないかもしれな
529
529
  * い。)
@@ -558,8 +558,8 @@ rb_grn_column_is_locked (int argc, VALUE *argv, VALUE self)
558
558
  * call-seq:
559
559
  * column.reference? -> true/false
560
560
  *
561
- * _column_の値がテーブルのレコードとなる場合は+true+を返し、
562
- * そうでない場合は+false+を返す。
561
+ * _column_ の値がテーブルのレコードとなる場合は +true+ を返し、
562
+ * そうでない場合は +false+ を返す。
563
563
  *
564
564
  * @since 1.0.5
565
565
  */
@@ -596,8 +596,8 @@ rb_grn_column_reference_p (VALUE self)
596
596
  * call-seq:
597
597
  * column.index? -> true/false
598
598
  *
599
- * _column_がGroonga::IndexColumnの場合は+true+を返し、
600
- * そうでない場合は+false+を返す。
599
+ * _column_ がGroonga::IndexColumnの場合は +true+ を返し、
600
+ * そうでない場合は +false+ を返す。
601
601
  *
602
602
  * @since 1.0.5
603
603
  */
@@ -624,8 +624,8 @@ rb_grn_column_index_p (VALUE self)
624
624
  * call-seq:
625
625
  * column.vector? -> true/false
626
626
  *
627
- * _column_がベクターカラムの場合は+true+を返し、
628
- * そうでない場合は+false+を返す。
627
+ * _column_ がベクターカラムの場合は +true+ を返し、
628
+ * そうでない場合は +false+ を返す。
629
629
  *
630
630
  * @since 1.0.5
631
631
  */
@@ -654,8 +654,8 @@ rb_grn_column_vector_p (VALUE self)
654
654
  * call-seq:
655
655
  * column.scalar? -> true/false
656
656
  *
657
- * _column_がスカラーカラムの場合は+true+を返し、
658
- * そうでない場合は+false+を返す。
657
+ * _column_ がスカラーカラムの場合は +true+ を返し、
658
+ * そうでない場合は +false+ を返す。
659
659
  *
660
660
  * @since 1.0.5
661
661
  */
@@ -690,7 +690,7 @@ rb_grn_column_scalar_p (VALUE self)
690
690
  * call-seq:
691
691
  * column.indexes(operator=Groonga::Operator::MATCH) -> [index_column, ...]
692
692
  *
693
- * _operation_を実行できる_column_のインデックスを返す。
693
+ * _operation_ を実行できる _column_ のインデックスを返す。
694
694
  *
695
695
  * @since 1.0.9
696
696
  */
@@ -733,6 +733,40 @@ rb_grn_column_get_indexes (int argc, VALUE *argv, VALUE self)
733
733
  return rb_indexes;
734
734
  }
735
735
 
736
+ /*
737
+ * Document-method: rename
738
+ *
739
+ * call-seq:
740
+ * table.rename(name)
741
+ *
742
+ * Renames the table to name.
743
+ *
744
+ * @param name [String] the new name
745
+ * @since 1.3.0
746
+ */
747
+ static VALUE
748
+ rb_grn_column_rename (VALUE self, VALUE rb_name)
749
+ {
750
+ int rc;
751
+ grn_ctx *context;
752
+ grn_obj *column;
753
+ char *name;
754
+ int name_size;
755
+
756
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
757
+ NULL, NULL,
758
+ NULL, NULL, NULL);
759
+
760
+ name = StringValueCStr(rb_name);
761
+ name_size = RSTRING_LEN(rb_name);
762
+
763
+ rc = grn_column_rename(context, column, name, name_size);
764
+ rb_grn_context_check(context, self);
765
+ rb_grn_rc_check(rc, self);
766
+
767
+ return self;
768
+ }
769
+
736
770
  void
737
771
  rb_grn_init_column (VALUE mGrn)
738
772
  {
@@ -758,6 +792,8 @@ rb_grn_init_column (VALUE mGrn)
758
792
 
759
793
  rb_define_method(rb_cGrnColumn, "indexes", rb_grn_column_get_indexes, -1);
760
794
 
795
+ rb_define_method(rb_cGrnColumn, "rename", rb_grn_column_rename, 1);
796
+
761
797
  rb_grn_init_fix_size_column(mGrn);
762
798
  rb_grn_init_variable_size_column(mGrn);
763
799
  rb_grn_init_index_column(mGrn);