Re: adding import in pl/python function
От | Claudio Freire |
---|---|
Тема | Re: adding import in pl/python function |
Дата | |
Msg-id | CAGTBQpYQuzHFAZHn+Mmge5gQJK563h0bj6sQWqiSUnVLyZ+YEA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: adding import in pl/python function (Szymon Guz <mabewlun@gmail.com>) |
Ответы |
Re: adding import in pl/python function
Re: adding import in pl/python function |
Список | pgsql-hackers |
On Fri, May 24, 2013 at 4:22 PM, Szymon Guz <mabewlun@gmail.com> wrote: > Hm... maybe you're right. I think I don't understand fully how the > procedures are executed, and I need to read more to get it. Well, it's easy. Instead of PLyFloat_FromNumeric[0], you can make a PLyDecimal_FromNumeric. There, you'd do with the Python/C[1]: PyObject *decimal = PyImport_Import("decimal"); PyObject *decimal_dict = PyModule_GetDict(decimal); PyObject *decimal_ctor = PyDict_GetItemString(decimal_dict, "Decimal"); And invoke it with a string rep of your Numeric: PyObject *value = PyObject_CallFunction(decimal_ctor, "S", string_value); Add of course all kinds of error checking and reference count boiler plate, and you'd have a very dumb version of it. To make it more "pro", you'd want to do all that stuff to get decimal_ctor only at initialization time. Especially since you don't want to fumble with the import lock right there in _FromNumeric. And to make it totally "pro", you can even freeze Decimal (using pyfreeze) if you'd like. I would only do this in contexts where you don't have a stdlib of course. Not sure whether windows falls into that category. Linux doesn't. [0] http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/pl/plpython/plpy_typeio.c#l518 [1] http://docs.python.org/2/c-api/import.html
В списке pgsql-hackers по дате отправления: