mirror of
https://github.com/postgres/postgres.git
synced 2025-08-21 10:42:50 +03:00
Add binary I/O routines for a bunch more datatypes. Still a few to go,
but that was enough tedium for one day. Along the way, move the few support routines for types xid and cid into a more logical place.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.81 2003/04/08 17:02:04 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.82 2003/05/12 23:08:50 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <float.h>
|
||||
|
||||
#include "access/hash.h"
|
||||
#include "libpq/pqformat.h"
|
||||
#include "miscadmin.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/date.h"
|
||||
@@ -117,6 +118,32 @@ date_out(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_CSTRING(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* date_recv - converts external binary format to date
|
||||
*/
|
||||
Datum
|
||||
date_recv(PG_FUNCTION_ARGS)
|
||||
{
|
||||
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
|
||||
|
||||
PG_RETURN_DATEADT((DateADT) pq_getmsgint(buf, sizeof(DateADT)));
|
||||
}
|
||||
|
||||
/*
|
||||
* date_send - converts date to binary format
|
||||
*/
|
||||
Datum
|
||||
date_send(PG_FUNCTION_ARGS)
|
||||
{
|
||||
DateADT date = PG_GETARG_DATEADT(0);
|
||||
StringInfoData buf;
|
||||
|
||||
pq_begintypsend(&buf);
|
||||
pq_sendint(&buf, date, sizeof(date));
|
||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||
}
|
||||
|
||||
|
||||
Datum
|
||||
date_eq(PG_FUNCTION_ARGS)
|
||||
{
|
||||
@@ -594,6 +621,43 @@ time_out(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_CSTRING(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* time_recv - converts external binary format to time
|
||||
*
|
||||
* We make no attempt to provide compatibility between int and float
|
||||
* time representations ...
|
||||
*/
|
||||
Datum
|
||||
time_recv(PG_FUNCTION_ARGS)
|
||||
{
|
||||
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
|
||||
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
PG_RETURN_TIMEADT((TimeADT) pq_getmsgint64(buf));
|
||||
#else
|
||||
PG_RETURN_TIMEADT((TimeADT) pq_getmsgfloat8(buf));
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* time_send - converts time to binary format
|
||||
*/
|
||||
Datum
|
||||
time_send(PG_FUNCTION_ARGS)
|
||||
{
|
||||
TimeADT time = PG_GETARG_TIMEADT(0);
|
||||
StringInfoData buf;
|
||||
|
||||
pq_begintypsend(&buf);
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
pq_sendint64(&buf, time);
|
||||
#else
|
||||
pq_sendfloat8(&buf, time);
|
||||
#endif
|
||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||
}
|
||||
|
||||
|
||||
/* time_scale()
|
||||
* Adjust time type for specified scale factor.
|
||||
* Used by PostgreSQL type system to stuff columns.
|
||||
@@ -1349,6 +1413,47 @@ timetz_out(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_CSTRING(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* timetz_recv - converts external binary format to timetz
|
||||
*/
|
||||
Datum
|
||||
timetz_recv(PG_FUNCTION_ARGS)
|
||||
{
|
||||
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
|
||||
TimeTzADT *time;
|
||||
|
||||
time = (TimeTzADT *) palloc(sizeof(TimeTzADT));
|
||||
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
time->time = pq_getmsgint64(buf);
|
||||
#else
|
||||
time->time = pq_getmsgfloat8(buf);
|
||||
#endif
|
||||
time->zone = pq_getmsgint(buf, sizeof(time->zone));
|
||||
|
||||
PG_RETURN_TIMETZADT_P(time);
|
||||
}
|
||||
|
||||
/*
|
||||
* timetz_send - converts timetz to binary format
|
||||
*/
|
||||
Datum
|
||||
timetz_send(PG_FUNCTION_ARGS)
|
||||
{
|
||||
TimeTzADT *time = PG_GETARG_TIMETZADT_P(0);
|
||||
StringInfoData buf;
|
||||
|
||||
pq_begintypsend(&buf);
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
pq_sendint64(&buf, time->time);
|
||||
#else
|
||||
pq_sendfloat8(&buf, time->time);
|
||||
#endif
|
||||
pq_sendint(&buf, time->zone, sizeof(time->zone));
|
||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||
}
|
||||
|
||||
|
||||
/* timetz2tm()
|
||||
* Convert TIME WITH TIME ZONE data type to POSIX time structure.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user