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
@@ -22,26 +22,20 @@ module Groonga
22
22
  # レコードのID
23
23
  attr_reader :id
24
24
 
25
- # _table_の_id_に対応するレコードを作成する。
25
+ # _table_ _id_ に対応するレコードを作成する。
26
26
  def initialize(view, id)
27
27
  @view = view
28
28
  @id = id
29
29
  end
30
30
 
31
- # call-seq:
32
- # record == other -> true/false
33
- #
34
- # _record_と_other_が同じgroongaのレコードなら+true+を返し、
35
- # そうでなければ+false+を返す。
31
+ # _record_ と _other_ が同じgroongaのレコードなら +true+ を返し、
32
+ # そうでなければ +false+ を返す。
36
33
  def ==(other)
37
34
  self.class == other.class and
38
35
  [view, id] == [other.view, other.id]
39
36
  end
40
37
 
41
- # call-seq:
42
- # record[column_name] -> 値
43
- #
44
- # このレコードの_column_name_で指定されたカラムの値を返す。
38
+ # このレコードの _column_name_ で指定されたカラムの値を返す。
45
39
  def [](column_name)
46
40
  @view.column_value(@id, column_name)
47
41
  end
data/rroonga-build.rb CHANGED
@@ -19,7 +19,7 @@ module RroongaBuild
19
19
  module RequiredGroongaVersion
20
20
  MAJOR = 1
21
21
  MINOR = 2
22
- MICRO = 5
22
+ MICRO = 8
23
23
  VERSION = [MAJOR, MINOR, MICRO]
24
24
  end
25
25
 
data/test/test-array.rb CHANGED
@@ -62,9 +62,9 @@ class ArrayTest < Test::Unit::TestCase
62
62
  :source => "Bookmarks.user")
63
63
  morita = users.add(:name => "morita")
64
64
  gunyara_kun = users.add(:name => "gunyara-kun")
65
- groonga = bookmarks.add(:title => "groonga", :user => morita)
66
- google = bookmarks.add(:title => "google", :user => morita)
67
- python = bookmarks.add(:title => "Python", :user => gunyara_kun)
65
+ bookmarks.add(:title => "groonga", :user => morita)
66
+ bookmarks.add(:title => "google", :user => morita)
67
+ bookmarks.add(:title => "Python", :user => gunyara_kun)
68
68
 
69
69
  assert_equal(["groonga", "google"],
70
70
  index.search(morita.id).collect {|record| record.key["title"]})
@@ -86,7 +86,7 @@ class ArrayTest < Test::Unit::TestCase
86
86
 
87
87
  def test_column_value
88
88
  users = Groonga::Array.create(:name => "Users")
89
- name = users.define_column("name", "ShortText")
89
+ users.define_column("name", "ShortText")
90
90
  morita_id = users.add.id
91
91
  users.set_column_value(morita_id, "name", "morita")
92
92
  assert_equal("morita", users.column_value(morita_id, "name"))
@@ -99,4 +99,25 @@ class ArrayTest < Test::Unit::TestCase
99
99
  second_user = users.add
100
100
  assert_predicate(second_user, :added?)
101
101
  end
102
+
103
+ def test_defrag
104
+ users = Groonga::Array.create(:name => "Users")
105
+ users.define_column("name", "ShortText")
106
+ users.define_column("address", "ShortText")
107
+ 1000.times do |i|
108
+ users.add(:name => "user #{i}" * 1000,
109
+ :address => "address #{i}" * 1000)
110
+ end
111
+ assert_equal(7, users.defrag)
112
+ end
113
+
114
+ def test_rename
115
+ users = Groonga::Array.create(:name => "Users")
116
+ name = users.define_column("name", "ShortText")
117
+ address = users.define_column("address", "ShortText")
118
+
119
+ users.rename("People")
120
+ assert_equal(["People", "People.name", "People.address"],
121
+ [users.name, name.name, address.name])
122
+ end
102
123
  end
data/test/test-column.rb CHANGED
@@ -254,7 +254,7 @@ class ColumnTest < Test::Unit::TestCase
254
254
 
255
255
  def test_set_time
256
256
  posts = Groonga::Hash.create(:name => "Posts", :key_type => "ShortText")
257
- body = posts.define_column("issued", "Time")
257
+ posts.define_column("issued", "Time")
258
258
 
259
259
  post = posts.add("hello", :issued => 123456)
260
260
  assert_equal(Time.at(123456), post[".issued"])
@@ -266,7 +266,7 @@ class ColumnTest < Test::Unit::TestCase
266
266
 
267
267
  def test_set_nil_to_time
268
268
  posts = Groonga::Hash.create(:name => "Posts", :key_type => "ShortText")
269
- body = posts.define_column("issued", "Time")
269
+ posts.define_column("issued", "Time")
270
270
 
