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;