Commit 4c8156d8 authored by Thomas Munro's avatar Thomas Munro

Add PGTYPESchar_free() to avoid cross-module problems on Windows.

On Windows, it is sometimes important for corresponding malloc() and
free() calls to be made from the same DLL, since some build options can
result in multiple allocators being active at the same time.  For that
reason we already provided PQfreemem().  This commit adds a similar
function for freeing string results allocated by the pgtypes library.

Author: Takayuki Tsunakawa
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F8AD5D6%40G01JPEXMBYT05
parent 70b4f82a
...@@ -1951,11 +1951,23 @@ EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1; ...@@ -1951,11 +1951,23 @@ EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout); PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout); out = PGTYPEStimestamp_to_asc(&tsout);
printf("Started + duration: %s\n", out); printf("Started + duration: %s\n", out);
free(out); PGTYPESchar_free(out);
]]> ]]>
</programlisting> </programlisting>
</para> </para>
<sect2 id="ecpg-pgtypes-cstrings">
<title>Character Strings</title>
<para>
Some functions such as <function>PGTYPESnumeric_to_asc</function> return
a pointer to a freshly allocated character string. These results should be
freed with <function>PGTYPESchar_free</function> instead of
<function>free</function>. (This is important only on Windows, where
memory allocation and release sometimes need to be done by the same
library.)
</para>
</sect2>
<sect2 id="ecpg-pgtypes-numeric"> <sect2 id="ecpg-pgtypes-numeric">
<title>The numeric Type</title> <title>The numeric Type</title>
<para> <para>
...@@ -2029,6 +2041,7 @@ char *PGTYPESnumeric_to_asc(numeric *num, int dscale); ...@@ -2029,6 +2041,7 @@ char *PGTYPESnumeric_to_asc(numeric *num, int dscale);
</synopsis> </synopsis>
The numeric value will be printed with <literal>dscale</literal> decimal The numeric value will be printed with <literal>dscale</literal> decimal
digits, with rounding applied if necessary. digits, with rounding applied if necessary.
The result must be freed with <function>PGTYPESchar_free()</function>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -2419,6 +2432,7 @@ char *PGTYPESdate_to_asc(date dDate); ...@@ -2419,6 +2432,7 @@ char *PGTYPESdate_to_asc(date dDate);
The function receives the date <literal>dDate</literal> as its only parameter. The function receives the date <literal>dDate</literal> as its only parameter.
It will output the date in the form <literal>1999-01-18</literal>, i.e., in the It will output the date in the form <literal>1999-01-18</literal>, i.e., in the
<literal>YYYY-MM-DD</literal> format. <literal>YYYY-MM-DD</literal> format.
The result must be freed with <function>PGTYPESchar_free()</function>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -2841,6 +2855,7 @@ char *PGTYPEStimestamp_to_asc(timestamp tstamp); ...@@ -2841,6 +2855,7 @@ char *PGTYPEStimestamp_to_asc(timestamp tstamp);
The function receives the timestamp <literal>tstamp</literal> as The function receives the timestamp <literal>tstamp</literal> as
its only argument and returns an allocated string that contains the its only argument and returns an allocated string that contains the
textual representation of the timestamp. textual representation of the timestamp.
The result must be freed with <function>PGTYPESchar_free()</function>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -3349,6 +3364,7 @@ char *PGTYPESinterval_to_asc(interval *span); ...@@ -3349,6 +3364,7 @@ char *PGTYPESinterval_to_asc(interval *span);
The function converts the interval variable that <literal>span</literal> The function converts the interval variable that <literal>span</literal>
points to into a C char*. The output looks like this example: points to into a C char*. The output looks like this example:
<literal>@ 1 day 12 hours 59 mins 10 secs</literal>. <literal>@ 1 day 12 hours 59 mins 10 secs</literal>.
The result must be freed with <function>PGTYPESchar_free()</function>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -14,7 +14,7 @@ install: all installdirs install-headers ...@@ -14,7 +14,7 @@ install: all installdirs install-headers
.PHONY: install-headers .PHONY: install-headers
ecpg_headers = ecpgerrno.h ecpglib.h ecpgtype.h sqlca.h sql3types.h ecpg_informix.h \ ecpg_headers = ecpgerrno.h ecpglib.h ecpgtype.h sqlca.h sql3types.h ecpg_informix.h \
pgtypes_error.h pgtypes_numeric.h pgtypes_timestamp.h pgtypes_date.h pgtypes_interval.h \ pgtypes_error.h pgtypes_numeric.h pgtypes_timestamp.h pgtypes_date.h pgtypes_interval.h pgtypes.h \
sqlda.h sqlda-compat.h sqlda-native.h sqlda.h sqlda-compat.h sqlda-native.h
informix_headers = datetime.h decimal.h sqltypes.h informix_headers = datetime.h decimal.h sqltypes.h
......
/* src/interfaces/ecpg/include/pgtypes.h */
#ifndef PGTYPES_H
#define PGTYPES_H
#ifdef __cplusplus
extern "C"
{
#endif
extern void PGTYPESchar_free(char *ptr);
#ifdef __cplusplus
}
#endif
#endif /* PGTYPES_H */
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#ifndef PGTYPES_DATETIME #ifndef PGTYPES_DATETIME
#define PGTYPES_DATETIME #define PGTYPES_DATETIME
#include <pgtypes.h>
#include <pgtypes_timestamp.h> #include <pgtypes_timestamp.h>
typedef long date; typedef long date;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#define PGTYPES_INTERVAL #define PGTYPES_INTERVAL
#include <ecpg_config.h> #include <ecpg_config.h>
#include <pgtypes.h>
#ifndef C_H #ifndef C_H
......
#ifndef PGTYPES_NUMERIC #ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC #define PGTYPES_NUMERIC
#include <pgtypes.h>
#define NUMERIC_POS 0x0000 #define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000 #define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000 #define NUMERIC_NAN 0xC000
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#ifndef PGTYPES_TIMESTAMP #ifndef PGTYPES_TIMESTAMP
#define PGTYPES_TIMESTAMP #define PGTYPES_TIMESTAMP
#include <pgtypes.h>
/* pgtypes_interval.h includes ecpg_config.h */ /* pgtypes_interval.h includes ecpg_config.h */
#include <pgtypes_interval.h> #include <pgtypes_interval.h>
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "postgres_fe.h" #include "postgres_fe.h"
#include "extern.h" #include "extern.h"
#include "pgtypes.h"
/* Return value is zero-filled. */ /* Return value is zero-filled. */
char * char *
...@@ -136,3 +137,12 @@ pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **outp ...@@ -136,3 +137,12 @@ pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **outp
} }
return 0; return 0;
} }
/* Functions declared in pgtypes.h. */
/* Just frees memory (mostly needed for Windows) */
void
PGTYPESchar_free(char *ptr)
{
free(ptr);
}
...@@ -45,3 +45,4 @@ PGTYPEStimestamp_from_asc 42 ...@@ -45,3 +45,4 @@ PGTYPEStimestamp_from_asc 42
PGTYPEStimestamp_sub 43 PGTYPEStimestamp_sub 43
PGTYPEStimestamp_sub_interval 44 PGTYPEStimestamp_sub_interval 44
PGTYPEStimestamp_to_asc 45 PGTYPEStimestamp_to_asc 45
PGTYPESchar_free 46
...@@ -113,18 +113,18 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -113,18 +113,18 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf ("Date: %s\n", text); printf ("Date: %s\n", text);
free(text); PGTYPESchar_free(text);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf ("timestamp: %s\n", text); printf ("timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL); iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
PGTYPESinterval_copy(iv1, &iv2); PGTYPESinterval_copy(iv1, &iv2);
text = PGTYPESinterval_to_asc(&iv2); text = PGTYPESinterval_to_asc(&iv2);
printf ("interval: %s\n", text); printf ("interval: %s\n", text);
PGTYPESinterval_free(iv1); PGTYPESinterval_free(iv1);
free(text); PGTYPESchar_free(text);
PGTYPESdate_mdyjul(mdy, &date2); PGTYPESdate_mdyjul(mdy, &date2);
printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]); printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
...@@ -144,7 +144,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -144,7 +144,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_fmt_asc(date1, fmt, out); PGTYPESdate_fmt_asc(date1, fmt, out);
printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1)); printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out); printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
free(text); PGTYPESchar_free(text);
free(out); free(out);
out = (char*) malloc(48); out = (char*) malloc(48);
...@@ -164,7 +164,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -164,7 +164,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc1: %s\n", text); printf("date_defmt_asc1: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmmm. dd. yyyy"; fmt = "mmmm. dd. yyyy";
...@@ -172,7 +172,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -172,7 +172,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc2: %s\n", text); printf("date_defmt_asc2: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yy/mm/dd"; fmt = "yy/mm/dd";
...@@ -180,7 +180,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -180,7 +180,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc3: %s\n", text); printf("date_defmt_asc3: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yy/mm/dd"; fmt = "yy/mm/dd";
...@@ -188,7 +188,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -188,7 +188,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc4: %s\n", text); printf("date_defmt_asc4: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "dd-mm-yy"; fmt = "dd-mm-yy";
...@@ -196,7 +196,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -196,7 +196,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc5: %s\n", text); printf("date_defmt_asc5: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmddyy"; fmt = "mmddyy";
...@@ -204,7 +204,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -204,7 +204,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc6: %s\n", text); printf("date_defmt_asc6: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmm. dd. yyyy"; fmt = "mmm. dd. yyyy";
...@@ -212,7 +212,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -212,7 +212,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc7: %s\n", text); printf("date_defmt_asc7: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmm. dd. yyyy"; fmt = "mmm. dd. yyyy";
...@@ -220,7 +220,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -220,7 +220,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc8: %s\n", text); printf("date_defmt_asc8: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mm yy dd."; fmt = "mm yy dd.";
...@@ -228,7 +228,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -228,7 +228,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc9: %s\n", text); printf("date_defmt_asc9: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yyyy fierj mm dd."; fmt = "yyyy fierj mm dd.";
...@@ -236,7 +236,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -236,7 +236,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc10: %s\n", text); printf("date_defmt_asc10: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mm/dd/yy"; fmt = "mm/dd/yy";
...@@ -244,28 +244,28 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -244,28 +244,28 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc12: %s\n", text); printf("date_defmt_asc12: %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPEStimestamp_current(&ts1); PGTYPEStimestamp_current(&ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
/* can't output this in regression mode */ /* can't output this in regression mode */
/* printf("timestamp_current: Now: %s\n", text); */ /* printf("timestamp_current: Now: %s\n", text); */
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL); ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc1: %s\n", text); printf("timestamp_to_asc1: %s\n", text);
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL); ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc2: %s\n", text); printf("timestamp_to_asc2: %s\n", text);
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL); ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc3: %s\n", text); printf("timestamp_to_asc3: %s\n", text);
free(text); PGTYPESchar_free(text);
/* abc-03:10:35-def-02/11/94-gh */ /* abc-03:10:35-def-02/11/94-gh */
/* 12345678901234567890123456789 */ /* 12345678901234567890123456789 */
...@@ -280,161 +280,161 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -280,161 +280,161 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 2000"; in = "Tue Feb 29 17:28:44 +0200 2000";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1900"; in = "Tue Feb 29 17:28:44 +0200 1900";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1996"; in = "Tue Feb 29 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b %d %H:%M:%S %z %Y"; fmt = "%b %d %H:%M:%S %z %Y";
in = " Jul 31 17:28:44 +0200 1996"; in = " Jul 31 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b %d %H:%M:%S %z %Y"; fmt = "%b %d %H:%M:%S %z %Y";
in = " Jul 32 17:28:44 +0200 1996"; in = " Jul 32 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1997"; in = "Tue Feb 29 17:28:44 +0200 1997";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%"; fmt = "%";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "a %"; fmt = "a %";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b, %d %H_%M`%S %z %Y"; fmt = "%b, %d %H_%M`%S %z %Y";
in = " Jul, 22 17_28 `44 +0200 2003 "; in = " Jul, 22 17_28 `44 +0200 2003 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %%%d %H:%M:%S %Z %Y"; fmt = "%a %b %%%d %H:%M:%S %Z %Y";
in = "Tue Jul %22 17:28:44 CEST 2003"; in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %%%d %H:%M:%S %Z %Y"; fmt = "%a %b %%%d %H:%M:%S %Z %Y";
in = "Tue Jul %22 17:28:44 CEST 2003"; in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y"; fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
in = "abc\n 19 October %22 17:28:44 CEST 2003"; in = "abc\n 19 October %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y"; fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
in = "abc\n 18 October %34 17:28:44 CEST 80"; in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = ""; fmt = "";
in = "abc\n 18 October %34 17:28:44 CEST 80"; in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = NULL; fmt = NULL;
in = "1980-04-12 3:49:44 "; in = "1980-04-12 3:49:44 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i); printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%B %d, %Y. Time: %I:%M%p"; fmt = "%B %d, %Y. Time: %I:%M%p";
in = "July 14, 1988. Time: 9:15am"; in = "July 14, 1988. Time: 9:15am";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = "September 6 at 01:30 pm in the year 1983"; in = "September 6 at 01:30 pm in the year 1983";
fmt = "%B %d at %I:%M %p in the year %Y"; fmt = "%B %d at %I:%M %p in the year %Y";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, July 14. Time: 9:15am"; in = " 1976, July 14. Time: 9:15am";
fmt = "%Y, %B %d. Time: %I:%M %p"; fmt = "%Y, %B %d. Time: %I:%M %p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, July 14. Time: 9:15 am"; in = " 1976, July 14. Time: 9:15 am";
fmt = "%Y, %B %d. Time: %I:%M%p"; fmt = "%Y, %B %d. Time: %I:%M%p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, P.M. July 14. Time: 9:15"; in = " 1976, P.M. July 14. Time: 9:15";
fmt = "%Y, %P %B %d. Time: %I:%M"; fmt = "%Y, %P %B %d. Time: %I:%M";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = "1234567890"; in = "1234567890";
fmt = "%s"; fmt = "%s";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
{ ECPGtrans(__LINE__, NULL, "rollback"); { ECPGtrans(__LINE__, NULL, "rollback");
#line 365 "dt_test.pgc" #line 365 "dt_test.pgc"
......
...@@ -110,14 +110,14 @@ main(void) ...@@ -110,14 +110,14 @@ main(void)
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp: %s\n", text); printf("timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = PGTYPESdate_from_timestamp(ts1); date1 = PGTYPESdate_from_timestamp(ts1);
dc = PGTYPESdate_new(); dc = PGTYPESdate_new();
*dc = date1; *dc = date1;
text = PGTYPESdate_to_asc(*dc); text = PGTYPESdate_to_asc(*dc);
printf("Date of timestamp: %s\n", text); printf("Date of timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESdate_free(dc); PGTYPESdate_free(dc);
for (i = 0; dates[i]; i++) for (i = 0; dates[i]; i++)
...@@ -132,7 +132,7 @@ main(void) ...@@ -132,7 +132,7 @@ main(void)
i, err ? "-" : text, i, err ? "-" : text,
endptr ? 'N' : 'Y', endptr ? 'N' : 'Y',
err ? 'T' : 'F'); err ? 'T' : 'F');
free(text); PGTYPESchar_free(text);
if (!err) if (!err)
{ {
for (j = 0; times[j]; j++) for (j = 0; times[j]; j++)
...@@ -147,7 +147,7 @@ main(void) ...@@ -147,7 +147,7 @@ main(void)
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("TS[%d,%d]: %s\n", printf("TS[%d,%d]: %s\n",
i, j, errno ? "-" : text); i, j, errno ? "-" : text);
free(text); PGTYPESchar_free(text);
free(t); free(t);
} }
} }
...@@ -171,13 +171,13 @@ main(void) ...@@ -171,13 +171,13 @@ main(void)
continue; continue;
text = PGTYPESinterval_to_asc(i1); text = PGTYPESinterval_to_asc(i1);
printf("interval[%d]: %s\n", i, text ? text : "-"); printf("interval[%d]: %s\n", i, text ? text : "-");
free(text); PGTYPESchar_free(text);
ic = PGTYPESinterval_new(); ic = PGTYPESinterval_new();
PGTYPESinterval_copy(i1, ic); PGTYPESinterval_copy(i1, ic);
text = PGTYPESinterval_to_asc(i1); text = PGTYPESinterval_to_asc(i1);
printf("interval_copy[%d]: %s\n", i, text ? text : "-"); printf("interval_copy[%d]: %s\n", i, text ? text : "-");
free(text); PGTYPESchar_free(text);
PGTYPESinterval_free(ic); PGTYPESinterval_free(ic);
PGTYPESinterval_free(i1); PGTYPESinterval_free(i1);
} }
......
...@@ -78,7 +78,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -78,7 +78,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESnumeric_from_int(1407, value1); PGTYPESnumeric_from_int(1407, value1);
text = PGTYPESnumeric_to_asc(value1, -1); text = PGTYPESnumeric_to_asc(value1, -1);
printf("from int = %s\n", text); printf("from int = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value1); PGTYPESnumeric_free(value1);
value1 = PGTYPESnumeric_from_asc("2369.7", NULL); value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
...@@ -87,12 +87,12 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -87,12 +87,12 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESnumeric_add(value1, value2, res); PGTYPESnumeric_add(value1, value2, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("add = %s\n", text); printf("add = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_sub(res, value2, res); PGTYPESnumeric_sub(res, value2, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("sub = %s\n", text); printf("sub = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value2); PGTYPESnumeric_free(value2);
des = PGTYPESnumeric_new(); des = PGTYPESnumeric_new();
...@@ -122,7 +122,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -122,7 +122,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
PGTYPESnumeric_mul(res, des, res); PGTYPESnumeric_mul(res, des, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("mul = %s\n", text); printf("mul = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(des); PGTYPESnumeric_free(des);
value2 = PGTYPESnumeric_from_asc("10000", NULL); value2 = PGTYPESnumeric_from_asc("10000", NULL);
...@@ -139,7 +139,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );} ...@@ -139,7 +139,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2); i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
printf("to long(%d) = %ld %ld\n", i, l1, l2); printf("to long(%d) = %ld %ld\n", i, l1, l2);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value1); PGTYPESnumeric_free(value1);
PGTYPESnumeric_free(value2); PGTYPESnumeric_free(value2);
PGTYPESnumeric_free(res); PGTYPESnumeric_free(res);
......
...@@ -77,21 +77,21 @@ main(void) ...@@ -77,21 +77,21 @@ main(void)
text = PGTYPESnumeric_to_asc(num, -1); text = PGTYPESnumeric_to_asc(num, -1);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,1]: %s\n", i, text); free(text); printf("num[%d,1]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 0); text = PGTYPESnumeric_to_asc(num, 0);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,2]: %s\n", i, text); free(text); printf("num[%d,2]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 1); text = PGTYPESnumeric_to_asc(num, 1);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,3]: %s\n", i, text); free(text); printf("num[%d,3]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 2); text = PGTYPESnumeric_to_asc(num, 2);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,4]: %s\n", i, text); free(text); printf("num[%d,4]: %s\n", i, text); PGTYPESchar_free(text);
nin = PGTYPESnumeric_new(); nin = PGTYPESnumeric_new();
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,5]: %s\n", i, text); free(text); printf("num[%d,5]: %s\n", i, text); PGTYPESchar_free(text);
r = PGTYPESnumeric_to_long(num, &l); r = PGTYPESnumeric_to_long(num, &l);
if (r) check_errno(); if (r) check_errno();
...@@ -103,7 +103,7 @@ main(void) ...@@ -103,7 +103,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_to_int(num, &k); r = PGTYPESnumeric_to_int(num, &k);
...@@ -116,7 +116,7 @@ main(void) ...@@ -116,7 +116,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
if (i != 6) if (i != 6)
...@@ -147,7 +147,7 @@ main(void) ...@@ -147,7 +147,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
PGTYPESdecimal_free(dec); PGTYPESdecimal_free(dec);
...@@ -173,7 +173,7 @@ main(void) ...@@ -173,7 +173,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(a, 10); text = PGTYPESnumeric_to_asc(a, 10);
printf("num[a,%d,%d]: %s\n", i, j, text); printf("num[a,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_sub(numarr[i], numarr[j], s); r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
if (r) if (r)
...@@ -185,7 +185,7 @@ main(void) ...@@ -185,7 +185,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(s, 10); text = PGTYPESnumeric_to_asc(s, 10);
printf("num[s,%d,%d]: %s\n", i, j, text); printf("num[s,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_mul(numarr[i], numarr[j], m); r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
if (r) if (r)
...@@ -197,7 +197,7 @@ main(void) ...@@ -197,7 +197,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(m, 10); text = PGTYPESnumeric_to_asc(m, 10);
printf("num[m,%d,%d]: %s\n", i, j, text); printf("num[m,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_div(numarr[i], numarr[j], d); r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
if (r) if (r)
...@@ -209,7 +209,7 @@ main(void) ...@@ -209,7 +209,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(d, 10); text = PGTYPESnumeric_to_asc(d, 10);
printf("num[d,%d,%d]: %s\n", i, j, text); printf("num[d,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
PGTYPESnumeric_free(a); PGTYPESnumeric_free(a);
...@@ -223,7 +223,7 @@ main(void) ...@@ -223,7 +223,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(numarr[i], -1); text = PGTYPESnumeric_to_asc(numarr[i], -1);
printf("%d: %s\n", i, text); printf("%d: %s\n", i, text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(numarr[i]); PGTYPESnumeric_free(numarr[i]);
} }
free(numarr); free(numarr);
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
#ifndef PGTYPES_NUMERIC #ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC #define PGTYPES_NUMERIC
#include <pgtypes.h>
#define NUMERIC_POS 0x0000 #define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000 #define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000 #define NUMERIC_NAN 0xC000
......
...@@ -50,6 +50,8 @@ typedef struct sqlda_struct sqlda_t; ...@@ -50,6 +50,8 @@ typedef struct sqlda_struct sqlda_t;
#ifndef PGTYPES_NUMERIC #ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC #define PGTYPES_NUMERIC
#include <pgtypes.h>
#define NUMERIC_POS 0x0000 #define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000 #define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000 #define NUMERIC_NAN 0xC000
...@@ -166,7 +168,7 @@ dump_sqlda(sqlda_t *sqlda) ...@@ -166,7 +168,7 @@ dump_sqlda(sqlda_t *sqlda)
val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1); val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1);
printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val); printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val);
free(val); PGTYPESchar_free(val);
break; break;
} }
} }
......
...@@ -39,18 +39,18 @@ main(void) ...@@ -39,18 +39,18 @@ main(void)
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf ("Date: %s\n", text); printf ("Date: %s\n", text);
free(text); PGTYPESchar_free(text);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf ("timestamp: %s\n", text); printf ("timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL); iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
PGTYPESinterval_copy(iv1, &iv2); PGTYPESinterval_copy(iv1, &iv2);
text = PGTYPESinterval_to_asc(&iv2); text = PGTYPESinterval_to_asc(&iv2);
printf ("interval: %s\n", text); printf ("interval: %s\n", text);
PGTYPESinterval_free(iv1); PGTYPESinterval_free(iv1);
free(text); PGTYPESchar_free(text);
PGTYPESdate_mdyjul(mdy, &date2); PGTYPESdate_mdyjul(mdy, &date2);
printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]); printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
...@@ -70,7 +70,7 @@ main(void) ...@@ -70,7 +70,7 @@ main(void)
PGTYPESdate_fmt_asc(date1, fmt, out); PGTYPESdate_fmt_asc(date1, fmt, out);
printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1)); printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out); printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
free(text); PGTYPESchar_free(text);
free(out); free(out);
out = (char*) malloc(48); out = (char*) malloc(48);
...@@ -90,7 +90,7 @@ main(void) ...@@ -90,7 +90,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc1: %s\n", text); printf("date_defmt_asc1: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmmm. dd. yyyy"; fmt = "mmmm. dd. yyyy";
...@@ -98,7 +98,7 @@ main(void) ...@@ -98,7 +98,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc2: %s\n", text); printf("date_defmt_asc2: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yy/mm/dd"; fmt = "yy/mm/dd";
...@@ -106,7 +106,7 @@ main(void) ...@@ -106,7 +106,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc3: %s\n", text); printf("date_defmt_asc3: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yy/mm/dd"; fmt = "yy/mm/dd";
...@@ -114,7 +114,7 @@ main(void) ...@@ -114,7 +114,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc4: %s\n", text); printf("date_defmt_asc4: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "dd-mm-yy"; fmt = "dd-mm-yy";
...@@ -122,7 +122,7 @@ main(void) ...@@ -122,7 +122,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc5: %s\n", text); printf("date_defmt_asc5: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmddyy"; fmt = "mmddyy";
...@@ -130,7 +130,7 @@ main(void) ...@@ -130,7 +130,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc6: %s\n", text); printf("date_defmt_asc6: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmm. dd. yyyy"; fmt = "mmm. dd. yyyy";
...@@ -138,7 +138,7 @@ main(void) ...@@ -138,7 +138,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc7: %s\n", text); printf("date_defmt_asc7: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mmm. dd. yyyy"; fmt = "mmm. dd. yyyy";
...@@ -146,7 +146,7 @@ main(void) ...@@ -146,7 +146,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc8: %s\n", text); printf("date_defmt_asc8: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mm yy dd."; fmt = "mm yy dd.";
...@@ -154,7 +154,7 @@ main(void) ...@@ -154,7 +154,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc9: %s\n", text); printf("date_defmt_asc9: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "yyyy fierj mm dd."; fmt = "yyyy fierj mm dd.";
...@@ -162,7 +162,7 @@ main(void) ...@@ -162,7 +162,7 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc10: %s\n", text); printf("date_defmt_asc10: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = 0; date1 = 0;
fmt = "mm/dd/yy"; fmt = "mm/dd/yy";
...@@ -170,28 +170,28 @@ main(void) ...@@ -170,28 +170,28 @@ main(void)
PGTYPESdate_defmt_asc(&date1, fmt, in); PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1); text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc12: %s\n", text); printf("date_defmt_asc12: %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPEStimestamp_current(&ts1); PGTYPEStimestamp_current(&ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
/* can't output this in regression mode */ /* can't output this in regression mode */
/* printf("timestamp_current: Now: %s\n", text); */ /* printf("timestamp_current: Now: %s\n", text); */
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL); ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc1: %s\n", text); printf("timestamp_to_asc1: %s\n", text);
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL); ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc2: %s\n", text); printf("timestamp_to_asc2: %s\n", text);
free(text); PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL); ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc3: %s\n", text); printf("timestamp_to_asc3: %s\n", text);
free(text); PGTYPESchar_free(text);
/* abc-03:10:35-def-02/11/94-gh */ /* abc-03:10:35-def-02/11/94-gh */
/* 12345678901234567890123456789 */ /* 12345678901234567890123456789 */
...@@ -206,161 +206,161 @@ main(void) ...@@ -206,161 +206,161 @@ main(void)
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 2000"; in = "Tue Feb 29 17:28:44 +0200 2000";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1900"; in = "Tue Feb 29 17:28:44 +0200 1900";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1996"; in = "Tue Feb 29 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b %d %H:%M:%S %z %Y"; fmt = "%b %d %H:%M:%S %z %Y";
in = " Jul 31 17:28:44 +0200 1996"; in = " Jul 31 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b %d %H:%M:%S %z %Y"; fmt = "%b %d %H:%M:%S %z %Y";
in = " Jul 32 17:28:44 +0200 1996"; in = " Jul 32 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %d %H:%M:%S %z %Y"; fmt = "%a %b %d %H:%M:%S %z %Y";
in = "Tue Feb 29 17:28:44 +0200 1997"; in = "Tue Feb 29 17:28:44 +0200 1997";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%"; fmt = "%";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "a %"; fmt = "a %";
in = "Tue Jul 22 17:28:44 +0200 2003"; in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%b, %d %H_%M`%S %z %Y"; fmt = "%b, %d %H_%M`%S %z %Y";
in = " Jul, 22 17_28 `44 +0200 2003 "; in = " Jul, 22 17_28 `44 +0200 2003 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %%%d %H:%M:%S %Z %Y"; fmt = "%a %b %%%d %H:%M:%S %Z %Y";
in = "Tue Jul %22 17:28:44 CEST 2003"; in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%a %b %%%d %H:%M:%S %Z %Y"; fmt = "%a %b %%%d %H:%M:%S %Z %Y";
in = "Tue Jul %22 17:28:44 CEST 2003"; in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y"; fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
in = "abc\n 19 October %22 17:28:44 CEST 2003"; in = "abc\n 19 October %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y"; fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
in = "abc\n 18 October %34 17:28:44 CEST 80"; in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = ""; fmt = "";
in = "abc\n 18 October %34 17:28:44 CEST 80"; in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
fmt = NULL; fmt = NULL;
in = "1980-04-12 3:49:44 "; in = "1980-04-12 3:49:44 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i); printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
free(text); PGTYPESchar_free(text);
fmt = "%B %d, %Y. Time: %I:%M%p"; fmt = "%B %d, %Y. Time: %I:%M%p";
in = "July 14, 1988. Time: 9:15am"; in = "July 14, 1988. Time: 9:15am";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = "September 6 at 01:30 pm in the year 1983"; in = "September 6 at 01:30 pm in the year 1983";
fmt = "%B %d at %I:%M %p in the year %Y"; fmt = "%B %d at %I:%M %p in the year %Y";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, July 14. Time: 9:15am"; in = " 1976, July 14. Time: 9:15am";
fmt = "%Y, %B %d. Time: %I:%M %p"; fmt = "%Y, %B %d. Time: %I:%M %p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, July 14. Time: 9:15 am"; in = " 1976, July 14. Time: 9:15 am";
fmt = "%Y, %B %d. Time: %I:%M%p"; fmt = "%Y, %B %d. Time: %I:%M%p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = " 1976, P.M. July 14. Time: 9:15"; in = " 1976, P.M. July 14. Time: 9:15";
fmt = "%Y, %P %B %d. Time: %I:%M"; fmt = "%Y, %P %B %d. Time: %I:%M";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
in = "1234567890"; in = "1234567890";
fmt = "%s"; fmt = "%s";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1); i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i); printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
free(text); PGTYPESchar_free(text);
exec sql rollback; exec sql rollback;
exec sql disconnect; exec sql disconnect;
......
...@@ -75,14 +75,14 @@ main(void) ...@@ -75,14 +75,14 @@ main(void)
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp: %s\n", text); printf("timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
date1 = PGTYPESdate_from_timestamp(ts1); date1 = PGTYPESdate_from_timestamp(ts1);
dc = PGTYPESdate_new(); dc = PGTYPESdate_new();
*dc = date1; *dc = date1;
text = PGTYPESdate_to_asc(*dc); text = PGTYPESdate_to_asc(*dc);
printf("Date of timestamp: %s\n", text); printf("Date of timestamp: %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESdate_free(dc); PGTYPESdate_free(dc);
for (i = 0; dates[i]; i++) for (i = 0; dates[i]; i++)
...@@ -97,7 +97,7 @@ main(void) ...@@ -97,7 +97,7 @@ main(void)
i, err ? "-" : text, i, err ? "-" : text,
endptr ? 'N' : 'Y', endptr ? 'N' : 'Y',
err ? 'T' : 'F'); err ? 'T' : 'F');
free(text); PGTYPESchar_free(text);
if (!err) if (!err)
{ {
for (j = 0; times[j]; j++) for (j = 0; times[j]; j++)
...@@ -112,7 +112,7 @@ main(void) ...@@ -112,7 +112,7 @@ main(void)
text = PGTYPEStimestamp_to_asc(ts1); text = PGTYPEStimestamp_to_asc(ts1);
printf("TS[%d,%d]: %s\n", printf("TS[%d,%d]: %s\n",
i, j, errno ? "-" : text); i, j, errno ? "-" : text);
free(text); PGTYPESchar_free(text);
free(t); free(t);
} }
} }
...@@ -136,13 +136,13 @@ main(void) ...@@ -136,13 +136,13 @@ main(void)
continue; continue;
text = PGTYPESinterval_to_asc(i1); text = PGTYPESinterval_to_asc(i1);
printf("interval[%d]: %s\n", i, text ? text : "-"); printf("interval[%d]: %s\n", i, text ? text : "-");
free(text); PGTYPESchar_free(text);
ic = PGTYPESinterval_new(); ic = PGTYPESinterval_new();
PGTYPESinterval_copy(i1, ic); PGTYPESinterval_copy(i1, ic);
text = PGTYPESinterval_to_asc(i1); text = PGTYPESinterval_to_asc(i1);
printf("interval_copy[%d]: %s\n", i, text ? text : "-"); printf("interval_copy[%d]: %s\n", i, text ? text : "-");
free(text); PGTYPESchar_free(text);
PGTYPESinterval_free(ic); PGTYPESinterval_free(ic);
PGTYPESinterval_free(i1); PGTYPESinterval_free(i1);
} }
......
...@@ -38,7 +38,7 @@ main(void) ...@@ -38,7 +38,7 @@ main(void)
PGTYPESnumeric_from_int(1407, value1); PGTYPESnumeric_from_int(1407, value1);
text = PGTYPESnumeric_to_asc(value1, -1); text = PGTYPESnumeric_to_asc(value1, -1);
printf("from int = %s\n", text); printf("from int = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value1); PGTYPESnumeric_free(value1);
value1 = PGTYPESnumeric_from_asc("2369.7", NULL); value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
...@@ -47,12 +47,12 @@ main(void) ...@@ -47,12 +47,12 @@ main(void)
PGTYPESnumeric_add(value1, value2, res); PGTYPESnumeric_add(value1, value2, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("add = %s\n", text); printf("add = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_sub(res, value2, res); PGTYPESnumeric_sub(res, value2, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("sub = %s\n", text); printf("sub = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value2); PGTYPESnumeric_free(value2);
des = PGTYPESnumeric_new(); des = PGTYPESnumeric_new();
...@@ -68,7 +68,7 @@ main(void) ...@@ -68,7 +68,7 @@ main(void)
PGTYPESnumeric_mul(res, des, res); PGTYPESnumeric_mul(res, des, res);
text = PGTYPESnumeric_to_asc(res, -1); text = PGTYPESnumeric_to_asc(res, -1);
printf("mul = %s\n", text); printf("mul = %s\n", text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(des); PGTYPESnumeric_free(des);
value2 = PGTYPESnumeric_from_asc("10000", NULL); value2 = PGTYPESnumeric_from_asc("10000", NULL);
...@@ -85,7 +85,7 @@ main(void) ...@@ -85,7 +85,7 @@ main(void)
i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2); i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
printf("to long(%d) = %ld %ld\n", i, l1, l2); printf("to long(%d) = %ld %ld\n", i, l1, l2);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(value1); PGTYPESnumeric_free(value1);
PGTYPESnumeric_free(value2); PGTYPESnumeric_free(value2);
PGTYPESnumeric_free(res); PGTYPESnumeric_free(res);
......
...@@ -59,21 +59,21 @@ main(void) ...@@ -59,21 +59,21 @@ main(void)
text = PGTYPESnumeric_to_asc(num, -1); text = PGTYPESnumeric_to_asc(num, -1);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,1]: %s\n", i, text); free(text); printf("num[%d,1]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 0); text = PGTYPESnumeric_to_asc(num, 0);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,2]: %s\n", i, text); free(text); printf("num[%d,2]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 1); text = PGTYPESnumeric_to_asc(num, 1);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,3]: %s\n", i, text); free(text); printf("num[%d,3]: %s\n", i, text); PGTYPESchar_free(text);
text = PGTYPESnumeric_to_asc(num, 2); text = PGTYPESnumeric_to_asc(num, 2);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,4]: %s\n", i, text); free(text); printf("num[%d,4]: %s\n", i, text); PGTYPESchar_free(text);
nin = PGTYPESnumeric_new(); nin = PGTYPESnumeric_new();
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
if (!text) check_errno(); if (!text) check_errno();
printf("num[%d,5]: %s\n", i, text); free(text); printf("num[%d,5]: %s\n", i, text); PGTYPESchar_free(text);
r = PGTYPESnumeric_to_long(num, &l); r = PGTYPESnumeric_to_long(num, &l);
if (r) check_errno(); if (r) check_errno();
...@@ -85,7 +85,7 @@ main(void) ...@@ -85,7 +85,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_to_int(num, &k); r = PGTYPESnumeric_to_int(num, &k);
...@@ -98,7 +98,7 @@ main(void) ...@@ -98,7 +98,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
if (i != 6) if (i != 6)
...@@ -129,7 +129,7 @@ main(void) ...@@ -129,7 +129,7 @@ main(void)
text = PGTYPESnumeric_to_asc(nin, 2); text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin); q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q); printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
free(text); PGTYPESchar_free(text);
} }
PGTYPESdecimal_free(dec); PGTYPESdecimal_free(dec);
...@@ -155,7 +155,7 @@ main(void) ...@@ -155,7 +155,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(a, 10); text = PGTYPESnumeric_to_asc(a, 10);
printf("num[a,%d,%d]: %s\n", i, j, text); printf("num[a,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_sub(numarr[i], numarr[j], s); r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
if (r) if (r)
...@@ -167,7 +167,7 @@ main(void) ...@@ -167,7 +167,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(s, 10); text = PGTYPESnumeric_to_asc(s, 10);
printf("num[s,%d,%d]: %s\n", i, j, text); printf("num[s,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_mul(numarr[i], numarr[j], m); r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
if (r) if (r)
...@@ -179,7 +179,7 @@ main(void) ...@@ -179,7 +179,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(m, 10); text = PGTYPESnumeric_to_asc(m, 10);
printf("num[m,%d,%d]: %s\n", i, j, text); printf("num[m,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
r = PGTYPESnumeric_div(numarr[i], numarr[j], d); r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
if (r) if (r)
...@@ -191,7 +191,7 @@ main(void) ...@@ -191,7 +191,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(d, 10); text = PGTYPESnumeric_to_asc(d, 10);
printf("num[d,%d,%d]: %s\n", i, j, text); printf("num[d,%d,%d]: %s\n", i, j, text);
free(text); PGTYPESchar_free(text);
} }
PGTYPESnumeric_free(a); PGTYPESnumeric_free(a);
...@@ -205,7 +205,7 @@ main(void) ...@@ -205,7 +205,7 @@ main(void)
{ {
text = PGTYPESnumeric_to_asc(numarr[i], -1); text = PGTYPESnumeric_to_asc(numarr[i], -1);
printf("%d: %s\n", i, text); printf("%d: %s\n", i, text);
free(text); PGTYPESchar_free(text);
PGTYPESnumeric_free(numarr[i]); PGTYPESnumeric_free(numarr[i]);
} }
free(numarr); free(numarr);
......
...@@ -53,7 +53,7 @@ dump_sqlda(sqlda_t *sqlda) ...@@ -53,7 +53,7 @@ dump_sqlda(sqlda_t *sqlda)
val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1); val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1);
printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val); printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val);
free(val); PGTYPESchar_free(val);
break; break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment