Use existing #empty_insert_statement_value for an insert with no columns. #302
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Aaron, following up from our email exchange.
Arel has logic that does not include columns for an insert statement if they are empty.
def visit_Arel_Nodes_InsertStatement o
[ "INSERT INTO #{visit o.relation}",
( "(#{o.columns.map { |x|
quote_column_name x.name
}.join ', '})" unless o.columns.empty?),
(visit o.values if o.values),
].compact.join ' '
end
The SQL Server adapter defines the older #empty_insert_statement_value method as such. This is because there is no such thing as "VALUES(DEFAULT)" that would work.
def empty_insert_statement_value
"DEFAULT VALUES"
end
In the latest version of rails we are no longer using this but #null_insert_value instead and AR is hooking into it from ActiveRecord::Relation#insert like so.
if values.empty? # empty insert
im.values = im.create_values [connection.null_insert_value], []
else
im.insert substitutes
end
This gives no one a chance to construct something like #empty_insert_statement_value for the SQLServerAdapter. We should utilize the existing #empty_insert_statement_value instead which seems more inline with Arel's InsertManager too.