bin/console in odbc_adapter-4.2.0 vs bin/console in odbc_adapter-4.2.1
- old
+ new
@@ -1,7 +1,61 @@
#!/usr/bin/env ruby
require 'bundler/setup'
require 'odbc_adapter'
+require 'pry'
-require 'irb'
-IRB.start
+require 'odbc_adapter/adapters/postgresql_odbc_adapter'
+ODBCAdapter.register(/snowflake/, ODBCAdapter::Adapters::PostgreSQLODBCAdapter) do
+ # Here until we upgrade the ODBC driver
+ class DecimalCaster
+ attr_reader :column
+
+ def initialize(column)
+ @column = column
+ end
+
+ def cast(value)
+ return if value.nil?
+ column.scale.zero? ? value.to_i : value.to_f
+ end
+ end
+
+ # Handles strings that aren't utf-8 encoded
+ class StringEncodingCaster
+ def cast(value)
+ value.is_a?(String) ? value.force_encoding('UTF-8') : value
+ end
+ end
+
+ def quote_column_name(name)
+ name.to_s
+ end
+
+ private
+
+ # Monkey-patch the type casting for SQL_DECIMAL columns until we upgrade the ODBC driver
+ def dbms_type_cast(columns, values)
+ casters = Hash.new { |h, k| h[k] = [StringEncodingCaster.new] }
+
+ columns.each_with_index do |column, idx|
+ casters[idx] << DecimalCaster.new(column) if column.type == ODBC::SQL_DECIMAL
+ end
+
+ values.each do |row|
+ row.each_index do |idx|
+ casters[idx].each { |caster| row[idx] = caster.cast(row[idx]) }
+ end
+ end
+
+ values
+ end
+end
+
+ActiveRecord::Base.establish_connection(adapter: 'odbc', dsn: 'LocalyticsProductionSnowflake')
+
+binding.pry
+
+# class FactSession < ActiveRecord::Base
+# end
+#
+# puts FactSession.where(device_new: true).to_sql