aboutsummaryrefslogtreecommitdiff
path: root/contrib/odbc/odbc-pre7.source
blob: 4fa06c4264d64e8d05c7578966f9ec336f821e8e (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
-- ODBC-pre7.sql
--
-- Use float8 rather than float(15) since pre-7.0 does not accept
-- SQL92 type names of this form in the CREATE FUNCTION command.
--

--
-- Character string manipulation
--

--
-- Compatibility functions for pre-v7.0.
-- These should be applied to pre-v7.0 databases
-- when using the v7.0 ODBC driver.
--

CREATE FUNCTION char_length(text)
    RETURNS integer
    AS 'SELECT length(CAST($1 AS text))'
    LANGUAGE 'SQL';

CREATE FUNCTION pow(float8)
    RETURNS float8
    AS 'SELECT dpow($1)'
    LANGUAGE 'SQL';

--
-- Extensions for ODBC compliance in v7.0.
-- In the current driver, ODBC functions must map directly into a
-- Postgres function. So in some cases we must create a compatible
-- function.
--

CREATE FUNCTION ascii(text)
    RETURNS integer
    AS '_OBJWD_/odbc_DLSUFFIX_', 'ascii'
    LANGUAGE 'C';

CREATE FUNCTION ichar(integer)
    RETURNS char(1)
    AS '_OBJWD_/odbc_DLSUFFIX_', 'ichar'
    LANGUAGE 'C';

CREATE FUNCTION insert(text, integer, integer, text)
    RETURNS text
    AS '_OBJWD_/odbc_DLSUFFIX_', 'insert'
    LANGUAGE 'C';

-- replace all occurences of $2 with $3
CREATE FUNCTION replace(text, text, text)
    RETURNS text
    AS '_OBJWD_/odbc_DLSUFFIX_', 'replace'
    LANGUAGE 'C';

-- return the string repeated n times
CREATE FUNCTION repeat(text, integer)
    RETURNS text
    AS '_OBJWD_/odbc_DLSUFFIX_', 'repeat'
    LANGUAGE 'C';

--
-- Mathematical functions for pre-v7.0
--

CREATE FUNCTION dround(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dround'
    LANGUAGE 'C';

CREATE FUNCTION round(float8)
    RETURNS float8
    AS 'SELECT dround($1)'
    LANGUAGE 'SQL';

--
-- Math functions present in backend, but not in catalog for v7.0
--

CREATE FUNCTION acos(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dacos'
    LANGUAGE 'C';

CREATE FUNCTION asin(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dasin'
    LANGUAGE 'C';

CREATE FUNCTION atan(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'datan'
    LANGUAGE 'C';

CREATE FUNCTION atan2(float8,float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'datan2'
    LANGUAGE 'C';

CREATE FUNCTION cos(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dcos'
    LANGUAGE 'C';

CREATE FUNCTION cot(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dcot'
    LANGUAGE 'C';

CREATE FUNCTION sin(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dsin'
    LANGUAGE 'C';

CREATE FUNCTION dtan(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dtan'
    LANGUAGE 'C';

CREATE FUNCTION degrees(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'degrees'
    LANGUAGE 'C';

CREATE FUNCTION pi()
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'dpi'
    LANGUAGE 'C';

CREATE FUNCTION radians(float8)
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'radians'
    LANGUAGE 'C';

-- random number generator currently requires RAND_MAX be available
CREATE FUNCTION random()
    RETURNS float8
    AS '_OBJWD_/odbc_DLSUFFIX_', 'drandom'
    LANGUAGE 'C';

CREATE FUNCTION truncate(numeric,integer)
    RETURNS numeric
    AS 'SELECT trunc($1, $2)'
    LANGUAGE 'SQL';

--
-- Date/time functions for v7.0
--

CREATE FUNCTION interval_mul(interval,float8)
    RETURNS interval
    AS '_OBJWD_/odbc_DLSUFFIX_'
    LANGUAGE 'C';

CREATE OPERATOR * (
    LEFTARG = interval,
    RIGHTARG = float8,
    PROCEDURE = interval_mul
);