CIS 671, Winter 2002 |
---|
Homework 6: Object-Relational Database Systems - SQL3 Abstract Data Types (ADT's) *
Solutions Corrected 3/12/02. :variable-name is now used consistently. |
---|
create type PC(
processorSpeed integer,
RAM integer,
hardDiskDrive integer,
CDspeed integer,
price float,
equals equalPC,
less than ltPC
);
function newPC( :ps integer,
:r integer,
:hd integer,
:cd integer,
:p float)
returns PC;
:npc PC; /* declare local variable */
begin
:npc := PC();
:npc.processorSpeed := :ps;
:npc.RAM := :r;
:npc.hardDiskDrive := hd;
:npc.CDspeed := :cd;
:npc.price := :p
return :npc;
end;
function value( :pc PC)
returns float;
:v float; /* declare local variable */
begin
:v := :pc.processorSpeed + 4 * :pc.RAM + 40 * :pc.hardDiskDrive
+ 10 * :pc.CDspeed
return :v;
end;
function better( :pc PC)
returns PC;
:bpc PC; /* declare local variable */
begin
:bpc := newPC(
:pc.processorSpeed*2 ,
:pc.RAM*2 ,
:pc.hardDiskDrive*2 ,
:pc.CDspeed*2 ,
:pc.price
);
return :bpc;
end;
function equalPC( :pc1 PC, :pc2 PC)
returns boolean;
begin
return( (:pc1.processorSpeed := :pc2.processorSpeed) AND
(:pc1.RAM := :pc2.RAM) AND
(:pc1.hardDiskDrive := :pc2.hardDiskDrive) )
END
function ltPC( :pc1 PC, :pc2 PC)
returns boolean;
begin
return( value(:pc1) < value(:pc2) )
END
(*) Adapted from Ullman & Widom, A First Course in Database Systems, Prentice-Hall, 1997, pp. 456-457.