delphimvcframework/unittests/general/Several/bin/firebird/examples/stat/stat12.e

142 lines
3.1 KiB
Plaintext
Raw Normal View History

/*
* Program type: Embedded Static SQL
*
* Description:
* This program utilizes the event mechanism for processing
* newly entered sales orders. It initializes an event called
* "new_order", and then loops waiting for and processing new
* orders as they come in.
*
* When a new sales order is entered, a trigger defined in the
* database posts the "new_order" event. When the program is
* notified of the event, it opens the cursor for selecting all
* orders with status "new". For each fetched order, a transaction
* is started, which changes the order status from "new" to "open
* and takes some action to initiate order processing. After all
* the new orders (if there were more than one) are processed, it
* goes back to waiting for new orders.
*
* To trigger the event, while running this program, run stat12t.
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
#include "example.h"
#include <stdlib.h>
int process_order (char *);
EXEC SQL
BEGIN DECLARE SECTION;
EXEC SQL
SET DATABASE empdb = "employee.fdb";
long *t1;
long *t2;
EXEC SQL
END DECLARE SECTION;
int main(int argc, char** argv)
{
int ret = 0;
BASED_ON sales.po_number pon;
EXEC SQL
WHENEVER SQLERROR GO TO Error;
EXEC SQL
CONNECT empdb;
/* Go with read committed to see updates */
EXEC SQL
SET TRANSACTION READ COMMITTED;
EXEC SQL
DECLARE get_order CURSOR FOR
SELECT po_number
FROM sales
WHERE order_status = "new"
FOR UPDATE OF order_status;
EXEC SQL
EVENT INIT order_wait empdb ("new_order");
while (!ret)
{
printf("\nStat 12 Waiting ...\n\n");
EXEC SQL
EVENT WAIT order_wait;
EXEC SQL
OPEN get_order;
for (;;)
{
EXEC SQL
FETCH get_order INTO :pon;
if (SQLCODE == 100)
break;
EXEC SQL
UPDATE sales
SET order_status = "open"
WHERE CURRENT OF get_order;
ret = process_order(pon);
}
EXEC SQL
CLOSE get_order;
}
EXEC SQL
COMMIT;
EXEC SQL
DISCONNECT empdb;
exit(0);
Error:
isc_print_sqlerror(SQLCODE, gds__status);
exit(1);
}
/*
* Initiate order processing for a newly received sales order.
*/
int process_order(char* pon)
{
/*
* This function would start a back-ground job, such as
* sending the new orders to the printer, or generating
* e-mail messages to the appropriate departments.
*/
printf("Stat12: Received order: %s\n", pon);
if (!strncmp(pon, "VNEW4", 5))
{
printf ("Stat12: exiting\n");
return 1;
}
return 0;
}