Обсуждение: C trigger problem : conversion of CString to Datum

Поиск
Список
Период
Сортировка

C trigger problem : conversion of CString to Datum

От
Guy Deleeuw
Дата:
Hello,

I cannot convert properly a cstring to a Datum :
Here my code :
   int                   attColNumber;
   Datum                 new_barcode;
   bool                  isnull        = 0;
   char                  barcode[14];

    elog(INFO, "gd_trigfunc_before_article_insert() : bar_code = %s",
barcode);
    attColNumber = COL_BARCODE;
    new_barcode = CStringGetDatum(barcode);
     workTuple = SPI_modifytuple(trigdata->tg_relation,
trigdata->tg_trigtuple, 1, &attColNumber, &new_barcode, &isnull);

the result :

# INSERT INTO t_articles VALUES (4001, 1, '065', 'White', NULL, 'XS', null);
INFO:  gd_trigfunc_before_article_insert() : bar_code = 5492850000012
INSERT 0 1
# select * from t_articles WHERE k_id > 2000;
  k_id | product_id | color_id | color_desc | height | size |   bar_code
------+------------+----------+------------+--------+------+--------------
  4001 |          1 | 065      | White      |        | XS   | 492850000012
(1 ligne)

Missing the firs digit of the barcode.

Thanks in advance for your help
Regards
Guy

Re: C trigger problem : conversion of CString to Datum

От
Tom Lane
Дата:
Guy Deleeuw <G.De_Leeuw@eurofer.be> writes:
> I cannot convert properly a cstring to a Datum :

Well, CStringGetDatum would be the proper thing to use if you meant to
produce a Datum of type "cstring".  But what you need here is a Datum
of the same type as the target column, which evidently isn't cstring.
Most likely you need to convert the string to type text.

            regards, tom lane

Re: C trigger problem : conversion of CString to Datum

От
Guy Deleeuw
Дата:
Hi Tom

Many thanks for your answer, all work fine now :-)

Regards
Guy

Le 20/02/10 16:45, Tom Lane a écrit :
> Guy Deleeuw<G.De_Leeuw@eurofer.be>  writes:
>
>> I cannot convert properly a cstring to a Datum :
>>
> Well, CStringGetDatum would be the proper thing to use if you meant to
> produce a Datum of type "cstring".  But what you need here is a Datum
> of the same type as the target column, which evidently isn't cstring.
> Most likely you need to convert the string to type text.
>
>             regards, tom lane
>