alf 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -3
- data/Gemfile.lock +65 -19
- data/README.md +77 -183
- data/Rakefile +25 -0
- data/alf.gemspec +5 -3
- data/alf.noespec +8 -6
- data/lib/alf/loader.rb +1 -0
- data/lib/alf/version.rb +1 -1
- data/spec/facade/test_query.rb +12 -0
- data/spec/key-inference/queries.yml +10 -0
- data/spec/key-inference/test_all.rb +21 -0
- data/{test → spec}/migrations/test_folder_migration.rb +0 -0
- data/{test → spec}/migrations/test_sequel_migration.rb +1 -1
- data/spec/operators/ungroup/grouped.json +3 -0
- data/spec/operators/ungroup/test_on_json_content.rb +11 -0
- data/spec/operators/unwrap/test_on_json_content.rb +11 -0
- data/spec/operators/unwrap/wrapped.json +3 -0
- data/spec/optimizer/project/extend.yml +20 -0
- data/spec/optimizer/project/intersect.yml +10 -0
- data/spec/optimizer/project/join.yml +20 -0
- data/spec/optimizer/project/matching.yml +21 -0
- data/spec/optimizer/project/minus.yml +9 -0
- data/spec/optimizer/project/not_matching.yml +21 -0
- data/spec/optimizer/project/project.yml +88 -0
- data/spec/optimizer/project/rename.yml +30 -0
- data/spec/optimizer/project/sort.yml +45 -0
- data/spec/optimizer/project/union.yml +8 -0
- data/spec/optimizer/restrict/clip.yml +4 -0
- data/spec/optimizer/restrict/compact.yml +4 -0
- data/spec/optimizer/restrict/generator.yml +4 -0
- data/spec/optimizer/restrict/intersect.yml +4 -0
- data/spec/optimizer/restrict/leaf_operand.yml +4 -0
- data/spec/optimizer/restrict/minus.yml +4 -0
- data/spec/optimizer/restrict/page.yml +12 -0
- data/spec/optimizer/restrict/project.yml +4 -0
- data/spec/optimizer/restrict/sort.yml +4 -0
- data/spec/optimizer/restrict/union.yml +4 -0
- data/spec/optimizer/test_all.rb +34 -0
- data/spec/sql/helpers.rb +25 -0
- data/spec/sql/queries/01-leaf-operand.yml +5 -0
- data/spec/sql/queries/02-clip.yml +12 -0
- data/spec/sql/queries/03-sort.yml +58 -0
- data/spec/sql/queries/04-frame.yml +57 -0
- data/spec/sql/queries/05-intersect.yml +23 -0
- data/spec/sql/queries/06-join.yml +207 -0
- data/spec/sql/queries/07-matching.yml +76 -0
- data/spec/sql/queries/08-minus.yml +23 -0
- data/spec/sql/queries/09-not-matching.yml +57 -0
- data/spec/sql/queries/10-page.yml +31 -0
- data/spec/sql/queries/11-project.yml +48 -0
- data/spec/sql/queries/12-rename.yml +24 -0
- data/spec/sql/queries/13-restrict.yml +114 -0
- data/spec/sql/queries/15-union.yml +90 -0
- data/spec/sql/queries/16-wrap.yml +3 -0
- data/spec/sql/queries/91-reuse.yml +28 -0
- data/spec/sql/test_sequel_compiler.rb +41 -0
- data/spec/sql/test_sql_compiler.rb +52 -0
- data/{test → spec}/test_alf.rb +0 -0
- data/spec/test_helpers.rb +54 -0
- data/tasks/doc.rake +10 -0
- data/tasks/fixtures.rake +52 -0
- data/tasks/mod.rake +50 -0
- data/tasks/release.rake +34 -0
- data/tasks/test.rake +2 -2
- metadata +150 -19
- data/test/seeding/test_seeding.rb +0 -49
- data/test/test_helpers.rb +0 -24
@@ -0,0 +1,28 @@
|
|
1
|
+
# reusing base case
|
2
|
+
- alf: |-
|
3
|
+
union(
|
4
|
+
matching(suppliers_in_paris, cities),
|
5
|
+
not_matching(suppliers_in_paris, cities))
|
6
|
+
sql: |-
|
7
|
+
(SELECT t1.sid, t1.name, t1.status, t1.city
|
8
|
+
FROM suppliers AS t1
|
9
|
+
WHERE t1.city = 'Paris'
|
10
|
+
AND t1.city IN (SELECT t2.city FROM cities AS t2))
|
11
|
+
UNION
|
12
|
+
(SELECT t3.sid, t3.name, t3.status, t3.city
|
13
|
+
FROM suppliers AS t3
|
14
|
+
WHERE t3.city = 'Paris'
|
15
|
+
AND NOT(t3.city IN (SELECT t4.city FROM cities AS t4)))
|
16
|
+
sql: |-
|
17
|
+
WITH t2 AS (
|
18
|
+
SELECT t1.sid, t1.name, t1.status, t1.city
|
19
|
+
FROM suppliers AS t1
|
20
|
+
WHERE t1.city = 'Paris'
|
21
|
+
)
|
22
|
+
(SELECT t2.sid, t2.name, t2.status, t2.city
|
23
|
+
FROM t2 AS t2
|
24
|
+
WHERE t2.city IN (SELECT t3.city FROM cities AS t3))
|
25
|
+
UNION
|
26
|
+
(SELECT t4.sid, t4.name, t4.status, t4.city
|
27
|
+
FROM t2 AS t4
|
28
|
+
WHERE NOT(t4.city IN (SELECT t5.city FROM cities AS t5)))
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
module Alf
|
3
|
+
module Sequel
|
4
|
+
describe Compiler do
|
5
|
+
|
6
|
+
def compiler
|
7
|
+
@compiler ||= Compiler.new
|
8
|
+
end
|
9
|
+
|
10
|
+
subject{ compiler.call(expr) }
|
11
|
+
|
12
|
+
each_query do |query|
|
13
|
+
context "Sequel-based SQL compilation of '#{query}'" do
|
14
|
+
let(:expr){ conn.parse(query['alf']) }
|
15
|
+
|
16
|
+
it 'to_cog should lead to a Sequel::Cog' do
|
17
|
+
expr.to_cog.should be_a(Cog)
|
18
|
+
end if query['sql']
|
19
|
+
|
20
|
+
it 'sexpr.to_sql should be valid SQL for the DBMS considered' do
|
21
|
+
begin
|
22
|
+
sql = expr.to_cog.sexpr.to_sql
|
23
|
+
adapter[sql].to_a
|
24
|
+
rescue => ex
|
25
|
+
$stderr.print('x')
|
26
|
+
# $stderr.puts strip(query['sql'])
|
27
|
+
# $stderr.puts ex.message
|
28
|
+
end
|
29
|
+
end if query['sql']
|
30
|
+
|
31
|
+
it 'to_cog.to_a should run without problem' do
|
32
|
+
lambda{
|
33
|
+
expr.to_cog.to_a
|
34
|
+
}.should_not(raise_error)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
module Alf
|
3
|
+
module Sql
|
4
|
+
describe Compiler do
|
5
|
+
|
6
|
+
shared_examples_for "a SQL compiled" do
|
7
|
+
|
8
|
+
it{ should be_a(Alf::Sql::Cog) }
|
9
|
+
|
10
|
+
it 'has correct traceability' do
|
11
|
+
subject.expr.should be(expr)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'has correct compiler' do
|
15
|
+
subject.compiler.should be(compiler)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def compiler
|
21
|
+
@compiler ||= Compiler.new
|
22
|
+
end
|
23
|
+
|
24
|
+
subject{ compiler.call(expr) }
|
25
|
+
|
26
|
+
each_query do |query|
|
27
|
+
next unless query['sql']
|
28
|
+
|
29
|
+
describe "SQL compilation of '#{query}'" do
|
30
|
+
let(:expr){ conn.parse(query['alf']) }
|
31
|
+
|
32
|
+
it_should_behave_like "a SQL compiled"
|
33
|
+
|
34
|
+
it 'should have expected SQL' do
|
35
|
+
strip(subject.to_sql).should eq(strip(query['sql']))
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should lead a flattenable result' do
|
39
|
+
sexpr = subject.sexpr
|
40
|
+
flattened = Processor::Flatten.new(Builder.new).call(sexpr)
|
41
|
+
if sexpr.first == :with_exp
|
42
|
+
flattened.first.should eq(sexpr.select_exp.first)
|
43
|
+
else
|
44
|
+
flattened.should eq(sexpr)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/{test → spec}/test_alf.rb
RENAMED
File without changes
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'alf'
|
2
|
+
require 'rspec'
|
3
|
+
require 'sap'
|
4
|
+
|
5
|
+
ENV['DATABASE'] ||= 'postgres'
|
6
|
+
|
7
|
+
FIXTURES_FOLDER = Path.backfind('fixtures')
|
8
|
+
|
9
|
+
class Adapters
|
10
|
+
|
11
|
+
def fake
|
12
|
+
@fake ||= Alf.examples_adapter
|
13
|
+
end
|
14
|
+
|
15
|
+
def sqlite
|
16
|
+
@sqlite ||= begin
|
17
|
+
url = FIXTURES_FOLDER/"suppliers-and-parts/suppliers-and-parts.db"
|
18
|
+
Alf::Sequel::Adapter.sequel_db(url)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def postgres
|
23
|
+
@postgres ||= begin
|
24
|
+
url = "postgres://alf@localhost/suppliers_and_parts"
|
25
|
+
Alf::Sequel::Adapter.sequel_db(url)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
ADAPTERS = Adapters.new
|
31
|
+
|
32
|
+
module AlfIntegrationHelpers
|
33
|
+
|
34
|
+
def fixtures_folder
|
35
|
+
FIXTURES_FOLDER
|
36
|
+
end
|
37
|
+
|
38
|
+
def adapter
|
39
|
+
ADAPTERS.send ENV['DATABASE']
|
40
|
+
end
|
41
|
+
|
42
|
+
def db
|
43
|
+
@db ||= Alf::Database.new(adapter, viewpoint: Sap::Views[])
|
44
|
+
end
|
45
|
+
|
46
|
+
def conn
|
47
|
+
@conn ||= db.connection
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
RSpec.configure do |c|
|
53
|
+
c.include(AlfIntegrationHelpers)
|
54
|
+
end
|
data/tasks/doc.rake
ADDED
data/tasks/fixtures.rake
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
namespace :fixtures do
|
2
|
+
|
3
|
+
task :sap do
|
4
|
+
require 'alf'
|
5
|
+
require 'alf-sequel'
|
6
|
+
adapter = Path.dir/"../fixtures/suppliers-and-parts/suppliers-and-parts.db"
|
7
|
+
adapter.unlink
|
8
|
+
adapter = Alf::Adapter.sequel("sqlite://#{adapter}")
|
9
|
+
options = {
|
10
|
+
migrations_folder: Path.dir/"../fixtures/suppliers-and-parts/migrations"
|
11
|
+
}
|
12
|
+
Alf.connect(adapter, options) do |conn|
|
13
|
+
conn.migrate!
|
14
|
+
conn.relvar(:suppliers).affect([
|
15
|
+
{:sid => 'S1', :name => 'Smith', :status => 20, :city => 'London'},
|
16
|
+
{:sid => 'S2', :name => 'Jones', :status => 10, :city => 'Paris'},
|
17
|
+
{:sid => 'S3', :name => 'Blake', :status => 30, :city => 'Paris'},
|
18
|
+
{:sid => 'S4', :name => 'Clark', :status => 20, :city => 'London'},
|
19
|
+
{:sid => 'S5', :name => 'Adams', :status => 30, :city => 'Athens'}
|
20
|
+
])
|
21
|
+
conn.relvar(:parts).affect([
|
22
|
+
{:pid => 'P1', :name => 'Nut', :color => 'Red', :weight => 12.0, :city => 'London'},
|
23
|
+
{:pid => 'P2', :name => 'Bolt', :color => 'Green', :weight => 17.0, :city => 'Paris'},
|
24
|
+
{:pid => 'P3', :name => 'Screw', :color => 'Blue', :weight => 17.0, :city => 'Oslo'},
|
25
|
+
{:pid => 'P4', :name => 'Screw', :color => 'Red', :weight => 14.0, :city => 'London'},
|
26
|
+
{:pid => 'P5', :name => 'Cam', :color => 'Blue', :weight => 12.0, :city => 'Paris'},
|
27
|
+
{:pid => 'P6', :name => 'Cog', :color => 'Red', :weight => 19.0, :city => 'London'}
|
28
|
+
])
|
29
|
+
conn.relvar(:supplies).affect([
|
30
|
+
{:sid => 'S1', :pid => 'P1', :qty => 300},
|
31
|
+
{:sid => 'S1', :pid => 'P2', :qty => 200},
|
32
|
+
{:sid => 'S1', :pid => 'P3', :qty => 400},
|
33
|
+
{:sid => 'S1', :pid => 'P4', :qty => 200},
|
34
|
+
{:sid => 'S1', :pid => 'P5', :qty => 100},
|
35
|
+
{:sid => 'S1', :pid => 'P6', :qty => 100},
|
36
|
+
{:sid => 'S2', :pid => 'P1', :qty => 300},
|
37
|
+
{:sid => 'S2', :pid => 'P2', :qty => 400},
|
38
|
+
{:sid => 'S3', :pid => 'P2', :qty => 200},
|
39
|
+
{:sid => 'S4', :pid => 'P2', :qty => 200},
|
40
|
+
{:sid => 'S4', :pid => 'P4', :qty => 300},
|
41
|
+
{:sid => 'S4', :pid => 'P5', :qty => 400}
|
42
|
+
])
|
43
|
+
conn.relvar(:cities).affect([
|
44
|
+
{:city => 'London', :country => 'England'},
|
45
|
+
{:city => 'Paris', :country => 'France'},
|
46
|
+
{:city => 'Athens', :country => 'Greece'},
|
47
|
+
{:city => 'Brussels', :country => 'Belgium'}
|
48
|
+
])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/tasks/mod.rake
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
namespace :mod do
|
2
|
+
|
3
|
+
desc "Initialize sub-modules"
|
4
|
+
task :init do
|
5
|
+
`git submodule init`
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Update sub-modules"
|
9
|
+
task :update do
|
10
|
+
`git submodule update`
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Pull from origin on every sub-modules"
|
14
|
+
task :pull do
|
15
|
+
in_each_sub_module("Refreshing") do |sub|
|
16
|
+
system "git pull origin"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Push to origin on every sub-modules"
|
21
|
+
task :push do
|
22
|
+
in_each_sub_module("Pushing") do |sub|
|
23
|
+
system "git push origin"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Run bundle-update on each submodule"
|
28
|
+
task :"bundle-update" do
|
29
|
+
in_each_sub_module("'bundle update' in") do |sub|
|
30
|
+
system "bundle update"
|
31
|
+
system "BUNDLE_GEMFILE=Gemfile.ci bundle update"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Run bundle-install on each submodule"
|
36
|
+
task :bundle do
|
37
|
+
in_each_sub_module("'bundle install' in") do |sub|
|
38
|
+
system "bundle install"
|
39
|
+
system "BUNDLE_GEMFILE=Gemfile.ci bundle install"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "Test sub-modules"
|
44
|
+
task :test do
|
45
|
+
in_each_sub_module("Test") do |sub|
|
46
|
+
system "bundle exec rake"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/tasks/release.rake
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
namespace :release do
|
2
|
+
|
3
|
+
desc "Create all gems, including in sub-modules"
|
4
|
+
task :gem do
|
5
|
+
cmd = "rm -rf pkg && rake gem"
|
6
|
+
in_each_sub_module("'rake gem' in") do |sub|
|
7
|
+
system(cmd)
|
8
|
+
end
|
9
|
+
system(cmd)
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Try the release by installing all gems locally"
|
13
|
+
task :try => :gem do
|
14
|
+
cmd = "gem install --no-rdoc --no-ri --local pkg/*.gem"
|
15
|
+
in_each_sub_module("'gem install' in") do |sub|
|
16
|
+
system(cmd)
|
17
|
+
end
|
18
|
+
system(cmd)
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "Release it!"
|
22
|
+
task :go => :gem do
|
23
|
+
require 'alf/version'
|
24
|
+
version = Alf::VERSION
|
25
|
+
cmd = "gem push pkg/*.gem && git tag v#{version} && git push origin --tags"
|
26
|
+
in_each_sub_module("'gem push & git tag' in") do |sub|
|
27
|
+
system(cmd)
|
28
|
+
end
|
29
|
+
system(cmd)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
desc "Release alf"
|
34
|
+
task :release => :"release:go"
|
data/tasks/test.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "rspec/core/rake_task"
|
2
2
|
desc "Run rspec integration tests"
|
3
3
|
RSpec::Core::RakeTask.new(:test) do |t|
|
4
|
-
t.pattern = "
|
5
|
-
t.rspec_opts = ["--color", "--backtrace", "-Ilib", "-
|
4
|
+
t.pattern = "spec/**/test_*.rb"
|
5
|
+
t.rspec_opts = ["--color", "--backtrace", "-Ilib", "-Ispec", "-Ifixtures/suppliers-and-parts/lib"]
|
6
6
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: 0.15.0
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,23 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.15.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: alf-sql
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.15.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.15.0
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: alf-sequel
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +82,7 @@ dependencies:
|
|
66
82
|
requirements:
|
67
83
|
- - ~>
|
68
84
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
85
|
+
version: 0.15.0
|
70
86
|
type: :runtime
|
71
87
|
prerelease: false
|
72
88
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +90,7 @@ dependencies:
|
|
74
90
|
requirements:
|
75
91
|
- - ~>
|
76
92
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
93
|
+
version: 0.15.0
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
95
|
name: alf-shell
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +98,23 @@ dependencies:
|
|
82
98
|
requirements:
|
83
99
|
- - ~>
|
84
100
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.
|
101
|
+
version: 0.15.0
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.15.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: alf-rack
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.15.0
|
86
118
|
type: :runtime
|
87
119
|
prerelease: false
|
88
120
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,7 +122,7 @@ dependencies:
|
|
90
122
|
requirements:
|
91
123
|
- - ~>
|
92
124
|
- !ruby/object:Gem::Version
|
93
|
-
version: 0.
|
125
|
+
version: 0.15.0
|
94
126
|
description: Alf brings a beautiful yet powerful relational algebra to the Shell and
|
95
127
|
to Ruby.
|
96
128
|
email:
|
@@ -114,13 +146,63 @@ files:
|
|
114
146
|
- Manifest.txt
|
115
147
|
- Rakefile
|
116
148
|
- README.md
|
149
|
+
- spec/facade/test_query.rb
|
150
|
+
- spec/key-inference/queries.yml
|
151
|
+
- spec/key-inference/test_all.rb
|
152
|
+
- spec/migrations/test_folder_migration.rb
|
153
|
+
- spec/migrations/test_sequel_migration.rb
|
154
|
+
- spec/operators/ungroup/grouped.json
|
155
|
+
- spec/operators/ungroup/test_on_json_content.rb
|
156
|
+
- spec/operators/unwrap/test_on_json_content.rb
|
157
|
+
- spec/operators/unwrap/wrapped.json
|
158
|
+
- spec/optimizer/project/extend.yml
|
159
|
+
- spec/optimizer/project/intersect.yml
|
160
|
+
- spec/optimizer/project/join.yml
|
161
|
+
- spec/optimizer/project/matching.yml
|
162
|
+
- spec/optimizer/project/minus.yml
|
163
|
+
- spec/optimizer/project/not_matching.yml
|
164
|
+
- spec/optimizer/project/project.yml
|
165
|
+
- spec/optimizer/project/rename.yml
|
166
|
+
- spec/optimizer/project/sort.yml
|
167
|
+
- spec/optimizer/project/union.yml
|
168
|
+
- spec/optimizer/restrict/clip.yml
|
169
|
+
- spec/optimizer/restrict/compact.yml
|
170
|
+
- spec/optimizer/restrict/generator.yml
|
171
|
+
- spec/optimizer/restrict/intersect.yml
|
172
|
+
- spec/optimizer/restrict/leaf_operand.yml
|
173
|
+
- spec/optimizer/restrict/minus.yml
|
174
|
+
- spec/optimizer/restrict/page.yml
|
175
|
+
- spec/optimizer/restrict/project.yml
|
176
|
+
- spec/optimizer/restrict/sort.yml
|
177
|
+
- spec/optimizer/restrict/union.yml
|
178
|
+
- spec/optimizer/test_all.rb
|
179
|
+
- spec/sql/helpers.rb
|
180
|
+
- spec/sql/queries/01-leaf-operand.yml
|
181
|
+
- spec/sql/queries/02-clip.yml
|
182
|
+
- spec/sql/queries/03-sort.yml
|
183
|
+
- spec/sql/queries/04-frame.yml
|
184
|
+
- spec/sql/queries/05-intersect.yml
|
185
|
+
- spec/sql/queries/06-join.yml
|
186
|
+
- spec/sql/queries/07-matching.yml
|
187
|
+
- spec/sql/queries/08-minus.yml
|
188
|
+
- spec/sql/queries/09-not-matching.yml
|
189
|
+
- spec/sql/queries/10-page.yml
|
190
|
+
- spec/sql/queries/11-project.yml
|
191
|
+
- spec/sql/queries/12-rename.yml
|
192
|
+
- spec/sql/queries/13-restrict.yml
|
193
|
+
- spec/sql/queries/15-union.yml
|
194
|
+
- spec/sql/queries/16-wrap.yml
|
195
|
+
- spec/sql/queries/91-reuse.yml
|
196
|
+
- spec/sql/test_sequel_compiler.rb
|
197
|
+
- spec/sql/test_sql_compiler.rb
|
198
|
+
- spec/test_alf.rb
|
199
|
+
- spec/test_helpers.rb
|
200
|
+
- tasks/doc.rake
|
201
|
+
- tasks/fixtures.rake
|
117
202
|
- tasks/gem.rake
|
203
|
+
- tasks/mod.rake
|
204
|
+
- tasks/release.rake
|
118
205
|
- tasks/test.rake
|
119
|
-
- test/migrations/test_folder_migration.rb
|
120
|
-
- test/migrations/test_sequel_migration.rb
|
121
|
-
- test/seeding/test_seeding.rb
|
122
|
-
- test/test_alf.rb
|
123
|
-
- test/test_helpers.rb
|
124
206
|
homepage: http://blambeau.github.com/alf
|
125
207
|
licenses: []
|
126
208
|
post_install_message:
|
@@ -135,13 +217,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
217
|
version: '0'
|
136
218
|
segments:
|
137
219
|
- 0
|
138
|
-
hash:
|
220
|
+
hash: 825147625363283130
|
139
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
222
|
none: false
|
141
223
|
requirements:
|
142
224
|
- - ! '>='
|
143
225
|
- !ruby/object:Gem::Version
|
144
226
|
version: '0'
|
227
|
+
segments:
|
228
|
+
- 0
|
229
|
+
hash: 825147625363283130
|
145
230
|
requirements: []
|
146
231
|
rubyforge_project:
|
147
232
|
rubygems_version: 1.8.25
|
@@ -149,8 +234,54 @@ signing_key:
|
|
149
234
|
specification_version: 3
|
150
235
|
summary: Relational Algebra at your fingertips
|
151
236
|
test_files:
|
152
|
-
-
|
153
|
-
-
|
154
|
-
-
|
155
|
-
-
|
156
|
-
-
|
237
|
+
- spec/facade/test_query.rb
|
238
|
+
- spec/key-inference/queries.yml
|
239
|
+
- spec/key-inference/test_all.rb
|
240
|
+
- spec/migrations/test_folder_migration.rb
|
241
|
+
- spec/migrations/test_sequel_migration.rb
|
242
|
+
- spec/operators/ungroup/grouped.json
|
243
|
+
- spec/operators/ungroup/test_on_json_content.rb
|
244
|
+
- spec/operators/unwrap/test_on_json_content.rb
|
245
|
+
- spec/operators/unwrap/wrapped.json
|
246
|
+
- spec/optimizer/project/extend.yml
|
247
|
+
- spec/optimizer/project/intersect.yml
|
248
|
+
- spec/optimizer/project/join.yml
|
249
|
+
- spec/optimizer/project/matching.yml
|
250
|
+
- spec/optimizer/project/minus.yml
|
251
|
+
- spec/optimizer/project/not_matching.yml
|
252
|
+
- spec/optimizer/project/project.yml
|
253
|
+
- spec/optimizer/project/rename.yml
|
254
|
+
- spec/optimizer/project/sort.yml
|
255
|
+
- spec/optimizer/project/union.yml
|
256
|
+
- spec/optimizer/restrict/clip.yml
|
257
|
+
- spec/optimizer/restrict/compact.yml
|
258
|
+
- spec/optimizer/restrict/generator.yml
|
259
|
+
- spec/optimizer/restrict/intersect.yml
|
260
|
+
- spec/optimizer/restrict/leaf_operand.yml
|
261
|
+
- spec/optimizer/restrict/minus.yml
|
262
|
+
- spec/optimizer/restrict/page.yml
|
263
|
+
- spec/optimizer/restrict/project.yml
|
264
|
+
- spec/optimizer/restrict/sort.yml
|
265
|
+
- spec/optimizer/restrict/union.yml
|
266
|
+
- spec/optimizer/test_all.rb
|
267
|
+
- spec/sql/helpers.rb
|
268
|
+
- spec/sql/queries/01-leaf-operand.yml
|
269
|
+
- spec/sql/queries/02-clip.yml
|
270
|
+
- spec/sql/queries/03-sort.yml
|
271
|
+
- spec/sql/queries/04-frame.yml
|
272
|
+
- spec/sql/queries/05-intersect.yml
|
273
|
+
- spec/sql/queries/06-join.yml
|
274
|
+
- spec/sql/queries/07-matching.yml
|
275
|
+
- spec/sql/queries/08-minus.yml
|
276
|
+
- spec/sql/queries/09-not-matching.yml
|
277
|
+
- spec/sql/queries/10-page.yml
|
278
|
+
- spec/sql/queries/11-project.yml
|
279
|
+
- spec/sql/queries/12-rename.yml
|
280
|
+
- spec/sql/queries/13-restrict.yml
|
281
|
+
- spec/sql/queries/15-union.yml
|
282
|
+
- spec/sql/queries/16-wrap.yml
|
283
|
+
- spec/sql/queries/91-reuse.yml
|
284
|
+
- spec/sql/test_sequel_compiler.rb
|
285
|
+
- spec/sql/test_sql_compiler.rb
|
286
|
+
- spec/test_alf.rb
|
287
|
+
- spec/test_helpers.rb
|