According to InsertSelect documentation:
$conds Condition array. See $conds in IDatabase::select() for the details of the format of condition arrays. May be "*" to copy the whole table.
However, passing '*' to the $conds array causes an exception because it tries to generate a query that looks like this:
SELECT (fields) FROM (table) WHERE * FOR UPDATE
Since this is not from a command line, it tries to do a select first and then an insert, instead of a native insert select.
The following methods of Database class are handling the "*" correctly in $conds:
This looks like a regression, because there are extensions using it example. But I don't know for how long it's broken...
I see it a bit inconsistent that some methods accept an empty $conds for a full select, and other accept *.