Sie sind auf Seite 1von 5

CREATE DATABASE MODULE UpdateFlightTable

CREATE FUNCTION Main() RETURNS BOOLEAN


BEGIN
-- populate the environment with flight info from the database
SET Environment.Variables =
THE (SELECT T.* FROM Database.XMLFLIGHTTB AS T
WHERE T.FLIGHTDATE = Root.XMLNSC.Reservation.Fli
ghtDetails.FlightDate
AND T.FLIGHTNO = Root.XMLNSC.Reservation.FlightD
etails.FlightNumber);
DECLARE ref REFERENCE TO Root.XMLNSC.Reservation.ListOfPassenger
s.PassengerDetails[1];
-- track the remaining number of seats
SET Environment.Variables.EconomyClassRemain = CAST(Environment.
Variables.TOTALECONOMIC AS INTEGER);
SET Environment.Variables.FirstClassRemain = CAST(Environment.Va
riables.TOTALFIRST AS INTEGER);
-- loop through the request, counting the passengers and checkin
g capacity
SET Environment.Variables.NoPassengers = 0;
WHILE LASTMOVE(ref) DO -- check that the REFERENCE is still vali
d
IF ref.Class = 'F' THEN
IF Environment.Variables.FirstClassRemain >= 1 T
HEN
SET Environment.Variables.FirstClassRema
in = Environment.Variables.FirstClassRemain - 1;
SET Environment.Variables.FIRSTCLASS = E
nvironment.Variables.FIRSTCLASS + 1;
SET Environment.Variables.NoPassengers =
Environment.Variables.NoPassengers + 1;
ELSE
THROW USER EXCEPTION MESSAGE 2949 VALUES
('Number of passengers exceeds capacity');
END IF;
END IF;
IF ref.Class = 'Y' THEN
IF Environment.Variables.EconomyClassRemain >= 1
THEN
SET Environment.Variables.EconomyClassRe
main = Environment.Variables.EconomyClassRemain - 1;
SET Environment.Variables.ECONOMICCLASS
= Environment.Variables.ECONOMICCLASS + 1;
SET Environment.Variables.NoPassengers =
Environment.Variables.NoPassengers + 1;
ELSE
THROW USER EXCEPTION MESSAGE 2949 VALUES
('Number of passengers exceeds capacity');
END IF;
END IF;
MOVE ref NEXTSIBLING REPEAT NAME; -- increment the loop
condition
END WHILE;
-- update the database with the decreased seat availability for
the flight
UPDATE Database.XMLFLIGHTTB AS T
SET ECONOMICCLASS = Environment.Variables.ECONOMICCLASS,
TOTALECONOMIC = Environment.Variables.EconomyCla
ssRemain,
FIRSTCLASS = Environment.Variables.FIRSTCLASS,
TOTALFIRST = Environment.Variables.FirstClassRem
ain
WHERE T.FLIGHTDATE = Root.XMLNSC.Reservation.Fli
ghtDetails.FlightDate
AND T.FLIGHTNO = Root.XMLNSC.Reservation.FlightD
etails.FlightNumber;
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE UpdatePassengerTable
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
DECLARE I INTEGER 1;
DECLARE J INTEGER Environment.Variables.NoPassengers;
DECLARE resno CHARACTER;
WHILE I <= J DO -- loop through the passengers
SET Environment.Variables.RESERVATIONSEQNO = Environment
.Variables.RESERVATIONSEQNO + 1;
-- generate the reservation number (unique)
SET resno = (InputRoot.XMLNSC.Reservation.FlightDetails.
FlightNumber ||
InputRoot.XMLNSC.Reservation.Fl
ightDetails.FlightDate ||
CAST (Environment.Variables.RES
ERVATIONSEQNO AS CHAR));
-- insert a row into the database to track this reservat
io

