Hi Jan,

Could you try the latest SVN version of libpqxx? I remember that 
something was fixed in this region recently, and I'm not sure if that 
fix is in 2.6.9.

Cheers,
Bart

Jan Danielsson wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> 
> Hello,
> 
>    The following program crashes when I run it (I have marked where):
> 
> - -------------------------------------------
> #include <iostream>
> #include <string>
> #include <pqxx/pqxx>
> 
> 
> class ServerContext
> {
>       private:
>       pqxx::connection m_conn;
> 
>       public:
>       ServerContext();
> 
>       bool createSession();
>       bool touchSession(const std::string& id);
> };
> 
> ServerContext::ServerContext() : m_conn("")
> {
>       std::cout << "Foo 1" << std::endl;
>       m_conn.prepare("addsess", "INSERT INTO sessions (id,addr) VALUES \
> ($1,$2)");
> 
>       std::cout << "Foo 2" << std::endl;
>       m_conn.prepare("touchsess", "UPDATE sessions WHERE id=$1 SET \
> ts=CURRENT_TIMESTAMP");
> 
> }
> 
> 
> bool ServerContext::createSession()
> {
>       pqxx::work w(m_conn, "Insert session");
> 
>       pqxx::prepare::invocation inv(w.prepared("addsess"));
>       inv("deadbeef");
>       inv("127.0.0.1");
>       pqxx::result r = inv.exec();    // <- crashes here
> /*
>       if(r.affected_rows() == 1)
>       {
>               w.commit();
>               return true;
>       }
> */
>       w.abort();
>       return false;
> }
> 
> 
> bool ServerContext::touchSession(const std::string& id)
> {
>       pqxx::work w(m_conn, "Touch session");
> 
>       pqxx::prepare::invocation inv = w.prepared("touchsess");
>       inv("deadbeef");
>       pqxx::result r = inv.exec();
> 
>       if(r.affected_rows() == 1)
>       {
>               w.commit();
>               return true;
>       }
>       w.abort();
>       return false;
> }
> 
> 
> 
> int main()
> {
>       ServerContext ctx;
> 
>       ctx.createSession();
> 
>       return 0;
> }
> - -------------------------------------------
> 
>    I traced the problem to pqxx:connection_base::find_prepared() in
> connection_base.cxx:826. It crashes when attempting to run:
> 
> 826: throw invalid_argument("Unknown prepared statement '" + statement +
> "'");
> 
>    The fact that it crashes is obviously a question which needs to be
> answered, but I'm more interested in knowing why it's even (trying to)
> complain(ing) about the prepared statement not being found. Is there
> something wrong with the above code? According to my vast experience in
> these matters, I'm guessing I'm doing something wrong because I haven't
> read the manual properly. :-)
> 
>    I can post the sql-script to initialize the tables, if someone wants it.
> 
> $ uname -m -p -r -s
> NetBSD 3.1 amd64 x86_64
> $ gcc --version
> gcc (GCC) 3.3.3 (NetBSD nb3 20040520)
> 
> - --
> Kind regards,
> Jan Danielsson
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.7 (NetBSD)
> 
> iD8DBQFGcM58uPlHKFfKXTYRCl/QAJ4vl+oQMzw9uMfjfywZQm+5/b9MfACeNkT0
> NaKALWqtLWBnkfpW+YXH/Fg=
> =m/jF
> -----END PGP SIGNATURE-----
> _______________________________________________
> Libpqxx-general mailing list
> Libpqxx-general@gborg.postgresql.org
> http://gborg.postgresql.org/mailman/listinfo/libpqxx-general

_______________________________________________
Libpqxx-general mailing list
Libpqxx-general@gborg.postgresql.org
http://gborg.postgresql.org/mailman/listinfo/libpqxx-general

Reply via email to