From 8005be76495805b15bf528b3a205d70577198c83 Mon Sep 17 00:00:00 2001 From: "NARUSE, Yui" Date: Thu, 20 Jul 2017 15:56:03 +0900 Subject: [PATCH] Allow name and sql_alias are equal --- lib/td/client/model.rb | 4 ++-- spec/td/client/model_schema_spec.rb | 29 ++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/td/client/model.rb b/lib/td/client/model.rb index ed309352..c6c02752 100644 --- a/lib/td/client/model.rb +++ b/lib/td/client/model.rb @@ -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 @@ -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 diff --git a/spec/td/client/model_schema_spec.rb b/spec/td/client/model_schema_spec.rb index 266495b1..e7cbacfb 100644 --- a/spec/td/client/model_schema_spec.rb +++ b/spec/td/client/model_schema_spec.rb @@ -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) @@ -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 @@ -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])