Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hechien/64a9ea19b7e1173bb87c45bc2a0010a4 to your computer and use it in GitHub Desktop.
Save hechien/64a9ea19b7e1173bb87c45bc2a0010a4 to your computer and use it in GitHub Desktop.
Rails 4.2: composite_primary_keys 8.1.0 and activerecord-sqlserver-adapter 4.2.4 generating wrong SQL on some queries
class CreateNoIdModels < ActiveRecord::Migration
def change
create_table :no_id_models, id: false do |t|
t.integer :pk1
t.integer :pk2
end
end
end
source 'https://rubygems.org'
gem 'rails', '4.2.3'
gem 'composite_primary_keys', '8.1.0'
gem 'activerecord-sqlserver-adapter', '4.2.4'
gem 'tiny_tds', '0.6.2'
class NoIdModel < ActiveRecord::Base
self.primary_keys = [:pk1, :pk2]
end
require 'test_helper'
class NoIdModelTest < ActiveSupport::TestCase
test 'model with no id limited by 1' do
assert NoIdModel.limit(1).to_a.is_a?(Array)
end
end
NoIdModel.create([{ pk1: 1, pk2: 2 }, { pk1: 3, pk2: 4 }])
# put this in the initializers folder
# requires Ruby 2+
module SQLServerCPKOrderFix
def make_Fetch_Possible_And_Deterministic o
super
o.orders.each_with_index do |node, i|
rel = node.expr.relation
expr_name = node.expr.name
if expr_name.is_a?(CompositePrimaryKeys::CompositeKeys)
o.orders[i] = expr_name.collect { |a| rel[a].send(node.direction) }
end
end
end
end
Arel::Visitors::SQLServer.prepend(SQLServerCPKOrderFix)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment