(मैं इस स्रोत कोड का कोई विशेषज्ञ नहीं हूं। आपको चेतावनी दी गई है।)
स्रोत ऑनलाइन है यहां . मैंने फ़ाइल नाम छोड़े हैं; आप उनकी परिभाषाओं को खोजने के लिए फ़ंक्शननाम खोज सकते हैं। मैंने लाइन नंबर छोड़ दिया (आमतौर पर) क्योंकि इसे काटना और चिपकाना आसान है, और अलग-अलग लाइन नंबरों का मतलब होगा कि स्रोत बदल गया है।
लघुकथा यह है कि कुछ "शून्य" रिटर्न शायद खाली सीस्ट्रिंग (खाली नल-टर्मिनेटेड स्ट्रिंग्स) हैं, और अन्य शून्य पॉइंटर्स हैं।
यहां स्रोत के वे हिस्से दिए गए हैं जो प्रासंगिक लगते हैं।
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() के माध्यम से लौटाता है। मुझे अभी तक नहीं पता कि ऐसा क्यों है, लेकिन मुझे रुककर थोड़ी नींद लेनी होगी।