Re: Psycopg2 and LIXA

From: Daniele Varrazzo <daniele(dot)varrazzo(at)gmail(dot)com>
To: Christian Ferrari <camauz(at)yahoo(dot)com>
Cc: "psycopg(at)postgresql(dot)org" <psycopg(at)postgresql(dot)org>
Subject: Re: Psycopg2 and LIXA
Date: 2012-02-13 09:10:33
Message-ID: CA+mi_8bzLLSHgGD_gRCvNudD-g5Zcm-8NpuF0cb1-t7U3B0eHw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

On Sun, Feb 12, 2012 at 10:02 PM, Christian Ferrari <camauz(at)yahoo(dot)com> wrote:

> I briefly examined DBAPI, but unfortunately there is a major drawback: DBAPI supplies an API that is equivalent to XA and can be used to implement a Transaction Manager, but it should not be used by an Application Program. If an Application Program had to deal with "prepare" and "recover" verbs, it would implement a Transaction Manager itself.

Isn't LIXA a Transaction Manager, and as such supposed to use the
tpc_*() methods, while an application would use the other connection
methods?

>> I suspect a good solution could be for
>> the lixa code to create a psycopg connection (which in turn calls
>> PQconnectdb) and get the PGconn from there, then returning the python
>> object to the invoking python code. Also, because lixa seems modular,
>> couldn't you create a "psycopg" module, which would largely use
>> the
>> same "postgresql" module implementation but would offers methods that
>> are meaningful for a Python user (i.e. return a connectionObject
>> instead of a PGconn)?
>
> Wrapping "lixa_pq_get_conn()" (that's C code) with a method retrieving a different type could be done at C level and Python level as well. Where could I found the exact "connectionObject" specification? Could you point me to the right direction at first step?

An example of creation of a connection is the psyco_connect() function
in psycopgmodule.c: the most accessible way in C would be

connectionObject *conn
conn = (connectionObject *)PyObject_CallFunction((PyObject
*)&connectionType, "s", dsn);

where dsn is the char[] containing the libpq connection string.

I assume the function should be called with a Python interpreter well
initialized, but if lixa is imported by a Python process and the above
code is called by a function wrapped in a Python call I assume all the
conditions required are met. Of course everything is pretty
experimental: psycopg doesn't offer (yet) a C api, nor the import
file are designed to be used outside the library: if the approach
works we can provide a Python C API properly done.

-- Daniele

In response to

Responses

Browse psycopg by date

  From Date Subject
Next Message Federico Di Gregorio 2012-02-13 09:17:24 Re: Psycopg2 and LIXA
Previous Message Federico Di Gregorio 2012-02-13 08:52:26 Re: Psycopg2 and LIXA