From: | Neil Conway <neilc(at)samurai(dot)com> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Mark Kirkwood <markir(at)paradise(dot)net(dot)nz>, pgsql-patches(at)postgresql(dot)org |
Subject: | Re: TODO Item - Return compressed length of TOAST datatypes |
Date: | 2005-07-07 01:53:29 |
Message-ID: | 42CC8B19.6050701@samurai.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Bruce Momjian wrote:
> + /*
> + * Return the length of a datum, possibly compressed
> + */
> + Datum
> + pg_column_size(PG_FUNCTION_ARGS)
> + {
> + Datum value = PG_GETARG_DATUM(0);
> + int result;
> +
> + /* fn_extra stores the fixed column length, or -1 for varlena. */
> + if (fcinfo->flinfo->fn_extra == NULL) /* first call? */
> + {
> + /* On the first call lookup the datatype of the supplied argument */
[...]
Is this optimization worth the code complexity?
> + tp = SearchSysCache(TYPEOID,
> + ObjectIdGetDatum(argtypeid),
> + 0, 0, 0);
> + if (!HeapTupleIsValid(tp))
> + {
> + /* Oid not in pg_type, should never happen. */
> + ereport(ERROR,
> + (errcode(ERRCODE_INTERNAL_ERROR),
> + errmsg("invalid typid: %u", argtypeid)));
> + }
elog(ERROR) is usually used for "can't happen" errors; also, the usual
error message in this scenario is "cache lookup failed [...]". Perhaps
better to use get_typlen() here, anyway.
-Neil
From | Date | Subject | |
---|---|---|---|
Next Message | Mark Kirkwood | 2005-07-07 03:01:46 | Re: TODO Item - Return compressed length of TOAST datatypes |
Previous Message | Joshua D. Drake | 2005-07-07 01:38:18 | Mistake in latest plperl patch |