PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Функциите на PostgreSQL връщат void

(Не съм експерт по този изходен код. Бяхте предупредени.)

Източникът е онлайн тук . Пропуснал съм имената на файловете; можете да търсите имената на функциите, за да намерите техните дефиниции. Оставих номерата на редовете (обикновено), защото е по-лесно за изрязване и поставяне, а различните номера на редове ще означават, че източникът е променен.

Кратката история е, че някои „недействителни“ връщания вероятно са празни cstrings (празни низове, завършващи с нула), а други са нулеви указатели.

Ето частите от източника, които изглеждат подходящи.

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 }

Имаме и

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

Така че за мен има смисъл дефинирана от потребителя функция, която връща чрез PG_RETURN_VOID(), няма да тества еквивалент на тази, която връща чрез void_out() или void_send(). Все още не знам защо е така, но трябва да спра и да поспя.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql не може да отвори INSERT заявка като курсор

  2. Инсталирайте PostgreSQL на Ubuntu 18.04

  3. sqlalchemy и автоматични увеличения с postgresql

  4. мултипроцесорен модул и отделни psycopg2 връзки

  5. Актуализирайте съществуващ ред в базата данни от pandas df