Class: Groonga::Schema

Inherits:
Object
  • Object
show all
Defined in:
lib/groonga/schema.rb

Overview

groongaのスキーマ(データ構造)を管理するクラス。

Groonga::Schemaを使うことにより簡単にテーブルやカラムを 追加・削除することができる。

のようなスキーマを定義する場合は以下のようになる。

Groonga::Schema.define do |schema|
  schema.create_table("Items") do |table|
    table.short_text("title")
  end

  schema.create_table("Users") do |table|
    table.short_text("name")
  end

  schema.create_table("comments") do |table|
    table.reference("item", "Items")
    table.reference("author", "Users")
    table.text("content")
    table.time("issued")
  end
end

Defined Under Namespace

Classes: ColumnDefinition, ColumnRemoveDefinition, Dumper, IndexColumnDefinition, TableDefinition, TableRemoveDefinition

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Schema

スキーマ定義を開始する。

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。



263
264
265
266
# File 'lib/groonga/schema.rb', line 263

def initialize(options={})
  @options = (options || {}).dup
  @definitions = []
end

Class Method Details

.change_table(name, options = {}, &block) ⇒ Object

call-seq:

Groonga::Schema.change_table(name, options={}) {|table| ...}

名前がnameのテーブルを変更する。以下の省略形。

Groonga::Schema.define do |schema|
  schema.change_table(name, options) do |table|
    ...
  end
end

ブロックにはGroonga::Schema::TableDefinitionオブジェ クトがわたるので、そのオブジェクトを利用してテーブル の詳細を定義する。

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。



194
195
196
197
198
# File 'lib/groonga/schema.rb', line 194

def change_table(name, options={}, &block)
  define do |schema|
    schema.change_table(name, options, &block)
  end
end

.create_table(name, options = {}, &block) ⇒ Object

call-seq:

Groonga::Schema.create_table(name, options={}) {|table| ...}

名前がnameのテーブルを作成する。以下の省略形。

Groonga::Schema.define do |schema|
  schema.create_table(name, options) do |table|
    ...
  end
end

ブロックにはGroonga::Schema::TableDefinitionオブジェ クトがわたるので、そのオブジェクトを利用してテーブル の詳細を定義する。

optionsに指定可能な値は以下の通り。

:force

trueを指定すると既存の同名のテーブルが存在してい ても、強制的にテーブルを作成する。

:type

テーブルの型を指定する。:array, :hash, :patricia_trieのいずれかを指定する。デフォルトで は:arrayになる。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。

:path

テーブルを保存するパスを指定する。パスを指定すると 永続テーブルになる。

:persistent

テーブルを永続テーブルとする。:path:を省略した場 合はパス名は自動的に作成される。デフォルトでは永続 テーブルとなる。

:value_type

値の型を指定する。省略すると値のための領域を確保しない。 値を保存したい場合は必ず指定すること。

:sub_records

trueを指定するとGroonga::Table#groupでグループ化 したときに、Groonga::Record#n_sub_recordsでグルー プに含まれるレコードの件数を取得できる。

以下は:type:hashあるいは:patricia_trieを指定 した時に指定可能。

:key_type

キーの種類を示すオブジェクトを指定する。キーの種類 には型名(“Int32”や“ShortText”など)または Groonga::Typeまたはテーブル(Groonga::Array、 Groonga::Hash、Groonga::PatriciaTrieのどれか)を指 定する。

Groonga::Typeを指定した場合は、その型が示す範囲の 値をキーとして使用する。ただし、キーの最大サイズは 4096バイトであるため、Groonga::Type::TEXTや Groonga::Type::LONG_TEXTは使用できない。

テーブルを指定した場合はレコードIDをキーとして使用 する。指定したテーブルのGroonga::Recordをキーとし て使用することもでき、その場合は自動的に Groonga::RecordからレコードIDを取得する。

省略した場合は文字列をキーとして使用する。この場合、 4096バイトまで使用可能である。

:default_tokenizer

Groonga::IndexColumnで使用するトークナイザを指定す る。デフォルトでは何も設定されていないので、テーブ ルにGroonga::IndexColumnを定義する場合は "TokenBigram"などを指定する必要がある。

以下は:type:patricia_trieを指定した時に指定可能。

:key_normalize

trueを指定するとキーを正規化する。

:key_with_sis

trueを指定するとキーの文字列の全suffixが自動的に 登録される。



155
156
157
158
159
# File 'lib/groonga/schema.rb', line 155

def create_table(name, options={}, &block)
  define do |schema|
    schema.create_table(name, options, &block)
  end
end

.define(options = {}) {|schema| ... } ⇒ Object

call-seq:

Groonga::Schema.define(options={}) {|schema| ...}

スキーマを定義する。ブロックにはGroonga::Schemaオブ ジェクトがわたるので、そのオブジェクトを利用してスキー マを定義する。以下の省略形。

schema = Groonga::Scheme.new(options)
...
schema.define

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。

Yields:

  • (schema)


64
65
66
67
68
# File 'lib/groonga/schema.rb', line 64

def define(options={})
  schema = new(options)
  yield(schema)
  schema.define
end

.dump(options = {}) ⇒ Object

スキーマの内容を文字列で返す。返された値は Groonga::Schema.restoreすることによりスキーマ内に組 み込むことができる。

dump.rb:
  File.open("/tmp/groonga-schema.rb", "w") do |schema|
    dumped_text = Groonga::Schema.dump
  end

restore.rb:
  dumped_text = Groonga::Schema.dump
  Groonga::Database.create(:path => "/tmp/new-db.grn")
  Groonga::Schema.restore(dumped_text)

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。



219
220
221
# File 'lib/groonga/schema.rb', line 219

def dump(options={})
  Dumper.new(options).dump
