Executing previously prepared statment fails after commiting transactions for PostgreSQL
Original Reporter info from Mantis: doconnor
-
Reporter name: Darwin O'Connor
Original Reporter info from Mantis: doconnor
- Reporter name: Darwin O'Connor
Description:
If you prepare a statement, and then start and commit a unrelated transaction, all the TPQTrans objects are freed, so an exception occurs when the prepared statement is run again.
It's possible I am miss using transactions.
Steps to reproduce:
//This test program takes a database name as a parameter. The password may need to be filled in.
program floatparam;
uses sysutils, db, pqconnection, sqldb;
var
Conn : TPQConnection;
trans : TSQLTransaction;
q : TSQLQuery;
begin
Conn:=TPQConnection.create(nil);
Conn.DatabaseName:=paramstr(1);
Conn.UserName:='postgres';
Conn.Password:='';
Conn.open;
trans:=TSQLTransaction.create(nil);
trans.Database:=conn;
conn.transaction:=trans;
q:=TSQLQuery.create(nil);
q.Database:=Conn;
q.sql.Add('select :i');
q.params[0].datatype:=ftinteger;
q.prepare;
q.params[0].asinteger:=1;
q.open;
writeln(q.fields[0].asinteger);
q.close;
if not trans.Active then trans.starttransaction;
trans.commit;
q.params[0].asinteger:=2;
q.open; //EAccessViolation occurs here
writeln(q.fields[0].asinteger);
q.Close;
q.free;
trans.free;
conn.free;
end.
Mantis conversion info:
- Mantis ID: 38981
- OS: Gentoo Linux
- Build: 3.2.2
- Platform: x64
- Version: 3.2.0
- Monitored by: » doconnor (Darwin O'Connor)