#include #include #include #include #include #include "dbmcon1.h" #include "dbmcon2.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char dbAlias1[15]; char dbAlias2[15]; char user1[129]; char pswd1[15]; EXEC SQL END DECLARE SECTION; int TwoDbConnectType1(void); int TwoDbConnectType2OnePhaseCommit(void); int TwoDbConnectType2TwoPhaseCommit(void); int is_error(char errString[], struct sqlca *cap) { if(cap->sqlcode < 0) { printf("Greska: %s.\nSQLCODE: %ld\n", errString, cap->sqlcode); exit(EXIT_FAILURE); } return 0; } #define CHECKERR(str) if(is_error(str, &sqlca) != 0) return 1; int main(int argc, char **argv) { int rc = 0; strcpy(dbAlias1, argv[1]); strcpy(dbAlias2, argv[2]); strcpy(user1, argv[3]); strcpy(pswd1, argv[4]); rc = TwoDbConnectType2TwoPhaseCommit(); return 0; } int TwoDbConnectType2TwoPhaseCommit(void) { int rc = 0; struct sqle_conn_setting clientAppInfo[3]; clientAppInfo[0].type = SQL_CONNECT_TYPE; clientAppInfo[0].value = SQL_CONNECT_2; clientAppInfo[1].type = SQL_DISCONNECT; clientAppInfo[1].value = SQL_DISCONNECT_EXPL; clientAppInfo[2].type = SQL_SYNCPOINT; clientAppInfo[2].value = SQL_SYNC_TWOPHASE; /* podesavanje atributa (opcija) konekcije */ sqlesetc(&clientAppInfo[0], 3, &sqlca); CHECKERR("Set client information"); /*sqleqryc(&clientAppInfo[0], 3, &sqlca); CHECKERR("Query client information"); */ printf("\n-----------------------------------------------------------\n"); printf("USE TYPE2 CONNECT TO TWO DATABASES - TWO PHASE COMMIT.\n"); /* rad sa bazama */ printf("\nConnect to %s\n", dbAlias1); EXEC SQL CONNECT TO :dbAlias1 USER :user1 USING :pswd1; CHECKERR("Coneect - prva baza"); rc = FirstDbUpdate(); printf("\nConnect to %s\n", dbAlias2); EXEC SQL CONNECT TO :dbAlias2 USER :user1 USING :pswd1; CHECKERR("Connect - druga baza"); rc = SecondDbInsert(); printf("\nSET CONNECTION %s\n", dbAlias1); EXEC SQL SET CONNECTION :dbAlias1; CHECKERR("Set connection - prva baza"); rc = FirstDbSelect(); printf("\nSET CONNECTION %s\n", dbAlias2); EXEC SQL SET CONNECTION :dbAlias2; CHECKERR("Set connection - druga baza"); rc=SecondDbSelect(); /* Potvrdjivanje izmena */ printf("COMMIT\n"); EXEC SQL COMMIT; CHECKERR("Commit transakcije"); printf("\nDISCONNECT ALL\n"); EXEC SQL DISCONNECT ALL; CHECKERR("all connections -- disconnect"); return 0; } /* TwoDbConnectType2OnePhaseCommit */