odbc_adapter 4.2.0 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/console +56 -2
- data/lib/active_record/connection_adapters/odbc_adapter.rb +1 -0
- data/lib/odbc_adapter/adapters/mysql_odbc_adapter.rb +16 -0
- data/lib/odbc_adapter/adapters/postgresql_odbc_adapter.rb +1 -9
- data/lib/odbc_adapter/quoting.rb +0 -4
- data/lib/odbc_adapter/schema_statements.rb +6 -1
- data/lib/odbc_adapter/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b346729dc34997485619663c87b6649b2454c2b
|
4
|
+
data.tar.gz: 5cf390727ae990ec1267e26d24ba9304a0b04cd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9649d34b588a48502e6792ad71f37c05c2fb742160f24d95935f5c56984fc41c8641a28f999a9af44891f16d7553683021acc50f52b7945d389176c93c66e96d
|
7
|
+
data.tar.gz: 015a240fe4c71e01cbe710410c61cc24b98b470b7cb55fbb07621a73d334f643a161bd99dafc3ffb8274c6c25ce3ed5503de70ce099712397db4b30ee4a30317
|
data/bin/console
CHANGED
@@ -2,6 +2,60 @@
|
|
2
2
|
|
3
3
|
require 'bundler/setup'
|
4
4
|
require 'odbc_adapter'
|
5
|
+
require 'pry'
|
5
6
|
|
6
|
-
require '
|
7
|
-
|
7
|
+
require 'odbc_adapter/adapters/postgresql_odbc_adapter'
|
8
|
+
ODBCAdapter.register(/snowflake/, ODBCAdapter::Adapters::PostgreSQLODBCAdapter) do
|
9
|
+
# Here until we upgrade the ODBC driver
|
10
|
+
class DecimalCaster
|
11
|
+
attr_reader :column
|
12
|
+
|
13
|
+
def initialize(column)
|
14
|
+
@column = column
|
15
|
+
end
|
16
|
+
|
17
|
+
def cast(value)
|
18
|
+
return if value.nil?
|
19
|
+
column.scale.zero? ? value.to_i : value.to_f
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Handles strings that aren't utf-8 encoded
|
24
|
+
class StringEncodingCaster
|
25
|
+
def cast(value)
|
26
|
+
value.is_a?(String) ? value.force_encoding('UTF-8') : value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def quote_column_name(name)
|
31
|
+
name.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Monkey-patch the type casting for SQL_DECIMAL columns until we upgrade the ODBC driver
|
37
|
+
def dbms_type_cast(columns, values)
|
38
|
+
casters = Hash.new { |h, k| h[k] = [StringEncodingCaster.new] }
|
39
|
+
|
40
|
+
columns.each_with_index do |column, idx|
|
41
|
+
casters[idx] << DecimalCaster.new(column) if column.type == ODBC::SQL_DECIMAL
|
42
|
+
end
|
43
|
+
|
44
|
+
values.each do |row|
|
45
|
+
row.each_index do |idx|
|
46
|
+
casters[idx].each { |caster| row[idx] = caster.cast(row[idx]) }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
values
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
ActiveRecord::Base.establish_connection(adapter: 'odbc', dsn: 'LocalyticsProductionSnowflake')
|
55
|
+
|
56
|
+
binding.pry
|
57
|
+
|
58
|
+
# class FactSession < ActiveRecord::Base
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# puts FactSession.where(device_new: true).to_sql
|
@@ -40,6 +40,22 @@ module ODBCAdapter
|
|
40
40
|
string.gsub(/\\/, '\&\&').gsub(/'/, "''")
|
41
41
|
end
|
42
42
|
|
43
|
+
def quoted_true
|
44
|
+
'1'
|
45
|
+
end
|
46
|
+
|
47
|
+
def unquoted_true
|
48
|
+
1
|
49
|
+
end
|
50
|
+
|
51
|
+
def quoted_false
|
52
|
+
'0'
|
53
|
+
end
|
54
|
+
|
55
|
+
def unquoted_false
|
56
|
+
0
|
57
|
+
end
|
58
|
+
|
43
59
|
def disable_referential_integrity(&block) #:nodoc:
|
44
60
|
old = select_value("SELECT @@FOREIGN_KEY_CHECKS")
|
45
61
|
|
@@ -62,7 +62,7 @@ module ODBCAdapter
|
|
62
62
|
|
63
63
|
case value
|
64
64
|
when String
|
65
|
-
return super unless 'bytea' == column.
|
65
|
+
return super unless 'bytea' == column.native_type
|
66
66
|
{ value: value, format: 1 }
|
67
67
|
else
|
68
68
|
super
|
@@ -75,14 +75,6 @@ module ODBCAdapter
|
|
75
75
|
string.gsub(/\\/, '\&\&').gsub(/'/, "''")
|
76
76
|
end
|
77
77
|
|
78
|
-
def quoted_true
|
79
|
-
"'t'"
|
80
|
-
end
|
81
|
-
|
82
|
-
def quoted_false
|
83
|
-
"'f'"
|
84
|
-
end
|
85
|
-
|
86
78
|
def disable_referential_integrity #:nodoc:
|
87
79
|
execute(tables.map { |name| "ALTER TABLE #{quote_table_name(name)} DISABLE TRIGGER ALL" }.join(';'))
|
88
80
|
yield
|
data/lib/odbc_adapter/quoting.rb
CHANGED
@@ -25,10 +25,6 @@ module ODBCAdapter
|
|
25
25
|
"#{quote_char.chr}#{name}#{quote_char.chr}"
|
26
26
|
end
|
27
27
|
|
28
|
-
def quoted_true
|
29
|
-
'1'
|
30
|
-
end
|
31
|
-
|
32
28
|
# Ideally, we'd return an ODBC date or timestamp literal escape
|
33
29
|
# sequence, but not all ODBC drivers support them.
|
34
30
|
def quoted_date(value)
|
@@ -48,7 +48,12 @@ module ODBCAdapter
|
|
48
48
|
# SQLColumns: IS_NULLABLE, SQLColumns: NULLABLE
|
49
49
|
col_nullable = nullability(col_name, col[17], col[10])
|
50
50
|
|
51
|
-
cast_type =
|
51
|
+
cast_type =
|
52
|
+
if col_native_type == self.class::BOOLEAN_TYPE
|
53
|
+
ActiveRecord::Type::Boolean.new
|
54
|
+
else
|
55
|
+
lookup_cast_type(col_sql_type)
|
56
|
+
end
|
52
57
|
cols << new_column(format_case(col_name), col_default, cast_type, col_sql_type, col_nullable, col_native_type, col_scale, col_limit)
|
53
58
|
end
|
54
59
|
end
|
data/lib/odbc_adapter/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odbc_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Localytics
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-odbc
|