ecpg issue - not sending datatype to the backend
От | Mike Aubury |
---|---|
Тема | ecpg issue - not sending datatype to the backend |
Дата | |
Msg-id | 200805021428.31432.mike.aubury@aubit.com обсуждение исходный текст |
Ответы |
Re: ecpg issue - not sending datatype to the backend
|
Список | pgsql-hackers |
This is a little complex to explain - so its probably better with an example.. I don't know if theres some inbuilt function to tell you what datatype a value is - so 'kludged' this together : CREATE OR REPLACE FUNCTION rval_type(m date) RETURNS text AS $$ BEGIN RETURN 'it was a date'; END; $$ LANGUAGEplpgsql; CREATE OR REPLACE FUNCTION rval_type(m text) RETURNS text AS $$ BEGIN RETURN 'it was a text'; END; $$ LANGUAGEplpgsql; CREATE OR REPLACE FUNCTION rval_type(m int) RETURNS text AS $$ BEGIN RETURN 'it was a int'; END; $$ LANGUAGEplpgsql; Now - if I have a cpc containing : main() { exec sql begin declare section; date d; int i; char a[200]; char lv_out[200]; exec sql end declare section; exec sql database test1; d=0; i=0; strcpy(a,"-"); memset(lv_out,0,sizeof(lv_out)); exec sql select rval_type(:d) into :lv_out; if (sqlca.sqlcode<0) sqlprint(); else printf("%s\n",lv_out); exec sql select rval_type(:i) into :lv_out; if (sqlca.sqlcode<0) sqlprint(); else printf("%s\n",lv_out); exec sql select rval_type(:a) into :lv_out; if (sqlca.sqlcode<0) sqlprint(); else printf("%s\n",lv_out); } You can see I'm passing in a date, then an integer, then a character string. However - when you run the code you get : it was a text it was a text it was a text This to me looks 'wrong', especially when previous versions of ecpg (<8.0?) gave the correct : it was a date it was a int it was a text Any thoughts ? (This is manifesting itself as arithmetic errors when I'm using dates in my application) -- Mike Aubury Aubit Computing Ltd is registered in England and Wales, Number: 3112827 Registered Address : Clayton House,59 Piccadilly,Manchester,M1 2AQ
В списке pgsql-hackers по дате отправления: