Steg 1: Definer datatypen og input- og output-funksjoner i C.
Se på koden her
Steg 2: Kompiler koden som shared object.
gcc -L/usr/lib/pgsql -I/usr/include/pgsql/server -lpq -lm -shared -o rettvinklaTrekant.so rettvinklaTrekant.c
Steg 3: Opprett funksjonene, datatypen og en testtabell i psql
CREATE FUNCTION rvt_in(cstring)
RETURNS rettvinklaTrekant
AS '/home/ansatte/elinkaan/moddb/rettvinklaTrekant.so'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION rvt_out(rettvinklaTrekant)
RETURNS cstring
AS '/home/ansatte/elinkaan/moddb/rettvinklaTrekant.so'
LANGUAGE C IMMUTABLE STRICT;
CREATE TYPE rettvinklaTrekant (
internallength = 24,
input = rvt_in,
output = rvt_out,
alignment = double
);
CREATE TABLE test_rvt (
id int not null,
r1 rettvinklaTrekant,
primary key(id)
);
Steg 4: Legg inn testdata for å sjekke at alt er ok
INSERT INTO test_rvt VALUES (1, '( 3.0, 4.0, 5.0 )'); INSERT 4948356 1 INSERT INTO test_rvt VALUES (2, '( -3.0, 4.0, 5.0 )'); INSERT 4948357 1 INSERT INTO test_rvt VALUES (3, '( 3.0, -4.0, 5.0 )'); INSERT 4948358 1 INSERT INTO test_rvt VALUES (4, '( 3.0, 4.0, -5.0 )'); INSERT 4948359 1 INSERT INTO test_rvt VALUES (5, '( 3.0, -4.0, -5.0 )'); ERROR: rvt_in: det er kun en av sidene som kan være ukjent INSERT INTO test_rvt VALUES (6, '( 2.1, 3.2, hva )'); ERROR: rvt_in: error in parsing "( 2.1, 3.2, hva )" INSERT INTO test_rvt VALUES (6, '( 3.0, 4.0, 6.0 )'); ERROR: rvt_in: du har tastet inn feil data, hypotenusen er 5.000000, ikke 6.000000 SELECT * FROM test_rvt; id | r1 ----+--------- 1 | (3,4,5) 2 | (3,4,5) 3 | (3,4,5) 4 | (3,4,5) (4 rows)
Steg 5: Rydd opp etter deg
drop table test_rvt; drop type rettvinklaTrekant CASCADE;