|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.125 2005/07/06 19:02:52 momjian Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.126 2005/07/07 04:36:08 momjian Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
|
28 | 28 | #include"utils/builtins.h"
|
29 | 29 | #include"utils/lsyscache.h"
|
30 | 30 | #include"utils/pg_locale.h"
|
31 |
| -#include"utils/syscache.h" |
32 | 31 |
|
33 | 32 |
|
34 | 33 | typedefstructvarlenaunknown;
|
@@ -2364,22 +2363,15 @@ pg_column_size(PG_FUNCTION_ARGS)
|
2364 | 2363 | {
|
2365 | 2364 | /* On the first call lookup the datatype of the supplied argument */
|
2366 | 2365 | Oidargtypeid=get_fn_expr_argtype(fcinfo->flinfo,0);
|
2367 |
| -HeapTupletp; |
2368 |
| -inttyplen; |
| 2366 | +inttyplen=get_typlen(argtypeid); |
2369 | 2367 |
|
2370 |
| -tp=SearchSysCache(TYPEOID, |
2371 |
| -ObjectIdGetDatum(argtypeid), |
2372 |
| -0,0,0); |
2373 |
| -if (!HeapTupleIsValid(tp)) |
| 2368 | + |
| 2369 | +if (typlen==0) |
2374 | 2370 | {
|
2375 | 2371 | /* Oid not in pg_type, should never happen. */
|
2376 |
| -ereport(ERROR, |
2377 |
| -(errcode(ERRCODE_INTERNAL_ERROR), |
2378 |
| -errmsg("invalid typid: %u",argtypeid))); |
| 2372 | +elog(ERROR,"cache lookup failed for type %u",argtypeid); |
2379 | 2373 | }
|
2380 |
| - |
2381 |
| -typlen= ((Form_pg_type)GETSTRUCT(tp))->typlen; |
2382 |
| -ReleaseSysCache(tp); |
| 2374 | + |
2383 | 2375 | fcinfo->flinfo->fn_extra=MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
|
2384 | 2376 | sizeof(int));
|
2385 | 2377 | *(int*)fcinfo->flinfo->fn_extra=typlen;
|
|