Class: Groonga::Schema::TableDefinition

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

Overview

スキーマ定義時にGroonga::Schema.create_tableや Groonga::Schema#create_tableからブロックに渡されてくる オブジェクト

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Path

#columns_directory_path, #rmdir_if_available, #tables_directory_path

Constructor Details

#initialize(name, options) ⇒ TableDefinition

Returns a new instance of TableDefinition.



1004
1005
1006
1007
1008
1009
1010
1011
# File 'lib/groonga/schema.rb', line 1004

def initialize(name, options)
  @name = name
  @name = @name.to_s if @name.is_a?(Symbol)
  @definitions = []
  validate_options(options)
  @options = options
  @table_type = table_type
end

Instance Attribute Details

#nameObject (readonly)

テーブルの名前



1001
1002
1003
# File 'lib/groonga/schema.rb', line 1001

def name
  @name
end

Instance Method Details

#[](name, definition_class = nil) ⇒ Object



1394
1395
1396
1397
1398
1399
# File 'lib/groonga/schema.rb', line 1394

def [](name, definition_class=nil)
  @definitions.find do |definition|
    definition.name.to_s == name.to_s and
      (definition_class.nil? or definition.is_a?(definition_class))
  end
end

#boolean(name, options = {}) ⇒ Object Also known as: bool

名前が name の真偽値を格納できるカラムを作成する。

options に指定可能な値は #column を参照。



1354
1355
1356
# File 'lib/groonga/schema.rb', line 1354

def boolean(name, options={})
  column(name, "Bool", options)
end

#column(name, type, options = {}) ⇒ Object

名前が name で型が type のカラムを作成する。

Parameters:

  • options (::Hash) (defaults to: {})

    The name and value pairs. Omitted names are initialized as the default value.

Options Hash (options):

  • :force (Object)

    The force

    true を指定すると既存の同名のカラムが 存在していても、強制的に新しいカラムを作成する。

  • :path (Object)

    The path

    カラムを保存するパス。

  • :persistent (Object)

    The persistent

    true を指定すると永続カラムとなる。:path を省略 した場合は自動的にパスが付加される。

  • :type (Object) — default: :scalar

    The type

    カラムの値の格納方法について指定する。 :scalar

    スカラ値(単独の値)を格納する。
    

    :vector

    値の配列を格納する。
    
  • :compress (Object)

    The compress

    値の圧縮方法を指定する。省略した場合は、圧縮しない。 :zlib

    値をzlib圧縮して格納する。
    

    :lzo

    値をlzo圧縮して格納する。
    


1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
# File 'lib/groonga/schema.rb', line 1067

def column(name, type, options={})
  definition = self[name, ColumnDefinition]
  if definition.nil?
    definition = ColumnDefinition.new(name, options)
    update_definition(name, ColumnDefinition, definition)
  end
  definition.type = type
  definition.options.merge!(column_options.merge(options))
  self
end

#contextObject



1402
1403
1404
# File 'lib/groonga/schema.rb', line 1402

def context
  @options[:context] || Groonga::Context.default
end

#defineObject



1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
# File 'lib/groonga/schema.rb', line 1014

def define
  table = context[@name]
  if @options[:change]
    raise TableNotExists.new(@name) if table.nil?
  else
    if table
      unless same_table?(table, create_options)
        if @options[:force]
          table.remove
          table = nil
        else
          options = create_options
          raise TableCreationWithDifferentOptions.new(table, options)
        end
      end
    end
    table ||= @table_type.create(create_options)
  end
  @definitions.each do |definition|
    definition.define(self, table)
  end
  table
end

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

名前が name のieee754形式の64bit浮動小数点数のカラム を作成する。

options に指定可能な値は #column を参照。



1288
1289
1290
# File 'lib/groonga/schema.rb', line 1288

def float(name, options={})
  column(name, "Float", options)
end

#index(target_table_or_target_column_full_name, *args) ⇒ Object

target_tabletarget_column を対象とするインデック スカラムを作成します。複数のカラムを指定することもで きます。

