class TreasureData::Schema
Attributes
fields[R]
@!attribute [r] fields
Public Class Methods
new(fields=[])
click to toggle source
@param [Array] fields
# File lib/td/client/model.rb, line 318 def initialize(fields=[]) @fields = fields @names = {} @fields.each do |f| raise ArgumentError, "Column name '#{f.name}' is duplicated." if @names.key?(f.name) @names[f.name] = true if f.sql_alias && f.name != f.sql_alias raise ArgumentError, "SQL Column alias '#{f.sql_alias}' is duplicated." if @names.key?(f.sql_alias) @names[f.sql_alias] = true end end end
parse(columns)
click to toggle source
@param [String] columns @return [Schema]
# File lib/td/client/model.rb, line 306 def self.parse(columns) schema = Schema.new columns.each {|column| unless /\A(?<name>.*)(?::(?<type>[^:@]+))(?:@(?<sql_alias>[^:@]+))?\z/ =~ column raise ParameterValidationError, "type must be specified" end schema.add_field(name, type, sql_alias) } schema end
Public Instance Methods
add_field(name, type, sql_alias=nil)
click to toggle source
@param [String] name @param [String] type @return [Array]
# File lib/td/client/model.rb, line 337 def add_field(name, type, sql_alias=nil) if @names.key?(name) raise ParameterValidationError, "Column name '#{name}' is duplicated." end @names[name] = true if sql_alias && sql_alias != name && @names.key?(sql_alias) raise ParameterValidationError, "SQL Column alias '#{sql_alias}' is duplicated." end @names[sql_alias] = true @fields << Field.new(name, type, sql_alias) end
from_json(obj)
click to toggle source
@param [Object] obj @return [self]
# File lib/td/client/model.rb, line 370 def from_json(obj) @fields = obj.map {|f| Field.new(*f) } self end
merge(schema)
click to toggle source
@param [Schema] schema @return [Schema]
# File lib/td/client/model.rb, line 351 def merge(schema) nf = @fields.dup schema.fields.each {|f| if i = nf.find_index {|sf| sf.name == f.name } nf[i] = f else nf << f end } Schema.new(nf) end
to_json(*args)
click to toggle source
@return [Array<Field>]
# File lib/td/client/model.rb, line 364 def to_json(*args) @fields.map {|f| f.sql_alias ? [f.name, f.type, f.sql_alias] : [f.name, f.type] }.to_json(*args) end