PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcje PostgreSQL zwracają void

(Nie jestem ekspertem w tym kodzie źródłowym. Zostałeś ostrzeżony.)

Źródło jest dostępne online tutaj . Pominąłem nazwy plików; możesz wyszukać nazwy funkcji, aby znaleźć ich definicje. Zostawiłem numery linii (zwykle), ponieważ łatwiej jest je wycinać i wklejać, a różne numery linii będą oznaczać, że zmieniło się źródło.

Krótka historia jest taka, że ​​niektóre „puste” zwracane są prawdopodobnie pustymi łańcuchami cstring (pustymi łańcuchami zakończonymi znakiem NUL), a inne są wskaźnikami o wartości NULL.

Oto części źródła, które wyglądają na istotne.

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 }

Mamy również

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

Więc ma dla mnie sens, że funkcja zdefiniowana przez użytkownika, która zwraca przez PG_RETURN_VOID(), nie testowałaby równoważności funkcji, która zwraca przez void_out() lub void_send(). Jeszcze nie wiem, dlaczego tak jest, ale muszę się zatrzymać i trochę się przespać.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z kontenera PostgreSQL z istniejącymi danymi?

  2. Używanie kolumny Alias ​​w klauzuli WHERE w Postgresql

  3. JodaTime z wartościami JPA, PostgreSQL i NULL

  4. Jak mogę sprawić, by to zapytanie SQL dotyczące odległości geograficznej było zgodne z Postgresem?

  5. Pula połączeń przy użyciu pg-promise