target_column_full_name で指定するときはテーブル名 とカラム名を“.”でつなげます。例えば、「Users」テーブ ルの「name」カラムのインデックスカラムを指定する場合 はこうなります。

table.index("Users.name")

Parameters:

  • options (::Hash)

    The name and value pairs. Omitted names are initialized as the default value.



1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
# File 'lib/groonga/schema.rb', line 1152

def index(target_table_or_target_column_full_name, *args)
  key, target_table, target_columns, options =
    parse_index_argument(target_table_or_target_column_full_name, *args)

  name = options.delete(:name)
  definition = self[key, IndexColumnDefinition]
  if definition.nil?
    definition = IndexColumnDefinition.new(name, options)
    update_definition(key, IndexColumnDefinition, definition)
  end
  definition.target_table = target_table
  definition.target_columns = target_columns
  definition.options.merge!(column_options.merge(options))
  self
end

#integer16(name, options = {}) ⇒ Object Also known as: int16

Defines a 16 bit signed integer column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1218
1219
1220
# File 'lib/groonga/schema.rb', line 1218

def integer16(name, options={})
  column(name, "Int16", options)
end

#integer32(name, options = {}) ⇒ Object Also known as: integer, int32

名前が name の32bit符号付き整数のカラムを作成する。

options に指定可能な値は #column を参照。



1227
1228
1229
# File 'lib/groonga/schema.rb', line 1227

def integer32(name, options={})
  column(name, "Int32", options)
end

#integer64(name, options = {}) ⇒ Object Also known as: int64

名前が name の64bit符号付き整数のカラムを作成する。

options に指定可能な値は #column を参照。



1237
1238
1239
# File 'lib/groonga/schema.rb', line 1237

def integer64(name, options={})
  column(name, "Int64", options)
end

#integer8(name, options = {}) ⇒ Object Also known as: int8

Defines a 8 bit signed integer column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1207
1208
1209
# File 'lib/groonga/schema.rb', line 1207

def integer8(name, options={})
  column(name, "Int8", options)
end

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

名前が name の2Gbyte以下の文字列を格納できるカラムを 作成する。

options に指定可能な値は #column を参照。



1333
1334
1335
# File 'lib/groonga/schema.rb', line 1333

def long_text(name, options={})
  column(name, "LongText", options)
end

#reference(name, table = nil, options = {}) ⇒ Object

名前が nametable のレコードIDを格納する参照カラ ムを作成する。

table が省略された場合は name の複数形が使われる。 例えば、 name が“user”な場合は table は“users”になる。

options に指定可能な値は #column を参照。



1345
1346
1347
1348
# File 'lib/groonga/schema.rb', line 1345

def reference(name, table=nil, options={})
  table ||= lambda {|context| guess_table_name(context, name)}
  column(name, table, options)
end

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

名前が name のカラムを削除します。

options に指定可能な値はありません(TODO options は不要?)。



1082
1083
1084
1085
1086
1087
1088
1089
1090
# File 'lib/groonga/schema.rb', line 1082

def remove_column(name, options={})
  definition = self[name, ColumnRemoveDefinition]
  if definition.nil?
    definition = ColumnRemoveDefinition.new(name, options)
    update_definition(name, ColumnRemoveDefinition, definition)
  end
  definition.options.merge!(options)
  self
end

#remove_index(target_table_or_target_column_full_name, *args) ⇒ Object

target_tabletarget_column を対象とするインデッ クスカラムを削除します。

target_column_full_name で指定するときはテーブル名 とカラム名を“.”でつなげます。例えば、「Users」テーブ ルの「name」カラムのインデックスカラムを削除する場合 はこうなります。

table.remove_index("Users.name")

Parameters:

  • options (::Hash)

    The name and value pairs. Omitted names are initialized as the default value.



1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
# File 'lib/groonga/schema.rb', line 1182

def remove_index(target_table_or_target_column_full_name, *args)
  key, target_table, target_columns, options =
    parse_index_argument(target_table_or_target_column_full_name, *args)

  name = options.delete(:name)
  name ||= lambda do |context|
    IndexColumnDefinition.column_name(context,
                                      target_table,
                                      target_columns)
  end
  definition = self[key, ColumnRemoveDefinition]
  if definition.nil?
    definition = ColumnRemoveDefinition.new(name, options)
    update_definition(key, ColumnRemoveDefinition, definition)
  end
  definition.options.merge!(options)
  self