271
271
  post = posts.add("hello", :issued => nil)
272
272
  assert_equal(Time.at(0), post["issued"])
@@ -274,7 +274,7 @@ class ColumnTest < Test::Unit::TestCase
274
274
 
275
275
  def test_bool
276
276
  posts = Groonga::Hash.create(:name => "Posts", :key_type => "ShortText")
277
- hidden = posts.define_column("hidden", "Bool")
277
+ posts.define_column("hidden", "Bool")
278
278
 
279
279
  post = posts.add("hello")
280
280
  assert_false(post["hidden"])
@@ -340,11 +340,11 @@ class ColumnTest < Test::Unit::TestCase
340
340
  :key_type => "ShortText",
341
341
  :key_normalize => true)
342
342
  index.default_tokenizer = "TokenBigram"
343
- body_index = index.define_index_column("body_index", @posts,
344
- :with_position => true,
345
- :source => @body)
343
+ index.define_index_column("body_index", @posts,
344
+ :with_position => true,
345
+ :source => @body)
346
346
 
347
- first_post = @posts.add("Hello!", :body => "World")
348
- hobby = @posts.add("My Hobby", :body => "Drive and Eat")
347
+ @posts.add("Hello!", :body => "World")
348
+ @posts.add("My Hobby", :body => "Drive and Eat")
349
349
  end
350
350
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2009-2010 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2009-2011 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
@@ -68,8 +68,7 @@ class DatabaseTest < Test::Unit::TestCase
68
68
  Groonga::Database.new(db_path.to_s)
69
69
  end
70
70
 
71
- database = Groonga::Database.create(:path => db_path.to_s)
72
-
71
+ Groonga::Database.create(:path => db_path.to_s)
73
72
  assert_not_predicate(Groonga::Database.new(db_path.to_s), :closed?)
74
73
  end
75
74
 
