what is the meaning of Datum?
Hi all,
ok this is a silly question, but I've got a doubt: what is the exact meaning
of Datum? I see having a look at the macroes (e.g., PG_RETURN_XXX) that a
Datum can be used as a pointer or as a single data, that is it can be a
reference or a value. Is this right? So for instance the fact that each stored
procedure returns a Datum means that the semantic of the Datum is interpreted
depending on how the procedure is defined in the SQL language (i.e., it returns
a integer, a tuple, ...). Am I right?
Moreover, is there a documentation (aside the source code) that explains and
links each internal data structure like HeapTuple, HeapTupleHeader, and so on?
Thanks,
Luca
Luca Ferrari <fluca1978@infinito.it> writes:
ok this is a silly question, but I've got a doubt: what is the exact meaning
of Datum?
It's the backend-internal representation of a single value of any SQL
data type. The code using the Datum has to know which type it is,
since the Datum itself doesn't contain that information. Usually,
C code will work with a value in a "native" representation, and then
convert to or from Datum in order to pass the value through
data-type-independent interfaces.
regards, tom lane
Tom Lane wrote:
Luca Ferrari <fluca1978@infinito.it> writes:
ok this is a silly question, but I've got a doubt: what is the exact meaning
of Datum?It's the backend-internal representation of a single value of any SQL
data type. The code using the Datum has to know which type it is,
since the Datum itself doesn't contain that information. Usually,
C code will work with a value in a "native" representation, and then
convert to or from Datum in order to pass the value through
data-type-independent interfaces.regards, tom lane
And how this convertions will be made ?
Are there internal functions to do this ?
Thanks.
-Tedy
Excerpts from Luca Ferrari's message of mié jun 23 06:09:28 -0400 2010:
Hi all,
ok this is a silly question, but I've got a doubt: what is the exact meaning
of Datum? I see having a look at the macroes (e.g., PG_RETURN_XXX) that a
Datum can be used as a pointer or as a single data, that is it can be a
reference or a value. Is this right?
Yes
So for instance the fact that each stored
procedure returns a Datum means that the semantic of the Datum is interpreted
depending on how the procedure is defined in the SQL language (i.e., it returns
a integer, a tuple, ...). Am I right?
Yes
Moreover, is there a documentation (aside the source code) that explains and
links each internal data structure like HeapTuple, HeapTupleHeader, and so on?
The source code comments should be plenty. Have you tried reading
those?
--
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
On Wed, 2010-06-23 at 12:15 -0400, Alvaro Herrera wrote:
Moreover, is there a documentation (aside the source code) that explains and
links each internal data structure like HeapTuple, HeapTupleHeader, and so on?The source code comments should be plenty. Have you tried reading
those?
Here is a nice interface to the code:
http://doxygen.postgresql.org/
Sincerely,
Joshua D. Drake
--
PostgreSQL.org Major Contributor
Command Prompt, Inc: http://www.commandprompt.com/ - 509.416.6579
Consulting, Training, Support, Custom Development, Engineering
Teodor Macicas <teodor.macicas@epfl.ch> writes:
Tom Lane wrote:
C code will work with a value in a "native" representation, and then
convert to or from Datum in order to pass the value through
data-type-independent interfaces.
And how this convertions will be made ?
Are there internal functions to do this ?
Usually you should use the appropriate DatumGetXXX or XXXGetDatum
macro, or possibly the PG_GET_XXX or PG_RETURN_XXX wrappers for those.
Whether that's a simple cast or a function call is the macro's business.
regards, tom lane