static void sqlite_checksum_int8( sqlite3_context * ctx, int argc, sqlite3_value ** argv) { assert(argc==1); const unsigned char * txt; size_t len; switch (sqlite3_value_type(argv[0])) { case SQLITE_NULL: txt = NULL; len = 0; break; case SQLITE_TEXT: txt = sqlite3_value_text(argv[0]); len = sqlite3_value_bytes(argv[0]); break; // hmmm... should I do something else? case SQLITE_INTEGER: case SQLITE_FLOAT: case SQLITE_BLOB: default: sqlite3_result_error(ctx, "expecting TEXT or NULL", -1); return; } sqlite3_result_int64(ctx, checksum_int8(txt, len)); }
Datum text_checksum8(PG_FUNCTION_ARGS) { unsigned char * data; size_t size; if (PG_ARGISNULL(0)) { data = NULL, size = 0; } else { text * t = PG_GETARG_TEXT_P(0); data = (unsigned char *) VARDATA(t); size = VARSIZE(t) - VARHDRSZ; } PG_RETURN_INT64(checksum_int8(data, size)); }