@@ -0,0 +1,164 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2011 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
+ class DoubleArrayTrieTest < Test::Unit::TestCase
19
+ include GroongaTestUtils
20
+ include ERB::Util
21
+
22
+ setup :setup_database
23
+
24
+ def test_support_key?
25
+ assert_predicate(Groonga::DoubleArrayTrie.create(:name => "Users",
26
+ :key_type => "ShortText"),
27
+ :support_key?)
28
+ end
29
+
30
+ def test_encoding
31
+ assert_equal(Groonga::Encoding.default,
32
+ Groonga::DoubleArrayTrie.create.encoding)
33
+ end
34
+
35
+ def test_tokenizer
36
+ trie = Groonga::DoubleArrayTrie.create
37
+ assert_nil(trie.default_tokenizer)
38
+ trie.default_tokenizer = "TokenTrigram"
39
+ assert_equal(Groonga::Context.default["TokenTrigram"],
40
+ trie.default_tokenizer)
41
+ end
42
+
43
+ def test_search
44
+ users = Groonga::Array.create(:name => "Users")
45
+ users.define_column("name", "ShortText")
46
+
47
+ bookmarks = Groonga::DoubleArrayTrie.create(:name => "Bookmarks",
48
+ :key_type => "ShortText")
49
+ bookmarks.define_column("user_id", users)
50
+
51
+ daijiro = users.add
52
+ daijiro["name"] = "daijiro"
53
+ gunyarakun = users.add
54
+ gunyarakun["name"] = "gunyarakun"
55
+
56
+ groonga = bookmarks.add("http://groonga.org/")
57
+ groonga["user_id"] = daijiro
58
+
59
+ records = bookmarks.search("http://groonga.org/")
60
+ assert_equal(["daijiro"],
61
+ records.records.collect {|record| record[".user_id.name"]})
62
+ end
63
+
64
+ def test_add
65
+ users = Groonga::DoubleArrayTrie.create(:name => "Users")
66
+ users.define_column("address", "Text")
67
+ me = users.add("me", :address => "me@example.com")
68
+ assert_equal("me@example.com", me[:address])
69
+ end
70
+
71
+ def test_default_tokenizer_on_create
72
+ terms = Groonga::DoubleArrayTrie.create(:name => "Terms",
73
+ :default_tokenizer => "TokenUnigram")
74
+ assert_equal(context[Groonga::Type::UNIGRAM],
75
+ terms.default_tokenizer)
76
+ end
77
+
78
+ def test_duplicated_name
79
+ Groonga::DoubleArrayTrie.create(:name => "Users")
80
+ assert_raise(Groonga::InvalidArgument) do
81
+ Groonga::DoubleArrayTrie.create(:name => "Users")
82
+ end
83
+ end
84
+
85
+ def test_has_key?
86
+ users = Groonga::DoubleArrayTrie.create(:name => "Users")
87
+ assert_false(users.has_key?("morita"))
88
+ users.add("morita")
89
+ assert_true(users.has_key?("morita"))
90
+ end
91
+
92
+ def test_prefix_cursor
93
+ paths = Groonga::DoubleArrayTrie.create(:name => "Paths",
94
+ :key_type => 'ShortText')
95
+ paths.add('/')
96
+ paths.add('/tmp')
97
+ paths.add('/usr/bin')
98
+ paths.add('/usr/local/bin')
99
+
100
+ assert_prefix_cursor(["/usr/local/bin", "/usr/bin", "/tmp", "/"],
101
+ paths, "/", {:order => :desc})
102
+ assert_prefix_cursor(["/", "/tmp", "/usr/bin", "/usr/local/bin"],
103
+ paths, "/")
104
+ assert_prefix_cursor(["/usr/local/bin", "/usr/bin"],
105
+ paths, "/usr/local",
106
+ {:key_bytes => "/usr".size, :order => :desc})
107
+ assert_prefix_cursor(["/tmp", "/usr/bin"],
108
+ paths, "/",
109
+ {:offset => 1, :limit => 2})
110
+ end
111
+
112
+ def assert_prefix_cursor(expected, tables, prefix, options={})
113
+ actual = []
114
+ tables.open_prefix_cursor(prefix, options) do |cursor|
115
+ cursor.each do |record|
116
+ actual << record.key
117
+ end
118
+ end
119
+ assert_equal(expected, actual)
120
+ end
121
+
122
+ def test_add_uint_key
123
+ numbers = Groonga::DoubleArrayTrie.create(:name => "Numbers",
124
+ :key_type => "UInt32")
125
+ numbers.add(1)
126
+ numbers.add(2)
127
+ numbers.add(5)
128
+ numbers.add(7)
129
+ assert_equal([1, 2, 5, 7], numbers.collect {|number| number.key})
130
+ end
131
+
132
+ def test_added?
133
+ users = Groonga::DoubleArrayTrie.create(:name => "Users",
134
+ :key_type => "ShortText")
135
+ bob = users.add("bob")
136
+ assert_predicate(bob, :added?)
137
+ bob_again = users.add("bob")
138
+ assert_not_predicate(bob_again, :added?)
139
+ end
140
+
141
+ def test_defrag
142
+ users = Groonga::DoubleArrayTrie.create(:name => "Users",
143
+ :key_type => "ShortText")
144
+ users.define_column("name", "ShortText")
145
+ users.define_column("address", "ShortText")
146
+ 1000.times do |i|
147
+ users.add("user #{i}",
148
+ :name => "user #{i}" * 1000,
149
+ :address => "address #{i}" * 1000)
150
+ end
151
+ assert_equal(7, users.defrag)
152
+ end
153
+
154
+ def test_rename
155
+ users = Groonga::DoubleArrayTrie.create(:name => "Users",
156
+ :key_type => "ShortText")
157
+ name = users.define_column("name", "ShortText")
158
+ address = users.define_column("address", "ShortText")
159
+
160
+ users.rename("People")
161
+ assert_equal(["People", "People.name", "People.address"],
162
+ [users.name, name.name, address.name])
163
+ end
164
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2009-2010 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2009-2011 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
@@ -75,7 +75,7 @@ class ExpressionBuilderTest < Test::Unit::TestCase
75
75
  end
76
76
 
77
77
  def test_not_equal
78
- omit("not supported yet!!!")
78
+ only_ruby19
79
79
  result = @users.select do |record|
80
80
  record["name"] != "mori daijiro"
81
81
  end
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- # Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
2
+ #
3
+ # Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
3
4
  #
4
5
  # This library is free software; you can redistribute it and/or
5
6
  # modify it under the terms of the GNU Lesser General Public
@@ -81,10 +82,10 @@ class ExpressionTest < Test::Unit::TestCase
81
82
 
82
83
  def test_snippet
83
84
  users = Groonga::Array.create(:name => "Users")
84
- name = users.define_column("name", "ShortText")
85
- terms = Groonga::Hash.create(:name => "Terms",
86
- :key_type => "ShortText",
87
- :default_tokenizer => "TokenBigram")
85
+ users.define_column("name", "ShortText")
86
+ Groonga::Hash.create(:name => "Terms",
87
+ :key_type => "ShortText",
88
+ :default_tokenizer => "TokenBigram")
88
89
  users.define_index_column("user_name", users,
89
90
  :source => "Users.name",
90
91
  :with_position => true)
@@ -111,10 +112,10 @@ class ExpressionTest < Test::Unit::TestCase
111
112
 
112
113
  def test_snippet_without_tags
113
114
  users = Groonga::Array.create(:name => "Users")
