Thread: Best way to construct Datum out of a string?
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
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
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
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...
Yves Weißig <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
Am 28.04.2011 05:52, schrieb Tom Lane: > Yves Weißig <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