Thread: PQftype implementation
Hello, Pgsql-hackers. The script: CREATE TYPE my_varchar; CREATE OR REPLACE FUNCTION my_varcharout(my_varchar) RETURNS cstring AS 'varcharout' LANGUAGE 'internal' IMMUTABLE STRICT COST 1; CREATE OR REPLACE FUNCTION my_varcharin(cstring, oid, integer) RETURNS my_varchar AS 'varcharin' LANGUAGE 'internal' IMMUTABLE STRICT COST 1; CREATE TYPE my_varchar (INPUT=my_varcharin, OUTPUT=my_varcharout, DEFAULT='', INTERNALLENGTH=-1, ALIGNMENT=int4, STORAGE=EXTENDED, TYPMOD_IN=varchartypmodin, TYPMOD_OUT=varchartypmodout); CREATE TABLE my_varchar_test( id serial primary key, info my_varchar(100) ) Here I created user-defined type "my_varchar" for internal tests. But PQftype returns 1043 (varchar oid) for the "info" column. I'm a little bit confused of such behaviour. What am I missing? Ans where in the sources can I find the way server fills res->attDescs[field_num].typid? Thanks in advance. -- With best wishes,Pavel mailto:pavel@gf.microolap.com
Pavel Golub <pavel@microolap.com> writes: > Here I created user-defined type "my_varchar" for internal tests. But > PQftype returns 1043 (varchar oid) for the "info" column. Really? I tried it and got 172069, which is about right for where the OID counter is in my database. I think you messed up your test. res = PQexec(conn, "select * from my_varchar_test");if (PQresultStatus(res) != PGRES_TUPLES_OK){ fprintf(stderr, "SELECTfailed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn);} nFields = PQnfields(res);for (i = 0; i < nFields; i++) printf("%-15s %d\n", PQfname(res, i), PQftype(res, i)); regards, tom lane
Hello, Tom. Yes, you are absolutely right. My bad! Sorry guys! :) You wrote: TL> Pavel Golub <pavel@microolap.com> writes: >> Here I created user-defined type "my_varchar" for internal tests. But >> PQftype returns 1043 (varchar oid) for the "info" column. TL> Really? I tried it and got 172069, which is about right for where the TL> OID counter is in my database. I think you messed up your test. TL> res = PQexec(conn, "select * from my_varchar_test"); TL> if (PQresultStatus(res) != PGRES_TUPLES_OK) TL> { TL> fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn)); TL> PQclear(res); TL> exit_nicely(conn); TL> } TL> nFields = PQnfields(res); TL> for (i = 0; i < nFields; i++) TL> printf("%-15s %d\n", PQfname(res, i), PQftype(res, i)); TL> regards, tom lane -- With best wishes,Pavel mailto:pavel@gf.microolap.com