114
- name = users.define_column("name", "ShortText")
115
- terms = Groonga::Hash.create(:name => "Terms",
116
- :key_type => "ShortText",
117
- :default_tokenizer => "TokenBigram")
115
+ users.define_column("name", "ShortText")
116
+ Groonga::Hash.create(:name => "Terms",
117
+ :key_type => "ShortText",
118
+ :default_tokenizer => "TokenBigram")
118
119
  users.define_index_column("user_name", users,
119
120
  :source => "Users.name",
120
121
  :with_position => true)
data/test/test-gqtp.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2010 Kouhei Sutou <kou@clear-code.com>
3
+ # Copyright (C) 2010-2011 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
@@ -64,7 +64,7 @@ class GQTPTest < Test::Unit::TestCase
64
64
  private
65
65
  def process(gqtp)
66
66
  context.send(gqtp)
67
- id, result = context.receive
67
+ _, result = context.receive
68
68
  JSON.parse(result)
69
69
  end
70
70
  end
data/test/test-hash.rb CHANGED
@@ -31,7 +31,7 @@ class HashTest < Test::Unit::TestCase
31
31
  bookmarks = Groonga::Hash.create(:name => "Bookmarks",
32
32
  :path => bookmarks_path.to_s)
33
33
 
34
- groonga = bookmarks.add("groonga")
34
+ bookmarks.add("groonga")
35
35
  google = bookmarks.add("Google")
36
36
  cutter = bookmarks.add("Cutter")
37
37
 
@@ -62,7 +62,7 @@ class HashTest < Test::Unit::TestCase
62
62
  bookmarks = Groonga::Hash.create(:name => "Bookmarks",
63
63
  :path => bookmarks_path.to_s,
64
64
  :key_type => "ShortText")
65
- uri = bookmarks.define_column("uri", "ShortText")
65
+ bookmarks.define_column("uri", "ShortText")
66
66
  bookmarks.set_column_value("google", "uri", "http://google.com/")
67
67
  assert_equal("http://google.com/", bookmarks.column_value("google", "uri"))
68
68
  end
@@ -149,11 +149,11 @@ class HashTest < Test::Unit::TestCase
149
149
 
150
150
  def test_search
151
151
  users = Groonga::Array.create(:name => "Users")
152
- user_name = users.define_column("name", "ShortText")
152
+ users.define_column("name", "ShortText")
153
153
 
154
154
  bookmarks = Groonga::Hash.create(:name => "Bookmarks",
155
155
  :key_type => "ShortText")
156
- bookmark_user_id = bookmarks.define_column("user_id", users)
156
+ bookmarks.define_column("user_id", users)
157
157
 
158
158
  daijiro = users.add
159
159
  daijiro["name"] = "daijiro"
@@ -165,7 +165,7 @@ class HashTest < Test::Unit::TestCase
165
165
 
166
166
  records = bookmarks.search("http://groonga.org/")
167
167
  assert_equal(["daijiro"],
168
- records.records.collect {|record| record[".user_id.name"]})
168
+ records.records.collect {|record| record["user_id.name"]})
169
169
  end
170
170
 
171
171
  def test_add
@@ -196,9 +196,9 @@ class HashTest < Test::Unit::TestCase
196
196
  :default_tokenizer => "TokenBigram")
197
197
  index = terms.define_index_column("comment", bookmarks,
198
198
  :source => "Bookmarks.comment")
199
- groonga = bookmarks.add("groonga", :comment => "search engine by Brazil")
200
- google = bookmarks.add("google", :comment => "search engine by Google")
201
- ruby = bookmarks.add("ruby", :comment => "programing language")
199
+ bookmarks.add("groonga", :comment => "search engine by Brazil")
200
+ bookmarks.add("google", :comment => "search engine by Google")
201
+ bookmarks.add("ruby", :comment => "programing language")
202
202
 
203
203
  assert_equal(["groonga", "google"],
204
204
  index.search("engine").collect {|record| record.key.key})
@@ -317,4 +317,28 @@ class HashTest < Test::Unit::TestCase
317
317
  bob_again = users.add("bob")
318
318
  assert_not_predicate(bob_again, :added?)
319
319
  end
320
+
321
+ def test_defrag
322
+ users = Groonga::Hash.create(:name => "Users",
323
+ :key_type => "ShortText")
324
+ users.define_column("name", "ShortText")
325
+ users.define_column("address", "ShortText")
326
+ 1000.times do |i|
327
+ users.add("user #{i}",
328
+ :name => "user #{i}" * 1000,
329
+ :address => "address #{i}" * 1000)
330
+ end
331
+ assert_equal(7, users.defrag)
332
+ end
333
+
334
+ def test_rename
335
+ users = Groonga::Hash.create(:name => "Users",
336
+ :key_type => "ShortText")
337
+ name = users.define_column("name", "ShortText")
338
+ address = users.define_column("address", "ShortText")
339
+
340
+ users.rename("People")
341
+ assert_equal(["People", "People.name", "People.address"],
342
+ [users.name, name.name, address.name])
343
+ end
320
344
  end