INSERT INTO Database.XMLPASSENGERTB (LASTNAME, FIRSTNAME


, FLIGHTNO, FLIGHTDATE, CLASSTYPE, RESERVATIONNO)
VALUES(InputRoot.XMLNSC.Reservation.ListOfPassen
gers.PassengerDetails[I].LastName,
InputRoot.XMLNSC.Reservation.ListOfPa
ssengers.PassengerDetails[I].FirstName,
InputRoot.XMLNSC.Reservation.FlightDe
tails.FlightNumber,
InputRoot.XMLNSC.Reservation.FlightDe
tails.FlightDate,
InputRoot.XMLNSC.Reservation.ListOfPa
ssengers.PassengerDetails[I].Class,
resno);
-- report the reservation number in the output message
SET OutputRoot.XMLNSC.Reservation.ListOfPassengers.Passe
ngerDetails[I].ReservationNumber = resno;
SET I = I + 1;
END WHILE;
-- update the sequence number in the database
UPDATE Database.XMLFLIGHTTB AS T
SET RESERVATIONSEQNO = Environment.Variables.RESERVATION
SEQNO;
RETURN TRUE;
END;
END MODULE;
CREATE FILTER MODULE MultipleOrSingleMessage
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
IF Root.XMLNSC.Reservation.Request = 'M' THEN
RETURN TRUE;
END IF;
IF Root.XMLNSC.Reservation.Request = 'S' THEN
RETURN FALSE;
END IF;
RETURN UNKNOWN;
END;
END MODULE;
CREATE COMPUTE MODULE BuildSingleMessage
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.Reservation = NULL;
SET OutputRoot.XMLNSC.PassengerReservationResponse.ListOfConfirm
ations.ClassF.Confirmation[] =
(SELECT X.FirstName, X.LastName AS Surname, X.Reservatio
nNumber
FROM InputRoot.XMLNSC.Reservation.ListOfPassenge
rs.PassengerDetails[] AS X
WHERE UPPER(X.Class) = 'F');
SET OutputRoot.XMLNSC.PassengerReservationResponse.ListOfConfirm
ations.ClassY.Confirmation[] =
(SELECT X.FirstName, X.LastName AS Surname, X.Reservatio
nNumber
FROM InputRoot.XMLNSC.Reservation.ListOfPassenge
rs.PassengerDetails[] AS X
WHERE UPPER(X.Class) = 'Y');
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE PropagateMultipleMessages
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER Environment.Variables.NoPassengers;
WHILE I <= J DO
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.Reservation = NULL;
SET OutputRoot.XMLNSC.PassengerReservationResponse.ListO
fConfirmations.Confirmation =
InputRoot.XMLNSC.Reservation.ListOfPassengers.Pa
ssengerDetails[I];
PROPAGATE;
SET I = I + 1;
END WHILE;
RETURN FALSE; -- returning false stops automatic propagation
END;
END MODULE;
-- ************************************************
-- * ESQL for the XML_PassengerQuery message flow
-- ************************************************
CREATE COMPUTE MODULE DecideOnQuery
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
IF InputRoot.XMLNSC.PassengerQuery.ReservationNumber <> '' THEN
SET OutputLocalEnvironment.Destination.RouterList.Destin
ationData[1].labelname = 'SinglePassenger';
ELSE
SET OutputLocalEnvironment.Destination.RouterList.Destin
ationData[1].labelname = 'AllReservations';
END IF;
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE GetPassengerInformation
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.PassengerQuery = NULL;
-- populate the environment with passenger info from the databas
e
SET Environment.Variables =
THE (SELECT T.* FROM Database.XMLPASSENGERTB AS T
WHERE T.RESERVATIONNO = InputRoot.XMLNSC.Passeng
erQuery.ReservationNumber);
-- populate the output message with info from the database query
CREATE FIELD OutputRoot.XMLNSC.PassengerInfoResponse.PassengerIn
fo;
DECLARE outpass REFERENCE TO OutputRoot.XMLNSC.PassengerInfoResp
onse.PassengerInfo;
SET outpass.ReservationNumber = Environment.Variables.RESERVATIO
NNO;
SET outpass.FirstName = Environment.Variables.FIRSTNAME;
SET outpass.LastName = Environment.Variables.LASTNAME;
SET outpass.FlightNumber = Environment.Variables.FLIGHTNO;
SET outpass.Date = Environment.Variables.FLIGHTDATE;
SET outpass.Class = Environment.Variables.CLASSTYPE;
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE GetReservationsInformation
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.PassengerQuery = NULL;
-- populate the environment with reservations info from the data
base
SET Environment.Variables.Reservation[] =
(SELECT T.* FROM Database.XMLPASSENGERTB AS T
WHERE T.FIRSTNAME = InputRoot.XMLNSC.PassengerQu
ery.FirstName
AND T.LASTNAME = InputRoot.XMLNSC.PassengerQuery
.LastName);
-- populate the output message with info from the database query
CREATE FIELD OutputRoot.XMLNSC.PassengerInfoResponse.ListOfReser
vations;
DECLARE outres REFERENCE TO OutputRoot.XMLNSC.PassengerInfoRespo
nse.ListOfReservations;
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(Environment.Variables.*[]);
WHILE I <= J DO
SET outres.Reservation[I].FlightNumber = Environment.Var
iables.Reservation[I].FLIGHTNO;
SET outres.Reservation[I].Date = Environment.Variables.R
eservation[I].FLIGHTDATE;
SET outres.Reservation[I].Class = Environment.Variables.
Reservation[I].CLASSTYPE;
SET I = I + 1;
END WHILE;
RETURN TRUE;
END;
END MODULE;
-- ************************************************
-- * ESQL for the XML_FlightQuery message flows
-- ************************************************
CREATE COMPUTE MODULE GetFlightDetails
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.FlightQuery = NULL;
CREATE FIELD OutputRoot.XMLNSC.Flight;
DECLARE outflight REFERENCE TO OutputRoot.XMLNSC.Flight;
DECLARE query REFERENCE TO InputRoot.XMLNSC.FlightQuery;
-- populate the output message with flight info from the databas
e
SET OutputRoot.XMLNSC.Flight[] =
(SELECT T.* FROM Database.XMLFLIGHTTB AS T
WHERE T.FLIGHTNO = query.FlightNumber
AND T.FLIGHTDATE = query.FlightDate);
SET outflight.STARTPOINT = TRIM(outflight.STARTPOINT);
SET outflight.ENDPOINT = TRIM(outflight.ENDPOINT);
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE GetPassengerDetails
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.FlightQuery = NULL;
CREATE FIELD OutputRoot.XMLNSC.ListOfPassengers;
DECLARE outpass REFERENCE TO OutputRoot.XMLNSC.ListOfPassengers;
DECLARE query REFERENCE TO InputRoot.XMLNSC.FlightQuery;
-- populate the output message with passenger info from the data
base
SET

Das könnte Ihnen auch gefallen