activerecord-redshift-adapter 0.9.12 → 8.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/LICENSE +25 -1
- data/README.md +28 -86
- data/lib/active_record/connection_adapters/redshift_7_0/array_parser.rb +92 -0
- data/lib/active_record/connection_adapters/redshift_7_0/column.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_0/database_statements.rb +232 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid/json.rb +41 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid/jsonb.rb +25 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid/type_map_initializer.rb +62 -0
- data/lib/active_record/connection_adapters/redshift_7_0/oid.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_0/quoting.rb +99 -0
- data/lib/active_record/connection_adapters/redshift_7_0/referential_integrity.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_0/schema_definitions.rb +70 -0
- data/lib/active_record/connection_adapters/redshift_7_0/schema_dumper.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_0/schema_statements.rb +421 -0
- data/lib/active_record/connection_adapters/redshift_7_0/type_metadata.rb +39 -0
- data/lib/active_record/connection_adapters/redshift_7_0/utils.rb +81 -0
- data/lib/active_record/connection_adapters/redshift_7_0_adapter.rb +768 -0
- data/lib/active_record/connection_adapters/redshift_7_1/array_parser.rb +92 -0
- data/lib/active_record/connection_adapters/redshift_7_1/column.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_1/database_statements.rb +180 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid/json.rb +41 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid/jsonb.rb +25 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid/type_map_initializer.rb +62 -0
- data/lib/active_record/connection_adapters/redshift_7_1/oid.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_1/quoting.rb +161 -0
- data/lib/active_record/connection_adapters/redshift_7_1/referential_integrity.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_1/schema_definitions.rb +70 -0
- data/lib/active_record/connection_adapters/redshift_7_1/schema_dumper.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_1/schema_statements.rb +422 -0
- data/lib/active_record/connection_adapters/redshift_7_1/type_metadata.rb +43 -0
- data/lib/active_record/connection_adapters/redshift_7_1/utils.rb +81 -0
- data/lib/active_record/connection_adapters/redshift_7_1_adapter.rb +847 -0
- data/lib/active_record/connection_adapters/redshift_7_2/array_parser.rb +92 -0
- data/lib/active_record/connection_adapters/redshift_7_2/column.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_2/database_statements.rb +180 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid/json.rb +41 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid/jsonb.rb +25 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid/type_map_initializer.rb +62 -0
- data/lib/active_record/connection_adapters/redshift_7_2/oid.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_2/quoting.rb +164 -0
- data/lib/active_record/connection_adapters/redshift_7_2/referential_integrity.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_2/schema_definitions.rb +70 -0
- data/lib/active_record/connection_adapters/redshift_7_2/schema_dumper.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_7_2/schema_statements.rb +422 -0
- data/lib/active_record/connection_adapters/redshift_7_2/type_metadata.rb +43 -0
- data/lib/active_record/connection_adapters/redshift_7_2/utils.rb +81 -0
- data/lib/active_record/connection_adapters/redshift_7_2_adapter.rb +847 -0
- data/lib/active_record/connection_adapters/redshift_8_0/array_parser.rb +92 -0
- data/lib/active_record/connection_adapters/redshift_8_0/column.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_8_0/database_statements.rb +181 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid/json.rb +41 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid/jsonb.rb +25 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid/type_map_initializer.rb +62 -0
- data/lib/active_record/connection_adapters/redshift_8_0/oid.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_8_0/quoting.rb +164 -0
- data/lib/active_record/connection_adapters/redshift_8_0/referential_integrity.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_8_0/schema_definitions.rb +70 -0
- data/lib/active_record/connection_adapters/redshift_8_0/schema_dumper.rb +17 -0
- data/lib/active_record/connection_adapters/redshift_8_0/schema_statements.rb +422 -0
- data/lib/active_record/connection_adapters/redshift_8_0/type_metadata.rb +43 -0
- data/lib/active_record/connection_adapters/redshift_8_0/utils.rb +81 -0
- data/lib/active_record/connection_adapters/redshift_8_0_adapter.rb +846 -0
- data/lib/active_record/connection_adapters/redshift_adapter.rb +13 -1286
- data/lib/active_record/tasks/redshift_7_0_tasks.rb +148 -0
- data/lib/active_record/tasks/redshift_7_1_tasks.rb +151 -0
- data/lib/active_record/tasks/redshift_7_2_tasks.rb +151 -0
- data/lib/active_record/tasks/redshift_8_0_tasks.rb +151 -0
- data/lib/active_record/tasks/redshift_tasks.rb +13 -0
- data/lib/activerecord-redshift-adapter.rb +13 -0
- metadata +110 -84
- data/.gitignore +0 -26
- data/Gemfile +0 -14
- data/Rakefile +0 -26
- data/activerecord-redshift-adapter.gemspec +0 -24
- data/lib/activerecord_redshift/table_manager.rb +0 -230
- data/lib/activerecord_redshift_adapter/version.rb +0 -4
- data/lib/activerecord_redshift_adapter.rb +0 -4
- data/lib/monkeypatch_activerecord.rb +0 -195
- data/lib/monkeypatch_arel.rb +0 -96
- data/spec/active_record/base_spec.rb +0 -37
- data/spec/active_record/connection_adapters/redshift_adapter_spec.rb +0 -97
- data/spec/dummy/config/database.example.yml +0 -12
- data/spec/spec_helper.rb +0 -33
metadata
CHANGED
@@ -1,133 +1,159 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-redshift-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 8.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
|
7
|
+
- Janusz Mordarski
|
8
|
+
- Nancy Foen
|
9
|
+
- Minero Aoki
|
10
|
+
- iamdbc
|
11
|
+
- Quentin Rousseau
|
12
|
+
- Johan Le Bray
|
13
|
+
- Owen Stephens
|
14
|
+
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
date:
|
17
|
+
date: 2024-11-25 00:00:00.000000000 Z
|
12
18
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: pg
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ! '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ! '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
19
|
- !ruby/object:Gem::Dependency
|
28
20
|
name: activerecord
|
29
21
|
requirement: !ruby/object:Gem::Requirement
|
30
22
|
requirements:
|
31
|
-
- -
|
23
|
+
- - ">="
|
32
24
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ! '>='
|
25
|
+
version: '7.0'
|
26
|
+
- - "<"
|
39
27
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activesupport
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ! '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.0.0
|
28
|
+
version: '9.0'
|
48
29
|
type: :runtime
|
49
30
|
prerelease: false
|
50
31
|
version_requirements: !ruby/object:Gem::Requirement
|
51
32
|
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.0.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: arel
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
33
|
+
- - ">="
|
60
34
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ! '>='
|
35
|
+
version: '7.0'
|
36
|
+
- - "<"
|
67
37
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
38
|
+
version: '9.0'
|
69
39
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
40
|
+
name: pg
|
71
41
|
requirement: !ruby/object:Gem::Requirement
|
72
42
|
requirements:
|
73
|
-
- -
|
43
|
+
- - "~>"
|
74
44
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :
|
45
|
+
version: '1.0'
|
46
|
+
type: :runtime
|
77
47
|
prerelease: false
|
78
48
|
version_requirements: !ruby/object:Gem::Requirement
|
79
49
|
requirements:
|
80
|
-
- -
|
50
|
+
- - "~>"
|
81
51
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
description:
|
84
|
-
email:
|
52
|
+
version: '1.0'
|
53
|
+
description: Amazon Redshift adapter for ActiveRecord 7+
|
54
|
+
email: janusz.m@gmail.com
|
85
55
|
executables: []
|
86
56
|
extensions: []
|
87
57
|
extra_rdoc_files: []
|
88
58
|
files:
|
89
|
-
- .gitignore
|
90
|
-
- Gemfile
|
91
59
|
- LICENSE
|
92
60
|
- README.md
|
93
|
-
-
|
94
|
-
-
|
61
|
+
- lib/active_record/connection_adapters/redshift_7_0/array_parser.rb
|
62
|
+
- lib/active_record/connection_adapters/redshift_7_0/column.rb
|
63
|
+
- lib/active_record/connection_adapters/redshift_7_0/database_statements.rb
|
64
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid.rb
|
65
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid/date_time.rb
|
66
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid/decimal.rb
|
67
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid/json.rb
|
68
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid/jsonb.rb
|
69
|
+
- lib/active_record/connection_adapters/redshift_7_0/oid/type_map_initializer.rb
|
70
|
+
- lib/active_record/connection_adapters/redshift_7_0/quoting.rb
|
71
|
+
- lib/active_record/connection_adapters/redshift_7_0/referential_integrity.rb
|
72
|
+
- lib/active_record/connection_adapters/redshift_7_0/schema_definitions.rb
|
73
|
+
- lib/active_record/connection_adapters/redshift_7_0/schema_dumper.rb
|
74
|
+
- lib/active_record/connection_adapters/redshift_7_0/schema_statements.rb
|
75
|
+
- lib/active_record/connection_adapters/redshift_7_0/type_metadata.rb
|
76
|
+
- lib/active_record/connection_adapters/redshift_7_0/utils.rb
|
77
|
+
- lib/active_record/connection_adapters/redshift_7_0_adapter.rb
|
78
|
+
- lib/active_record/connection_adapters/redshift_7_1/array_parser.rb
|
79
|
+
- lib/active_record/connection_adapters/redshift_7_1/column.rb
|
80
|
+
- lib/active_record/connection_adapters/redshift_7_1/database_statements.rb
|
81
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid.rb
|
82
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid/date_time.rb
|
83
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid/decimal.rb
|
84
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid/json.rb
|
85
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid/jsonb.rb
|
86
|
+
- lib/active_record/connection_adapters/redshift_7_1/oid/type_map_initializer.rb
|
87
|
+
- lib/active_record/connection_adapters/redshift_7_1/quoting.rb
|
88
|
+
- lib/active_record/connection_adapters/redshift_7_1/referential_integrity.rb
|
89
|
+
- lib/active_record/connection_adapters/redshift_7_1/schema_definitions.rb
|
90
|
+
- lib/active_record/connection_adapters/redshift_7_1/schema_dumper.rb
|
91
|
+
- lib/active_record/connection_adapters/redshift_7_1/schema_statements.rb
|
92
|
+
- lib/active_record/connection_adapters/redshift_7_1/type_metadata.rb
|
93
|
+
- lib/active_record/connection_adapters/redshift_7_1/utils.rb
|
94
|
+
- lib/active_record/connection_adapters/redshift_7_1_adapter.rb
|
95
|
+
- lib/active_record/connection_adapters/redshift_7_2/array_parser.rb
|
96
|
+
- lib/active_record/connection_adapters/redshift_7_2/column.rb
|
97
|
+
- lib/active_record/connection_adapters/redshift_7_2/database_statements.rb
|
98
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid.rb
|
99
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid/date_time.rb
|
100
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid/decimal.rb
|
101
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid/json.rb
|
102
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid/jsonb.rb
|
103
|
+
- lib/active_record/connection_adapters/redshift_7_2/oid/type_map_initializer.rb
|
104
|
+
- lib/active_record/connection_adapters/redshift_7_2/quoting.rb
|
105
|
+
- lib/active_record/connection_adapters/redshift_7_2/referential_integrity.rb
|
106
|
+
- lib/active_record/connection_adapters/redshift_7_2/schema_definitions.rb
|
107
|
+
- lib/active_record/connection_adapters/redshift_7_2/schema_dumper.rb
|
108
|
+
- lib/active_record/connection_adapters/redshift_7_2/schema_statements.rb
|
109
|
+
- lib/active_record/connection_adapters/redshift_7_2/type_metadata.rb
|
110
|
+
- lib/active_record/connection_adapters/redshift_7_2/utils.rb
|
111
|
+
- lib/active_record/connection_adapters/redshift_7_2_adapter.rb
|
112
|
+
- lib/active_record/connection_adapters/redshift_8_0/array_parser.rb
|
113
|
+
- lib/active_record/connection_adapters/redshift_8_0/column.rb
|
114
|
+
- lib/active_record/connection_adapters/redshift_8_0/database_statements.rb
|
115
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid.rb
|
116
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid/date_time.rb
|
117
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid/decimal.rb
|
118
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid/json.rb
|
119
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid/jsonb.rb
|
120
|
+
- lib/active_record/connection_adapters/redshift_8_0/oid/type_map_initializer.rb
|
121
|
+
- lib/active_record/connection_adapters/redshift_8_0/quoting.rb
|
122
|
+
- lib/active_record/connection_adapters/redshift_8_0/referential_integrity.rb
|
123
|
+
- lib/active_record/connection_adapters/redshift_8_0/schema_definitions.rb
|
124
|
+
- lib/active_record/connection_adapters/redshift_8_0/schema_dumper.rb
|
125
|
+
- lib/active_record/connection_adapters/redshift_8_0/schema_statements.rb
|
126
|
+
- lib/active_record/connection_adapters/redshift_8_0/type_metadata.rb
|
127
|
+
- lib/active_record/connection_adapters/redshift_8_0/utils.rb
|
128
|
+
- lib/active_record/connection_adapters/redshift_8_0_adapter.rb
|
95
129
|
- lib/active_record/connection_adapters/redshift_adapter.rb
|
96
|
-
- lib/
|
97
|
-
- lib/
|
98
|
-
- lib/
|
99
|
-
- lib/
|
100
|
-
- lib/
|
101
|
-
-
|
102
|
-
|
103
|
-
- spec/dummy/config/database.example.yml
|
104
|
-
- spec/spec_helper.rb
|
105
|
-
homepage: http://github.com/fiksu/activerecord-redshift-adapter
|
130
|
+
- lib/active_record/tasks/redshift_7_0_tasks.rb
|
131
|
+
- lib/active_record/tasks/redshift_7_1_tasks.rb
|
132
|
+
- lib/active_record/tasks/redshift_7_2_tasks.rb
|
133
|
+
- lib/active_record/tasks/redshift_8_0_tasks.rb
|
134
|
+
- lib/active_record/tasks/redshift_tasks.rb
|
135
|
+
- lib/activerecord-redshift-adapter.rb
|
136
|
+
homepage: https://github.com/januszm/activerecord-redshift-adapter
|
106
137
|
licenses:
|
107
|
-
-
|
138
|
+
- MIT
|
108
139
|
metadata: {}
|
109
|
-
post_install_message:
|
140
|
+
post_install_message:
|
110
141
|
rdoc_options: []
|
111
142
|
require_paths:
|
112
143
|
- lib
|
113
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
145
|
requirements:
|
115
|
-
- -
|
146
|
+
- - ">="
|
116
147
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
148
|
+
version: '3.0'
|
118
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
150
|
requirements:
|
120
|
-
- -
|
151
|
+
- - ">="
|
121
152
|
- !ruby/object:Gem::Version
|
122
153
|
version: '0'
|
123
154
|
requirements: []
|
124
|
-
|
125
|
-
|
126
|
-
signing_key:
|
155
|
+
rubygems_version: 3.5.22
|
156
|
+
signing_key:
|
127
157
|
specification_version: 4
|
128
|
-
summary:
|
129
|
-
test_files:
|
130
|
-
- spec/active_record/base_spec.rb
|
131
|
-
- spec/active_record/connection_adapters/redshift_adapter_spec.rb
|
132
|
-
- spec/dummy/config/database.example.yml
|
133
|
-
- spec/spec_helper.rb
|
158
|
+
summary: Amazon Redshift adapter for ActiveRecord
|
159
|
+
test_files: []
|
data/.gitignore
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
-
#
|
3
|
-
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
-
# or operating system, you probably want to add a global ignore instead:
|
5
|
-
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
-
|
7
|
-
# Ignore bundler config
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore the default SQLite database.
|
11
|
-
/db/*.sqlite3
|
12
|
-
|
13
|
-
# Ignore all logfiles and tempfiles.
|
14
|
-
/log/*.log
|
15
|
-
/tmp
|
16
|
-
.idea/*
|
17
|
-
database.yml
|
18
|
-
/log/*.pid
|
19
|
-
spec/dummy/db/*.sqlite3
|
20
|
-
spec/dummy/log/*.log
|
21
|
-
spec/dummy/tmp/
|
22
|
-
spec/dummy/.sass-cache
|
23
|
-
spec/dummy/config/database.yml
|
24
|
-
spec/dummy/db/schema.rb
|
25
|
-
|
26
|
-
Gemfile.lock
|
data/Gemfile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
source "http://rubygems.org"
|
2
|
-
|
3
|
-
# Declare your gem's dependencies in partitioned.gemspec.
|
4
|
-
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
-
# development dependencies will be added by default to the :development group.
|
6
|
-
gemspec
|
7
|
-
|
8
|
-
# Declare any dependencies that are still in development here instead of in
|
9
|
-
# your gemspec. These might include edge Rails or gems from your path or
|
10
|
-
# Git. Remember to move these dependencies to your gemspec before releasing
|
11
|
-
# your gem to rubygems.org.
|
12
|
-
|
13
|
-
# To use debugger
|
14
|
-
# gem 'ruby-debug'
|
data/Rakefile
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
|
-
begin
|
3
|
-
require 'bundler/setup'
|
4
|
-
rescue LoadError
|
5
|
-
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
-
end
|
7
|
-
|
8
|
-
task :default => :spec
|
9
|
-
|
10
|
-
begin
|
11
|
-
require 'rdoc/task'
|
12
|
-
rescue LoadError
|
13
|
-
require 'rdoc/rdoc'
|
14
|
-
require 'rake/rdoctask'
|
15
|
-
RDoc::Task = Rake::RDocTask
|
16
|
-
end
|
17
|
-
|
18
|
-
RDoc::Task.new(:rdoc) do |rdoc|
|
19
|
-
rdoc.rdoc_dir = 'rdoc'
|
20
|
-
rdoc.title = 'activerecord-redshift-adapter'
|
21
|
-
rdoc.options << '--line-numbers'
|
22
|
-
rdoc.rdoc_files.include('README')
|
23
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
24
|
-
end
|
25
|
-
|
26
|
-
Bundler::GemHelper.install_tasks
|
@@ -1,24 +0,0 @@
|
|
1
|
-
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
-
|
3
|
-
# Maintain your gem's version:
|
4
|
-
require "activerecord_redshift_adapter/version"
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = 'activerecord-redshift-adapter'
|
8
|
-
s.version = ActiverecordRedshiftAdapter::VERSION
|
9
|
-
s.license = 'New BSD License'
|
10
|
-
s.date = '2014-03-30'
|
11
|
-
s.summary = "Rails 3 database adapter support for AWS RedShift."
|
12
|
-
s.description = "This gem provides the Rails 3 with database adapter for AWS RedShift."
|
13
|
-
s.authors = ["Keith Gabryelski"]
|
14
|
-
s.email = 'keith@fiksu.com'
|
15
|
-
s.files = `git ls-files`.split("\n")
|
16
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.require_path = 'lib'
|
18
|
-
s.homepage = 'http://github.com/fiksu/activerecord-redshift-adapter'
|
19
|
-
s.add_dependency "pg"
|
20
|
-
s.add_dependency "activerecord", '>= 3.0.0'
|
21
|
-
s.add_dependency "activesupport", '>= 3.0.0'
|
22
|
-
s.add_dependency "arel", '>= 3.0.0'
|
23
|
-
s.add_development_dependency 'rspec'
|
24
|
-
end
|
@@ -1,230 +0,0 @@
|
|
1
|
-
module ActiverecordRedshift
|
2
|
-
class TableManager
|
3
|
-
attr_reader :default_options
|
4
|
-
|
5
|
-
DEFAULT_OPTIONS = { :exemplar_table_name => nil, :add_identity => false, :temporary => true}
|
6
|
-
|
7
|
-
def initialize(connection, default_options = {})
|
8
|
-
@connection = connection
|
9
|
-
table_name_options = {}
|
10
|
-
if default_options[:partitioned_model]
|
11
|
-
model = default_options[:partitioned_model]
|
12
|
-
default_options[:exemplar_table_name] = model.table_name
|
13
|
-
default_options[:schema_name] = model.configurator.schema_name
|
14
|
-
end
|
15
|
-
|
16
|
-
if default_options[:table_name].blank?
|
17
|
-
connection_pid = @connection.execute("select pg_backend_pid() as pid").first['pid'].to_i
|
18
|
-
table_name_options[:table_name] = "temporary_events_#{connection_pid}"
|
19
|
-
end
|
20
|
-
@default_options = DEFAULT_OPTIONS.merge(table_name_options).merge(default_options)
|
21
|
-
end
|
22
|
-
|
23
|
-
def partitioned_model
|
24
|
-
return @default_options[:partitioned_model]
|
25
|
-
end
|
26
|
-
|
27
|
-
def schema_name
|
28
|
-
return @default_options[:schema_name]
|
29
|
-
end
|
30
|
-
|
31
|
-
def exemplar_table_name
|
32
|
-
return @default_options[:exemplar_table_name]
|
33
|
-
end
|
34
|
-
|
35
|
-
def add_identity
|
36
|
-
return @default_options[:add_identity]
|
37
|
-
end
|
38
|
-
|
39
|
-
def temporary
|
40
|
-
return @default_options[:temporary]
|
41
|
-
end
|
42
|
-
|
43
|
-
def base_table_name
|
44
|
-
return @default_options[:table_name]
|
45
|
-
end
|
46
|
-
|
47
|
-
def table_name
|
48
|
-
if schema_name.blank?
|
49
|
-
return base_table_name
|
50
|
-
end
|
51
|
-
return "#{schema_name}.#{base_table_name}"
|
52
|
-
end
|
53
|
-
|
54
|
-
def drop_table
|
55
|
-
@connection.execute("drop table #{table_name}")
|
56
|
-
end
|
57
|
-
|
58
|
-
def duplicate_table(options = {})
|
59
|
-
current_options = @default_options.merge(options)
|
60
|
-
target_table_name = current_options[:table_name]
|
61
|
-
raise "target_table_name not set" if target_table_name.blank?
|
62
|
-
exemplar_table_name = current_options[:exemplar_table_name]
|
63
|
-
raise "exemplar_table_name not set" if exemplar_table_name.blank?
|
64
|
-
table_name_elements = exemplar_table_name.split('.');
|
65
|
-
if table_name_elements.length == 1
|
66
|
-
table_name_elements.unshift("public")
|
67
|
-
end
|
68
|
-
schema_name = table_name_elements[0]
|
69
|
-
parent_table_name = table_name_elements[1]
|
70
|
-
|
71
|
-
# first find the diststyle
|
72
|
-
## namespace first
|
73
|
-
sql = "select oid from pg_namespace where nspname = '#{schema_name}' limit 1"
|
74
|
-
schema_oid = @connection.execute(sql).first['oid'].to_i
|
75
|
-
|
76
|
-
## now the diststyle 0 = even, 1 = some column
|
77
|
-
sql = "select oid,reldiststyle from pg_class where relnamespace = #{schema_oid} and relname = '#{parent_table_name}' limit 1"
|
78
|
-
pg_class_row = @connection.execute(sql).first
|
79
|
-
reldiststyle = pg_class_row['reldiststyle'].to_i
|
80
|
-
even_diststyle = (reldiststyle == 0)
|
81
|
-
table_oid = pg_class_row['oid'].to_i
|
82
|
-
|
83
|
-
## get unique and primary key constraints (pg_constraints)
|
84
|
-
sql = "select contype,conkey from pg_constraint where connamespace = #{schema_oid} and conrelid = #{table_oid}"
|
85
|
-
primary_key = nil
|
86
|
-
uniques = []
|
87
|
-
@connection.execute(sql).each do |row|
|
88
|
-
if row['contype'] == 'p'
|
89
|
-
# primary key
|
90
|
-
primary_key = row['conkey'][1..-2].split(',')
|
91
|
-
elsif row['contype'] == 'u'
|
92
|
-
# unique
|
93
|
-
uniques << row['conkey'][1..-2].split(',')
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
attnums = uniques.clone
|
98
|
-
unless primary_key.blank?
|
99
|
-
attnums << primary_key
|
100
|
-
end
|
101
|
-
attnums = attnums.flatten.uniq
|
102
|
-
|
103
|
-
column_names = {}
|
104
|
-
if attnums.length > 0
|
105
|
-
sql = "select attname,attnum from pg_attribute where attrelid = #{table_oid} and attnum in (#{attnums.join(',')})"
|
106
|
-
@connection.execute(sql).each do |row|
|
107
|
-
column_names[row['attnum']] = row['attname']
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
column_defaults = {}
|
112
|
-
sql = "select a.attname,d.adsrc from pg_attribute as a,pg_attrdef as d where a.attrelid = d.adrelid and d.adnum = a.attnum and a.attrelid = #{table_oid}"
|
113
|
-
@connection.execute(sql).each do |row|
|
114
|
-
column_defaults[row['attname']] = row['adsrc']
|
115
|
-
end
|
116
|
-
|
117
|
-
with_search_path([schema_name]) do
|
118
|
-
# select * from pg_table_def where tablename = 'bids' and schemaname = 'public';
|
119
|
-
## column, type, encoding, distkey, sortkey, not null
|
120
|
-
sortkeys = []
|
121
|
-
sql_columns = []
|
122
|
-
|
123
|
-
if current_options[:add_identity]
|
124
|
-
sql_columns << "_identity bigint identity"
|
125
|
-
end
|
126
|
-
|
127
|
-
sql = "select * from pg_table_def where tablename = '#{parent_table_name}' and schemaname = '#{schema_name}'"
|
128
|
-
sql_column_rows = @connection.execute(sql)
|
129
|
-
sql_column_rows.each do |row|
|
130
|
-
column_info = []
|
131
|
-
column_name = row['column']
|
132
|
-
column_info << column_name
|
133
|
-
column_info << row['type']
|
134
|
-
if row['notnull'] == "t"
|
135
|
-
column_info << "not null"
|
136
|
-
end
|
137
|
-
if row['distkey'] == "t"
|
138
|
-
column_info << "distkey"
|
139
|
-
end
|
140
|
-
if row['encoding'] != 'none'
|
141
|
-
column_info << "encode #{row['encoding']}"
|
142
|
-
end
|
143
|
-
if row['sortkey'] != "0"
|
144
|
-
sortkeys[row['sortkey'].to_i - 1] = column_name
|
145
|
-
end
|
146
|
-
unless column_defaults[column_name].blank?
|
147
|
-
column_info << "default #{column_defaults[column_name]}"
|
148
|
-
end
|
149
|
-
|
150
|
-
sql_columns << column_info.join(" ")
|
151
|
-
end
|
152
|
-
|
153
|
-
unless primary_key.blank?
|
154
|
-
sql_columns << "primary key (#{primary_key.map{|pk| column_names[pk]}.join(',')})"
|
155
|
-
end
|
156
|
-
|
157
|
-
uniques.each do |unique|
|
158
|
-
sql_columns << "unique (#{unique.map{|uk| column_names[uk]}.join(',')})"
|
159
|
-
end
|
160
|
-
|
161
|
-
if sortkeys.blank?
|
162
|
-
sql_sortkeys = ""
|
163
|
-
else
|
164
|
-
sql_sortkeys = " sortkey (#{sortkeys.join(',')})"
|
165
|
-
end
|
166
|
-
sql = <<-SQL
|
167
|
-
create #{"temporary " if current_options[:temporary]}table #{table_name}
|
168
|
-
(
|
169
|
-
#{sql_columns.join(', ')}
|
170
|
-
) #{"diststyle even " if even_diststyle}#{sql_sortkeys}
|
171
|
-
SQL
|
172
|
-
@connection.execute(sql)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def table_def(table_name)
|
177
|
-
table_parts = table_name.split('.')
|
178
|
-
if table_parts.length == 1
|
179
|
-
name = table_parts.first
|
180
|
-
search_path = ["public"]
|
181
|
-
else
|
182
|
-
name = table_parts.last
|
183
|
-
search_path = [table_parts.first]
|
184
|
-
end
|
185
|
-
|
186
|
-
with_search_path(search_path) do
|
187
|
-
return @connection.execute("select * from pg_table_def where tablename = '#{name}'").to_a
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# search_path = array
|
192
|
-
# modes: :prefix, :suffix, :replace
|
193
|
-
def with_search_path(search_path, mode = :replace, &block)
|
194
|
-
unless search_path.is_a? Array
|
195
|
-
raise "search_path must be an Array"
|
196
|
-
end
|
197
|
-
|
198
|
-
old_search_path = get_search_path
|
199
|
-
if mode == :prefix
|
200
|
-
new_search_path = search_path + old_search_path
|
201
|
-
elsif mode == :suffix
|
202
|
-
new_search_path = old_search_path + search_path
|
203
|
-
elsif mode == :replace
|
204
|
-
new_search_path = search_path
|
205
|
-
else
|
206
|
-
raise "mode must be :prefix, :suffix, :replace"
|
207
|
-
end
|
208
|
-
|
209
|
-
set_search_path(new_search_path)
|
210
|
-
begin
|
211
|
-
yield
|
212
|
-
ensure
|
213
|
-
set_search_path(old_search_path)
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def get_search_path
|
218
|
-
return @connection.execute("show search_path").to_a.first["search_path"].split(',').map{|p| p.delete('" ')}
|
219
|
-
end
|
220
|
-
|
221
|
-
def set_search_path(search_path)
|
222
|
-
unless search_path.is_a? Array
|
223
|
-
raise "search_path must be an Array"
|
224
|
-
end
|
225
|
-
quoted_search_path = search_path.map{|sp| "'#{sp}'"}.join(',')
|
226
|
-
@connection.execute("set search_path = #{quoted_search_path}")
|
227
|
-
end
|
228
|
-
|
229
|
-
end
|
230
|
-
end
|