end

.normalize_type(type) ⇒ Object

:nodoc:



230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/groonga/schema.rb', line 230

def normalize_type(type) # :nodoc:
  return type if type.nil?
  return type if type.is_a?(Groonga::Object)
  case type.to_s
  when "string"
    "ShortText"
  when "text"
    "Text"
  when "int", "integer"
    "Int32"
  when "float"
    "Float"
  when "decimal"
    "Int64"
  when "datetime", "timestamp", "time", "date"
    "Time"
  when "binary"
    "LongText"
  when "boolean"
    "Bool"
  else
    type
  end
end

.remove_table(name, options = {}) ⇒ Object

名前がnameのテーブルを削除する。

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。



168
169
170
171
172
# File 'lib/groonga/schema.rb', line 168

def remove_table(name, options={})
  define do |schema|
    schema.remove_table(name, options)
  end
end

.restore(dumped_text, options = {}) ⇒ Object

Groonga::Schema.dumpで文字列化したスキーマを組み込む。



224
225
226
227
228
# File 'lib/groonga/schema.rb', line 224

def restore(dumped_text, options={})
  define(options) do |schema|
    schema.load(dumped_text)
	end
end

Instance Method Details

#change_table(name, options = {}) {|definition| ... } ⇒ Object

call-seq:

schema.change_table(name, options={}) {|table| ...}

名前がnameのテーブルを変更する。

テーブルの変更は#defineを呼び出すまでは実行されないこ とに注意すること。

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。

Yields:

  • (definition)


399
400
401
402
403
404
# File 'lib/groonga/schema.rb', line 399

def change_table(name, options={})
  options = @options.merge(options || {}).merge(:change => true)
  definition = TableDefinition.new(name, options)
  yield(definition)
  @definitions << definition
end

#create_table(name, options = {}) {|definition| ... } ⇒ Object

call-seq:

schema.create_table(name, options={}) {|table| ...}

名前がnameのテーブルを作成する。

テーブルの作成は#defineを呼び出すまでは実行されないこ とに注意すること。

optionsに指定可能な値は以下の通り。

:force

trueを指定すると既存の同名のテーブルが存在してい ても、強制的にテーブルを作成する。

:type

テーブルの型を指定する。:array, :hash, :patricia_trieのいずれかを指定する。デフォルトで は:arrayになる。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Schema.newで指定した Groonga::Contextを使用する。Groonga::Schema.newで指 定していない場合はGroonga::Context.defaultを使用する。

:path

テーブルを保存するパスを指定する。パスを指定すると 永続テーブルになる。

:persistent

テーブルを永続テーブルとする。:path:を省略した場 合はパス名は自動的に作成される。デフォルトでは永続 テーブルとなる。

:value_type

値の型を指定する。省略すると値のための領域を確保しな い。値を保存したい場合は必ず指定すること。

参考: Groonga::Type.new

:sub_records

trueを指定するとGroonga::Table#groupでグループ化 したときに、Groonga::Record#n_sub_recordsでグルー プに含まれるレコードの件数を取得できる。

以下は:type:hashあるいは:patricia_trieを指定 した時に指定可能。

:key_type

キーの種類を示すオブジェクトを指定する。キーの種類 には型名(“Int32”や“ShortText”など)または Groonga::Typeまたはテーブル(Groonga::Array、 Groonga::Hash、Groonga::PatriciaTrieのどれか)を指 定する。

Groonga::Typeを指定した場合は、その型が示す範囲の 値をキーとして使用する。ただし、キーの最大サイズは 4096バイトであるため、Groonga::Type::TEXTや Groonga::Type::LONG_TEXTは使用できない。

テーブルを指定した場合はレコードIDをキーとして使用 する。指定したテーブルのGroonga::Recordをキーとし て使用することもでき、その場合は自動的に Groonga::RecordからレコードIDを取得する。

省略した場合は文字列をキーとして使用する。この場合、 4096バイトまで使用可能である。

:default_tokenizer

Groonga::IndexColumnで使用するトークナイザを指定す る。デフォルトでは何も設定されていないので、テーブ ルにGroonga::IndexColumnを定義する場合は "TokenBigram"などを指定する必要がある。

以下は:type:patricia_trieを指定した時に指定可能。

:key_normalize

trueを指定するとキーを正規化する。

:key_with_sis

trueを指定するとキーの文字列の全suffixが自動的に 登録される。

Yields:

  • (definition)


365
366
367
368
369
# File 'lib/groonga/schema.rb', line 365

def create_table(name, options={})
  definition = TableDefinition.new(name, @options.merge(options || {}))
  yield(definition)
  @definitions << definition
end

#defineObject

定義されたスキーマ定義を実際に実行する。



269
270
271
272
273
# File 'lib/groonga/schema.rb', line 269

def define
  @definitions.each do |definition|
    definition.define
  end
end

#load(dumped_text) ⇒ Object

Groonga::Schema.dumpで返されたスキーマの内容を読み込む。

読み込まれた内容は#defineを呼び出すまでは実行されない ことに注意すること。



279
280
281
# File 'lib/groonga/schema.rb', line 279

def load(dumped_text)
  instance_eval(dumped_text)
end

#remove_table(name, options = {}) ⇒ Object

名前がnameのテーブルを削除する。

テーブルの削除は#defineを呼び出すまでは実行されないこ とに注意すること。

optionsに指定可能な値は以下の通り。

:context

スキーマ定義時に使用するGroonga::Contextを指定する。 省略した場合はGroonga::Context.defaultを使用する。



381
382
383
384
# File 'lib/groonga/schema.rb', line 381

def remove_table(name, options={})
  definition = TableRemoveDefinition.new(name, @options.merge(options || {}))
  @definitions << definition
end