File tree Expand file tree Collapse file tree 5 files changed +85
-1
lines changed Expand file tree Collapse file tree 5 files changed +85
-1
lines changed Original file line number Diff line number Diff line change @@ -32,6 +32,16 @@ RETURNS cstring
32
32
AS ' MODULE_PATHNAME'
33
33
LANGUAGE C STRICT IMMUTABLE;
34
34
35
+ CREATE FUNCTION hll_recv (internal)
36
+ RETURNS hll
37
+ AS ' MODULE_PATHNAME'
38
+ LANGUAGE C IMMUTABLE STRICT;
39
+
40
+ CREATE FUNCTION hll_send (hll)
41
+ RETURNS bytea
42
+ AS ' MODULE_PATHNAME'
43
+ LANGUAGE C IMMUTABLE STRICT;
44
+
35
45
CREATE FUNCTION hll_typmod_in (cstring[])
36
46
RETURNS integer
37
47
AS ' MODULE_PATHNAME'
@@ -53,6 +63,8 @@ CREATE TYPE hll (
53
63
OUTPUT = hll_out,
54
64
TYPMOD_IN = hll_typmod_in,
55
65
TYPMOD_OUT = hll_typmod_out,
66
+ RECEIVE = hll_recv,
67
+ SEND = hll_send,
56
68
STORAGE = external
57
69
);
58
70
Original file line number Diff line number Diff line change 33
33
#include "utils/lsyscache.h"
34
34
#include "utils/memutils.h"
35
35
#include "catalog/pg_type.h"
36
+ #include "lib/stringinfo.h"
37
+ #include "libpq/pqformat.h"
36
38
37
39
#include "MurmurHash3.h"
38
40
@@ -3332,3 +3334,25 @@ hll_ceil_card_unpacked(PG_FUNCTION_ARGS)
3332
3334
PG_RETURN_INT64 (ceilval );
3333
3335
}
3334
3336
}
3337
+
3338
+ PG_FUNCTION_INFO_V1 (hll_recv );
3339
+ Datum hll_recv (PG_FUNCTION_ARGS );
3340
+ Datum
3341
+ hll_recv (PG_FUNCTION_ARGS )
3342
+ {
3343
+ Datum dd = DirectFunctionCall1 (bytearecv , PG_GETARG_DATUM (0 ));
3344
+ return dd ;
3345
+ }
3346
+
3347
+ PG_FUNCTION_INFO_V1 (hll_send );
3348
+ Datum hll_send (PG_FUNCTION_ARGS );
3349
+ Datum
3350
+ hll_send (PG_FUNCTION_ARGS )
3351
+ {
3352
+ Datum dd = PG_GETARG_DATUM (0 );
3353
+ bytea * bp = DatumGetByteaP (dd );
3354
+ StringInfoData buf ;
3355
+ pq_begintypsend (& buf );
3356
+ pq_sendbytes (& buf , VARDATA (bp ), VARSIZE (bp ) - VARHDRSZ );
3357
+ PG_RETURN_BYTEA_P (pq_endtypsend (& buf ));
3358
+ }
Original file line number Diff line number Diff line change @@ -52,6 +52,7 @@ SQL = \
52
52
cumulative_union_sparse_full_representation.sql \
53
53
cumulative_union_sparse_promotion.sql \
54
54
cumulative_union_sparse_sparse.sql \
55
+ copy_binary.sql \
55
56
$(NULL )
56
57
57
58
TEST_DB = hll_regress
@@ -62,7 +63,7 @@ NOT = \
62
63
OUT := $(SQL:%.sql=%.out )
63
64
64
65
# Print NULL values explicitly.
65
- PSQLOPTS = --echo-all -P null=NULL
66
+ PSQLOPTS = -x - -echo-all -P null=NULL
66
67
67
68
# Disable NOTICE log messages
68
69
export PGOPTIONS := --client-min-messages=warning
Original file line number Diff line number Diff line change
1
+ SELECT hll_set_output_version(1);
2
+ -[ RECORD 1 ]----------+--
3
+ hll_set_output_version | 1
4
+
5
+ DROP TABLE IF EXISTS test_binary;
6
+ DROP TABLE
7
+ CREATE TABLE test_binary (id SERIAL, v1 hll);
8
+ CREATE TABLE
9
+ INSERT INTO test_binary(id,v1) VALUES (1, hll_empty() || hll_hash_text('A'));
10
+ INSERT 0 1
11
+ SELECT hll_cardinality(v1) FROM test_binary;
12
+ -[ RECORD 1 ]---+--
13
+ hll_cardinality | 1
14
+
15
+ \COPY test_binary TO 'binary.dat' WITH (FORMAT binary)
16
+ DELETE FROM test_binary;
17
+ DELETE 1
18
+ SELECT hll_cardinality(v1) FROM test_binary;
19
+ (No rows)
20
+ \COPY test_binary FROM 'binary.dat' WITH (FORMAT binary)
21
+ SELECT hll_cardinality(v1) FROM test_binary;
22
+ -[ RECORD 1 ]---+--
23
+ hll_cardinality | 1
24
+
25
+ DROP TABLE test_binary;
26
+ DROP TABLE
Original file line number Diff line number Diff line change
1
+ SELECT hll_set_output_version(1 );
2
+
3
+ DROP TABLE IF EXISTS test_binary;
4
+
5
+ CREATE TABLE test_binary (id SERIAL , v1 hll);
6
+
7
+ INSERT INTO test_binary(id,v1) VALUES (1 , hll_empty() || hll_hash_text(' A' ));
8
+
9
+ SELECT hll_cardinality(v1) FROM test_binary;
10
+
11
+ \COPY test_binary TO ' binary.dat' WITH (FORMAT binary)
12
+
13
+ DELETE FROM test_binary;
14
+
15
+ SELECT hll_cardinality(v1) FROM test_binary;
16
+
17
+ \COPY test_binary FROM ' binary.dat' WITH (FORMAT binary)
18
+
19
+ SELECT hll_cardinality(v1) FROM test_binary;
20
+
21
+ DROP TABLE test_binary;
You can’t perform that action at this time.
0 commit comments