sql >> データベース >  >> RDS >> PostgreSQL

voidを返すPostgreSQL関数

    (私はこのソースコードの専門家ではありません。警告されています。)

    ソースはオンラインですこちら 。ファイル名を省略しました。関数名を検索して、その定義を見つけることができます。切り取りと貼り付けが簡単で、行番号が異なるとソースが変更されたことを意味するため、(通常は)行番号を残しました。

    簡単に言うと、一部の「void」リターンはおそらく空のcstring(空のnullで終了する文字列)であり、その他はnullポインタです。

    関連していると思われるソースの部分は次のとおりです。

    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. MySQL DAYOFWEEK()-私の週は月曜日から始まります

    2. PostgreSQLを使用してDBeaverで自動インクリメント/SERIALID列を作成するにはどうすればよいですか?

    3. SQLは複数の/依存する列を使用してアイテムの頻度を計算しますか?

    4. Mysqlの遅いクエリ:JOIN+複数のWHERES+ ORDER BY