activerecord_pg_stuff 0.0.1 → 0.2.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/activerecord_pg_stuff.gemspec +1 -1
- data/lib/activerecord_pg_stuff/connection/temporary_table.rb +1 -1
- data/lib/activerecord_pg_stuff/relation/pivot.rb +2 -3
- data/lib/activerecord_pg_stuff/relation/temporary_table.rb +5 -3
- data/lib/activerecord_pg_stuff/version.rb +1 -1
- data/spec/lib/connection_temporary_table_spec.rb +2 -2
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a74e9ffd6c02c6912d7ef455e31425fdfbe19b0
|
4
|
+
data.tar.gz: dedb60e87ec990e25177ebb59df69ba36217f8d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bac00e46e4bbcfdd35a953b1d0e1c666cc2bb18a832efd7339702e68826a82cd0fca7aa7818633e5148a2631b98f01d1ff1f4bc44fe40d3cc543e05340f345ca
|
7
|
+
data.tar.gz: 8c8f62c55499ce6ae9567e0311913444e6cb3c7a7929ff3dabdb64f7d0fd44604dbfe0776b1fe081d3a1552ed8789890bc91c649795ea989469f2b0f8b5f7426
|
data/.travis.yml
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency "activerecord", "~>
|
21
|
+
spec.add_runtime_dependency "activerecord", "~> 5.0"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
@@ -8,7 +8,7 @@ module ActiveRecordPgStuff
|
|
8
8
|
begin
|
9
9
|
sql = sql.gsub(/\n/, ' ').gsub(/ +/, ' ').strip
|
10
10
|
sql = "CREATE TEMPORARY TABLE #{name} ON COMMIT DROP AS #{sql}"
|
11
|
-
|
11
|
+
execute sql
|
12
12
|
yield name
|
13
13
|
ensure
|
14
14
|
execute("DROP TABLE IF EXISTS #{name}") rescue nil
|
@@ -17,7 +17,7 @@ module ActiveRecordPgStuff
|
|
17
17
|
def result_to_array(result)
|
18
18
|
result.to_hash.map do |h|
|
19
19
|
result.columns.inject([]) do |a, col|
|
20
|
-
a << result.column_types[col].
|
20
|
+
a << result.column_types[col].cast(h[col])
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -26,8 +26,7 @@ module ActiveRecordPgStuff
|
|
26
26
|
module Pivot
|
27
27
|
|
28
28
|
def pivot(row_id, col_id, val_id)
|
29
|
-
|
30
|
-
types_sql = %{ SELECT column_name, data_type FROM information_schema.columns WHERE table_name = #{connection.quote self.table_name} AND column_name IN (#{connection.quote row_id},#{connection.quote val_id}) }
|
29
|
+
types_sql = %{ SELECT column_name, data_type FROM information_schema.columns WHERE table_name = #{connection.quote self.table.name} AND column_name IN (#{connection.quote row_id},#{connection.quote val_id}) }
|
31
30
|
types = connection.select_all types_sql
|
32
31
|
types = types.to_a.map(&:values).inject({}) do |a, v|
|
33
32
|
a[v[0]] = v[1]
|
@@ -4,13 +4,15 @@ module ActiveRecordPgStuff
|
|
4
4
|
module TemporaryTable
|
5
5
|
|
6
6
|
class Decorator
|
7
|
-
attr_reader :table_name, :arel_table, :quoted_table_name
|
7
|
+
attr_reader :table_name, :arel_table, :quoted_table_name, :table_metadata, :predicate_builder
|
8
8
|
|
9
9
|
def initialize(object, table_name)
|
10
10
|
@table_name = table_name
|
11
11
|
@object = object
|
12
12
|
@arel_table = Arel::Table.new(table_name)
|
13
13
|
@quoted_table_name = @object.connection.quote_table_name(table_name)
|
14
|
+
@table_metadata = ActiveRecord::TableMetadata.new(self, @arel_table)
|
15
|
+
@predicate_builder = ActiveRecord::PredicateBuilder.new(@table_metadata)
|
14
16
|
end
|
15
17
|
|
16
18
|
def method_missing(name, *args, &block)
|
@@ -23,10 +25,10 @@ module ActiveRecordPgStuff
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def temporary_table
|
26
|
-
tname = "temporary_#{self.
|
28
|
+
tname = "temporary_#{self.table.name}_#{self.object_id}"
|
27
29
|
self.klass.connection.with_temporary_table tname, self.to_sql do |name|
|
28
30
|
dec = Decorator.new self.klass, name
|
29
|
-
rel = ActiveRecord::Relation.new dec, dec.arel_table
|
31
|
+
rel = ActiveRecord::Relation.new dec, table: dec.arel_table
|
30
32
|
rel.readonly!
|
31
33
|
yield rel
|
32
34
|
end
|
@@ -9,7 +9,7 @@ describe ActiveRecordPgStuff::Connection::TemporaryTable do
|
|
9
9
|
rs = conn.with_temporary_table 'sellers_tmp', sql do |name|
|
10
10
|
conn.select_all("SELECT * FROM #{name}").to_a.map(&:values)
|
11
11
|
end
|
12
|
-
expect(rs).to eq [
|
12
|
+
expect(rs).to eq [[1, "foo"], [2, "bar"]]
|
13
13
|
expect {
|
14
14
|
conn.execute 'SELECT * FROM sellers_tmp'
|
15
15
|
}.to raise_error(ActiveRecord::StatementInvalid, /PG::UndefinedTable/)
|
@@ -22,7 +22,7 @@ describe ActiveRecordPgStuff::Connection::TemporaryTable do
|
|
22
22
|
conn.select_all("SELECT * FROM #{name_nested}").to_a.map(&:values)
|
23
23
|
end
|
24
24
|
end
|
25
|
-
expect(rs).to eq [
|
25
|
+
expect(rs).to eq [[1, "foo"]]
|
26
26
|
expect {
|
27
27
|
conn.execute 'SELECT * FROM sellers_tmp'
|
28
28
|
}.to raise_error(ActiveRecord::StatementInvalid, /PG::UndefinedTable/)
|
metadata
CHANGED
@@ -1,96 +1,96 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord_pg_stuff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Galinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pg
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
84
|
-
only)
|
83
|
+
description: " Adds support for working with temporary tables and pivot tables (PostgreSQL
|
84
|
+
only) "
|
85
85
|
email:
|
86
86
|
- dima.exe@gmail.com
|
87
87
|
executables: []
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
-
- .gitignore
|
92
|
-
- .rspec
|
93
|
-
- .travis.yml
|
91
|
+
- ".gitignore"
|
92
|
+
- ".rspec"
|
93
|
+
- ".travis.yml"
|
94
94
|
- Gemfile
|
95
95
|
- LICENSE.txt
|
96
96
|
- README.md
|
@@ -115,17 +115,17 @@ require_paths:
|
|
115
115
|
- lib
|
116
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '0'
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.4.5.1
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Adds support for working with temporary tables and pivot tables (PostgreSQL
|