Yes, in some cases, Datum is 0, which I test before conversion. Additionally, I looked at tts_isnull but it does not prevent the segmentation fault in some cases. The problem is. that sometimes the value is random, but I don't know why and how I can detect that case.
2014/1/6 Heikki Linnakangas <hlinnakan...@vmware.com> > On 01/06/2014 03:09 PM, Masterprojekt Naumann1 wrote: > >> I want to read an attribute value from a TupleTableSlot. When I try to >> convert an attribute of SQL type varchar from Datum* to char* with the >> help >> of the method TextDatumGetCString(...), sometimes there is a segmentation >> fault. The segmentation fault comes from the method >> TextDatumGetCString(...), which is defined in utils/builtins.h. >> Unfortunately, the fault is not always reproducible. I debugged the code >> and figured out that the value of result->tts_values[i] sometimes is >> random. It may be uninitialized memory. In other cases, the variable value >> is NULL. Then, I can just skip the conversion from Datum* to char*, so >> that >> there is no segmentation fault. I attached a patch with the code. The >> relevant line is: >> char *value = TextDatumGetCString(result->tts_values[i]); >> The SQL-Query is a simple "SELECT * from ..." on the TPC-H table customer. >> About every third execution leads to a segmentation fault. >> > > Maybe the field is NULL? By convention, we normally set the Datum to 0 on > an SQL NULL, but you're supposed to check tts_isnull first, and ignore > tts_values[x] when tts_isnull[x] is true. > > - Heikki >