Vytvoreni pretypovavaci fce v PgSQL

Karel Zak zakkr na zf.jcu.cz
Středa Srpen 23 14:09:53 CEST 2000


> > > 	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

mela by se vam libit, jinak jeste blize SQL standardum je cast( '10' AS int)

> chtel bych pouzit syntaxi se ctyrteckou? Jde to, nebo je to natvrdo
> zakodovany, ze ctyrtecka funguje jen pro standardni typy?

 Ne, pro jakykoliv typ --- viz manual a CREATE TYPE... 

> 	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

 Jen neobjevovat ameriku (viv. type numeric) :-) 

> 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
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 Ano. Udelate si typ a udelate si operatory (viz. CRAETE OPERATOR), to plati
i pro to vase puvodni ORDER BY ( '>' '<' '=' by mohlo stacit ?) .

 Je to v manualech.

> operator, se jeste pokousi pretypovavat operandy a pretypovavci funkce se
> daji taky doplnovat, jak je na tom PgSQL.

 PgSQL ... vzdy velmi dobre :-)

 Presne todle je duvodem "pomalosti" PostgreSQL oproti MySQL. Tedy zcela
dynamicke datove typy/funkce/operatory.

				Karel







Další informace o konferenci Test