home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / interb / InterBase_WI-V6.0-server.exe / server / examples / gpre / stat12.e < prev    next >
Text File  |  2000-06-23  |  4KB  |  147 lines

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *
  4.  *    Description:
  5.  *        This program utilizes the event mechanism for processing
  6.  *        newly entered sales orders.  It initializes an event called
  7.  *        "new_order", and then loops waiting for and processing new
  8.  *        orders as they come in.
  9.  *
  10.  *        When a new sales order is entered, a trigger defined in the
  11.  *        database posts the "new_order" event.  When the program is
  12.  *        notified of the event, it opens the cursor for selecting all
  13.  *        orders with status "new".  For each fetched order, a transaction
  14.  *        is started, which changes the order status from "new" to "open
  15.  *        and takes some action to initiate order processing.  After all
  16.  *        the new orders (if there were more than one) are processed, it
  17.  *        goes back to waiting for new orders.
  18.  *
  19.  *        To trigger the event, while running this program, run stat12t.
  20.  * The contents of this file are subject to the Interbase Public
  21.  * License Version 1.0 (the "License"); you may not use this file
  22.  * except in compliance with the License. You may obtain a copy
  23.  * of the License at http://www.Interbase.com/IPL/
  24.  *
  25.  * Software distributed under the License is distributed on an
  26.  * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
  27.  * or implied. See the License for the specific language governing
  28.  * rights and limitations under the License.
  29.  *
  30.  * The Original Code was created by Interbase Software Corporation
  31.  * and its successors. Portions created by Borland/Inprise are
  32.  * Copyright (C) 1992-1998 and 1999-2000 Borland/Inprise. Portions
  33.  * created by InterBase Software Corporation are Copyright (C)
  34.  * 1998-1999 InterBase Software Corporation.
  35.  *
  36.  * Copyright (C) 2000 InterBase Software Corporation
  37.  * All Rights Reserved.
  38.  * Contributor(s): ______________________________________.
  39.  */
  40.  
  41. #include "example.h"
  42. #include <stdlib.h>
  43.  
  44. int process_order (char *);
  45.  
  46. EXEC SQL
  47.     BEGIN DECLARE SECTION;
  48.  
  49. EXEC SQL
  50.     SET DATABASE empdb = "employee.gdb";
  51.  
  52. long    *t1;
  53. long    *t2;
  54.  
  55. EXEC SQL
  56.     END DECLARE SECTION;
  57.  
  58.  
  59. int main(ARG(int, argc), ARG(char **, argv))
  60. ARGLIST(int argc)
  61. ARGLIST(char **argv)
  62. {
  63.     int    ret = 0;
  64.     BASED_ON sales.po_number pon;
  65.  
  66.     EXEC SQL
  67.         WHENEVER SQLERROR GO TO Error;
  68.  
  69.     EXEC SQL
  70.         CONNECT empdb;
  71.  
  72.     /* Go with read committed to see updates */
  73.     EXEC SQL
  74.         SET TRANSACTION READ COMMITTED;
  75.  
  76.     EXEC SQL
  77.         DECLARE get_order CURSOR FOR
  78.         SELECT po_number
  79.         FROM sales
  80.         WHERE order_status = "new"
  81.         FOR UPDATE OF order_status;
  82.  
  83.     EXEC SQL
  84.         EVENT INIT order_wait empdb ("new_order");
  85.  
  86.     while (!ret)
  87.     {
  88.         printf("\nStat 12 Waiting ...\n\n");
  89.         EXEC SQL
  90.             EVENT WAIT order_wait;
  91.  
  92.         EXEC SQL
  93.             OPEN get_order;
  94.         for (;;)    
  95.         {
  96.             EXEC SQL
  97.                 FETCH get_order INTO :pon;
  98.  
  99.             if (SQLCODE == 100)
  100.                 break;
  101.  
  102.             EXEC SQL
  103.                 UPDATE sales
  104.                 SET order_status = "open"
  105.                 WHERE CURRENT OF get_order;
  106.  
  107.             ret = process_order(pon);
  108.  
  109.         }
  110.         EXEC SQL
  111.             CLOSE get_order;
  112.  
  113.     }
  114.     EXEC SQL 
  115.         COMMIT;
  116.  
  117.     EXEC SQL
  118.         DISCONNECT empdb;
  119.  
  120.     exit(0);
  121. Error:
  122.     isc_print_sqlerror(SQLCODE, gds__status);
  123.     exit(1);
  124. }
  125.  
  126.  
  127. /*
  128.  *    Initiate order processing for a newly received sales order.
  129.  */
  130. int process_order(ARG(char *, pon))
  131. ARGLIST(char * pon)
  132. {
  133.     /*
  134.      *    This function would start a back-ground job, such as
  135.      *    sending the new orders to the printer, or generating
  136.      *    e-mail messages to the appropriate departments.
  137.      */
  138.  
  139.     printf("Stat12:  Received order:  %s\n", pon);
  140.     if (!strncmp(pon, "VNEW4", 5))
  141.     {
  142.         printf ("Stat12: exiting\n");
  143.         return 1;
  144.     }
  145.     return 0;
  146. }
  147.