Skip site navigation (1) Skip section navigation (2)

Re: _penalty gist method invoked with one key NULL

From: gj <gj(at)pointblue(dot)com(dot)pl>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: _penalty gist method invoked with one key NULL
Date: 2005-10-27 22:21:52
Message-ID: 20051027222152.743BE87@pointblue.com.pl (view raw or flat)
Thread:
Lists: pgsql-hackers
 Ok, Thanks for that. Script works great. 
 
Here's bt I get: 
#0  0xb7ef26a4 in ?? () 
#1  0xb7cae460 in _IO_list_all () from /lib/tls/libc.so.6 
#2  0xb7ef2ea8 in ?? () 
#3  0x00000000 in ?? () 
#4  0x0844bebc in ?? () 
#5  0x00000000 in ?? () 
#6  0xb7cadff4 in ?? () from /lib/tls/libc.so.6 
#7  0xb7cadff4 in ?? () from /lib/tls/libc.so.6 
#8  0x08432746 in ?? () 
#9  0xbfc24eb0 in ?? () 
#10 0xbfc252d4 in ?? () 
#11 0xbfc24fd4 in ?? () 
#12 0xbfc24fb0 in ?? () 
#13 0x0844bebc in ?? () 
#14 0x00000000 in ?? () 
#15 0xbfc24cd0 in ?? () 
#16 0xb7cadff4 in ?? () from /lib/tls/libc.so.6 
#17 0xbfc24fb0 in ?? () 
#18 0xbfc24fd4 in ?? () 
#19 0xbfc24ef8 in ?? () 
#20 0x082c0b1d in FunctionCall3 (flinfo=0xbfc24cf0, arg1=3083469667, 
arg2=3083469667, arg3=3083469667) at fmgr.c:1179 
#21 0x082c0b1d in FunctionCall3 (flinfo=0xbfc260e4, arg1=3217183444, 
arg2=3217182676, arg3=3217182640) at fmgr.c:1179 
#22 0x0808730d in gistpenalty (giststate=0xbfc254e4, attno=0, key1=0xbfc252d4, 
isNull1=0 '\0', key2=0xbfc24fd4, isNull2=0 '\0', 
    penalty=0xbfc24fb0) at gistutil.c:821 
#23 0x080868fd in gistchoose (r=0xb710039c, p=0xb739b0a0 "", it=0x844beb4, 
giststate=0xbfc254e4) at gistutil.c:688 
 
 
I guess, what's important is #22 with two keys, both NOT nulls.  
It's not a secret how my _penalty function is defined: 
 
CREATE OR REPLACE FUNCTION enum_penalty( internal, internal, internal) 
	RETURNS internal 
	AS 'enum2916', 'enum_penalty' 
	LANGUAGE C STRICT; 
 
and in C it looks like that: 
 
PG_FUNCTION_INFO_V1(enum_penalty); 
 
Datum enum_penalty(PG_FUNCTION_ARGS) 
{ 
	GISTENTRY *origentry = (GISTENTRY *) PG_GETARG_POINTER(0); 
	GISTENTRY *newentry = (GISTENTRY *) PG_GETARG_POINTER(1); 
	float *result = (float *) PG_GETARG_POINTER(2); 
	struct enumNumber *key; 
	struct enumNumber* ud; 
	float tmp1, tmp2; 
	ud = (struct enumNumber*) DatumGetPointer(origentry->key); 
	key = (struct enumNumber*) DatumGetPointer(newentry->key); 
	 
	tmp2 = ((float)ud->eStart)*(1.5*(float)ud->percent); 
	tmp1 = ((float)key->eStart)*(1.5*(float)key->percent); 
	 
	*result = tmp1 - tmp2; 
 
	PG_RETURN_POINTER(result); 
} 
 
for whatever reason here origentry->key is NULL. 
 
--  
GJ 
 

In response to

pgsql-hackers by date

Next:From: Jim NasbyDate: 2005-10-27 22:23:58
Subject: Re: enums
Previous:From: Alvaro HerreraDate: 2005-10-27 21:44:30
Subject: Re: ERROR: invalid memory alloc request size <a_big_number_here>

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group