Open sim1984 opened 12 months ago
Simple fix in file firebird/src/jrd/extds/ExtDS.cpp
in function void Statement::preprocess(const string& sql, string& ret)
passAsIs = !(ident == "INSERT" || ident == "UPDATE" || ident == "DELETE" ||
ident == "MERGE" || ident == "SELECT" || ident == "WITH" || ident == "CALL");
This change could be ported back to earlier versions of Firebird so that they could call EXECUTE STATEMENT ON EXTERNAL
as of Firebird 6.0.
Simple fix in file
firebird/src/jrd/extds/ExtDS.cpp
in functionvoid Statement::preprocess(const string& sql, string& ret)
Things are not simple as you see.
First, the preparser rejects ?
alone, but no problem with this.
The real problem is that user may do things as call x(output => :name, input => ?)
and the parameters will be mapped incorrectly.
As far as I know in EXECUTE STATEMENT we do not mix named and unnamed parameter options at the same time.
As far as I know in EXECUTE STATEMENT we do not mix named and unnamed parameter options at the same time.
But there is no sense in have :name
for an output parameter (dsql ?
) of call
.
Firebird 6.0 added the ability to call stored procedures using a CALL statement.
However, the EXECUTE STATEMENT preparser is not aware of the CALL statement and therefore cannot work with named parameters.