chicagowarehouse 0.4.2 → 0.4.3
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/Rakefile +1 -1
- data/chicagowarehouse.gemspec +1 -1
- data/lib/chicago/database/schema_generator.rb +1 -1
- data/lib/chicago/database/type_converters.rb +0 -1
- data/lib/chicago/schema/column.rb +5 -4
- data/spec/database/db_type_converter_spec.rb +0 -5
- data/spec/database/schema_generator_spec.rb +2 -2
- data/spec/query_spec.rb +8 -8
- data/spec/schema/column_spec.rb +8 -7
- metadata +39 -39
data/Rakefile
CHANGED
|
@@ -14,7 +14,7 @@ require 'rake'
|
|
|
14
14
|
require 'jeweler'
|
|
15
15
|
Jeweler::Tasks.new do |gem|
|
|
16
16
|
gem.name = "chicagowarehouse"
|
|
17
|
-
gem.version = "0.4.
|
|
17
|
+
gem.version = "0.4.3"
|
|
18
18
|
gem.summary = "Ruby Data Warehousing"
|
|
19
19
|
gem.description = "Simple Data Warehouse toolkit for ruby"
|
|
20
20
|
gem.author = "Roland Swingler"
|
data/chicagowarehouse.gemspec
CHANGED
|
@@ -89,7 +89,7 @@ module Chicago
|
|
|
89
89
|
indexes = @table.columns.select(&:indexed?).inject({}) do |hsh, d|
|
|
90
90
|
hsh.merge("#{d.name}_idx".to_sym => {
|
|
91
91
|
:columns => d.database_name,
|
|
92
|
-
:unique =>
|
|
92
|
+
:unique => d.unique?})
|
|
93
93
|
end
|
|
94
94
|
indexes.merge!(natural_key_index) if @table.natural_key
|
|
95
95
|
indexes
|
|
@@ -53,8 +53,9 @@ module Chicago
|
|
|
53
53
|
@default = @opts[:default]
|
|
54
54
|
@descriptive = !! @opts[:descriptive]
|
|
55
55
|
@internal = @opts.has_key?(:internal) ? !! @opts[:internal] :
|
|
56
|
-
column_type == :
|
|
57
|
-
@unique = !! @opts[:unique]
|
|
56
|
+
column_type == :binary
|
|
57
|
+
@unique = @opts.has_key?(:unique) ? !! @opts[:unique] :
|
|
58
|
+
column_type == :binary
|
|
58
59
|
@optional = !! (@opts.has_key?(:optional) ? @opts[:optional] :
|
|
59
60
|
@opts[:null])
|
|
60
61
|
end
|
|
@@ -161,7 +162,7 @@ module Chicago
|
|
|
161
162
|
|
|
162
163
|
# Returns true if the column stores a binary value.
|
|
163
164
|
def binary?
|
|
164
|
-
@binary ||=
|
|
165
|
+
@binary ||= :binary == column_type
|
|
165
166
|
end
|
|
166
167
|
|
|
167
168
|
def hash #:nodoc:
|
|
@@ -208,7 +209,7 @@ module Chicago
|
|
|
208
209
|
[12,2]
|
|
209
210
|
elsif column_type == :percent
|
|
210
211
|
[6,3]
|
|
211
|
-
elsif column_type == :
|
|
212
|
+
elsif column_type == :binary
|
|
212
213
|
16
|
|
213
214
|
end
|
|
214
215
|
end
|
|
@@ -31,11 +31,6 @@ shared_examples_for "All DB type converters" do
|
|
|
31
31
|
@tc.db_type(column).should == :decimal
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
it "should return :binary for a hash column type" do
|
|
35
|
-
column = Schema::Column.new(:id, :hash)
|
|
36
|
-
@tc.db_type(column).should == :binary
|
|
37
|
-
end
|
|
38
|
-
|
|
39
34
|
it "should assume any other type is a database type and return it" do
|
|
40
35
|
column = Schema::Column.new(:id, :foo)
|
|
41
36
|
@tc.db_type(column).should == :foo
|
|
@@ -120,13 +120,13 @@ describe Chicago::Database::SchemaGenerator do
|
|
|
120
120
|
columns do
|
|
121
121
|
string :foo, :descriptive => true
|
|
122
122
|
string :bar
|
|
123
|
-
string :baz
|
|
123
|
+
string :baz, :unique => true
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
expected = {
|
|
128
128
|
:bar_idx => {:columns => :bar, :unique => false},
|
|
129
|
-
:baz_idx => {:columns => :baz, :unique =>
|
|
129
|
+
:baz_idx => {:columns => :baz, :unique => true}
|
|
130
130
|
}
|
|
131
131
|
subject.visit_dimension(@dimension)[:dimension_user][:indexes].should == expected
|
|
132
132
|
end
|
data/spec/query_spec.rb
CHANGED
|
@@ -423,35 +423,35 @@ describe Chicago::Query do
|
|
|
423
423
|
end
|
|
424
424
|
|
|
425
425
|
it "can filter based on starts with" do
|
|
426
|
-
@q.filter({:column => "sales.product.sku", :value => "123", :op => :sw}).dataset.sql.should =~ /WHERE \(`product`\.`sku` LIKE '123%'
|
|
426
|
+
@q.filter({:column => "sales.product.sku", :value => "123", :op => :sw}).dataset.sql.should =~ /WHERE \(`product`\.`sku` LIKE '123%'( ESCAPE '.+')?\)/
|
|
427
427
|
end
|
|
428
428
|
|
|
429
429
|
it "can filter based on 'starts with' with multiple values" do
|
|
430
|
-
@q.filter({:column => "sales.product.sku", :value => ["123","AB"], :op => :sw}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` LIKE '123%'
|
|
430
|
+
@q.filter({:column => "sales.product.sku", :value => ["123","AB"], :op => :sw}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` LIKE '123%'( ESCAPE '.+')?\) OR \(`product`\.`sku` LIKE 'AB%'( ESCAPE '.+')?\)\)/
|
|
431
431
|
end
|
|
432
432
|
|
|
433
433
|
it "can filter based on not starts with" do
|
|
434
|
-
@q.filter({:column => "sales.product.sku", :value => "123", :op => :nsw}).dataset.sql.should =~ /WHERE \(`product`\.`sku` NOT LIKE '123%'
|
|
434
|
+
@q.filter({:column => "sales.product.sku", :value => "123", :op => :nsw}).dataset.sql.should =~ /WHERE \(`product`\.`sku` NOT LIKE '123%'( ESCAPE '.+')?\)/
|
|
435
435
|
end
|
|
436
436
|
|
|
437
437
|
it "can filter based on 'not starts with' with multiple values" do
|
|
438
|
-
@q.filter({:column => "sales.product.sku", :value => ["123","AB"], :op => :nsw}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` NOT LIKE '123%'
|
|
438
|
+
@q.filter({:column => "sales.product.sku", :value => ["123","AB"], :op => :nsw}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` NOT LIKE '123%'( ESCAPE '.+')?\) AND \(`product`\.`sku` NOT LIKE 'AB%'( ESCAPE '.+')?\)\)/
|
|
439
439
|
end
|
|
440
440
|
|
|
441
441
|
it "can filter based on contains" do
|
|
442
|
-
@q.filter({:column => "sales.product.sku", :value => "123", :op => :con}).dataset.sql.should =~ /WHERE \(`product`\.`sku` LIKE '%123%'
|
|
442
|
+
@q.filter({:column => "sales.product.sku", :value => "123", :op => :con}).dataset.sql.should =~ /WHERE \(`product`\.`sku` LIKE '%123%'( ESCAPE '.+')?\)/
|
|
443
443
|
end
|
|
444
444
|
|
|
445
445
|
it "can filter based on not contains" do
|
|
446
|
-
@q.filter({:column => "sales.product.sku", :value => "123", :op => :ncon}).dataset.sql.should =~ /WHERE \(`product`\.`sku` NOT LIKE '%123%'
|
|
446
|
+
@q.filter({:column => "sales.product.sku", :value => "123", :op => :ncon}).dataset.sql.should =~ /WHERE \(`product`\.`sku` NOT LIKE '%123%'( ESCAPE '.+')?\)/
|
|
447
447
|
end
|
|
448
448
|
|
|
449
449
|
it "can filter based on multiple contains" do
|
|
450
|
-
@q.filter({:column => "sales.product.sku", :value => ["123", "AB", "foo"], :op => :con}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` LIKE '%123%'
|
|
450
|
+
@q.filter({:column => "sales.product.sku", :value => ["123", "AB", "foo"], :op => :con}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` LIKE '%123%'( ESCAPE '.+')?\) OR \(`product`\.`sku` LIKE '%AB%'( ESCAPE '.+')?\) OR \(`product`\.`sku` LIKE '%foo%'( ESCAPE '.+')?\)\)/
|
|
451
451
|
end
|
|
452
452
|
|
|
453
453
|
it "can filter based on multiple contains" do
|
|
454
|
-
@q.filter({:column => "sales.product.sku", :value => ["123", "AB", "foo"], :op => :ncon}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` NOT LIKE '%123%'
|
|
454
|
+
@q.filter({:column => "sales.product.sku", :value => ["123", "AB", "foo"], :op => :ncon}).dataset.sql.should =~ /WHERE \(\(`product`\.`sku` NOT LIKE '%123%'( ESCAPE '.+')?\) AND \(`product`\.`sku` NOT LIKE '%AB%'( ESCAPE '.+')?\) AND \(`product`\.`sku` NOT LIKE '%foo%'( ESCAPE '.+')?\)\)/
|
|
455
455
|
end
|
|
456
456
|
|
|
457
457
|
it "does not join the base table when filtering" do
|
data/spec/schema/column_spec.rb
CHANGED
|
@@ -158,15 +158,15 @@ describe Chicago::Schema::Column do
|
|
|
158
158
|
end
|
|
159
159
|
|
|
160
160
|
it "is binary if a hash" do
|
|
161
|
-
described_class.new(:foo, :
|
|
161
|
+
described_class.new(:foo, :binary).should be_binary
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
-
it "is nullable by default if
|
|
165
|
-
described_class.new(:foo, :
|
|
164
|
+
it "is nullable by default if binary" do
|
|
165
|
+
described_class.new(:foo, :binary).should be_null
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
-
it "is internal by default if
|
|
169
|
-
described_class.new(:foo, :
|
|
168
|
+
it "is internal by default if binary" do
|
|
169
|
+
described_class.new(:foo, :binary).should be_internal
|
|
170
170
|
end
|
|
171
171
|
|
|
172
172
|
it "is visitable" do
|
|
@@ -214,8 +214,9 @@ describe "Chicago::Schema::Column#to_hash" do
|
|
|
214
214
|
Chicago::Schema::Column.new(:some_value, :money).to_hash[:size].should == [12,2]
|
|
215
215
|
end
|
|
216
216
|
|
|
217
|
-
it "should have a default :size of 16 for
|
|
218
|
-
Chicago::Schema::Column.new(:some_value, :
|
|
217
|
+
it "should have a default :size of 16 for binary types" do
|
|
218
|
+
Chicago::Schema::Column.new(:some_value, :binary).
|
|
219
|
+
to_hash[:size].should == 16
|
|
219
220
|
end
|
|
220
221
|
|
|
221
222
|
it "should be unsigned by default if a percentage" do
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chicagowarehouse
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 9
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 4
|
|
9
|
-
-
|
|
10
|
-
version: 0.4.
|
|
9
|
+
- 3
|
|
10
|
+
version: 0.4.3
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Roland Swingler
|
|
@@ -28,10 +28,10 @@ dependencies:
|
|
|
28
28
|
- 3
|
|
29
29
|
- 0
|
|
30
30
|
version: "3.0"
|
|
31
|
-
requirement: *id001
|
|
32
|
-
type: :runtime
|
|
33
|
-
prerelease: false
|
|
34
31
|
name: sequel
|
|
32
|
+
prerelease: false
|
|
33
|
+
type: :runtime
|
|
34
|
+
requirement: *id001
|
|
35
35
|
- !ruby/object:Gem::Dependency
|
|
36
36
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
37
37
|
none: false
|
|
@@ -44,10 +44,10 @@ dependencies:
|
|
|
44
44
|
- 3
|
|
45
45
|
- 2
|
|
46
46
|
version: 0.3.2
|
|
47
|
-
requirement: *id002
|
|
48
|
-
type: :runtime
|
|
49
|
-
prerelease: false
|
|
50
47
|
name: sequel_migration_builder
|
|
48
|
+
prerelease: false
|
|
49
|
+
type: :runtime
|
|
50
|
+
requirement: *id002
|
|
51
51
|
- !ruby/object:Gem::Dependency
|
|
52
52
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
53
53
|
none: false
|
|
@@ -60,10 +60,10 @@ dependencies:
|
|
|
60
60
|
- 8
|
|
61
61
|
- 1
|
|
62
62
|
version: 2.8.1
|
|
63
|
-
requirement: *id003
|
|
64
|
-
type: :runtime
|
|
65
|
-
prerelease: false
|
|
66
63
|
name: mysql
|
|
64
|
+
prerelease: false
|
|
65
|
+
type: :runtime
|
|
66
|
+
requirement: *id003
|
|
67
67
|
- !ruby/object:Gem::Dependency
|
|
68
68
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
69
69
|
none: false
|
|
@@ -74,10 +74,10 @@ dependencies:
|
|
|
74
74
|
segments:
|
|
75
75
|
- 0
|
|
76
76
|
version: "0"
|
|
77
|
-
requirement: *id004
|
|
78
|
-
type: :runtime
|
|
79
|
-
prerelease: false
|
|
80
77
|
name: chronic
|
|
78
|
+
prerelease: false
|
|
79
|
+
type: :runtime
|
|
80
|
+
requirement: *id004
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
@@ -88,10 +88,10 @@ dependencies:
|
|
|
88
88
|
segments:
|
|
89
89
|
- 0
|
|
90
90
|
version: "0"
|
|
91
|
-
requirement: *id005
|
|
92
|
-
type: :development
|
|
93
|
-
prerelease: false
|
|
94
91
|
name: yard
|
|
92
|
+
prerelease: false
|
|
93
|
+
type: :development
|
|
94
|
+
requirement: *id005
|
|
95
95
|
- !ruby/object:Gem::Dependency
|
|
96
96
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
97
97
|
none: false
|
|
@@ -103,10 +103,10 @@ dependencies:
|
|
|
103
103
|
- 2
|
|
104
104
|
- 0
|
|
105
105
|
version: "2.0"
|
|
106
|
-
requirement: *id006
|
|
107
|
-
type: :development
|
|
108
|
-
prerelease: false
|
|
109
106
|
name: rspec
|
|
107
|
+
prerelease: false
|
|
108
|
+
type: :development
|
|
109
|
+
requirement: *id006
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
111
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
112
112
|
none: false
|
|
@@ -117,10 +117,10 @@ dependencies:
|
|
|
117
117
|
segments:
|
|
118
118
|
- 0
|
|
119
119
|
version: "0"
|
|
120
|
-
requirement: *id007
|
|
121
|
-
type: :development
|
|
122
|
-
prerelease: false
|
|
123
120
|
name: bundler
|
|
121
|
+
prerelease: false
|
|
122
|
+
type: :development
|
|
123
|
+
requirement: *id007
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
125
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
|
126
126
|
none: false
|
|
@@ -131,10 +131,10 @@ dependencies:
|
|
|
131
131
|
segments:
|
|
132
132
|
- 0
|
|
133
133
|
version: "0"
|
|
134
|
-
requirement: *id008
|
|
135
|
-
type: :development
|
|
136
|
-
prerelease: false
|
|
137
134
|
name: jeweler
|
|
135
|
+
prerelease: false
|
|
136
|
+
type: :development
|
|
137
|
+
requirement: *id008
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
139
139
|
version_requirements: &id009 !ruby/object:Gem::Requirement
|
|
140
140
|
none: false
|
|
@@ -145,10 +145,10 @@ dependencies:
|
|
|
145
145
|
segments:
|
|
146
146
|
- 0
|
|
147
147
|
version: "0"
|
|
148
|
-
requirement: *id009
|
|
149
|
-
type: :development
|
|
150
|
-
prerelease: false
|
|
151
148
|
name: rcov
|
|
149
|
+
prerelease: false
|
|
150
|
+
type: :development
|
|
151
|
+
requirement: *id009
|
|
152
152
|
- !ruby/object:Gem::Dependency
|
|
153
153
|
version_requirements: &id010 !ruby/object:Gem::Requirement
|
|
154
154
|
none: false
|
|
@@ -159,10 +159,10 @@ dependencies:
|
|
|
159
159
|
segments:
|
|
160
160
|
- 0
|
|
161
161
|
version: "0"
|
|
162
|
-
requirement: *id010
|
|
163
|
-
type: :development
|
|
164
|
-
prerelease: false
|
|
165
162
|
name: flog
|
|
163
|
+
prerelease: false
|
|
164
|
+
type: :development
|
|
165
|
+
requirement: *id010
|
|
166
166
|
- !ruby/object:Gem::Dependency
|
|
167
167
|
version_requirements: &id011 !ruby/object:Gem::Requirement
|
|
168
168
|
none: false
|
|
@@ -173,10 +173,10 @@ dependencies:
|
|
|
173
173
|
segments:
|
|
174
174
|
- 0
|
|
175
175
|
version: "0"
|
|
176
|
-
requirement: *id011
|
|
177
|
-
type: :development
|
|
178
|
-
prerelease: false
|
|
179
176
|
name: ZenTest
|
|
177
|
+
prerelease: false
|
|
178
|
+
type: :development
|
|
179
|
+
requirement: *id011
|
|
180
180
|
- !ruby/object:Gem::Dependency
|
|
181
181
|
version_requirements: &id012 !ruby/object:Gem::Requirement
|
|
182
182
|
none: false
|
|
@@ -187,10 +187,10 @@ dependencies:
|
|
|
187
187
|
segments:
|
|
188
188
|
- 0
|
|
189
189
|
version: "0"
|
|
190
|
-
requirement: *id012
|
|
191
|
-
type: :development
|
|
192
|
-
prerelease: false
|
|
193
190
|
name: timecop
|
|
191
|
+
prerelease: false
|
|
192
|
+
type: :development
|
|
193
|
+
requirement: *id012
|
|
194
194
|
description: Simple Data Warehouse toolkit for ruby
|
|
195
195
|
email: roland.swingler@gmail.com
|
|
196
196
|
executables: []
|