Skip to content

Instantly share code, notes, and snippets.

@benalavi
Created December 11, 2018 07:10
Show Gist options
  • Save benalavi/884a3eb7d7497c0114610e3c76faf2ef to your computer and use it in GitHub Desktop.
Save benalavi/884a3eb7d7497c0114610e3c76faf2ef to your computer and use it in GitHub Desktop.
diff --git a/lib/sequel/plugins/class_table_inheritance.rb b/lib/sequel/plugins/class_table_inheritance.rb
index 6c8af1697..c48a2a779 100644
--- a/lib/sequel/plugins/class_table_inheritance.rb
+++ b/lib/sequel/plugins/class_table_inheritance.rb
@@ -283,7 +283,7 @@ module Sequel
if table = cti_table_map[n.to_sym]
columns = db.schema(table).map(&:first)
else
- table = if cti_qualify_tables && (schema = dataset.schema_and_table(table_name).first)
+ table = if cti_qualify_tables && (schema = dataset.schema_and_table(cti_table_name).first)
SQL::QualifiedIdentifier.new(schema, subclass.implicit_table_name)
else
subclass.implicit_table_name
diff --git a/spec/extensions/class_table_inheritance_spec.rb b/spec/extensions/class_table_inheritance_spec.rb
index 9a15de8e5..205193fe2 100644
--- a/spec/extensions/class_table_inheritance_spec.rb
+++ b/spec/extensions/class_table_inheritance_spec.rb
@@ -574,6 +574,7 @@ describe "class_table_inheritance plugin with dataset defined with QualifiedIden
{Sequel[:hr][:employees]=>[[:id, {:primary_key=>true, :type=>:integer}], [:name, {:type=>:string}], [:kind, {:type=>:string}]],
Sequel[:hr][:managers]=>[[:id, {:type=>:integer}]],
Sequel[:hr][:staff]=>[[:id, {:type=>:integer}], [:manager_id, {:type=>:integer}]],
+ Sequel[:hr][:executives]=>[[:id, {:type=>:integer}], [:num_managers, {:type=>:integer}]],
}[table.is_a?(Sequel::Dataset) ? table.first_source_table : table]
end
@db.extend_datasets do
@@ -583,6 +584,7 @@ describe "class_table_inheritance plugin with dataset defined with QualifiedIden
[Sequel[:hr][:staff]]=>[:id, :manager_id],
[Sequel[:hr][:employees], Sequel[:hr][:managers]]=>[:id, :name, :kind],
[Sequel[:hr][:employees], Sequel[:hr][:staff]]=>[:id, :name, :kind, :manager_id],
+ [Sequel[:hr][:employees], Sequel[:hr][:managers], Sequel[:hr][:executives]]=>[:id, :name, :kind, :manager_id, :num_managers],
}[opts[:from] + (opts[:join] || []).map{|x| x.table}]
end
end
@@ -675,10 +677,13 @@ describe "class_table_inheritance plugin with dataset defined with QualifiedIden
class ::Staff < ::Employee
many_to_one :manager
end
+ class ::Executive < ::Manager
+ end
Employee.dataset.sql.must_equal 'SELECT * FROM hr.employees'
Manager.dataset.sql.must_equal 'SELECT * FROM (SELECT hr.employees.id, hr.employees.name, hr.employees.kind FROM hr.employees INNER JOIN hr.managers ON (hr.managers.id = hr.employees.id)) AS employees'
Staff.dataset.sql.must_equal 'SELECT * FROM (SELECT hr.employees.id, hr.employees.name, hr.employees.kind, hr.staff.manager_id FROM hr.employees INNER JOIN hr.staff ON (hr.staff.id = hr.employees.id)) AS employees'
+ Executive.dataset.sql.must_equal 'SELECT * FROM (SELECT hr.employees.id, hr.employees.name, hr.employees.kind, hr.executives.num_managers FROM hr.employees INNER JOIN hr.managers ON (hr.managers.id = hr.employees.id) INNER JOIN hr.executives ON (hr.executives.id = hr.managers.id)) AS employees'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment