Skip to content

Commit

Permalink
Merge pull request #111 from treasure-data/allow-name-and-sql_alias-a…
Browse files Browse the repository at this point in the history
…re-equal

Allow name and sql_alias are equal
  • Loading branch information
nurse committed Jul 20, 2017
2 parents be7ad91 + 8005be7 commit fd01540
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
4 changes: 2 additions & 2 deletions lib/td/client/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ def initialize(fields=[])
@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
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
Expand All @@ -338,7 +338,7 @@ def add_field(name, type, sql_alias=nil)
raise ParameterValidationError, "Column name '#{name}' is duplicated."
end
@names[name] = true
if sql_alias && @names.key?(sql_alias)
if sql_alias && sql_alias != name && @names.key?(sql_alias)
raise ParameterValidationError, "SQL Column alias '#{sql_alias}' is duplicated."
end
@names[sql_alias] = true
Expand Down
29 changes: 28 additions & 1 deletion spec/td/client/model_schema_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@
expect(f.sql_alias).to eq 'alice'
end
end
context 'with sql_alias which equals to its name' do
it 'works' do
name = "abc"
f = Schema::Field.new(name, 'int', name)
expect(f.name).to eq name
expect(f.type).to eq 'int'
expect(f.sql_alias).to eq name
end
end
context 'with invalid sql_alias' do
it 'raises' do
expect{ Schema::Field.new('t:t', 'int', 't:t') }.to raise_error(ParameterValidationError)
Expand Down Expand Up @@ -57,11 +66,23 @@
end

describe '.new' do
it do
it 'works with single field' do
f = Schema::Field.new('a', 'int')
sc = Schema.new([f])
expect(sc.fields[0]).to eq f
end
it 'works with multiple fields' do
f0 = Schema::Field.new('a', 'int')
f1 = Schema::Field.new('b', 'int', 'b')
sc = Schema.new([f0, f1])
expect(sc.fields[0]).to eq f0
expect(sc.fields[1]).to eq f1
end
it 'raises' do
f0 = Schema::Field.new('a', 'int')
f1 = Schema::Field.new('b', 'int', 'a')
expect{ Schema.new([f0, f1]) }.to raise_error(ArgumentError)
end
end

describe '#fields' do
Expand All @@ -79,6 +100,12 @@
sc.add_field('b', 'double', 'bb')
expect(sc.fields[1].name).to eq 'b'
end
it do
f = Schema::Field.new('a', 'int')
sc = Schema.new([f])
sc.add_field('b', 'double', 'b')
expect(sc.fields[1].name).to eq 'b'
end
it 'raises ParameterValidationError if name is duplicated' do
f = Schema::Field.new('a', 'int')
sc = Schema.new([f])
Expand Down

0 comments on commit fd01540

Please sign in to comment.