veritas-sql-generator 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.rvmrc +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +20 -10
- data/Guardfile +22 -0
- data/README.rdoc +2 -0
- data/Rakefile +4 -2
- data/TODO +16 -2
- data/config/flay.yml +2 -2
- data/config/flog.yml +1 -1
- data/config/roodi.yml +5 -5
- data/config/site.reek +21 -19
- data/lib/veritas/sql/generator.rb +25 -2
- data/lib/veritas/sql/generator/core_ext/date.rb +20 -0
- data/lib/veritas/sql/generator/core_ext/date_time.rb +45 -0
- data/lib/veritas/sql/generator/direction.rb +3 -1
- data/lib/veritas/sql/generator/function.rb +54 -0
- data/lib/veritas/sql/generator/function/aggregate.rb +134 -0
- data/lib/veritas/sql/generator/function/connective.rb +53 -0
- data/lib/veritas/sql/generator/function/numeric.rb +135 -0
- data/lib/veritas/sql/generator/function/predicate.rb +266 -0
- data/lib/veritas/sql/generator/function/proposition.rb +38 -0
- data/lib/veritas/sql/generator/function/string.rb +29 -0
- data/lib/veritas/sql/generator/identifier.rb +2 -1
- data/lib/veritas/sql/generator/literal.rb +15 -18
- data/lib/veritas/sql/generator/relation.rb +144 -17
- data/lib/veritas/sql/generator/relation/binary.rb +16 -64
- data/lib/veritas/sql/generator/relation/set.rb +30 -22
- data/lib/veritas/sql/generator/relation/unary.rb +131 -78
- data/lib/veritas/sql/generator/version.rb +1 -1
- data/spec/unit/date/iso8601_spec.rb +23 -0
- data/spec/unit/date_time/iso_8601_spec.rb +115 -0
- data/spec/unit/veritas/sql/generator/class_methods/parenthesize_spec.rb +18 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_count_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_maximum_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_mean_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_minimum_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_standard_deviation_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_sum_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/aggregate/visit_veritas_aggregate_variance_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/function/connective/visit_veritas_function_connective_conjunction_spec.rb +20 -0
- data/spec/unit/veritas/sql/generator/function/connective/visit_veritas_function_connective_disjunction_spec.rb +20 -0
- data/spec/unit/veritas/sql/generator/function/connective/visit_veritas_function_connective_negation_spec.rb +20 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_absolute_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_addition_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_division_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_exponentiation_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_modulo_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_multiplication_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_square_root_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_subtraction_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_unary_minus_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/numeric/visit_veritas_function_numeric_unary_plus_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_equality_spec.rb → function/predicate/visit_veritas_function_predicate_equality_spec.rb} +5 -5
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_exclusion_spec.rb → function/predicate/visit_veritas_function_predicate_exclusion_spec.rb} +10 -6
- data/spec/unit/veritas/sql/generator/function/predicate/visit_veritas_function_predicate_greater_than_or_equal_to_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_greater_than_spec.rb → function/predicate/visit_veritas_function_predicate_greater_than_spec.rb} +5 -5
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_inclusion_spec.rb → function/predicate/visit_veritas_function_predicate_inclusion_spec.rb} +10 -6
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_inequality_spec.rb → function/predicate/visit_veritas_function_predicate_inequality_spec.rb} +8 -8
- data/spec/unit/veritas/sql/generator/function/predicate/visit_veritas_function_predicate_less_than_or_equal_to_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/{logic/visit_veritas_logic_predicate_less_than_spec.rb → function/predicate/visit_veritas_function_predicate_less_than_spec.rb} +5 -5
- data/spec/unit/veritas/sql/generator/function/proposition/visit_veritas_function_proposition_contradiction_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/proposition/visit_veritas_function_proposition_tautology_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/function/string/visit_veritas_function_string_length_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/literal/class_methods/dup_frozen_spec.rb +2 -2
- data/spec/unit/veritas/sql/generator/relation/binary/base/to_subquery_spec.rb +1 -1
- data/spec/unit/veritas/sql/generator/relation/binary/base/{visit_veritas_base_relation_spec.rb → visit_veritas_relation_base_spec.rb} +3 -3
- data/spec/unit/veritas/sql/generator/relation/binary/to_s_spec.rb +2 -2
- data/spec/unit/veritas/sql/generator/relation/binary/to_subquery_spec.rb +2 -2
- data/spec/unit/veritas/sql/generator/relation/binary/visit_veritas_algebra_join_spec.rb +74 -33
- data/spec/unit/veritas/sql/generator/relation/binary/visit_veritas_algebra_product_spec.rb +63 -19
- data/spec/unit/veritas/sql/generator/relation/class_methods/visit_spec.rb +1 -1
- data/spec/unit/veritas/sql/generator/relation/set/class_methods/normalize_operand_headers_spec.rb +35 -0
- data/spec/unit/veritas/sql/generator/relation/set/to_s_spec.rb +1 -1
- data/spec/unit/veritas/sql/generator/relation/set/to_subquery_spec.rb +4 -4
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_difference_spec.rb +83 -30
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_intersection_spec.rb +80 -30
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_union_spec.rb +80 -30
- data/spec/unit/veritas/sql/generator/relation/to_s_spec.rb +50 -0
- data/spec/unit/veritas/sql/generator/relation/to_subquery_spec.rb +49 -0
- data/spec/unit/veritas/sql/generator/relation/unary/to_s_spec.rb +1 -1
- data/spec/unit/veritas/sql/generator/relation/unary/to_subquery_spec.rb +6 -6
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_extension_spec.rb +165 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_projection_spec.rb +84 -29
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_rename_spec.rb +69 -27
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_restriction_spec.rb +64 -22
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_summarization_spec.rb +652 -0
- data/spec/unit/veritas/sql/generator/relation/unary/{visit_veritas_base_relation_spec.rb → visit_veritas_relation_base_spec.rb} +4 -4
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_limit_spec.rb +60 -20
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_offset_spec.rb +60 -20
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_order_spec.rb +63 -23
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_reverse_spec.rb +60 -20
- data/spec/unit/veritas/sql/generator/relation/visited_spec.rb +1 -1
- data/tasks/metrics/ci.rake +7 -0
- data/tasks/{quality → metrics}/flay.rake +0 -0
- data/tasks/{quality → metrics}/flog.rake +0 -0
- data/tasks/{quality → metrics}/heckle.rake +1 -0
- data/tasks/{quality → metrics}/metric_fu.rake +3 -0
- data/tasks/{quality → metrics}/reek.rake +0 -0
- data/tasks/{quality → metrics}/roodi.rake +0 -0
- data/tasks/{quality → metrics}/yardstick.rake +0 -0
- data/tasks/spec.rake +1 -0
- data/veritas-sql-generator.gemspec +82 -114
- metadata +137 -125
- data/lib/veritas/base_relation.rb +0 -36
- data/lib/veritas/sql/generator/logic.rb +0 -349
- data/spec/unit/veritas/base_relation/name_spec.rb +0 -45
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_conjunction_spec.rb +0 -16
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_disjunction_spec.rb +0 -16
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_negation_spec.rb +0 -16
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_greater_than_or_equal_to_spec.rb +0 -15
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_less_than_or_equal_to_spec.rb +0 -15
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_proposition_contradiction_spec.rb +0 -15
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_proposition_tautology_spec.rb +0 -15
- data/spec/unit/veritas/sql/generator/relation/binary/class_methods/subquery_spec.rb +0 -42
- data/spec/unit/veritas/sql/generator/relation/class_methods/subquery_spec.rb +0 -33
- data/tasks/quality/ci.rake +0 -2
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Numeric, '#visit_veritas_function_numeric_unary_minus' do
|
6
|
+
subject { object.visit_veritas_function_numeric_unary_minus(unary_minus) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Numeric } }
|
9
|
+
let(:unary_minus) { Attribute::Integer.new(:number).unary_minus }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('- ("number")') }
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Numeric, '#visit_veritas_function_numeric_unary_plus' do
|
6
|
+
subject { object.visit_veritas_function_numeric_unary_plus(unary_plus) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Numeric } }
|
9
|
+
let(:unary_plus) { Attribute::Integer.new(:number).unary_plus }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('+ ("number")') }
|
15
|
+
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_equality' do
|
6
|
+
subject { object.visit_veritas_function_predicate_equality(equality) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:attribute) { Attribute::Integer.new(:id)
|
10
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
10
|
+
let(:object) { described_class.new }
|
11
11
|
|
12
12
|
context 'when the right operand is not nil' do
|
13
13
|
let(:equality) { attribute.eq(1) }
|
@@ -2,12 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_exclusion' do
|
6
|
+
subject { object.visit_veritas_function_predicate_exclusion(exclusion) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:attribute) { Attribute::Integer.new(:id)
|
10
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
before do
|
13
|
+
described_class.class_eval { include SQL::Generator::Function::Connective }
|
14
|
+
end
|
11
15
|
|
12
16
|
context 'when right operand is an inclusive Range' do
|
13
17
|
let(:exclusion) { attribute.exclude(1..10) }
|
@@ -38,6 +42,6 @@ describe SQL::Generator::Logic, '#visit_veritas_logic_predicate_exclusion' do
|
|
38
42
|
|
39
43
|
it_should_behave_like 'a generated SQL expression'
|
40
44
|
|
41
|
-
its(:to_s) { should eql('
|
45
|
+
its(:to_s) { should eql('TRUE') }
|
42
46
|
end
|
43
47
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_greater_than_or_equal_to' do
|
6
|
+
subject { object.visit_veritas_function_predicate_greater_than_or_equal_to(greater_than_or_equal_to) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:greater_than_or_equal_to) { Attribute::Integer.new(:id).gte(1) }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('"id" >= 1') }
|
15
|
+
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_greater_than' do
|
6
|
+
subject { object.visit_veritas_function_predicate_greater_than(greater_than) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:greater_than) { Attribute::Integer.new(:id).gt(1)
|
10
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:greater_than) { Attribute::Integer.new(:id).gt(1) }
|
10
|
+
let(:object) { described_class.new }
|
11
11
|
|
12
12
|
it_should_behave_like 'a generated SQL expression'
|
13
13
|
|
@@ -2,12 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_inclusion' do
|
6
|
+
subject { object.visit_veritas_function_predicate_inclusion(inclusion) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:attribute) { Attribute::Integer.new(:id)
|
10
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
before do
|
13
|
+
described_class.class_eval { include SQL::Generator::Function::Connective }
|
14
|
+
end
|
11
15
|
|
12
16
|
context 'when right operand is an inclusive Range' do
|
13
17
|
let(:inclusion) { attribute.include(1..10) }
|
@@ -38,6 +42,6 @@ describe SQL::Generator::Logic, '#visit_veritas_logic_predicate_inclusion' do
|
|
38
42
|
|
39
43
|
it_should_behave_like 'a generated SQL expression'
|
40
44
|
|
41
|
-
its(:to_s) { should eql('
|
45
|
+
its(:to_s) { should eql('FALSE') }
|
42
46
|
end
|
43
47
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_inequality' do
|
6
|
+
subject { object.visit_veritas_function_predicate_inequality(inequality) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:object) { described_class.new }
|
10
10
|
|
11
11
|
context 'and the left attribute is optional' do
|
12
12
|
let(:attribute) { Attribute::Integer.new(:age, :required => false) }
|
@@ -18,8 +18,8 @@ describe SQL::Generator::Logic, '#visit_veritas_logic_predicate_inequality' do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
context 'and the right attribute is optional' do
|
21
|
-
let(:attribute) { Attribute::Integer.new(:age, :required => false)
|
22
|
-
let(:inequality) {
|
21
|
+
let(:attribute) { Attribute::Integer.new(:age, :required => false) }
|
22
|
+
let(:inequality) { Function::Predicate::Inequality.new(1, attribute) }
|
23
23
|
|
24
24
|
it_should_behave_like 'a generated SQL expression'
|
25
25
|
|
@@ -27,8 +27,8 @@ describe SQL::Generator::Logic, '#visit_veritas_logic_predicate_inequality' do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'and the left is a value' do
|
30
|
-
let(:attribute) { Attribute::Integer.new(:id)
|
31
|
-
let(:inequality) {
|
30
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
31
|
+
let(:inequality) { Function::Predicate::Inequality.new(1, attribute) }
|
32
32
|
|
33
33
|
it_should_behave_like 'a generated SQL expression'
|
34
34
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_less_than_or_equal_to' do
|
6
|
+
subject { object.visit_veritas_function_predicate_less_than_or_equal_to(less_than_or_equal_to) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:less_than_or_equal_to) { Attribute::Integer.new(:id).lte(1) }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('"id" <= 1') }
|
15
|
+
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Function::Predicate, '#visit_veritas_function_predicate_less_than' do
|
6
|
+
subject { object.visit_veritas_function_predicate_less_than(less_than) }
|
7
7
|
|
8
|
-
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::
|
9
|
-
let(:less_than) { Attribute::Integer.new(:id).lt(1)
|
10
|
-
let(:object) { described_class.new
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Predicate } }
|
9
|
+
let(:less_than) { Attribute::Integer.new(:id).lt(1) }
|
10
|
+
let(:object) { described_class.new }
|
11
11
|
|
12
12
|
it_should_behave_like 'a generated SQL expression'
|
13
13
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Proposition, '#visit_veritas_function_proposition_contradiction' do
|
6
|
+
subject { object.visit_veritas_function_proposition_contradiction(contradiction) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Proposition } }
|
9
|
+
let(:contradiction) { Function::Proposition::Contradiction.instance }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('FALSE') }
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::Proposition, '#visit_veritas_function_proposition_tautology' do
|
6
|
+
subject { object.visit_veritas_function_proposition_tautology(tautology) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::Proposition } }
|
9
|
+
let(:tautology) { Function::Proposition::Tautology.instance }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('TRUE') }
|
15
|
+
end
|
data/spec/unit/veritas/sql/generator/function/string/visit_veritas_function_string_length_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SQL::Generator::Function::String, '#visit_veritas_function_string_length' do
|
6
|
+
subject { object.visit_veritas_function_string_length(length) }
|
7
|
+
|
8
|
+
let(:described_class) { Class.new(SQL::Generator::Visitor) { include SQL::Generator::Function::String } }
|
9
|
+
let(:length) { Attribute::String.new(:name).length }
|
10
|
+
let(:object) { described_class.new }
|
11
|
+
|
12
|
+
it_should_behave_like 'a generated SQL expression'
|
13
|
+
|
14
|
+
its(:to_s) { should eql('LENGTH ("name")') }
|
15
|
+
end
|
@@ -8,7 +8,7 @@ describe SQL::Generator::Literal, '.dup_frozen' do
|
|
8
8
|
let(:object) { SQL::Generator::Literal }
|
9
9
|
|
10
10
|
context 'with a frozen object' do
|
11
|
-
let(:object_arg) {
|
11
|
+
let(:object_arg) { Time.now.freeze }
|
12
12
|
|
13
13
|
it { should_not equal(object_arg) }
|
14
14
|
|
@@ -16,7 +16,7 @@ describe SQL::Generator::Literal, '.dup_frozen' do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context 'with a non-frozen object' do
|
19
|
-
let(:object_arg) {
|
19
|
+
let(:object_arg) { Time.now }
|
20
20
|
|
21
21
|
it { should equal(object_arg) }
|
22
22
|
end
|
@@ -10,7 +10,7 @@ describe SQL::Generator::Relation::Binary::Base, '#to_subquery' do
|
|
10
10
|
let(:age) { Attribute::Integer.new(:age, :required => false) }
|
11
11
|
let(:header) { [ id, name, age ] }
|
12
12
|
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
13
|
-
let(:base_relation) {
|
13
|
+
let(:base_relation) { Relation::Base.new('users', header, body) }
|
14
14
|
let(:object) { described_class.new }
|
15
15
|
|
16
16
|
context 'when no object visited' do
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe SQL::Generator::Relation::Binary::Base, '#
|
6
|
-
subject { object.
|
5
|
+
describe SQL::Generator::Relation::Binary::Base, '#visit_veritas_relation_base' do
|
6
|
+
subject { object.visit_veritas_relation_base(base_relation) }
|
7
7
|
|
8
8
|
let(:relation_name) { 'users' }
|
9
9
|
let(:id) { Attribute::Integer.new(:id) }
|
@@ -11,7 +11,7 @@ describe SQL::Generator::Relation::Binary::Base, '#visit_veritas_base_relation'
|
|
11
11
|
let(:age) { Attribute::Integer.new(:age, :required => false) }
|
12
12
|
let(:header) { [ id, name, age ] }
|
13
13
|
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
14
|
-
let(:base_relation) {
|
14
|
+
let(:base_relation) { Relation::Base.new(relation_name, header, body) }
|
15
15
|
let(:object) { described_class.new }
|
16
16
|
|
17
17
|
it_should_behave_like 'a generated SQL SELECT query'
|
@@ -10,7 +10,7 @@ describe SQL::Generator::Relation::Binary, '#to_s' do
|
|
10
10
|
let(:age) { Attribute::Integer.new(:age, :required => false) }
|
11
11
|
let(:header) { [ id, name, age ] }
|
12
12
|
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
13
|
-
let(:base_relation) {
|
13
|
+
let(:base_relation) { Relation::Base.new('users', header, body) }
|
14
14
|
let(:object) { described_class.new }
|
15
15
|
|
16
16
|
context 'when no object visited' do
|
@@ -30,6 +30,6 @@ describe SQL::Generator::Relation::Binary, '#to_s' do
|
|
30
30
|
|
31
31
|
it_should_behave_like 'a generated SQL expression'
|
32
32
|
|
33
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" NATURAL JOIN "users"') }
|
33
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" AS "left" NATURAL JOIN "users" AS "right"') }
|
34
34
|
end
|
35
35
|
end
|
@@ -10,7 +10,7 @@ describe SQL::Generator::Relation::Binary, '#to_subquery' do
|
|
10
10
|
let(:age) { Attribute::Integer.new(:age, :required => false) }
|
11
11
|
let(:header) { [ id, name, age ] }
|
12
12
|
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
13
|
-
let(:base_relation) {
|
13
|
+
let(:base_relation) { Relation::Base.new('users', header, body) }
|
14
14
|
let(:object) { described_class.new }
|
15
15
|
|
16
16
|
context 'when no object visited' do
|
@@ -30,6 +30,6 @@ describe SQL::Generator::Relation::Binary, '#to_subquery' do
|
|
30
30
|
|
31
31
|
it_should_behave_like 'a generated SQL expression'
|
32
32
|
|
33
|
-
its(:to_s) { should eql('SELECT * FROM "users" NATURAL JOIN "users"') }
|
33
|
+
its(:to_s) { should eql('(SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right")') }
|
34
34
|
end
|
35
35
|
end
|
@@ -5,25 +5,26 @@ require 'spec_helper'
|
|
5
5
|
describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
6
6
|
subject { object.visit_veritas_algebra_join(join) }
|
7
7
|
|
8
|
-
let(:relation_name)
|
9
|
-
let(:id)
|
10
|
-
let(:name)
|
11
|
-
let(:age)
|
12
|
-
let(:header)
|
13
|
-
let(:body)
|
14
|
-
let(:base_relation)
|
15
|
-
let(:
|
16
|
-
let(:
|
17
|
-
let(:
|
18
|
-
let(:
|
8
|
+
let(:relation_name) { 'users' }
|
9
|
+
let(:id) { Attribute::Integer.new(:id) }
|
10
|
+
let(:name) { Attribute::String.new(:name) }
|
11
|
+
let(:age) { Attribute::Integer.new(:age, :required => false) }
|
12
|
+
let(:header) { [ id, name, age ] }
|
13
|
+
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
14
|
+
let(:base_relation) { Relation::Base.new(relation_name, header, body) }
|
15
|
+
let(:other_relation) { Relation::Base.new('other', header, body) }
|
16
|
+
let(:left) { operand }
|
17
|
+
let(:right) { operand }
|
18
|
+
let(:join) { left.join(right) }
|
19
|
+
let(:object) { described_class.new }
|
19
20
|
|
20
21
|
context 'when the operands are base relations' do
|
21
22
|
let(:operand) { base_relation }
|
22
23
|
|
23
24
|
it_should_behave_like 'a generated SQL SELECT query'
|
24
25
|
|
25
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" NATURAL JOIN "users"') }
|
26
|
-
its(:to_subquery) { should eql('SELECT * FROM "users" NATURAL JOIN "users"')
|
26
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" AS "left" NATURAL JOIN "users" AS "right"') }
|
27
|
+
its(:to_subquery) { should eql('(SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right")') }
|
27
28
|
end
|
28
29
|
|
29
30
|
context 'when the operands are projections' do
|
@@ -32,7 +33,16 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
32
33
|
it_should_behave_like 'a generated SQL SELECT query'
|
33
34
|
|
34
35
|
its(:to_s) { should eql('SELECT "id", "name" FROM (SELECT DISTINCT "id", "name" FROM "users") AS "left" NATURAL JOIN (SELECT DISTINCT "id", "name" FROM "users") AS "right"') }
|
35
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT DISTINCT "id", "name" FROM "users") AS "left" NATURAL JOIN (SELECT DISTINCT "id", "name" FROM "users") AS "right"')
|
36
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT DISTINCT "id", "name" FROM "users") AS "left" NATURAL JOIN (SELECT DISTINCT "id", "name" FROM "users") AS "right")') }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when the operand is an extension' do
|
40
|
+
let(:operand) { base_relation.extend { |r| r.add(:one, 1) } }
|
41
|
+
|
42
|
+
it_should_behave_like 'a generated SQL SELECT query'
|
43
|
+
|
44
|
+
its(:to_s) { should eql('SELECT "id", "name", "age", "one" FROM (SELECT *, 1 AS "one" FROM "users") AS "left" NATURAL JOIN (SELECT *, 1 AS "one" FROM "users") AS "right"') }
|
45
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT *, 1 AS "one" FROM "users") AS "left" NATURAL JOIN (SELECT *, 1 AS "one" FROM "users") AS "right")') }
|
36
46
|
end
|
37
47
|
|
38
48
|
context 'when the operands are rename' do
|
@@ -41,7 +51,7 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
41
51
|
it_should_behave_like 'a generated SQL SELECT query'
|
42
52
|
|
43
53
|
its(:to_s) { should eql('SELECT "user_id", "name", "age" FROM (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "left" NATURAL JOIN (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "right"') }
|
44
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "left" NATURAL JOIN (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "right"')
|
54
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "left" NATURAL JOIN (SELECT "id" AS "user_id", "name", "age" FROM "users") AS "right")') }
|
45
55
|
end
|
46
56
|
|
47
57
|
context 'when the operands are restrictions' do
|
@@ -50,7 +60,38 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
50
60
|
it_should_behave_like 'a generated SQL SELECT query'
|
51
61
|
|
52
62
|
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" WHERE "id" = 1) AS "left" NATURAL JOIN (SELECT * FROM "users" WHERE "id" = 1) AS "right"') }
|
53
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" WHERE "id" = 1) AS "left" NATURAL JOIN (SELECT * FROM "users" WHERE "id" = 1) AS "right"')
|
63
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" WHERE "id" = 1) AS "left" NATURAL JOIN (SELECT * FROM "users" WHERE "id" = 1) AS "right")') }
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'when the operand is a summarization' do
|
67
|
+
context 'summarize per table dee' do
|
68
|
+
let(:summarize_per) { TABLE_DEE }
|
69
|
+
let(:operand) { base_relation.summarize(summarize_per) { |r| r.add(:count, r[:id].count) } }
|
70
|
+
|
71
|
+
it_should_behave_like 'a generated SQL SELECT query'
|
72
|
+
|
73
|
+
its(:to_s) { should eql('SELECT "count" FROM (SELECT COUNT ("id") AS "count" FROM "users") AS "left" NATURAL JOIN (SELECT COUNT ("id") AS "count" FROM "users") AS "right"') }
|
74
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT COUNT ("id") AS "count" FROM "users") AS "left" NATURAL JOIN (SELECT COUNT ("id") AS "count" FROM "users") AS "right")') }
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'summarize per table dum' do
|
78
|
+
let(:summarize_per) { TABLE_DUM }
|
79
|
+
let(:operand) { base_relation.summarize(summarize_per) { |r| r.add(:count, r[:id].count) } }
|
80
|
+
|
81
|
+
it_should_behave_like 'a generated SQL SELECT query'
|
82
|
+
|
83
|
+
its(:to_s) { should eql('SELECT "count" FROM (SELECT COUNT ("id") AS "count" FROM "users" HAVING FALSE) AS "left" NATURAL JOIN (SELECT COUNT ("id") AS "count" FROM "users" HAVING FALSE) AS "right"') }
|
84
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT COUNT ("id") AS "count" FROM "users" HAVING FALSE) AS "left" NATURAL JOIN (SELECT COUNT ("id") AS "count" FROM "users" HAVING FALSE) AS "right")') }
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'summarize by a subset of the operand header' do
|
88
|
+
let(:operand) { base_relation.summarize([ :id, :name ]) { |r| r.add(:count, r[:age].count) } }
|
89
|
+
|
90
|
+
it_should_behave_like 'a generated SQL SELECT query'
|
91
|
+
|
92
|
+
its(:to_s) { should eql('SELECT "id", "name", "count" FROM (SELECT "id", "name", COUNT ("age") AS "count" FROM "users" GROUP BY "id", "name" HAVING COUNT (*) > 0) AS "left" NATURAL JOIN (SELECT "id", "name", COUNT ("age") AS "count" FROM "users" GROUP BY "id", "name" HAVING COUNT (*) > 0) AS "right"') }
|
93
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT "id", "name", COUNT ("age") AS "count" FROM "users" GROUP BY "id", "name" HAVING COUNT (*) > 0) AS "left" NATURAL JOIN (SELECT "id", "name", COUNT ("age") AS "count" FROM "users" GROUP BY "id", "name" HAVING COUNT (*) > 0) AS "right")') }
|
94
|
+
end
|
54
95
|
end
|
55
96
|
|
56
97
|
context 'when the operands are ordered' do
|
@@ -59,7 +100,7 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
59
100
|
it_should_behave_like 'a generated SQL SELECT query'
|
60
101
|
|
61
102
|
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "right"') }
|
62
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "right"')
|
103
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age") AS "right")') }
|
63
104
|
end
|
64
105
|
|
65
106
|
context 'when the operands are reversed' do
|
@@ -68,7 +109,7 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
68
109
|
it_should_behave_like 'a generated SQL SELECT query'
|
69
110
|
|
70
111
|
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "right"') }
|
71
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "right"')
|
112
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id" DESC, "name" DESC, "age" DESC) AS "right")') }
|
72
113
|
end
|
73
114
|
|
74
115
|
context 'when the operands are limited' do
|
@@ -77,7 +118,7 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
77
118
|
it_should_behave_like 'a generated SQL SELECT query'
|
78
119
|
|
79
120
|
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "right"') }
|
80
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "right"')
|
121
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" LIMIT 1) AS "right")') }
|
81
122
|
end
|
82
123
|
|
83
124
|
context 'when the operands are offsets' do
|
@@ -86,7 +127,7 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
86
127
|
it_should_behave_like 'a generated SQL SELECT query'
|
87
128
|
|
88
129
|
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "right"') }
|
89
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "right"')
|
130
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "left" NATURAL JOIN (SELECT * FROM "users" ORDER BY "id", "name", "age" OFFSET 1) AS "right")') }
|
90
131
|
end
|
91
132
|
|
92
133
|
context 'when the operands are differences' do
|
@@ -94,8 +135,8 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
94
135
|
|
95
136
|
it_should_behave_like 'a generated SQL SELECT query'
|
96
137
|
|
97
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT
|
98
|
-
its(:to_subquery) { should eql('SELECT * FROM ((SELECT
|
138
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT "id", "name", "age" FROM "users") EXCEPT (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") EXCEPT (SELECT "id", "name", "age" FROM "users")) AS "right"') }
|
139
|
+
its(:to_subquery) { should eql('(SELECT * FROM ((SELECT "id", "name", "age" FROM "users") EXCEPT (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") EXCEPT (SELECT "id", "name", "age" FROM "users")) AS "right")') }
|
99
140
|
end
|
100
141
|
|
101
142
|
context 'when the operands are intersections' do
|
@@ -103,8 +144,8 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
103
144
|
|
104
145
|
it_should_behave_like 'a generated SQL SELECT query'
|
105
146
|
|
106
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT
|
107
|
-
its(:to_subquery) { should eql('SELECT * FROM ((SELECT
|
147
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT "id", "name", "age" FROM "users") INTERSECT (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") INTERSECT (SELECT "id", "name", "age" FROM "users")) AS "right"') }
|
148
|
+
its(:to_subquery) { should eql('(SELECT * FROM ((SELECT "id", "name", "age" FROM "users") INTERSECT (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") INTERSECT (SELECT "id", "name", "age" FROM "users")) AS "right")') }
|
108
149
|
end
|
109
150
|
|
110
151
|
context 'when the operands are unions' do
|
@@ -112,8 +153,8 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
112
153
|
|
113
154
|
it_should_behave_like 'a generated SQL SELECT query'
|
114
155
|
|
115
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT
|
116
|
-
its(:to_subquery) { should eql('SELECT * FROM ((SELECT
|
156
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM ((SELECT "id", "name", "age" FROM "users") UNION (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") UNION (SELECT "id", "name", "age" FROM "users")) AS "right"') }
|
157
|
+
its(:to_subquery) { should eql('(SELECT * FROM ((SELECT "id", "name", "age" FROM "users") UNION (SELECT "id", "name", "age" FROM "users")) AS "left" NATURAL JOIN ((SELECT "id", "name", "age" FROM "users") UNION (SELECT "id", "name", "age" FROM "users")) AS "right")') }
|
117
158
|
end
|
118
159
|
|
119
160
|
context 'when the operands are joins' do
|
@@ -121,18 +162,18 @@ describe SQL::Generator::Relation::Binary, '#visit_veritas_algebra_join' do
|
|
121
162
|
|
122
163
|
it_should_behave_like 'a generated SQL SELECT query'
|
123
164
|
|
124
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" NATURAL JOIN "users") AS "left" NATURAL JOIN (SELECT * FROM "users" NATURAL JOIN "users") AS "right"') }
|
125
|
-
its(:to_subquery) { should eql('SELECT * FROM (SELECT * FROM "users" NATURAL JOIN "users") AS "left" NATURAL JOIN (SELECT * FROM "users" NATURAL JOIN "users") AS "right"')
|
165
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM (SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right") AS "left" NATURAL JOIN (SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right") AS "right"') }
|
166
|
+
its(:to_subquery) { should eql('(SELECT * FROM (SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right") AS "left" NATURAL JOIN (SELECT * FROM "users" AS "left" NATURAL JOIN "users" AS "right") AS "right")') }
|
126
167
|
end
|
127
168
|
|
128
169
|
context 'when the operands have different base relations' do
|
129
|
-
let(:relation_name) { 'users_others'
|
130
|
-
let(:left) {
|
131
|
-
let(:right) {
|
170
|
+
let(:relation_name) { 'users_others' }
|
171
|
+
let(:left) { Relation::Base.new('users', header, body) }
|
172
|
+
let(:right) { Relation::Base.new('others', header, body) }
|
132
173
|
|
133
174
|
it_should_behave_like 'a generated SQL SELECT query'
|
134
175
|
|
135
|
-
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" NATURAL JOIN "others"') }
|
136
|
-
its(:to_subquery) { should eql('SELECT * FROM "users" NATURAL JOIN "others"')
|
176
|
+
its(:to_s) { should eql('SELECT "id", "name", "age" FROM "users" AS "left" NATURAL JOIN "others" AS "right"') }
|
177
|
+
its(:to_subquery) { should eql('(SELECT * FROM "users" AS "left" NATURAL JOIN "others" AS "right")') }
|
137
178
|
end
|
138
179
|
end
|