Приложение 9. Пример работы с двумя ядрами СУБД

#include "inter.h"
#if defined(VXWORKS)
#include "vxstart.h"
#endif

static void PrintErrorAndCloseChannel(TCBL * pCBL);
#if defined(VXWORKS)
 MainStart(c_select, 1024 * 32, UninitLinterClient)
#else
 int main()
#endif

    {
char name[] = "SYSTEM/MANAGER8";
int Count;
TCBL Cbl;
printf("\n*** Table b must be created in one database ***\n");
memset(&Cbl, 0, sizeof(TCBL));
printf("Open channel to default mbx\n");
Cbl.PrzExe &= ~(M_OPTIMISTIC | M_SHARE | M_EXCLUSIVE); /* Autocommit */
memcpy(Cbl.Command, "OPEN", 4);
inter(&Cbl, name, NULL, NULL, NULL);
    if if (Cbl.CodErr)
        {PrintErrorAndCloseChannel(&Cbl);
return 1;
}
    Cbl.LnBufRow = sizeof(Count);
memcpy(Cbl.Command, "SLCT", 4);
inter(&Cbl, NULL, "SELECT count(*) from b;", NULL, &Count);
    If (Cbl.CodErr)
        { PrintErrorAndCloseChannel(&Cbl);}
    printf("Close channel\n");
memcpy(Cbl.Command, "CLOS", 4);
inter(&Cbl, NULL, NULL, NULL, NULL);


setenv("LINTER_MBX", "1254", 1);
inter_control(&Cbl, ICR_REREAD_ENV, NULL, 0);
memset(&Cbl, 0, sizeof(TCBL));
printf("Open channel to mbx 1254 \n");
Cbl.PrzExe &= ~(M_OPTIMISTIC | M_SHARE | M_EXCLUSIVE); /* Autocommit */
memcpy(Cbl.Command, "OPEN", 4);
inter(&Cbl, name, NULL, NULL, NULL);
    if (Cbl.CodErr)
        { PrintErrorAndCloseChannel(&Cbl);
return 1;
}
    Cbl.LnBufRow = sizeof(Count);
memcpy(Cbl.Command, "SLCT", 4);
inter(&Cbl, NULL, "SELECT count(*) from b;", NULL, &Count);
    if (Cbl.CodErr)
        { PrintErrorAndCloseChannel(&Cbl); }
    printf("Close channel\n");
memcpy(Cbl.Command, "CLOS", 4);
inter(&Cbl, NULL, NULL, NULL, NULL);
printf("done\n");
printf("\nEnd of work.\n");
return 0;
}
void PrintErrorAndCloseChannel(TCBL * pCBL)
    {
printf("\n");
if (strncmp(pCBL- >Node, " ", MAX_NODE_LEN) != 0 && *pCBL- >Node != 0)
        printf("* Linter server < %.8s >\n", pCBL- >Node);
        printf("* Channel N %d\n", pCBL- >NumChan);
printf("* Command [%.4s]\n", pCBL- >Command);
printf("* Linter error: %ld\n", pCBL- >CodErr);
    if (pCBL- >CodErr  >= 2000 && pCBL- >CodErr <  3000)
        fprintf(stderr, " Line %hd position %hd\n", ((L_WORD *) (&pCBL- >SysErr))[0], ((L_WORD *) (&pCBL- >SysErr))[1]);
    else if (pCBL- >SysErr)
        printf("* System error: %ld\n", pCBL- >SysErr);
        memcpy(pCBL- >Command, "CLOS", 4);
    /* Close channel */
inter(pCBL, NULL, NULL, NULL, NULL);
}