この関数は、GLOPセットをマッピングし、GLOPデータを読み取ります。
/********** File: glop_map1.c **********/ #define SQL_TEXT Latin_Text #include <sqltypes_td.h> #include <string.h> #include <stdlib.h> #define IsNull -1 #define IsNotNull 0 #define LOOPSIZE 20 /*************************************************************/ /* Function to read GLOP data for the given record_n number. */ /*************************************************************/ struct Company { INTEGER deptid; char deptname[30]; }; struct Company_Info { struct Company Dept[LOOPSIZE]; }*COMPANY_DETAILS; void glop_map1( INTEGER *record_n, VARCHAR_LATIN *Deptname1, INTEGER *record_nIsNull, INTEGER *Deptname1IsNull, char sqlstate[6], SQL_TEXT extname[129], SQL_TEXT specific_name[129], SQL_TEXT error_message[257] ) { int glop_stat, MAP_ADD; int i; GLOP_Map_t *MyGLOP; if (*record_nIsNull == IsNull) { strcpy(sqlstate, "22004") ; strcpy((char *) error_message, "Null value not allowed.") ; *Deptname1IsNull = IsNull; return; } strcpy((char *) error_message, " "); *Deptname1IsNull = IsNotNull; MAP_ADD = 0; // Use the first GLOP section of the GLOP set. i = *record_n; glop_stat = FNC_Get_GLOP_Map(&MyGLOP); // Check whether mapping is established or not if (glop_stat) { if (glop_stat == -1) strcpy((char*)error_message, "Map not set up. Exceeded GLOP data mapping limits."); else if (glop_stat == -2) strcpy((char*)error_message, "Not member of GLOP set or no rows in GLOP tables."); strcpy(sqlstate,"U0001"); return; } // Check whether specified row for the GLOP exists or not if (MyGLOP->GLOP[MAP_ADD].GLOP_ptr == NULL) { strcpy((char*)error_message,"Map does not exist at index 0."); strcpy(sqlstate,"U0002"); return; } if (MyGLOP->GLOP[MAP_ADD].size == 0) { strcpy((char*)error_message,"Nothing is mapped."); strcpy(sqlstate,"22023"); return; } // Assign the mapped address of GLOP data to the structure. COMPANY_DETAILS = MyGLOP->GLOP[MAP_ADD].GLOP_ptr; // Read the data. strcpy(Deptname1,COMPANY_DETAILS->Dept[i].deptname); }