aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/selfuncs.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-06-09 22:16:18 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-06-09 22:16:18 +0000
commit202548d6cc276e1f2a60b3d7d3d17392b5d9795e (patch)
tree2f7766f0258c9ea5b5cffe85f79d467c66149af5 /src/backend/utils/adt/selfuncs.c
parente8637ec9dec14e4cc4d749d69e0182c7b506862b (diff)
downloadpostgresql-202548d6cc276e1f2a60b3d7d3d17392b5d9795e.tar.gz
postgresql-202548d6cc276e1f2a60b3d7d3d17392b5d9795e.zip
Teach convert_to_scalar about datatypes timetz, inet, cidr, macaddr.
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r--src/backend/utils/adt/selfuncs.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index a56ac81042a..099cc37e9dd 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.92 2001/06/05 05:26:04 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.93 2001/06/09 22:16:18 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1326,6 +1326,9 @@ icnlikejoinsel(PG_FUNCTION_ARGS)
* scale needed by scalarltsel()/scalargtsel().
* Returns "true" if successful.
*
+ * XXX this routine is a hack: ideally we should look up the conversion
+ * subroutines in pg_type.
+ *
* All numeric datatypes are simply converted to their equivalent
* "double" values. XXX what about NUMERIC values that are outside
* the range of "double"?
@@ -1398,10 +1401,22 @@ convert_to_scalar(Datum value, Oid valuetypid, double *scaledvalue,
case RELTIMEOID:
case TINTERVALOID:
case TIMEOID:
+ case TIMETZOID:
*scaledvalue = convert_timevalue_to_scalar(value, valuetypid);
*scaledlobound = convert_timevalue_to_scalar(lobound, boundstypid);
*scaledhibound = convert_timevalue_to_scalar(hibound, boundstypid);
return true;
+
+ /*
+ * Built-in network types
+ */
+ case INETOID:
+ case CIDROID:
+ case MACADDROID:
+ *scaledvalue = convert_network_to_scalar(value, valuetypid);
+ *scaledlobound = convert_network_to_scalar(lobound, boundstypid);
+ *scaledhibound = convert_network_to_scalar(hibound, boundstypid);
+ return true;
}
/* Don't know how to convert */
return false;
@@ -1694,6 +1709,13 @@ convert_timevalue_to_scalar(Datum value, Oid typid)
}
case TIMEOID:
return DatumGetTimeADT(value);
+ case TIMETZOID:
+ {
+ TimeTzADT *timetz = DatumGetTimeTzADTP(value);
+
+ /* use GMT-equivalent time */
+ return (double) (timetz->time + timetz->zone);
+ }
}
/*