-
Notifications
You must be signed in to change notification settings - Fork 0
/
knx.sql
96 lines (84 loc) · 2.96 KB
/
knx.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
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION knx" to load this file. \quit
--
-- Input and output functions and data types:
--
---------------------------------------------------
-- Level 3
CREATE FUNCTION knx_ga3_in(cstring)
RETURNS knx_group_address3
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE FUNCTION knx_ga3_out(knx_group_address3)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE TYPE knx_group_address3 (
INPUT = knx_ga3_in,
OUTPUT = knx_ga3_out,
INTERNALLENGTH = 2,
PASSEDBYVALUE,
ALIGNMENT = int2
);
COMMENT ON TYPE knx_group_address3
IS 'KNX Group Address Level 3';
CREATE FUNCTION int2ga3(integer) RETURNS knx_group_address3 IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'int_to_knx_addr';
CREATE CAST (integer AS knx_group_address3) WITH FUNCTION int2ga3(integer) AS IMPLICIT;
CREATE FUNCTION ga32int(knx_group_address3) RETURNS integer IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'knx_addr_to_int';
CREATE CAST (knx_group_address3 AS integer) WITH FUNCTION ga32int(knx_group_address3) AS IMPLICIT;
-- Level 2
CREATE FUNCTION knx_ga2_in(cstring)
RETURNS knx_group_address2
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE FUNCTION knx_ga2_out(knx_group_address2)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE TYPE knx_group_address2 (
INPUT = knx_ga2_in,
OUTPUT = knx_ga2_out,
INTERNALLENGTH = 2,
PASSEDBYVALUE,
ALIGNMENT = int2
);
COMMENT ON TYPE knx_group_address2
IS 'KNX Group Address Level 2';
CREATE FUNCTION int2ga2(integer) RETURNS knx_group_address2 IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'int_to_knx_addr';
CREATE CAST (integer AS knx_group_address2) WITH FUNCTION int2ga2(integer) AS IMPLICIT;
CREATE FUNCTION ga32int(knx_group_address2) RETURNS integer IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'knx_addr_to_int';
CREATE CAST (knx_group_address2 AS integer) WITH FUNCTION ga32int(knx_group_address2) AS IMPLICIT;
-- Individual
CREATE FUNCTION knx_ia_in(cstring)
RETURNS knx_individual_address
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE FUNCTION knx_ia_out(knx_individual_address)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C
IMMUTABLE STRICT
PARALLEL SAFE;
CREATE TYPE knx_individual_address (
INPUT = knx_ia_in,
OUTPUT = knx_ia_out,
INTERNALLENGTH = 2,
PASSEDBYVALUE,
ALIGNMENT = int2
);
COMMENT ON TYPE knx_individual_address
IS 'KNX Individual Address';
CREATE FUNCTION int2ia(integer) RETURNS knx_individual_address IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'int_to_knx_addr';
CREATE CAST (integer AS knx_individual_address) WITH FUNCTION int2ia(integer) AS IMPLICIT;
CREATE FUNCTION ga32int(knx_individual_address) RETURNS integer IMMUTABLE STRICT LANGUAGE C AS '$libdir/knx', 'knx_addr_to_int';
CREATE CAST (knx_individual_address AS integer) WITH FUNCTION ga32int(knx_individual_address) AS IMPLICIT;