This document contains ESQL code to update flight and passenger tables in a database based on an XML reservation request. It includes modules to:
1) Update the flight table by counting passengers and subtracting available seats
2) Generate unique reservation numbers, insert passenger details into a table, and update the sequence number
3) Decide whether to build a single or multiple response messages
4) Build a single confirmation response or propagate multiple individual responses
5) Query a passenger table by reservation number and build a response
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
91 views
WMB DB
This document contains ESQL code to update flight and passenger tables in a database based on an XML reservation request. It includes modules to:
1) Update the flight table by counting passengers and subtracting available seats
2) Generate unique reservation numbers, insert passenger details into a table, and update the sequence number
3) Decide whether to build a single or multiple response messages
4) Build a single confirmation response or propagate multiple individual responses
5) Query a passenger table by reservation number and build a response
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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