summaryrefslogtreecommitdiff
path: root/contrib/lo/lo.sql.in
blob: f043363301ff1c6dc202689c0e7624ac4a23f7bb (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
--
--	PostgreSQL code for LargeObjects
--
--	$Id: lo.sql.in,v 1.10 2003/05/14 03:25:56 tgl Exp $
--
--
--	Create the data type
--

-- used by the lo type, it takes an oid and returns an lo object

-- Adjust this setting to control where the objects get created.
SET search_path = public;

CREATE FUNCTION lo_in(cstring)
RETURNS lo
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE;

-- used by the lo type, it returns the oid of the object
CREATE FUNCTION lo_out(lo)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE;

-- finally the type itself
CREATE TYPE lo (
	INTERNALLENGTH = 4,
	EXTERNALLENGTH = variable,
	INPUT = lo_in,
	OUTPUT = lo_out
);

-- this returns the oid associated with a lo object
CREATE FUNCTION lo_oid(lo)
RETURNS oid
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE;

-- same function, named to allow it to be used as a type coercion, eg:
--    CREATE TABLE a (image lo);
--    SELECT image::oid FROM a;
--
CREATE FUNCTION oid(lo)
RETURNS oid
AS 'MODULE_PATHNAME', 'lo_oid'
LANGUAGE 'C' IMMUTABLE;
CREATE CAST (lo as oid) WITH FUNCTION oid(lo) AS IMPLICIT;

-- this allows us to convert an oid to a managed lo object
-- ie: insert into test values (lo_import('/fullpath/file')::lo);
CREATE FUNCTION lo(oid)
RETURNS lo
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE;
CREATE CAST (oid as lo) WITH FUNCTION lo(oid) AS IMPLICIT;

-- This is used in triggers
CREATE FUNCTION lo_manage()
RETURNS trigger
AS 'MODULE_PATHNAME'
LANGUAGE 'C';