| From: | Heikki Linnakangas <hlinnakangas(at)vmware(dot)com> |
|---|---|
| To: | Masterprojekt Naumann1 <mpws2013n1(at)gmail(dot)com> |
| Cc: | pgsql-hackers(at)postgresql(dot)org |
| Subject: | Re: Convert Datum* to char* |
| Date: | 2014-01-06 13:18:41 |
| Message-ID: | 52CAAD31.6030801@vmware.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Masterprojekt Naumann1 | 2014-01-06 13:46:15 | Re: Convert Datum* to char* |
| Previous Message | Masterprojekt Naumann1 | 2014-01-06 13:09:25 | Convert Datum* to char* |