1- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.5 2003/06/15 04:07:58 momjian Exp $ */
1+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.6 2003/06/19 09:52:11 meskes Exp $ */
22
33#define POSTGRES_ECPG_INTERNAL
44#include "postgres_fe.h"
@@ -100,11 +100,11 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
100100switch (type )
101101{
102102long res ;
103- unsigned long ures ;
103+ unsigned long ures ;
104104double dres ;
105- char * scan_length ;
106- Numeric * nres ;
107- Date ddres ;
105+ char * scan_length ;
106+ Numeric * nres ;
107+ Date ddres ;
108108Timestamp tres ;
109109Interval * ires ;
110110
@@ -300,37 +300,45 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
300300case ECPGt_char :
301301case ECPGt_unsigned_char :
302302{
303- strncpy ((char * ) ((long )var + offset * act_tuple ),pval ,varcharsize );
304- if (varcharsize && varcharsize < strlen (pval ))
303+ if (varcharsize == 0 )
304+ {
305+ strncpy ((char * ) ((long )var + offset * act_tuple ),pval ,strlen (pval ));
306+ }
307+ else
305308{
306- /* truncation */
307- switch (ind_type )
309+ strncpy ((char * ) ((long )var + offset * act_tuple ),pval ,varcharsize );
310+
311+ if (varcharsize < strlen (pval ))
308312{
309- case ECPGt_short :
310- case ECPGt_unsigned_short :
311- /*((short *) ind)[act_tuple] = strlen(pval);*/
312- * ((short * ) (ind + ind_offset * act_tuple ))= strlen (pval );
313- break ;
314- case ECPGt_int :
315- case ECPGt_unsigned_int :
316- /*((int *) ind)[act_tuple] = strlen(pval);*/
317- * ((int * ) (ind + ind_offset * act_tuple ))= strlen (pval );
318- break ;
319- case ECPGt_long :
320- case ECPGt_unsigned_long :
321- /*((long *) ind)[act_tuple] = strlen(pval);*/
322- * ((long * ) (ind + ind_offset * act_tuple ))= strlen (pval );
323- break ;
313+ /* truncation */
314+ switch (ind_type )
315+ {
316+ case ECPGt_short :
317+ case ECPGt_unsigned_short :
318+ /*((short *) ind)[act_tuple] = strlen(pval);*/
319+ * ((short * ) (ind + ind_offset * act_tuple ))= strlen (pval );
320+ break ;
321+ case ECPGt_int :
322+ case ECPGt_unsigned_int :
323+ /*((int *) ind)[act_tuple] = strlen(pval);*/
324+ * ((int * ) (ind + ind_offset * act_tuple ))= strlen (pval );
325+ break ;
326+ case ECPGt_long :
327+ case ECPGt_unsigned_long :
328+ /*((long *) ind)[act_tuple] = strlen(pval);*/
329+ * ((long * ) (ind + ind_offset * act_tuple ))= strlen (pval );
330+ break ;
324331#ifdef HAVE_LONG_LONG_INT_64
325- case ECPGt_long_long :
326- case ECPGt_unsigned_long_long :
327- * ((long longint * ) (ind + ind_offset * act_tuple ))= strlen (pval );
328- break ;
332+ case ECPGt_long_long :
333+ case ECPGt_unsigned_long_long :
334+ * ((long longint * ) (ind + ind_offset * act_tuple ))= strlen (pval );
335+ break ;
329336#endif /* HAVE_LONG_LONG_INT_64 */
330- default :
331- break ;
337+ default :
338+ break ;
339+ }
340+ sqlca -> sqlwarn [0 ]= sqlca -> sqlwarn [1 ]= 'W' ;
332341}
333- sqlca -> sqlwarn [0 ]= sqlca -> sqlwarn [1 ]= 'W' ;
334342}
335343}
336344break ;
@@ -342,42 +350,46 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
342350
343351variable -> len = strlen (pval );
344352if (varcharsize == 0 )
353+ {
345354strncpy (variable -> arr ,pval ,variable -> len );
355+ }
346356else
357+ {
347358strncpy (variable -> arr ,pval ,varcharsize );
348359
349- if (varcharsize > 0 && variable -> len > varcharsize )
350- {
351- /* truncation */
352- switch (ind_type )
360+ if (variable -> len > varcharsize )
353361{
354- case ECPGt_short :
355- case ECPGt_unsigned_short :
356- /*((short *) ind)[act_tuple] = variable->len;*/
357- * ((short * ) (ind + offset * act_tuple ))= variable -> len ;
358- break ;
359- case ECPGt_int :
360- case ECPGt_unsigned_int :
361- /*((int *) ind)[act_tuple] = variable->len;*/
362- * ((int * ) (ind + offset * act_tuple ))= variable -> len ;
363- break ;
364- case ECPGt_long :
365- case ECPGt_unsigned_long :
366- /*((long *) ind)[act_tuple] = variable->len;*/
367- * ((long * ) (ind + offset * act_tuple ))= variable -> len ;
368- break ;
362+ /* truncation */
363+ switch (ind_type )
364+ {
365+ case ECPGt_short :
366+ case ECPGt_unsigned_short :
367+ /*((short *) ind)[act_tuple] = variable->len;*/
368+ * ((short * ) (ind + offset * act_tuple ))= variable -> len ;
369+ break ;
370+ case ECPGt_int :
371+ case ECPGt_unsigned_int :
372+ /*((int *) ind)[act_tuple] = variable->len;*/
373+ * ((int * ) (ind + offset * act_tuple ))= variable -> len ;
374+ break ;
375+ case ECPGt_long :
376+ case ECPGt_unsigned_long :
377+ /*((long *) ind)[act_tuple] = variable->len;*/
378+ * ((long * ) (ind + offset * act_tuple ))= variable -> len ;
379+ break ;
369380#ifdef HAVE_LONG_LONG_INT_64
370- case ECPGt_long_long :
371- case ECPGt_unsigned_long_long :
372- * ((long longint * ) (ind + ind_offset * act_tuple ))= variable -> len ;
373- break ;
381+ case ECPGt_long_long :
382+ case ECPGt_unsigned_long_long :
383+ * ((long longint * ) (ind + ind_offset * act_tuple ))= variable -> len ;
384+ break ;
374385#endif /* HAVE_LONG_LONG_INT_64 */
375- default :
376- break ;
377- }
378- sqlca -> sqlwarn [0 ]= sqlca -> sqlwarn [1 ]= 'W' ;
386+ default :
387+ break ;
388+ }
389+ sqlca -> sqlwarn [0 ]= sqlca -> sqlwarn [1 ]= 'W' ;
379390
380- variable -> len = varcharsize ;
391+ variable -> len = varcharsize ;
392+ }
381393}
382394}
383395break ;