Vytvoreni pretypovavaci fce v PgSQL
"Zíka Aleš, Ing."
Ales.Zika na pel.cb.ds.mfcr.cz
Středa Srpen 23 13:44:34 CEST 2000
>
> test=# select bpchar('10')::text::int;
> ?column?
> ----------
> 10
> (1 row)
>
> tedy bpchar na text a text na int, pocjopitelne zaplatite rychlosti...
>
Diky!
> > Da se nejak napsat pretypovavaci funkce CHAR->INT a
> hlavne, donutit
>
>
> test=# CREATE FUNCTION mycast( bpchar ) RETURNS int
> test-# AS 'SELECT $1::text::int' LANGUAGE 'SQL';
> CREATE
> test=# select mycast( '10' );
> mycast
> --------
> 10
> (1 row)
>
Tohle je dobry, ale kdyz se mi nelibi syntax s volanim funkce, ale
chtel bych pouzit syntaxi se ctyrteckou? Jde to, nebo je to natvrdo
zakodovany, ze ctyrtecka funguje jen pro standardni typy?
>
> > PgSQL, aby ji v tomto pripade automaticky pouzil?
>
> Tomudle nerozumim...
>
Dejme tomu, ze vytvorim nejaky novy typ, aby to bylo kompatibilni s
beznymy typy rekneme velmi presny float treba na 50 platnych mist, napr. pro
astronomicke vypocty, nazveme ho ASTRO. A ted bych chtel PgSQL vybavit sadou
pretypovavacich funkci (ASTRO <-> INT, ASTRO <-> FLOAT, ...) tak, aby je
umel automaticky, pouzivat ve vyrazech, kde se kombinuji typy.
Tedy aby sel napsat vyraz ASTRO = ASTRO + INT, bez nutnosti nejakeho
explicitniho pretypovavani. Urcite by to slo tak, ze bych definoval sadu
operatoru pro ruzne kombinace typu, ale napr. C++ kdyz nenajde vhodny
operator, se jeste pokousi pretypovavat operandy a pretypovavci funkce se
daji taky doplnovat, jak je na tom PgSQL.
Ales Zika
Pelhrimov
e-mail: Ales.Zika na pel.cb.ds.mfcr.cz
Ales.Zika na seznam.cz
SMS: Ales.Zika na sms.underground.cz
Další informace o konferenci Test