veritas-optimizer 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +10 -4
- data/Gemfile +2 -2
- data/TODO +4 -0
- data/config/flay.yml +1 -1
- data/lib/veritas/optimizer/algebra/join.rb +26 -2
- data/lib/veritas/optimizer/version.rb +1 -1
- data/spec/rcov.opts +1 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimize_spec.rb +22 -0
- data/tasks/metrics/ci.rake +2 -2
- data/tasks/metrics/heckle.rake +11 -9
- data/tasks/spec.rake +23 -14
- data/veritas-optimizer.gemspec +8 -6
- metadata +28 -26
data/.travis.yml
CHANGED
@@ -1,11 +1,17 @@
|
|
1
|
+
language: ruby
|
1
2
|
bundler_args: --without guard metrics
|
2
3
|
script: "bundle exec rake spec"
|
3
4
|
rvm:
|
4
5
|
- 1.8.7
|
5
6
|
- 1.9.2
|
6
7
|
- 1.9.3
|
7
|
-
-
|
8
|
+
- jruby-18mode
|
9
|
+
- jruby-19mode
|
10
|
+
- rbx-18mode
|
11
|
+
- rbx-19mode
|
8
12
|
- ree
|
9
|
-
-
|
10
|
-
-
|
11
|
-
|
13
|
+
- ruby-head
|
14
|
+
- jruby-head
|
15
|
+
notifications:
|
16
|
+
email:
|
17
|
+
- dan.kubb@gmail.com
|
data/Gemfile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
source
|
3
|
+
source 'https://rubygems.org'
|
4
4
|
|
5
|
-
gem 'veritas', '~> 0.0.
|
5
|
+
gem 'veritas', '~> 0.0.7', :git => 'git://github.com/dkubb/veritas.git'
|
6
6
|
|
7
7
|
group :development do
|
8
8
|
gem 'backports', '~> 2.3.0'
|
data/TODO
CHANGED
@@ -82,6 +82,10 @@
|
|
82
82
|
* Offset with an offset > 0 can be transformed into an empty
|
83
83
|
relation, since at most there can be only one match.
|
84
84
|
|
85
|
+
* When wrapping a Product and the predicate only contains
|
86
|
+
equality/conjunction between attributes from the left and right
|
87
|
+
operands, then transform into a Join.
|
88
|
+
|
85
89
|
* Connective
|
86
90
|
* "attr > ? OR attr > ?" -> "attr > ?", with the least restrictive value
|
87
91
|
* Do the same for >=, <, <=
|
data/config/flay.yml
CHANGED
@@ -34,7 +34,7 @@ module Veritas
|
|
34
34
|
# Optimize when operands' headers are equal
|
35
35
|
class EqualHeaders < self
|
36
36
|
|
37
|
-
# Test if the operands' headers are equal
|
37
|
+
# Test if the operands' headers are equal
|
38
38
|
#
|
39
39
|
# @return [Boolean]
|
40
40
|
#
|
@@ -43,7 +43,7 @@ module Veritas
|
|
43
43
|
left.header.eql?(right.header)
|
44
44
|
end
|
45
45
|
|
46
|
-
# A Join with
|
46
|
+
# A Join with equal headers is an Intersection
|
47
47
|
#
|
48
48
|
# @return [Algebra::Intersection]
|
49
49
|
#
|
@@ -54,6 +54,29 @@ module Veritas
|
|
54
54
|
|
55
55
|
end # class EqualHeaders
|
56
56
|
|
57
|
+
# Optimize when operands' headers are disjoint
|
58
|
+
class DisjointHeaders < self
|
59
|
+
|
60
|
+
# Test if the operands' headers are disjoint
|
61
|
+
#
|
62
|
+
# @return [Boolean]
|
63
|
+
#
|
64
|
+
# @api private
|
65
|
+
def optimizable?
|
66
|
+
(left.header & right.header).none?
|
67
|
+
end
|
68
|
+
|
69
|
+
# A Join with disjoint headers is a Product
|
70
|
+
#
|
71
|
+
# @return [Algebra::Product]
|
72
|
+
#
|
73
|
+
# @api private
|
74
|
+
def optimize
|
75
|
+
left.product(right)
|
76
|
+
end
|
77
|
+
|
78
|
+
end # class EqualHeaders
|
79
|
+
|
57
80
|
# Optimize when the left operand is materialized
|
58
81
|
class LeftMaterializedOperand < self
|
59
82
|
|
@@ -146,6 +169,7 @@ module Veritas
|
|
146
169
|
EmptyLeft,
|
147
170
|
EmptyRight,
|
148
171
|
EqualHeaders,
|
172
|
+
DisjointHeaders,
|
149
173
|
LeftOrderOperand,
|
150
174
|
RightOrderOperand,
|
151
175
|
MaterializedOperands,
|
data/spec/rcov.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'backports'
|
5
|
-
require 'backports/basic_object'
|
5
|
+
require 'backports/basic_object' unless RUBY_VERSION >= '1.9.2' && (RUBY_PLATFORM.include?('java') || RUBY_ENGINE == 'rbx')
|
6
6
|
require 'veritas-optimizer'
|
7
7
|
require 'spec'
|
8
8
|
require 'spec/autorun'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Optimizer::Algebra::Join::DisjointHeaders, '#optimizable?' do
|
6
|
+
subject { object.optimizable? }
|
7
|
+
|
8
|
+
let(:relation) { left.join(right) }
|
9
|
+
let(:object) { described_class.new(relation) }
|
10
|
+
|
11
|
+
before do
|
12
|
+
object.operation.should be_kind_of(Algebra::Join)
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when left and right headers are disjoint' do
|
16
|
+
let(:left) { Relation.new([ [ :id, Integer ] ], [ [ 1 ] ].each) }
|
17
|
+
let(:right) { Relation.new([ [ :other_id, Integer ] ], [ [ 1 ] ].each) }
|
18
|
+
|
19
|
+
it { should be(true) }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when left and right headers are not disjoint' do
|
23
|
+
let(:header) { [ [ :id, Integer ] ] }
|
24
|
+
let(:left) { Relation.new(header, [ [ 1 ] ].each) }
|
25
|
+
let(:right) { Relation.new(header, [ [ 1 ] ].each) }
|
26
|
+
|
27
|
+
it { should be(false) }
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Optimizer::Algebra::Join::DisjointHeaders, '#optimize' do
|
6
|
+
subject { object.optimize }
|
7
|
+
|
8
|
+
let(:left) { Relation.new([ [ :id, Integer ] ], [ [ 1 ] ].each) }
|
9
|
+
let(:right) { Relation.new([ [ :other_id, Integer ] ], [ [ 2 ] ].each) }
|
10
|
+
let(:relation) { left.join(right) }
|
11
|
+
let(:object) { described_class.new(relation) }
|
12
|
+
|
13
|
+
before do
|
14
|
+
object.should be_optimizable
|
15
|
+
end
|
16
|
+
|
17
|
+
it { should be_kind_of(Algebra::Product) }
|
18
|
+
|
19
|
+
its(:left) { should equal(left) }
|
20
|
+
|
21
|
+
its(:right) { should equal(right) }
|
22
|
+
end
|
data/tasks/metrics/ci.rake
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
desc 'Run metrics with Heckle'
|
2
|
-
task :ci => [
|
2
|
+
task :ci => %w[ ci:metrics heckle ]
|
3
3
|
|
4
4
|
namespace :ci do
|
5
5
|
desc 'Run metrics'
|
6
|
-
task :metrics => [
|
6
|
+
task :metrics => %w[ verify_measurements flog flay reek roodi metrics:all ]
|
7
7
|
end
|
data/tasks/metrics/heckle.rake
CHANGED
@@ -6,7 +6,7 @@ $LOAD_PATH.unshift(File.expand_path('../../../lib', __FILE__))
|
|
6
6
|
begin
|
7
7
|
require 'pathname'
|
8
8
|
require 'backports'
|
9
|
-
require 'backports/basic_object'
|
9
|
+
require 'backports/basic_object' unless RUBY_VERSION >= '1.9.2' && (RUBY_PLATFORM.include?('java') || RUBY_ENGINE == 'rbx')
|
10
10
|
require 'active_support/inflector'
|
11
11
|
require 'heckle'
|
12
12
|
require 'mspec'
|
@@ -27,13 +27,16 @@ begin
|
|
27
27
|
end
|
28
28
|
|
29
29
|
desc 'Heckle each module and class'
|
30
|
-
task :heckle => :
|
30
|
+
task :heckle => :rcov do
|
31
31
|
unless Ruby2Ruby::VERSION == '1.2.2'
|
32
32
|
raise "ruby2ruby version #{Ruby2Ruby::VERSION} may not work properly, 1.2.2 *only* is recommended for use with heckle"
|
33
33
|
end
|
34
34
|
|
35
35
|
require 'veritas/optimizer'
|
36
|
-
|
36
|
+
|
37
|
+
root_module_regexp = Regexp.union(
|
38
|
+
'Veritas::Optimizer'
|
39
|
+
)
|
37
40
|
|
38
41
|
spec_dir = Pathname('spec/unit')
|
39
42
|
|
@@ -50,7 +53,7 @@ begin
|
|
50
53
|
unhandled_mutations = 0
|
51
54
|
|
52
55
|
ObjectSpace.each_object(Module) do |mod|
|
53
|
-
next unless mod.name =~ /\A#{
|
56
|
+
next unless mod.name =~ /\A#{root_module_regexp}(?::|\z)/
|
54
57
|
|
55
58
|
spec_prefix = spec_dir.join(mod.name.underscore)
|
56
59
|
|
@@ -135,9 +138,9 @@ begin
|
|
135
138
|
descedant_specs = []
|
136
139
|
|
137
140
|
ObjectSpace.each_object(Module) do |descedant|
|
138
|
-
next unless descedant.name =~ /\A#{
|
141
|
+
next unless descedant.name =~ /\A#{root_module_regexp}(?::|\z)/ && mod >= descedant
|
139
142
|
descedant_spec_prefix = spec_dir.join(descedant.name.underscore)
|
140
|
-
descedant_specs
|
143
|
+
descedant_specs << descedant_spec_prefix
|
141
144
|
|
142
145
|
if method.to_s == 'initialize'
|
143
146
|
descedant_specs.concat(Pathname.glob(descedant_spec_prefix.join('class_methods/new_spec.rb')))
|
@@ -151,9 +154,8 @@ begin
|
|
151
154
|
descedant_specs = []
|
152
155
|
|
153
156
|
ObjectSpace.each_object(Module) do |descedant|
|
154
|
-
next unless descedant.name =~ /\A#{
|
155
|
-
|
156
|
-
descedant_specs.concat(Pathname.glob(descedant_spec_prefix.join('class_methods/*_spec.rb')))
|
157
|
+
next unless descedant.name =~ /\A#{root_module_regexp}(?::|\z)/ && mod >= descedant
|
158
|
+
descedant_specs << spec_dir.join(descedant.name.underscore).join('class_methods')
|
157
159
|
end
|
158
160
|
|
159
161
|
specs << [ ".#{method}", descedant_specs ]
|
data/tasks/spec.rake
CHANGED
@@ -1,37 +1,46 @@
|
|
1
1
|
spec_defaults = lambda do |spec|
|
2
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
3
|
-
spec.libs << 'lib' << 'spec'
|
4
2
|
spec.spec_opts << '--options' << 'spec/spec.opts'
|
5
3
|
end
|
6
4
|
|
7
5
|
begin
|
8
6
|
require 'spec/rake/spectask'
|
9
7
|
|
10
|
-
|
8
|
+
desc 'Run all specs'
|
9
|
+
task :spec => %w[ spec:unit spec:integration ]
|
10
|
+
|
11
|
+
namespace :spec do
|
12
|
+
desc 'Run unit specs'
|
13
|
+
Spec::Rake::SpecTask.new(:unit) do |unit|
|
14
|
+
spec_defaults.call(unit)
|
15
|
+
unit.pattern = 'spec/unit/**/*_spec.rb'
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Run integration specs'
|
19
|
+
Spec::Rake::SpecTask.new(:integration) do |integration|
|
20
|
+
spec_defaults.call(integration)
|
21
|
+
integration.pattern = 'spec/integration/**/*_spec.rb'
|
22
|
+
end
|
23
|
+
end
|
11
24
|
rescue LoadError
|
12
|
-
|
13
|
-
|
25
|
+
%w[ spec spec:unit spec:integration ].each do |name|
|
26
|
+
task name do
|
27
|
+
abort "rspec is not available. In order to run #{name}, you must: gem install rspec"
|
28
|
+
end
|
14
29
|
end
|
15
30
|
end
|
16
31
|
|
17
32
|
begin
|
18
33
|
require 'rcov'
|
19
|
-
require 'spec/rake/verify_rcov'
|
20
34
|
|
21
35
|
Spec::Rake::SpecTask.new(:rcov) do |rcov|
|
22
36
|
spec_defaults.call(rcov)
|
23
37
|
rcov.rcov = true
|
38
|
+
rcov.pattern = 'spec/unit/**/*_spec.rb'
|
24
39
|
rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
|
25
40
|
end
|
26
|
-
|
27
|
-
RCov::VerifyTask.new(:verify_rcov => :rcov) do |rcov|
|
28
|
-
rcov.threshold = 100
|
29
|
-
end
|
30
41
|
rescue LoadError
|
31
|
-
|
32
|
-
|
33
|
-
abort "rcov is not available. In order to run #{name}, you must: gem install rcov"
|
34
|
-
end
|
42
|
+
task :rcov do
|
43
|
+
abort 'rcov is not available. In order to run rcov, you must: gem install rcov'
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
data/veritas-optimizer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "veritas-optimizer"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dan Kubb"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-03-08"
|
13
13
|
s.description = "Optimizes veritas relations"
|
14
14
|
s.email = "dan.kubb@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -141,6 +141,8 @@ Gem::Specification.new do |s|
|
|
141
141
|
"spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb",
|
142
142
|
"spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb",
|
143
143
|
"spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb",
|
144
|
+
"spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimizable_spec.rb",
|
145
|
+
"spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimize_spec.rb",
|
144
146
|
"spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb",
|
145
147
|
"spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb",
|
146
148
|
"spec/unit/veritas/optimizer/algebra/join/left_materialized_operand/optimizable_spec.rb",
|
@@ -362,21 +364,21 @@ Gem::Specification.new do |s|
|
|
362
364
|
]
|
363
365
|
s.homepage = "https://github.com/dkubb/veritas-optimizer"
|
364
366
|
s.require_paths = ["lib"]
|
365
|
-
s.rubygems_version = "1.8.
|
367
|
+
s.rubygems_version = "1.8.16"
|
366
368
|
s.summary = "Relational algebra optimizer"
|
367
369
|
|
368
370
|
if s.respond_to? :specification_version then
|
369
371
|
s.specification_version = 3
|
370
372
|
|
371
373
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
372
|
-
s.add_runtime_dependency(%q<veritas>, ["~> 0.0.
|
374
|
+
s.add_runtime_dependency(%q<veritas>, ["~> 0.0.7"])
|
373
375
|
s.add_development_dependency(%q<backports>, ["~> 2.3.0"])
|
374
376
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
375
377
|
s.add_development_dependency(%q<rake>, ["~> 0.9.2"])
|
376
378
|
s.add_development_dependency(%q<rspec>, ["~> 1.3.2"])
|
377
379
|
s.add_development_dependency(%q<yard>, ["~> 0.7.2"])
|
378
380
|
else
|
379
|
-
s.add_dependency(%q<veritas>, ["~> 0.0.
|
381
|
+
s.add_dependency(%q<veritas>, ["~> 0.0.7"])
|
380
382
|
s.add_dependency(%q<backports>, ["~> 2.3.0"])
|
381
383
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
382
384
|
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
@@ -384,7 +386,7 @@ Gem::Specification.new do |s|
|
|
384
386
|
s.add_dependency(%q<yard>, ["~> 0.7.2"])
|
385
387
|
end
|
386
388
|
else
|
387
|
-
s.add_dependency(%q<veritas>, ["~> 0.0.
|
389
|
+
s.add_dependency(%q<veritas>, ["~> 0.0.7"])
|
388
390
|
s.add_dependency(%q<backports>, ["~> 2.3.0"])
|
389
391
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
390
392
|
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: veritas-optimizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dan Kubb
|
@@ -15,28 +15,27 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-03-08 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :runtime
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
25
24
|
requirements:
|
26
25
|
- - ~>
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
27
|
+
hash: 17
|
29
28
|
segments:
|
30
29
|
- 0
|
31
30
|
- 0
|
32
|
-
-
|
33
|
-
version: 0.0.
|
34
|
-
|
31
|
+
- 7
|
32
|
+
version: 0.0.7
|
33
|
+
prerelease: false
|
34
|
+
requirement: *id001
|
35
35
|
name: veritas
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
type: :development
|
38
|
-
|
39
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
42
41
|
- - ~>
|
@@ -47,12 +46,12 @@ dependencies:
|
|
47
46
|
- 3
|
48
47
|
- 0
|
49
48
|
version: 2.3.0
|
50
|
-
|
49
|
+
prerelease: false
|
50
|
+
requirement: *id002
|
51
51
|
name: backports
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
53
|
type: :development
|
54
|
-
|
55
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
55
|
none: false
|
57
56
|
requirements:
|
58
57
|
- - ~>
|
@@ -63,12 +62,12 @@ dependencies:
|
|
63
62
|
- 6
|
64
63
|
- 4
|
65
64
|
version: 1.6.4
|
66
|
-
|
65
|
+
prerelease: false
|
66
|
+
requirement: *id003
|
67
67
|
name: jeweler
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
type: :development
|
70
|
-
|
71
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
71
|
none: false
|
73
72
|
requirements:
|
74
73
|
- - ~>
|
@@ -79,12 +78,12 @@ dependencies:
|
|
79
78
|
- 9
|
80
79
|
- 2
|
81
80
|
version: 0.9.2
|
82
|
-
|
81
|
+
prerelease: false
|
82
|
+
requirement: *id004
|
83
83
|
name: rake
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
type: :development
|
86
|
-
|
87
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
86
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
87
|
none: false
|
89
88
|
requirements:
|
90
89
|
- - ~>
|
@@ -95,12 +94,12 @@ dependencies:
|
|
95
94
|
- 3
|
96
95
|
- 2
|
97
96
|
version: 1.3.2
|
98
|
-
|
97
|
+
prerelease: false
|
98
|
+
requirement: *id005
|
99
99
|
name: rspec
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
type: :development
|
102
|
-
|
103
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
103
|
none: false
|
105
104
|
requirements:
|
106
105
|
- - ~>
|
@@ -111,7 +110,8 @@ dependencies:
|
|
111
110
|
- 7
|
112
111
|
- 2
|
113
112
|
version: 0.7.2
|
114
|
-
|
113
|
+
prerelease: false
|
114
|
+
requirement: *id006
|
115
115
|
name: yard
|
116
116
|
description: Optimizes veritas relations
|
117
117
|
email: dan.kubb@gmail.com
|
@@ -247,6 +247,8 @@ files:
|
|
247
247
|
- spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb
|
248
248
|
- spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb
|
249
249
|
- spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb
|
250
|
+
- spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimizable_spec.rb
|
251
|
+
- spec/unit/veritas/optimizer/algebra/join/disjoint_headers/optimize_spec.rb
|
250
252
|
- spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb
|
251
253
|
- spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb
|
252
254
|
- spec/unit/veritas/optimizer/algebra/join/left_materialized_operand/optimizable_spec.rb
|
@@ -494,7 +496,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
494
496
|
requirements: []
|
495
497
|
|
496
498
|
rubyforge_project:
|
497
|
-
rubygems_version: 1.8.
|
499
|
+
rubygems_version: 1.8.16
|
498
500
|
signing_key:
|
499
501
|
specification_version: 3
|
500
502
|
summary: Relational algebra optimizer
|