activerecord4-redshift-adapter 0.2.0 → 0.2.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eea0356bef6917cb809017578ae67b75acfdfe6a
|
4
|
+
data.tar.gz: 8f0012056c332525da97265ec6e0f9b5fea2410f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 073586046aa238f83261868024f4d6378de00763d0ce2ac4225bb5b2725f3f499147f7045cc3910d3e249e07b098901e56764e73b9d5cf81a76474c14e5877ca
|
7
|
+
data.tar.gz: 270baf4730a43bd80134d08ce5f5582adc99d13d02f644d83de42b6727d8f9de2f3e3caeaf720686062a9e10b1042a4c49e2f43cdbfec31d667a5713a173ffc3
|
data/README.md
CHANGED
@@ -15,9 +15,13 @@ I abandon this driver.
|
|
15
15
|
Usage
|
16
16
|
-------------------
|
17
17
|
|
18
|
-
|
18
|
+
For Rails 4.2, write following in Gemfile:
|
19
19
|
```
|
20
|
-
gem 'activerecord4-redshift-adapter',
|
20
|
+
gem 'activerecord4-redshift-adapter', '~> 0.2.0'
|
21
|
+
```
|
22
|
+
For Rails 4.1:
|
23
|
+
```
|
24
|
+
gem 'activerecord4-redshift-adapter', '~> 0.1.1'
|
21
25
|
```
|
22
26
|
|
23
27
|
In database.yml
|
@@ -14,10 +14,6 @@ module ActiveRecord
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def add_column_options!(sql, options)
|
17
|
-
if options[:array] || options[:column].try(:array)
|
18
|
-
sql << '[]'
|
19
|
-
end
|
20
|
-
|
21
17
|
column = options.fetch(:column) { return super }
|
22
18
|
if column.type == :uuid && options[:default] =~ /\(\)/
|
23
19
|
sql << " DEFAULT #{options[:default]}"
|
@@ -58,18 +54,6 @@ module ActiveRecord
|
|
58
54
|
memo += case key
|
59
55
|
when :owner
|
60
56
|
" OWNER = \"#{value}\""
|
61
|
-
when :template
|
62
|
-
" TEMPLATE = \"#{value}\""
|
63
|
-
when :encoding
|
64
|
-
" ENCODING = '#{value}'"
|
65
|
-
when :collation
|
66
|
-
" LC_COLLATE = '#{value}'"
|
67
|
-
when :ctype
|
68
|
-
" LC_CTYPE = '#{value}'"
|
69
|
-
when :tablespace
|
70
|
-
" TABLESPACE = \"#{value}\""
|
71
|
-
when :connection_limit
|
72
|
-
" CONNECTION LIMIT = #{value}"
|
73
57
|
else
|
74
58
|
""
|
75
59
|
end
|
@@ -83,7 +67,7 @@ module ActiveRecord
|
|
83
67
|
# Example:
|
84
68
|
# drop_database 'matt_development'
|
85
69
|
def drop_database(name) #:nodoc:
|
86
|
-
execute "DROP DATABASE
|
70
|
+
execute "DROP DATABASE #{quote_table_name(name)}"
|
87
71
|
end
|
88
72
|
|
89
73
|
# Returns the list of all tables in the schema search path or a specified schema.
|
@@ -167,18 +151,10 @@ module ActiveRecord
|
|
167
151
|
end_sql
|
168
152
|
end
|
169
153
|
|
170
|
-
# Returns the current database collation.
|
171
154
|
def collation
|
172
|
-
query(<<-end_sql, 'SCHEMA')[0][0]
|
173
|
-
SELECT pg_database.datcollate FROM pg_database WHERE pg_database.datname LIKE '#{current_database}'
|
174
|
-
end_sql
|
175
155
|
end
|
176
156
|
|
177
|
-
# Returns the current database ctype.
|
178
157
|
def ctype
|
179
|
-
query(<<-end_sql, 'SCHEMA')[0][0]
|
180
|
-
SELECT pg_database.datctype FROM pg_database WHERE pg_database.datname LIKE '#{current_database}'
|
181
|
-
end_sql
|
182
158
|
end
|
183
159
|
|
184
160
|
# Returns an array of schema names.
|
@@ -235,97 +211,14 @@ module ActiveRecord
|
|
235
211
|
result.rows.first.first
|
236
212
|
end
|
237
213
|
|
238
|
-
# Sets the sequence of a table's primary key to the specified value.
|
239
214
|
def set_pk_sequence!(table, value) #:nodoc:
|
240
|
-
pk, sequence = pk_and_sequence_for(table)
|
241
|
-
|
242
|
-
if pk
|
243
|
-
if sequence
|
244
|
-
quoted_sequence = quote_table_name(sequence)
|
245
|
-
|
246
|
-
select_value <<-end_sql, 'SCHEMA'
|
247
|
-
SELECT setval('#{quoted_sequence}', #{value})
|
248
|
-
end_sql
|
249
|
-
else
|
250
|
-
@logger.warn "#{table} has primary key #{pk} with no default sequence" if @logger
|
251
|
-
end
|
252
|
-
end
|
253
215
|
end
|
254
216
|
|
255
|
-
# Resets the sequence of a table's primary key to the maximum value.
|
256
217
|
def reset_pk_sequence!(table, pk = nil, sequence = nil) #:nodoc:
|
257
|
-
unless pk and sequence
|
258
|
-
default_pk, default_sequence = pk_and_sequence_for(table)
|
259
|
-
|
260
|
-
pk ||= default_pk
|
261
|
-
sequence ||= default_sequence
|
262
|
-
end
|
263
|
-
|
264
|
-
if @logger && pk && !sequence
|
265
|
-
@logger.warn "#{table} has primary key #{pk} with no default sequence"
|
266
|
-
end
|
267
|
-
|
268
|
-
if pk && sequence
|
269
|
-
quoted_sequence = quote_table_name(sequence)
|
270
|
-
|
271
|
-
select_value <<-end_sql, 'SCHEMA'
|
272
|
-
SELECT setval('#{quoted_sequence}', (SELECT COALESCE(MAX(#{quote_column_name pk})+(SELECT increment_by FROM #{quoted_sequence}), (SELECT min_value FROM #{quoted_sequence})) FROM #{quote_table_name(table)}), false)
|
273
|
-
end_sql
|
274
|
-
end
|
275
218
|
end
|
276
219
|
|
277
|
-
# Returns a table's primary key and belonging sequence.
|
278
220
|
def pk_and_sequence_for(table) #:nodoc:
|
279
|
-
|
280
|
-
# given table's primary key.
|
281
|
-
result = query(<<-end_sql, 'SCHEMA')[0]
|
282
|
-
SELECT attr.attname, nsp.nspname, seq.relname
|
283
|
-
FROM pg_class seq,
|
284
|
-
pg_attribute attr,
|
285
|
-
pg_depend dep,
|
286
|
-
pg_constraint cons,
|
287
|
-
pg_namespace nsp
|
288
|
-
WHERE seq.oid = dep.objid
|
289
|
-
AND seq.relkind = 'S'
|
290
|
-
AND attr.attrelid = dep.refobjid
|
291
|
-
AND attr.attnum = dep.refobjsubid
|
292
|
-
AND attr.attrelid = cons.conrelid
|
293
|
-
AND attr.attnum = cons.conkey[1]
|
294
|
-
AND seq.relnamespace = nsp.oid
|
295
|
-
AND cons.contype = 'p'
|
296
|
-
AND dep.classid = 'pg_class'::regclass
|
297
|
-
AND dep.refobjid = '#{quote_table_name(table)}'::regclass
|
298
|
-
end_sql
|
299
|
-
|
300
|
-
if result.nil? or result.empty?
|
301
|
-
result = query(<<-end_sql, 'SCHEMA')[0]
|
302
|
-
SELECT attr.attname, nsp.nspname,
|
303
|
-
CASE
|
304
|
-
WHEN pg_get_expr(def.adbin, def.adrelid) !~* 'nextval' THEN NULL
|
305
|
-
WHEN split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2) ~ '.' THEN
|
306
|
-
substr(split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2),
|
307
|
-
strpos(split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2), '.')+1)
|
308
|
-
ELSE split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2)
|
309
|
-
END
|
310
|
-
FROM pg_class t
|
311
|
-
JOIN pg_attribute attr ON (t.oid = attrelid)
|
312
|
-
JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
|
313
|
-
JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
|
314
|
-
JOIN pg_namespace nsp ON (t.relnamespace = nsp.oid)
|
315
|
-
WHERE t.oid = '#{quote_table_name(table)}'::regclass
|
316
|
-
AND cons.contype = 'p'
|
317
|
-
AND pg_get_expr(def.adbin, def.adrelid) ~* 'nextval|uuid_generate'
|
318
|
-
end_sql
|
319
|
-
end
|
320
|
-
|
321
|
-
pk = result.shift
|
322
|
-
if result.last
|
323
|
-
[pk, PostgreSQL::Name.new(*result)]
|
324
|
-
else
|
325
|
-
[pk, nil]
|
326
|
-
end
|
327
|
-
rescue
|
328
|
-
nil
|
221
|
+
[nil, nil]
|
329
222
|
end
|
330
223
|
|
331
224
|
# Returns just a table's primary key
|
@@ -418,7 +311,7 @@ module ActiveRecord
|
|
418
311
|
|
419
312
|
def foreign_keys(table_name)
|
420
313
|
fk_info = select_all <<-SQL.strip_heredoc
|
421
|
-
SELECT t2.
|
314
|
+
SELECT t2.relname AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
422
315
|
FROM pg_constraint c
|
423
316
|
JOIN pg_class t1 ON c.conrelid = t1.oid
|
424
317
|
JOIN pg_class t2 ON c.confrelid = t2.oid
|
@@ -76,9 +76,9 @@ module ActiveRecord
|
|
76
76
|
ADAPTER_NAME = 'Redshift'.freeze
|
77
77
|
|
78
78
|
NATIVE_DATABASE_TYPES = {
|
79
|
-
primary_key: "integer primary key",
|
80
|
-
string: { name: "
|
81
|
-
text: { name: "
|
79
|
+
primary_key: "integer identity primary key",
|
80
|
+
string: { name: "varchar" },
|
81
|
+
text: { name: "varchar" },
|
82
82
|
integer: { name: "integer" },
|
83
83
|
float: { name: "float" },
|
84
84
|
decimal: { name: "decimal" },
|
@@ -86,8 +86,7 @@ module ActiveRecord
|
|
86
86
|
time: { name: "time" },
|
87
87
|
date: { name: "date" },
|
88
88
|
bigint: { name: "bigint" },
|
89
|
-
|
90
|
-
jsonb: { name: "jsonb" }
|
89
|
+
boolean: { name: "boolean" },
|
91
90
|
}
|
92
91
|
|
93
92
|
OID = Redshift::OID #:nodoc:
|
@@ -105,16 +104,10 @@ module ActiveRecord
|
|
105
104
|
# AbstractAdapter
|
106
105
|
def prepare_column_options(column, types) # :nodoc:
|
107
106
|
spec = super
|
108
|
-
spec[:array] = 'true' if column.respond_to?(:array) && column.array
|
109
107
|
spec[:default] = "\"#{column.default_function}\"" if column.default_function
|
110
108
|
spec
|
111
109
|
end
|
112
110
|
|
113
|
-
# Adds +:array+ as a valid migration key
|
114
|
-
def migration_keys
|
115
|
-
super + [:array]
|
116
|
-
end
|
117
|
-
|
118
111
|
# Returns +true+, since this connection adapter supports prepared statement
|
119
112
|
# caching.
|
120
113
|
def supports_statement_cache?
|
@@ -403,16 +396,11 @@ module ActiveRecord
|
|
403
396
|
m.alias_type 'char', 'varchar'
|
404
397
|
m.alias_type 'name', 'varchar'
|
405
398
|
m.alias_type 'bpchar', 'varchar'
|
399
|
+
m.register_type 'bool', Type::Boolean.new
|
406
400
|
m.alias_type 'timestamptz', 'timestamp'
|
407
401
|
m.register_type 'date', OID::Date.new
|
408
402
|
m.register_type 'time', OID::Time.new
|
409
403
|
|
410
|
-
m.register_type 'json', OID::Json.new
|
411
|
-
m.register_type 'jsonb', OID::Jsonb.new
|
412
|
-
|
413
|
-
# FIXME: why are we keeping these types as strings?
|
414
|
-
m.alias_type 'interval', 'varchar'
|
415
|
-
|
416
404
|
m.register_type 'timestamp' do |_, _, sql_type|
|
417
405
|
precision = extract_precision(sql_type)
|
418
406
|
OID::DateTime.new(precision: precision)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord4-redshift-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Minero Aoki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
86
|
version: '0'
|
87
87
|
requirements: []
|
88
88
|
rubyforge_project:
|
89
|
-
rubygems_version: 2.4.5
|
89
|
+
rubygems_version: 2.4.5.1
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: Amazon Redshift adapter for ActiveRecord 4
|