static void sqlite_checksum_int4( 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_int(ctx, checksum_int4(txt, len)); }
Datum text_checksum4(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); size = VARSIZE(t) - VARHDRSZ; data = (unsigned char *) VARDATA(t); } PG_RETURN_INT32(checksum_int4(data, size)); }