
Hallo,

I am having enormous troubles with user defined types in langugae c in
postgres. Do you know what am I doing wrong? I am afraid there is a
bug in postgres.

Look at this:

File testdb.c:
---------------------
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct _mytype {
	int a;
	int b;
} mytype;

mytype *
mytype_in (char *str)
{
	mytype *ret;

	ret = malloc (sizeof(mytype));
	ret->a = 1;
	ret->b = 2;
	return (ret);
}

char *
mytype_out (mytype *mt)
{
	return (strdup("9,9"));
}

-----------------------------

You can see that this type is good for nothing.
(Except for demonstrational purpose.)

This C-code I compile:
 gcc -fPIC -c testdb.c
 ld -G -Bdynamic -o testdb.so testdb.o


And then run these queries:
 CREATE FUNCTION mytype_in (opaque)
 RETURNS mytype
 AS '/localpath/testdb.so'
 LANGUAGE 'c';

 CREATE FUNCTION mytype_out (opaque)
 RETURNS opaque
 AS '/localpath/testdb.so'
 LANGUAGE 'c';

 CREATE TYPE mytype (
 internallength = 8,
 input = mytype_in,
 output = mytype_out);

 CREATE TABLE pok (x mytype, txt varchar);

 insert into pok (x,txt) values ('Anything','Anything');

------------

You will see that so far goes everything fine.
After typing "Select * from pok" we get core dump (in earlier versions of
psql) or an infinite loop in brand new versions.

You will also find that when the user defined type goes in the 'pok' table
as the last one, everything will work.


I am running postgres 6.4.2 on SunOS 5.5.1.

Any ideas?
Your help will be much appreciated.

Petr Danecek











Sun, 14 Feb 1999 20:59:35 +0100 (CET)
Petr Danecek <petr@ics.cas.cz>
Bug in user defined types in postgres?!