activerecord4-redshift-adapter 0.1.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/lib/active_record/connection_adapters/redshift/array_parser.rb +35 -39
- data/lib/active_record/connection_adapters/redshift/column.rb +10 -0
- data/lib/active_record/connection_adapters/redshift/database_statements.rb +37 -47
- data/lib/active_record/connection_adapters/redshift/oid.rb +14 -359
- data/lib/active_record/connection_adapters/redshift/oid/date.rb +11 -0
- data/lib/active_record/connection_adapters/redshift/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/redshift/oid/decimal.rb +13 -0
- data/lib/active_record/connection_adapters/redshift/oid/float.rb +21 -0
- data/lib/active_record/connection_adapters/redshift/oid/infinity.rb +13 -0
- data/lib/active_record/connection_adapters/redshift/oid/integer.rb +11 -0
- data/lib/active_record/connection_adapters/redshift/oid/json.rb +35 -0
- data/lib/active_record/connection_adapters/redshift/oid/jsonb.rb +23 -0
- data/lib/active_record/connection_adapters/redshift/oid/time.rb +11 -0
- data/lib/active_record/connection_adapters/redshift/oid/type_map_initializer.rb +63 -0
- data/lib/active_record/connection_adapters/redshift/quoting.rb +45 -119
- data/lib/active_record/connection_adapters/redshift/referential_integrity.rb +4 -19
- data/lib/active_record/connection_adapters/redshift/schema_definitions.rb +73 -0
- data/lib/active_record/connection_adapters/redshift/schema_statements.rb +141 -76
- data/lib/active_record/connection_adapters/redshift/utils.rb +77 -0
- data/lib/active_record/connection_adapters/redshift_adapter.rb +252 -496
- metadata +17 -11
- data/lib/active_record/connection_adapters/redshift/cast.rb +0 -156
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.
|
4
|
+
version: 0.2.0
|
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-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -28,20 +28,14 @@ dependencies:
|
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 4.0.0
|
34
|
-
- - "<"
|
31
|
+
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: 4.2.0
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- - "
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 4.0.0
|
44
|
-
- - "<"
|
38
|
+
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: 4.2.0
|
47
41
|
description: Amazon Redshift _makeshift_ adapter for ActiveRecord 4.
|
@@ -53,12 +47,24 @@ files:
|
|
53
47
|
- LICENSE
|
54
48
|
- README.md
|
55
49
|
- lib/active_record/connection_adapters/redshift/array_parser.rb
|
56
|
-
- lib/active_record/connection_adapters/redshift/
|
50
|
+
- lib/active_record/connection_adapters/redshift/column.rb
|
57
51
|
- lib/active_record/connection_adapters/redshift/database_statements.rb
|
58
52
|
- lib/active_record/connection_adapters/redshift/oid.rb
|
53
|
+
- lib/active_record/connection_adapters/redshift/oid/date.rb
|
54
|
+
- lib/active_record/connection_adapters/redshift/oid/date_time.rb
|
55
|
+
- lib/active_record/connection_adapters/redshift/oid/decimal.rb
|
56
|
+
- lib/active_record/connection_adapters/redshift/oid/float.rb
|
57
|
+
- lib/active_record/connection_adapters/redshift/oid/infinity.rb
|
58
|
+
- lib/active_record/connection_adapters/redshift/oid/integer.rb
|
59
|
+
- lib/active_record/connection_adapters/redshift/oid/json.rb
|
60
|
+
- lib/active_record/connection_adapters/redshift/oid/jsonb.rb
|
61
|
+
- lib/active_record/connection_adapters/redshift/oid/time.rb
|
62
|
+
- lib/active_record/connection_adapters/redshift/oid/type_map_initializer.rb
|
59
63
|
- lib/active_record/connection_adapters/redshift/quoting.rb
|
60
64
|
- lib/active_record/connection_adapters/redshift/referential_integrity.rb
|
65
|
+
- lib/active_record/connection_adapters/redshift/schema_definitions.rb
|
61
66
|
- lib/active_record/connection_adapters/redshift/schema_statements.rb
|
67
|
+
- lib/active_record/connection_adapters/redshift/utils.rb
|
62
68
|
- lib/active_record/connection_adapters/redshift_adapter.rb
|
63
69
|
homepage: http://github.com/aamine/activerecord4-redshift-adapter
|
64
70
|
licenses:
|
@@ -1,156 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module ConnectionAdapters
|
3
|
-
class RedshiftColumn < Column
|
4
|
-
module Cast
|
5
|
-
def point_to_string(point)
|
6
|
-
"(#{point[0]},#{point[1]})"
|
7
|
-
end
|
8
|
-
|
9
|
-
def string_to_point(string)
|
10
|
-
if string[0] == '(' && string[-1] == ')'
|
11
|
-
string = string[1...-1]
|
12
|
-
end
|
13
|
-
string.split(',').map{ |v| Float(v) }
|
14
|
-
end
|
15
|
-
|
16
|
-
def string_to_time(string)
|
17
|
-
return string unless String === string
|
18
|
-
|
19
|
-
case string
|
20
|
-
when 'infinity'; 1.0 / 0.0
|
21
|
-
when '-infinity'; -1.0 / 0.0
|
22
|
-
when / BC$/
|
23
|
-
super("-" + string.sub(/ BC$/, ""))
|
24
|
-
else
|
25
|
-
super
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def string_to_bit(value)
|
30
|
-
case value
|
31
|
-
when /^0x/i
|
32
|
-
value[2..-1].hex.to_s(2) # Hexadecimal notation
|
33
|
-
else
|
34
|
-
value # Bit-string notation
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def hstore_to_string(object)
|
39
|
-
if Hash === object
|
40
|
-
object.map { |k,v|
|
41
|
-
"#{escape_hstore(k)}=>#{escape_hstore(v)}"
|
42
|
-
}.join ','
|
43
|
-
else
|
44
|
-
object
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def string_to_hstore(string)
|
49
|
-
if string.nil?
|
50
|
-
nil
|
51
|
-
elsif String === string
|
52
|
-
Hash[string.scan(HstorePair).map { |k,v|
|
53
|
-
v = v.upcase == 'NULL' ? nil : v.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1')
|
54
|
-
k = k.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1')
|
55
|
-
[k,v]
|
56
|
-
}]
|
57
|
-
else
|
58
|
-
string
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def json_to_string(object)
|
63
|
-
if Hash === object
|
64
|
-
ActiveSupport::JSON.encode(object)
|
65
|
-
else
|
66
|
-
object
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def array_to_string(value, column, adapter, should_be_quoted = false)
|
71
|
-
casted_values = value.map do |val|
|
72
|
-
if String === val
|
73
|
-
if val == "NULL"
|
74
|
-
"\"#{val}\""
|
75
|
-
else
|
76
|
-
quote_and_escape(adapter.type_cast(val, column, true))
|
77
|
-
end
|
78
|
-
else
|
79
|
-
adapter.type_cast(val, column, true)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
"{#{casted_values.join(',')}}"
|
83
|
-
end
|
84
|
-
|
85
|
-
def range_to_string(object)
|
86
|
-
from = object.begin.respond_to?(:infinite?) && object.begin.infinite? ? '' : object.begin
|
87
|
-
to = object.end.respond_to?(:infinite?) && object.end.infinite? ? '' : object.end
|
88
|
-
"[#{from},#{to}#{object.exclude_end? ? ')' : ']'}"
|
89
|
-
end
|
90
|
-
|
91
|
-
def string_to_json(string)
|
92
|
-
if String === string
|
93
|
-
ActiveSupport::JSON.decode(string)
|
94
|
-
else
|
95
|
-
string
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def string_to_cidr(string)
|
100
|
-
if string.nil?
|
101
|
-
nil
|
102
|
-
elsif String === string
|
103
|
-
IPAddr.new(string)
|
104
|
-
else
|
105
|
-
string
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def cidr_to_string(object)
|
110
|
-
if IPAddr === object
|
111
|
-
"#{object.to_s}/#{object.instance_variable_get(:@mask_addr).to_s(2).count('1')}"
|
112
|
-
else
|
113
|
-
object
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def string_to_array(string, oid)
|
118
|
-
parse_pg_array(string).map{|val| oid.type_cast val}
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
HstorePair = begin
|
124
|
-
quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"/
|
125
|
-
unquoted_string = /(?:\\.|[^\s,])[^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*/
|
126
|
-
/(#{quoted_string}|#{unquoted_string})\s*=>\s*(#{quoted_string}|#{unquoted_string})/
|
127
|
-
end
|
128
|
-
|
129
|
-
def escape_hstore(value)
|
130
|
-
if value.nil?
|
131
|
-
'NULL'
|
132
|
-
else
|
133
|
-
if value == ""
|
134
|
-
'""'
|
135
|
-
else
|
136
|
-
'"%s"' % value.to_s.gsub(/(["\\])/, '\\\\\1')
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
ARRAY_ESCAPE = "\\" * 2 * 2 # escape the backslash twice for PG arrays
|
142
|
-
|
143
|
-
def quote_and_escape(value)
|
144
|
-
case value
|
145
|
-
when "NULL"
|
146
|
-
value
|
147
|
-
else
|
148
|
-
value = value.gsub(/\\/, ARRAY_ESCAPE)
|
149
|
-
value.gsub!(/"/,"\\\"")
|
150
|
-
"\"#{value}\""
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|