Re: Integration of Psycopg with XTA

From: Christian Ferrari <camauz(at)yahoo(dot)com>
To: psycopg(at)lists(dot)postgresql(dot)org
Subject: Re: Integration of Psycopg with XTA
Date: 2018-10-02 20:07:50
Message-ID: 106450562.4254785.1538510870700@mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

Hi Federico,I have been able to test _raw_pgconn using SWIG, as documented here https://sourceforge.net/p/swig/mailman/message/27919299/ , the trick to use PyCapsule and SWIG together is to specifically map the type with a directive like this one:
%typemap(in) PGconn * {
  $1 = (PGconn *) PyCapsule_GetPointer($input, "psycopg2.connection._raw_pgconn");
}

This is interesting because PyCapsule is for sure a "clean" way to pass the pointer from Psycopg to XTA.

A couple of questions to understand how to implement it as a re-usable deliverable.
In current branch, _raw_pgconn is a property, it's not a method, I have to retrieve it as below:
pgconn = rm1._raw_pgconn
xar1 = PostgresqlXaResource(pgconn, "PostgreSQL", "dbname=testdb")

what do you think about a "getter method":
pgconn = rm1._raw_pgconn()
the name of the method does not really matter to me.
_raw_pgconn() create a Capsule object that should be destroyed.What do you think about a factory to create and destroy a PyCapsule that contains the PGconn pointer?
Kind RegardsCh.F.

-------------------------------------------------------------
Good design can't stop bad implementation

Il giovedì 27 settembre 2018, 22:11:35 CEST, Federico Di Gregorio <fog(at)dndg(dot)it> ha scritto:

On 09/27/2018 09:57 PM, Christian Ferrari wrote:
> Thanks, for the fix, now the function works, but unfortunately it's a
> dead end in the SWIG realm...Here's the statement:
> http://www.swig.org/Doc2.0/SWIGDocumentation.html#Python_nn18
> [...]
> *However, the inverse operation is not possible, i.e., you can't build a
> SWIG pointer object from a raw integer value.*
> [...]
>
> PyCapsule https://docs.python.org/2/c-api/capsule.html, suggested by
> Federico seems a more viable approach:
> https://bfroehle.com/2011/07/18/python-capsules/
>
> If Psycopg was able to retrieve a PyCapsule, XTA should be able to use
> it and the Python interpreter would be a gateway between two C/C++
> distinct modules (Psycopg and XTA).
> I'm going to perform some experiments in the XTA wrapper before coming
> back to this mail thread.

If you want the capsule, just pull from my report:

https://github.com/fogzot/psycopg2/tree/feature-expose-pgconn

and use the feature-expose-pgconn branch.

federico

--
Federico Di Gregorio                        federico(dot)digregorio(at)dndg(dot)it
DNDG srl                                                  http://dndg.it
  Everything will be OK at the end. If it's not OK, it's not the end.
                                                              -- Unknown

In response to

Responses

Browse psycopg by date

  From Date Subject
Next Message Federico Di Gregorio 2018-10-03 12:28:00 Re: Integration of Psycopg with XTA
Previous Message Christian Ferrari 2018-09-29 20:28:53 Re: Integration of Psycopg with XTA