int TDBVCT::ReadDB(PGLOBAL g) { if (trace) htrc("VCT ReadDB: R%d Mode=%d CurBlk=%d CurNum=%d key=%p link=%p Kindex=%p\n", GetTdb_No(), Mode, Txfp->CurBlk, Txfp->CurNum, To_Key_Col, To_Link, To_Kindex); if (To_Kindex) { /*******************************************************************/ /* Reading is by an index table. */ /*******************************************************************/ int recpos = To_Kindex->Fetch(g); switch (recpos) { case -1: // End of file reached return RC_EF; case -2: // No match for join return RC_NF; case -3: // Same record as last non null one // num_there++; return RC_OK; default: /***************************************************************/ /* Set the file position according to record to read. */ /***************************************************************/ if (SetRecpos(g, recpos)) return RC_FX; } // endswitch recpos } // endif To_Kindex return ReadBuffer(g); } // end of ReadDB
void TDBASE::ResetKindex(PGLOBAL g, PKXBASE kxp) { if (To_Kindex) { int pos = GetRecpos(); // To be reset in Txfp for (PCOL colp= Columns; colp; colp= colp->GetNext()) colp->SetKcol(NULL); To_Kindex->Close(); // Discard old index SetRecpos(g, pos); // Ignore return value } // endif To_Kindex To_Kindex = kxp; } // end of ResetKindex
int TDBXIN::ReadDB(PGLOBAL g) { /*********************************************************************/ /* Now start the pseudo reading process. */ /*********************************************************************/ #if 0 // XIN tables are not indexable if (To_Kindex) { /*******************************************************************/ /* Reading is by an index table. */ /*******************************************************************/ int recpos = To_Kindex->Fetch(g); switch (recpos) { case -1: // End of file reached return RC_EF; case -2: // No match for join return RC_NF; case -3: // Same record as last non null one return RC_OK; default: SetRecpos(g, recpos); } // endswitch recpos } else { #endif // 0 do { if (!Keycur || !*Keycur) { if (!Section) Section = Seclist; else Section += (strlen(Section) + 1); if (*Section) Keycur = GetKeylist(g, Section); else return RC_EF; } else Keycur += (strlen(Keycur) + 1); } while (!*Keycur); N++; //} // endif To_Kindex return RC_OK; } // end of ReadDB /***********************************************************************/ /* WriteDB: Data Base write routine for XIN access methods. */ /***********************************************************************/ int TDBXIN::WriteDB(PGLOBAL g) { // To check that section and key names were given when inserting if (Mode == MODE_INSERT) { Section = NULL; Keycur = NULL; } // endif Mode // Nothing else to do because all was done in WriteColumn return RC_OK; } // end of WriteDB /***********************************************************************/ /* Data Base delete line routine for XIN access methods. */ /***********************************************************************/ int TDBXIN::DeleteDB(PGLOBAL g, int irc) { if (irc == RC_EF) { } else if (irc == RC_FX) { for (Section = Seclist; *Section; Section += (strlen(Section) + 1)) if (!WritePrivateProfileString(Section, NULL, NULL, Ifile)) { sprintf(g->Message, "Error %d accessing %s", GetLastError(), Ifile); return RC_FX; } // endif } else if (!Section) { strcpy(g->Message, MSG(NO_SECTION_NAME)); return RC_FX; } else if (!WritePrivateProfileString(Section, Keycur, NULL, Ifile)) { sprintf(g->Message, "Error %d accessing %s", GetLastError(), Ifile); return RC_FX; } // endif return RC_OK; } // end of DeleteDB // ------------------------ XINCOL functions ---------------------------- /***********************************************************************/ /* XINCOL public constructor. */ /***********************************************************************/ XINCOL::XINCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am) : INICOL(cdp, tdbp, cprec, i, am) { } // end of XINCOL constructor /***********************************************************************/ /* XINCOL constructor used for copying columns. */ /* tdbp is the pointer to the new table descriptor. */ /***********************************************************************/ XINCOL::XINCOL(XINCOL *col1, PTDB tdbp) : INICOL(col1, tdbp) { } // end of XINCOL copy constructor /***********************************************************************/ /* ReadColumn: what this routine does is to access the key buffer set */ /* from the corresponding section, extract from it the key value */ /* corresponding to this column name and convert it to buffer type. */ /***********************************************************************/ void XINCOL::ReadColumn(PGLOBAL g) { PTDBXIN tdbp = (PTDBXIN)To_Tdb; /*********************************************************************/ /* Get the key value from the XIN file. */ /*********************************************************************/ switch (Flag) { case 1: strncpy(Valbuf, tdbp->Section, Long); // Section name Valbuf[Long] = '\0'; break; case 2: strncpy(Valbuf, tdbp->Keycur, Long); // Key name Valbuf[Long] = '\0'; break; default: GetPrivateProfileString(tdbp->Section, tdbp->Keycur, "", Valbuf, Long + 1, tdbp->Ifile); break; } // endswitch Flag Value->SetValue_psz(Valbuf); } // end of ReadColumn