end

#rename_column(current_name, new_name, options = {}) ⇒ Object

Renames current_name column to new_name column.

Parameters:

  • options (::Hash) (defaults to: {})

    The name and value pairs. Omitted names are initialized as the default value.

Options Hash (options):

  • :context (Groonga:Context) — default: Groonga::Context.default

    The context to be used in renaming.



1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
# File 'lib/groonga/schema.rb', line 1099

def rename_column(current_name, new_name, options={})
  definition = self[name, ColumnRenameDefinition]
  if definition.nil?
    definition = ColumnRenameDefinition.new(current_name, new_name,
                                            options)
    update_definition(name, ColumnRenameDefinition, definition)
  end
  definition.options.merge!(options)
  self
end

#short_text(name, options = {}) ⇒ Object Also known as: string

名前が name の4Kbyte以下の文字列を格納できるカラムを 作成する。

options に指定可能な値は #column を参照。



1314
1315
1316
# File 'lib/groonga/schema.rb', line 1314

def short_text(name, options={})
  column(name, "ShortText", options)
end

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

名前が name の64Kbyte以下の文字列を格納できるカラムを 作成する。

options に指定可能な値は #column を参照。



1324
1325
1326
# File 'lib/groonga/schema.rb', line 1324

def text(name, options={})
  column(name, "Text", options)
end

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

名前が name の64bit符号付き整数で1970年1月1日0時0分 0秒からの経過マイクロ秒数を格納するカラムを作成する。

options に指定可能な値は #column を参照。



1297
1298
1299
# File 'lib/groonga/schema.rb', line 1297

def time(name, options={})
  column(name, "Time", options)
end

#timestamps(options = {}) ⇒ Object

以下と同様:

table.time("updated_at")
table.time("created_at")


1304
1305
1306
1307
# File 'lib/groonga/schema.rb', line 1304

def timestamps(options={})
  time("created_at", options)
  time("updated_at", options)
end

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

Defines a geo point in Tokyo geodetic system column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1377
1378
1379
# File 'lib/groonga/schema.rb', line 1377

def tokyo_geo_point(name, options={})
  column(name, "TokyoGeoPoint", options)
end

#unsigned_integer16(name, options = {}) ⇒ Object Also known as: uint16

Defines a 16 bit unsigned integer column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1259
1260
1261
# File 'lib/groonga/schema.rb', line 1259

def unsigned_integer16(name, options={})
  column(name, "UInt16", options)
end

#unsigned_integer32(name, options = {}) ⇒ Object Also known as: unsigned_integer, uint32

名前が name の32bit符号なし整数のカラムを作成する。

options に指定可能な値は #column を参照。



1268
1269
1270
# File 'lib/groonga/schema.rb', line 1268

def unsigned_integer32(name, options={})
  column(name, "UInt32", options)
end

#unsigned_integer64(name, options = {}) ⇒ Object Also known as: uint64

名前が name の64bit符号なし整数のカラムを作成する。

options に指定可能な値は #column を参照。



1278
1279
1280
# File 'lib/groonga/schema.rb', line 1278

def unsigned_integer64(name, options={})
  column(name, "UInt64", options)
end

#unsigned_integer8(name, options = {}) ⇒ Object Also known as: uint8

Defines a 8 bit unsigned integer column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1248
1249
1250
# File 'lib/groonga/schema.rb', line 1248

def unsigned_integer8(name, options={})
  column(name, "UInt8", options)
end

#wgs84_geo_point(name, options = {}) ⇒ Object Also known as: geo_point

Defines a geo point in WGS 84 (World Geodetic System) column named @name@.

Parameters:

  • name (String or Symbol)

    the column name

  • options (Hash) (defaults to: {})

    ({}) the options

See Also:



1388
1389
1390
# File 'lib/groonga/schema.rb', line 1388

def wgs84_geo_point(name, options={})
  column(name, "WGS84GeoPoint", options)
end