提交 7dbe6200 编写于 作者: R Ryuta Kamizono

Fix `create_table` with query from relation

If a relation has binds, `connection.to_sql(relation)` without binds
will generate invalid SQL. It should use `relation.to_sql` in that case.
上级 42a80721
......@@ -55,7 +55,7 @@ def visit_TableDefinition(o)
create_sql << "(#{statements.join(', ')})" if statements.present?
add_table_options!(create_sql, table_options(o))
create_sql << " AS #{@conn.to_sql(o.as)}" if o.as
create_sql << " AS #{to_sql(o.as)}" if o.as
create_sql
end
......@@ -114,6 +114,11 @@ def add_column_options!(sql, options)
sql
end
def to_sql(sql)
sql = sql.to_sql if sql.respond_to?(:to_sql)
sql
end
def foreign_key_in_create(from_table, to_table, options)
options = foreign_key_options(from_table, to_table, options)
accept ForeignKeyDefinition.new(from_table, to_table, options)
......
......@@ -502,11 +502,10 @@ def test_create_table_with_binary_column
unless mysql_enforcing_gtid_consistency?
def test_create_table_with_query
Person.connection.create_table(:person, force: true)
Person.connection.create_table :table_from_query_testings, as: "SELECT id FROM person"
Person.connection.create_table :table_from_query_testings, as: "SELECT id FROM people WHERE id = 1"
columns = Person.connection.columns(:table_from_query_testings)
assert_equal [1], Person.connection.select_values("SELECT * FROM table_from_query_testings")
assert_equal 1, columns.length
assert_equal "id", columns.first.name
ensure
......@@ -514,11 +513,10 @@ def test_create_table_with_query
end
def test_create_table_with_query_from_relation
Person.connection.create_table(:person, force: true)
Person.connection.create_table :table_from_query_testings, as: Person.select(:id)
Person.connection.create_table :table_from_query_testings, as: Person.select(:id).where(id: 1)
columns = Person.connection.columns(:table_from_query_testings)
assert_equal [1], Person.connection.select_values("SELECT * FROM table_from_query_testings")
assert_equal 1, columns.length
assert_equal "id", columns.first.name
ensure
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册