PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout);
printf("Started + duration: %s\n", out);
-free(out);
+PGTYPESchar_free(out);
]]>
</programlisting>
</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">
<title>The numeric Type</title>
<para>
</synopsis>
The numeric value will be printed with <literal>dscale</literal> decimal
digits, with rounding applied if necessary.
+ The result must be freed with <function>PGTYPESchar_free()</function>.
</para>
</listitem>
</varlistentry>
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
<literal>YYYY-MM-DD</literal> format.
+ The result must be freed with <function>PGTYPESchar_free()</function>.
</para>
</listitem>
</varlistentry>
The function receives the timestamp <literal>tstamp</literal> as
its only argument and returns an allocated string that contains the
textual representation of the timestamp.
+ The result must be freed with <function>PGTYPESchar_free()</function>.
</para>
</listitem>
</varlistentry>
The function converts the interval variable that <literal>span</literal>
points to into a C char*. The output looks like this example:
<literal>@ 1 day 12 hours 59 mins 10 secs</literal>.
+ The result must be freed with <function>PGTYPESchar_free()</function>.
</para>
</listitem>
</varlistentry>
.PHONY: install-headers
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
informix_headers = datetime.h decimal.h sqltypes.h
--- /dev/null
+/* 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 */
#ifndef PGTYPES_DATETIME
#define PGTYPES_DATETIME
+#include <pgtypes.h>
#include <pgtypes_timestamp.h>
typedef long date;
#define PGTYPES_INTERVAL
#include <ecpg_config.h>
+#include <pgtypes.h>
#ifndef C_H
#ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC
+#include <pgtypes.h>
+
#define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000
#ifndef PGTYPES_TIMESTAMP
#define PGTYPES_TIMESTAMP
+#include <pgtypes.h>
/* pgtypes_interval.h includes ecpg_config.h */
#include <pgtypes_interval.h>
#include "postgres_fe.h"
#include "extern.h"
+#include "pgtypes.h"
/* Return value is zero-filled. */
char *
}
return 0;
}
+
+/* Functions declared in pgtypes.h. */
+
+/* Just frees memory (mostly needed for Windows) */
+void
+PGTYPESchar_free(char *ptr)
+{
+ free(ptr);
+}
PGTYPEStimestamp_sub 43
PGTYPEStimestamp_sub_interval 44
PGTYPEStimestamp_to_asc 45
+PGTYPESchar_free 46
text = PGTYPESdate_to_asc(date1);
printf ("Date: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
text = PGTYPEStimestamp_to_asc(ts1);
printf ("timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
PGTYPESinterval_copy(iv1, &iv2);
text = PGTYPESinterval_to_asc(&iv2);
printf ("interval: %s\n", text);
PGTYPESinterval_free(iv1);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESdate_mdyjul(mdy, &date2);
printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
PGTYPESdate_fmt_asc(date1, fmt, out);
printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
- free(text);
+ PGTYPESchar_free(text);
free(out);
out = (char*) malloc(48);
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc1: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc2: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yy/mm/dd";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc3: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yy/mm/dd";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc4: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "dd-mm-yy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc5: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmddyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc6: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc7: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc8: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mm yy dd.";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc9: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yyyy fierj mm dd.";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc10: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mm/dd/yy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc12: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPEStimestamp_current(&ts1);
text = PGTYPEStimestamp_to_asc(ts1);
/* can't output this in regression mode */
/* printf("timestamp_current: Now: %s\n", text); */
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc1: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc2: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc3: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
/* abc-03:10:35-def-02/11/94-gh */
/* 12345678901234567890123456789 */
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 2000";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1900";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul 31 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul 32 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1997";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "%";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "a %";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul, 22 17_28 `44 +0200 2003 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "abc\n 19 October %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "";
in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = NULL;
in = "1980-04-12 3:49:44 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "July 14, 1988. Time: 9:15am";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%B %d at %I:%M %p in the year %Y";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %B %d. Time: %I:%M %p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %B %d. Time: %I:%M%p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %P %B %d. Time: %I:%M";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
in = "1234567890";
fmt = "%s";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
{ ECPGtrans(__LINE__, NULL, "rollback");
#line 365 "dt_test.pgc"
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = PGTYPESdate_from_timestamp(ts1);
dc = PGTYPESdate_new();
*dc = date1;
text = PGTYPESdate_to_asc(*dc);
printf("Date of timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESdate_free(dc);
for (i = 0; dates[i]; i++)
i, err ? "-" : text,
endptr ? 'N' : 'Y',
err ? 'T' : 'F');
- free(text);
+ PGTYPESchar_free(text);
if (!err)
{
for (j = 0; times[j]; j++)
text = PGTYPEStimestamp_to_asc(ts1);
printf("TS[%d,%d]: %s\n",
i, j, errno ? "-" : text);
- free(text);
+ PGTYPESchar_free(text);
free(t);
}
}
continue;
text = PGTYPESinterval_to_asc(i1);
printf("interval[%d]: %s\n", i, text ? text : "-");
- free(text);
+ PGTYPESchar_free(text);
ic = PGTYPESinterval_new();
PGTYPESinterval_copy(i1, ic);
text = PGTYPESinterval_to_asc(i1);
printf("interval_copy[%d]: %s\n", i, text ? text : "-");
- free(text);
+ PGTYPESchar_free(text);
PGTYPESinterval_free(ic);
PGTYPESinterval_free(i1);
}
PGTYPESnumeric_from_int(1407, value1);
text = PGTYPESnumeric_to_asc(value1, -1);
printf("from int = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value1);
value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
PGTYPESnumeric_add(value1, value2, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("add = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_sub(res, value2, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("sub = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value2);
des = PGTYPESnumeric_new();
PGTYPESnumeric_mul(res, des, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("mul = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(des);
value2 = PGTYPESnumeric_from_asc("10000", NULL);
i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
printf("to long(%d) = %ld %ld\n", i, l1, l2);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value1);
PGTYPESnumeric_free(value2);
PGTYPESnumeric_free(res);
text = PGTYPESnumeric_to_asc(num, -1);
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);
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);
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);
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();
text = PGTYPESnumeric_to_asc(nin, 2);
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);
if (r) check_errno();
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
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);
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
- free(text);
+ PGTYPESchar_free(text);
}
if (i != 6)
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
- free(text);
+ PGTYPESchar_free(text);
}
PGTYPESdecimal_free(dec);
{
text = PGTYPESnumeric_to_asc(a, 10);
printf("num[a,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
if (r)
{
text = PGTYPESnumeric_to_asc(s, 10);
printf("num[s,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
if (r)
{
text = PGTYPESnumeric_to_asc(m, 10);
printf("num[m,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
if (r)
{
text = PGTYPESnumeric_to_asc(d, 10);
printf("num[d,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
PGTYPESnumeric_free(a);
{
text = PGTYPESnumeric_to_asc(numarr[i], -1);
printf("%d: %s\n", i, text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(numarr[i]);
}
free(numarr);
#ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC
+#include <pgtypes.h>
+
#define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000
#ifndef PGTYPES_NUMERIC
#define PGTYPES_NUMERIC
+#include <pgtypes.h>
+
#define NUMERIC_POS 0x0000
#define NUMERIC_NEG 0x4000
#define NUMERIC_NAN 0xC000
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);
- free(val);
+ PGTYPESchar_free(val);
break;
}
}
text = PGTYPESdate_to_asc(date1);
printf ("Date: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
text = PGTYPEStimestamp_to_asc(ts1);
printf ("timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
PGTYPESinterval_copy(iv1, &iv2);
text = PGTYPESinterval_to_asc(&iv2);
printf ("interval: %s\n", text);
PGTYPESinterval_free(iv1);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESdate_mdyjul(mdy, &date2);
printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
PGTYPESdate_fmt_asc(date1, fmt, out);
printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
- free(text);
+ PGTYPESchar_free(text);
free(out);
out = (char*) malloc(48);
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc1: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc2: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yy/mm/dd";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc3: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yy/mm/dd";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc4: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "dd-mm-yy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc5: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmddyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc6: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc7: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mmm. dd. yyyy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc8: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mm yy dd.";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc9: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "yyyy fierj mm dd.";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc10: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = 0;
fmt = "mm/dd/yy";
PGTYPESdate_defmt_asc(&date1, fmt, in);
text = PGTYPESdate_to_asc(date1);
printf("date_defmt_asc12: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPEStimestamp_current(&ts1);
text = PGTYPEStimestamp_to_asc(ts1);
/* can't output this in regression mode */
/* printf("timestamp_current: Now: %s\n", text); */
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc1: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc2: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_to_asc3: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
/* abc-03:10:35-def-02/11/94-gh */
/* 12345678901234567890123456789 */
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 2000";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1900";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul 31 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul 32 17:28:44 +0200 1996";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Feb 29 17:28:44 +0200 1997";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "%";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "a %";
in = "Tue Jul 22 17:28:44 +0200 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = " Jul, 22 17_28 `44 +0200 2003 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "Tue Jul %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "abc\n 19 October %22 17:28:44 CEST 2003";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = "";
in = "abc\n 18 October %34 17:28:44 CEST 80";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
fmt = NULL;
in = "1980-04-12 3:49:44 ";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
in = "July 14, 1988. Time: 9:15am";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%B %d at %I:%M %p in the year %Y";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %B %d. Time: %I:%M %p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %B %d. Time: %I:%M%p";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
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";
fmt = "%Y, %P %B %d. Time: %I:%M";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
in = "1234567890";
fmt = "%s";
i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
- free(text);
+ PGTYPESchar_free(text);
exec sql rollback;
exec sql disconnect;
text = PGTYPEStimestamp_to_asc(ts1);
printf("timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
date1 = PGTYPESdate_from_timestamp(ts1);
dc = PGTYPESdate_new();
*dc = date1;
text = PGTYPESdate_to_asc(*dc);
printf("Date of timestamp: %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESdate_free(dc);
for (i = 0; dates[i]; i++)
i, err ? "-" : text,
endptr ? 'N' : 'Y',
err ? 'T' : 'F');
- free(text);
+ PGTYPESchar_free(text);
if (!err)
{
for (j = 0; times[j]; j++)
text = PGTYPEStimestamp_to_asc(ts1);
printf("TS[%d,%d]: %s\n",
i, j, errno ? "-" : text);
- free(text);
+ PGTYPESchar_free(text);
free(t);
}
}
continue;
text = PGTYPESinterval_to_asc(i1);
printf("interval[%d]: %s\n", i, text ? text : "-");
- free(text);
+ PGTYPESchar_free(text);
ic = PGTYPESinterval_new();
PGTYPESinterval_copy(i1, ic);
text = PGTYPESinterval_to_asc(i1);
printf("interval_copy[%d]: %s\n", i, text ? text : "-");
- free(text);
+ PGTYPESchar_free(text);
PGTYPESinterval_free(ic);
PGTYPESinterval_free(i1);
}
PGTYPESnumeric_from_int(1407, value1);
text = PGTYPESnumeric_to_asc(value1, -1);
printf("from int = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value1);
value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
PGTYPESnumeric_add(value1, value2, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("add = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_sub(res, value2, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("sub = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value2);
des = PGTYPESnumeric_new();
PGTYPESnumeric_mul(res, des, res);
text = PGTYPESnumeric_to_asc(res, -1);
printf("mul = %s\n", text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(des);
value2 = PGTYPESnumeric_from_asc("10000", NULL);
i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
printf("to long(%d) = %ld %ld\n", i, l1, l2);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(value1);
PGTYPESnumeric_free(value2);
PGTYPESnumeric_free(res);
text = PGTYPESnumeric_to_asc(num, -1);
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);
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);
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);
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();
text = PGTYPESnumeric_to_asc(nin, 2);
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);
if (r) check_errno();
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
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);
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
- free(text);
+ PGTYPESchar_free(text);
}
if (i != 6)
text = PGTYPESnumeric_to_asc(nin, 2);
q = PGTYPESnumeric_cmp(num, nin);
printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
- free(text);
+ PGTYPESchar_free(text);
}
PGTYPESdecimal_free(dec);
{
text = PGTYPESnumeric_to_asc(a, 10);
printf("num[a,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
if (r)
{
text = PGTYPESnumeric_to_asc(s, 10);
printf("num[s,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
if (r)
{
text = PGTYPESnumeric_to_asc(m, 10);
printf("num[m,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
if (r)
{
text = PGTYPESnumeric_to_asc(d, 10);
printf("num[d,%d,%d]: %s\n", i, j, text);
- free(text);
+ PGTYPESchar_free(text);
}
PGTYPESnumeric_free(a);
{
text = PGTYPESnumeric_to_asc(numarr[i], -1);
printf("%d: %s\n", i, text);
- free(text);
+ PGTYPESchar_free(text);
PGTYPESnumeric_free(numarr[i]);
}
free(numarr);
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);
- free(val);
+ PGTYPESchar_free(val);
break;
}
}