sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-funktioner returnerar void

(Jag är ingen expert på den här källkoden. Du har blivit varnad.)

Källan finns online här . Jag har utelämnat filnamnen; du kan söka efter funktionsnamnen för att hitta deras definitioner. Jag lämnade radnumren (vanligtvis) eftersom det är lättare att klippa och klistra, och olika radnummer kommer att innebära att källan har ändrats.

Novellen är att vissa "void" returnerar förmodligen är tomma cstrings (tomma nollterminerade strängar), och andra är nollpekare.

Här är de delar av källan som ser relevanta ut.

00228 /*
00229  * void_out     - output routine for pseudo-type VOID.
00230  *
00231  * We allow this so that "SELECT function_returning_void(...)" works.
00232  */
00233 Datum
00234 void_out(PG_FUNCTION_ARGS)
00235 {
00236     PG_RETURN_CSTRING(pstrdup(""));
00237 }

00251 /*
00252  * void_send    - binary output routine for pseudo-type VOID.
00253  *
00254  * We allow this so that "SELECT function_returning_void(...)" works
00255  * even when binary output is requested.
00256  */
00257 Datum
00258 void_send(PG_FUNCTION_ARGS)
00259 {
00260     StringInfoData buf;
00261 
00262     /* send an empty string */
00263     pq_begintypsend(&buf);
00264     PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
00265 }

Vi har också

00285 /* To return a NULL do this: */
00286 #define PG_RETURN_NULL()  \
00287     do { fcinfo->isnull = true; return (Datum) 0; } while (0)
00288 
00289 /* A few internal functions return void (which is not the same as NULL!) */
00290 #define PG_RETURN_VOID()     return (Datum) 0

Så det är logiskt för mig att en användardefinierad funktion som returnerar genom PG_RETURN_VOID() inte skulle testa motsvarande en som returnerar genom void_out() eller void_send(). Jag vet ännu inte varför det är så, men jag måste sluta och sova lite.




  1. Sammanfoga bord på flera servrar

  2. MYSQL Fulltextsökning och GILLA

  3. Installera och konfigurera MySQL på Ubuntu 20.04

  4. SQL Server:dynamisk pivot över 5 kolumner