2015-09-12 35 views

回答

1

擴展尼克(!非常有幫助)的評論,這裏是一個簡單的例子,在Postgres裏(Postgres.app 9.4,運行OS X Yosemite)的返回結果:

#include <postgres.h> 
#include <utils/array.h> 
#include <utils/varbit.h> 
#include <fmgr.h> 
#ifdef PG_MODULE_MAGIC 
PG_MODULE_MAGIC; 
#endif 
Datum pg_test_varbit(PG_FUNCTION_ARGS); 
PG_FUNCTION_INFO_V1(pg_test_varbit); 
Datum 
pg_test_varbit(PG_FUNCTION_ARGS) 
{ 
    VarBit *result; 
    int len, rlen; 

    len    = 16; 
    rlen   = VARBITTOTALLEN(len); 
    result   = palloc0(rlen); 
    SET_VARSIZE(result, rlen); 
    VARBITLEN(result) 
        = len; 

    VARBITS(result)[0] = 0xFF; 
    VARBITS(result)[1] = 0x0; 

    PG_RETURN_VARBIT_P(result); 
} 

一旦編譯/安裝,我在跑一個Postgres外殼:

DROP FUNCTION IF EXISTS pg_test_varbit(); 
CREATE OR REPLACE FUNCTION pg_test_varbit() RETURNS varbit 
    AS 'pgtestvarbit', 'pg_test_varbit' 
    LANGUAGE C STRICT; 

SELECT pg_test_varbit(); 

並且收到「1111111100000000」作爲結果。