Best way to construct Datum out of a string?

Started by Yves Weißigover 14 years ago6 messages
#1Yves Weißig
weissig@rbg.informatik.tu-darmstadt.de

Hi,

sadly, so far my search in the source code wasn't very successfull on
this topic.
So, how can I construct a Datum out of a string?

Greetz, Yves

#2Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Yves Weißig (#1)
Re: Best way to construct Datum out of a string?

On 27.04.2011 17:06, Yves Weiᅵig wrote:

Hi,

sadly, so far my search in the source code wasn't very successfull on
this topic.
So, how can I construct a Datum out of a string?

What kind of a Datum do you want it to be? What data type? See
CStringGetDatum, or perhaps CStringGetTextDatum(). Or perhaps you want
to call the input function of some other datatype, with InputFunctionCall.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Yves Weißig (#1)
Re: Best way to construct Datum out of a string?

On 04/27/2011 10:06 AM, Yves Weiᅵig wrote:

Hi,

sadly, so far my search in the source code wasn't very successfull on
this topic.
So, how can I construct a Datum out of a string?

CStringGetDatum()

The code is replete with examples,

cheers

andrew

#4Yves Weißig
weissig@rbg.informatik.tu-darmstadt.de
In reply to: Heikki Linnakangas (#2)
Re: Best way to construct Datum out of a string?

Am 27.04.2011 16:11, schrieb Heikki Linnakangas:

On 27.04.2011 17:06, Yves Weiᅵig wrote:

Hi,

sadly, so far my search in the source code wasn't very successfull on
this topic.
So, how can I construct a Datum out of a string?

What kind of a Datum do you want it to be? What data type? See
CStringGetDatum, or perhaps CStringGetTextDatum(). Or perhaps you want
to call the input function of some other datatype, with InputFunctionCall.

Ok, but how do I do that?

Currently I am using:

_ebi_mtab_insert(rel, CStringGetTextDatum(BVEC_NULL), bin_enc);

This function does not mere than hashing the 2nd passed argument (with
the internal hash functions of hash.c) but each time a different hash
value is returned, so I am thinking I might pass a pointer and not the
real Datum. I am highly irritated now... as for now I thought I
understood Datum...

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Yves Weißig (#4)
Re: Best way to construct Datum out of a string?

=?ISO-8859-15?Q?Yves_Wei=DFig?= <weissig@rbg.informatik.tu-darmstadt.de> writes:

Am 27.04.2011 16:11, schrieb Heikki Linnakangas:

What kind of a Datum do you want it to be? What data type? See
CStringGetDatum, or perhaps CStringGetTextDatum(). Or perhaps you want
to call the input function of some other datatype, with InputFunctionCall.

Ok, but how do I do that?

Currently I am using:

_ebi_mtab_insert(rel, CStringGetTextDatum(BVEC_NULL), bin_enc);

This function does not mere than hashing the 2nd passed argument (with
the internal hash functions of hash.c) but each time a different hash
value is returned, so I am thinking I might pass a pointer and not the
real Datum. I am highly irritated now... as for now I thought I
understood Datum...

Well, it's hard to say for sure when you haven't shown us either what
BVEC_NULL means or what _ebi_mtab_insert is doing with the value it gets
... but in fact a text Datum *is* a pointer, as is the Datum value for
any other pass-by-reference type. Datum isn't magic, it's only a
pointer-sized integer type. For anything bigger than that, the Datum
value is a pointer to some data somewhere else.

regards, tom lane

#6Yves Weißig
weissig@rbg.informatik.tu-darmstadt.de
In reply to: Tom Lane (#5)
Re: Best way to construct Datum out of a string?

Am 28.04.2011 05:52, schrieb Tom Lane:

=?ISO-8859-15?Q?Yves_Wei=DFig?= <weissig@rbg.informatik.tu-darmstadt.de> writes:

Am 27.04.2011 16:11, schrieb Heikki Linnakangas:

What kind of a Datum do you want it to be? What data type? See
CStringGetDatum, or perhaps CStringGetTextDatum(). Or perhaps you want
to call the input function of some other datatype, with InputFunctionCall.

Ok, but how do I do that?

Currently I am using:

_ebi_mtab_insert(rel, CStringGetTextDatum(BVEC_NULL), bin_enc);

This function does not mere than hashing the 2nd passed argument (with
the internal hash functions of hash.c) but each time a different hash
value is returned, so I am thinking I might pass a pointer and not the
real Datum. I am highly irritated now... as for now I thought I
understood Datum...

Well, it's hard to say for sure when you haven't shown us either what
BVEC_NULL means or what _ebi_mtab_insert is doing with the value it gets
... but in fact a text Datum *is* a pointer, as is the Datum value for
any other pass-by-reference type. Datum isn't magic, it's only a
pointer-sized integer type. For anything bigger than that, the Datum
value is a pointer to some data somewhere else.

regards, tom lane

Sorry for giving so little information. I found the bug myself, I was
trying to hash a Datum created with CStringGetTextDatum with hashint4, I
certainly noticed this when I looked at the function which was actually
called by: hash_value = DatumGetUInt32(FunctionCall1(procinfo, value));
Thanks for trying to help!

Yves