/
pg_thrift.sql
96 lines (60 loc) · 4.55 KB
/
pg_thrift.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
CREATE EXTENSION pg_thrift;
-- struct (id = 123, phones=["123456", "abcdef"])
SELECT thrift_binary_get_int32(E'\\x0800010000007b0f00020b00000002000000063132333435360000000661626364656600' :: bytea, 1);
SELECT thrift_binary_get_bool(E'\\x0800010000007b0f00020b00000002000000063132333435360000000661626364656600' :: bytea, 1);
SELECT thrift_binary_get_byte(E'\\x0300010000000ce4bda0e5a5bde4b896e7958c00' :: bytea, 1);
-- hello world
SELECT thrift_binary_get_string(E'\\x0b00010000000ce4bda0e5a5bde4b896e7958c00' :: bytea, 1);
-- 1234567890.1234567890
SELECT thrift_binary_get_double(E'\\x04000141d26580b487e6b700' :: bytea, 1);
-- struct (id = 123, phones=["123456", "abcdef"])
SELECT thrift_binary_get_list_bytea(E'\\x0800010000007b0f00020b00000002000000063132333435360000000661626364656600' :: bytea, 2);
SELECT parse_thrift_binary_string(UNNEST(thrift_binary_get_list_bytea(E'\\x0800010000007b0f00020b00000002000000063132333435360000000661626364656600' :: bytea, 2)));
-- struct (id = true)
SELECT thrift_compact_get_bool(E'\\x1100' :: bytea, 1);
-- struct (id = false)
SELECT thrift_compact_get_bool(E'\\x1200' :: bytea, 1);
-- struct (id = 123, phones=["123456", "abcdef"])
SELECT thrift_compact_get_int16(E'\\x14f6011928063132333435360661626364656600' :: bytea, 1);
-- struct (id = 123, phones=["123456", "abcdef"])
SELECT thrift_compact_get_int32(E'\\x15f6011928063132333435360661626364656600' :: bytea, 1);
-- struct (id = 123, phones=["123456", "abcdef"])
SELECT thrift_compact_get_int64(E'\\x16f6011928063132333435360661626364656600' :: bytea, 1);
-- 你好世界
SELECT thrift_compact_get_byte(E'\\x1318e4bda0e5a5bde4b896e7958c00' :: bytea, 1);
-- 你好世界
SELECT thrift_compact_get_string(E'\\x1818e4bda0e5a5bde4b896e7958c00' :: bytea, 1);
-- 1234567890.1234567890
SELECT thrift_compact_get_double(E'\\x1741d26580b487e6b700' :: bytea, 1);
-- [1, 2, 3, 4, 5]
SELECT parse_thrift_compact_int16(UNNEST(thrift_compact_get_list_bytea(E'\\x1956020406080a00' :: bytea, 1)));
-- [1, 2, 3, 4, 5]
SELECT parse_thrift_compact_int32(UNNEST(thrift_compact_get_set_bytea(E'\\x1a58020406080a00' :: bytea, 1)));
-- {'a' : 2}
SELECT parse_thrift_compact_string((thrift_compact_get_map_bytea(E'\\x1b02b602610400' :: bytea, 1))[1]);
-- {'a' : 2}
SELECT parse_thrift_compact_int16((thrift_compact_get_map_bytea(E'\\x1b02b602610400' :: bytea, 1))[2]);
-- struct(id=123, phones=["123456", "abcdef"])
SELECT parse_thrift_compact_string(UNNEST(thrift_compact_get_list_bytea(E'\\x15f601192b0c3132333435360c61626364656600', 2)));
-- struct(id=123, phones=["123456", "abcdef"])
-- struct(id=456, phones=["123456", "abcdef"])
-- struct(id=123, items=[item1, item2])
SELECT parse_thrift_compact_string(UNNEST(thrift_compact_get_list_bytea(UNNEST(thrift_compact_get_list_bytea(E'\\x15f601192c15f601192b0c3132333435360c61626364656600159007192b0c3132333435360c6162636465660000', 2)), 2)));
-- struct1 (id = 123, phones=["123456", "abcdef"])
-- struct2 (id = 123, phones=["123456", "abcdef"])
-- struct (id = 123, phones=[struct1, struct2])
SELECT parse_thrift_binary_string(UNNEST(thrift_binary_get_list_bytea(UNNEST(thrift_binary_get_list_bytea(E'\\x0800010000007b0f00020c000000020800010000007b0f00020b000000020000000631323334353600000006616263646566000800010000007b0f00020b0000000200000006313233343536000000066162636465660000' :: bytea, 2)), 2)));
SELECT thrift_binary_in('{"type" : "bool", "value" : 1}');
SELECT thrift_binary_in('{"type" : "int16", "value" : 60}');
SELECT thrift_binary_in('{"type" : "int32", "value" : 123}');
SELECT thrift_binary_in('{"type" : "int64", "value" : 123456789}');
SELECT thrift_binary_in('{"type":"double", "value" :123456.789}');
SELECT thrift_binary_in('{"type": "string", "value" : "hello world!"}');
SELECT thrift_binary_in('{"type" : "byte", "value" : "1212"}');
SELECT thrift_binary_in('{"type": "list", "value": [{"type":"int32", "value":1}, {"type":"int32", "value":2}]}');
SELECT thrift_binary_in('{"type": "set", "value": [{"type":"int32", "value":3000}, {"type":"int32", "value":4000}]}');
SELECT thrift_binary_in('{"type": "map", "value": [{"type":"int32", "value":3000}, {"type":"string", "value":"hello world"}, {"type":"int32", "value":123}, {"type":"string", "value":"nice"}]}');
SELECT thrift_binary_in('{"type": "struct", "value": {"id": {"type": "int32", "value": 123}, "phones":{"type": "list", "value":[{"type": "string", "value":"12345"}, {"type": "string", "value": "abcdef"}]}}}');
SELECT get_thrift_binary_type(thrift_binary_in('{"type" : "int32", "value" : 123}'));
SELECT get_thrift_binary_value(thrift_binary_in('{"type" : "bool", "value" : 1}'));
DROP EXTENSION pg_thrift;