diff --git a/storage/connect/array.cpp b/storage/connect/array.cpp index 6cd175a0f0a..fb8dbfd7869 100644 --- a/storage/connect/array.cpp +++ b/storage/connect/array.cpp @@ -127,6 +127,10 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp) case TYPE_PCHAR: par->AddValue(g, parmp->Value); break; + case TYPE_VOID: + // Integer stored inside pp->Value + par->AddValue(g, (int)parmp->Value); + break; } // endswitch valtyp /*********************************************************************/ @@ -152,14 +156,17 @@ ARRAY::ARRAY(PGLOBAL g, int type, int size, int length, int prec) Xsize = -1; Len = 1; - switch ((Type = type)) { + switch (type) { case TYPE_STRING: Len = length; - break; case TYPE_SHORT: case TYPE_INT: case TYPE_DOUBLE: case TYPE_PCHAR: + Type = type; + break; + case TYPE_VOID: + Type = TYPE_INT; break; #if 0 case TYPE_TOKEN: diff --git a/storage/connect/filamtxt.cpp b/storage/connect/filamtxt.cpp index 8f04cb358d0..a3ca20bbdb4 100644 --- a/storage/connect/filamtxt.cpp +++ b/storage/connect/filamtxt.cpp @@ -282,14 +282,17 @@ bool TXTFAM::AddListValue(PGLOBAL g, int type, void *val, PPARM *top) PPARM pp = (PPARM)PlugSubAlloc(g, NULL, sizeof(PARM)); switch (type) { - case TYPE_INT: - pp->Value = PlugSubAlloc(g, NULL, sizeof(int)); - *((int*)pp->Value) = *((int*)val); - break; - case TYPE_STRING: - pp->Value = PlugSubAlloc(g, NULL, strlen((char*)val) + 1); - strcpy((char*)pp->Value, (char*)val); +// case TYPE_INT: +// pp->Value = PlugSubAlloc(g, NULL, sizeof(int)); +// *((int*)pp->Value) = *((int*)val); +// break; + case TYPE_VOID: + pp->Value = (void*)*(int*)val; break; +// case TYPE_STRING: +// pp->Value = PlugSubAlloc(g, NULL, strlen((char*)val) + 1); +// strcpy((char*)pp->Value, (char*)val); +// break; case TYPE_PCHAR: pp->Value = val; break; @@ -310,18 +313,22 @@ bool TXTFAM::AddListValue(PGLOBAL g, int type, void *val, PPARM *top) int TXTFAM::StoreValues(PGLOBAL g, bool upd) { int pos = GetPos(); - bool rc = AddListValue(g, TYPE_INT, &pos, &To_Pos); + bool rc = AddListValue(g, TYPE_VOID, &pos, &To_Pos); if (!rc) { pos = GetNextPos(); - rc = AddListValue(g, TYPE_INT, &pos, &To_Sos); + rc = AddListValue(g, TYPE_VOID, &pos, &To_Sos); } // endif rc if (upd && !rc) { + char *buf; + if (Tdbp->PrepareWriting(g)) return RC_FX; - rc = AddListValue(g, TYPE_STRING, Tdbp->GetLine(), &To_Upd); + buf = (char*)PlugSubAlloc(g, NULL, strlen(Tdbp->GetLine()) + 1); + strcpy(buf, Tdbp->GetLine()); + rc = AddListValue(g, TYPE_PCHAR, buf, &To_Upd); } // endif upd return rc ? RC_FX : RC_OK; diff --git a/storage/connect/tabvct.h b/storage/connect/tabvct.h index 7e48051a4f9..8ad3c8e21be 100644 --- a/storage/connect/tabvct.h +++ b/storage/connect/tabvct.h @@ -1,124 +1,124 @@ -/*************** TabVct H Declares Source Code File (.H) ***************/ -/* Name: TABVCT.H Version 3.4 */ -/* */ -/* (C) Copyright to the author Olivier BERTRAND 1999-2011 */ -/* */ -/* This file contains the TDBVCT class declares. */ -/***********************************************************************/ -#ifndef __TABVCT__ -#define __TABVCT__ - -#include "tabfix.h" -#if defined(UNIX) -//#include -#endif - -typedef class TDBVCT *PTDBVCT; -typedef class VCTCOL *PVCTCOL; - -/***********************************************************************/ -/* VCT table. */ -/***********************************************************************/ -class DllExport VCTDEF : public DOSDEF { /* Logical table description */ - friend class TDBVCT; - friend class VCTFAM; - friend class VECFAM; - friend class VMPFAM; - public: - // Constructor - VCTDEF(void) {Split = false; Estimate = Header = 0;} - - // Implementation - virtual const char *GetType(void) {return "VCT";} - int GetEstimate(void) {return Estimate;} - - // Methods - virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); - virtual PTDB GetTable(PGLOBAL g, MODE mode); - - protected: - int MakeFnPattern(char *fpat); - - // Members - bool Split; /* Columns in separate files */ - int Estimate; /* Estimated maximum size of table */ - int Header; /* 0: no, 1: separate, 2: in data file */ - }; // end of VCTDEF - -/***********************************************************************/ -/* This is the DOS/UNIX Access Method class declaration for files */ -/* in blocked vector format. In each block containing "Elements" */ -/* records, values of each columns are consecutively stored (vector). */ -/***********************************************************************/ -class DllExport TDBVCT : public TDBFIX { - friend class VCTCOL; - friend class VCTFAM; - friend class VCMFAM; - friend class VECFAM; - friend class VMPFAM; - public: - // Constructors - TDBVCT(PVCTDEF tdp, PTXF txfp); - TDBVCT(PGLOBAL g, PTDBVCT tdbp); - - // Implementation - virtual AMT GetAmType(void) {return TYPE_AM_VCT;} - virtual PTDB Duplicate(PGLOBAL g) - {return (PTDB)new(g) TDBVCT(g, this);} - bool IsSplit(void) {return ((VCTDEF*)To_Def)->Split;} - - // Methods - virtual PTDB CopyOne(PTABS t); +/*************** TabVct H Declares Source Code File (.H) ***************/ +/* Name: TABVCT.H Version 3.4 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 1999-2011 */ +/* */ +/* This file contains the TDBVCT class declares. */ +/***********************************************************************/ +#ifndef __TABVCT__ +#define __TABVCT__ + +#include "tabfix.h" +#if defined(UNIX) +//#include +#endif + +typedef class TDBVCT *PTDBVCT; +typedef class VCTCOL *PVCTCOL; + +/***********************************************************************/ +/* VCT table. */ +/***********************************************************************/ +class DllExport VCTDEF : public DOSDEF { /* Logical table description */ + friend class TDBVCT; + friend class VCTFAM; + friend class VECFAM; + friend class VMPFAM; + public: + // Constructor + VCTDEF(void) {Split = false; Estimate = Header = 0;} + + // Implementation + virtual const char *GetType(void) {return "VCT";} + int GetEstimate(void) {return Estimate;} + + // Methods + virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); + virtual PTDB GetTable(PGLOBAL g, MODE mode); + + protected: + int MakeFnPattern(char *fpat); + + // Members + bool Split; /* Columns in separate files */ + int Estimate; /* Estimated maximum size of table */ + int Header; /* 0: no, 1: separate, 2: in data file */ + }; // end of VCTDEF + +/***********************************************************************/ +/* This is the DOS/UNIX Access Method class declaration for files */ +/* in blocked vector format. In each block containing "Elements" */ +/* records, values of each columns are consecutively stored (vector). */ +/***********************************************************************/ +class DllExport TDBVCT : public TDBFIX { + friend class VCTCOL; + friend class VCTFAM; + friend class VCMFAM; + friend class VECFAM; + friend class VMPFAM; + public: + // Constructors + TDBVCT(PVCTDEF tdp, PTXF txfp); + TDBVCT(PGLOBAL g, PTDBVCT tdbp); + + // Implementation + virtual AMT GetAmType(void) {return TYPE_AM_VCT;} + virtual PTDB Duplicate(PGLOBAL g) + {return (PTDB)new(g) TDBVCT(g, this);} + bool IsSplit(void) {return ((VCTDEF*)To_Def)->Split;} + + // Methods + virtual PTDB CopyOne(PTABS t); virtual bool IsUsingTemp(PGLOBAL g); - - // Database routines - virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); - virtual bool OpenDB(PGLOBAL g); - virtual int ReadDB(PGLOBAL g); - virtual void CloseDB(PGLOBAL g); - - protected: - // Members - }; // end of class TDBVCT - -/***********************************************************************/ -/* Class VCTCOL: VCT access method column descriptor. */ -/* This A.M. is used for file having column wise organization. */ -/***********************************************************************/ -class DllExport VCTCOL : public DOSCOL { - friend class TDBVCT; - friend class VCTFAM; - friend class VCMFAM; - friend class VECFAM; - friend class VMPFAM; - friend class BGVFAM; - public: - // Constructors - VCTCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); - VCTCOL(VCTCOL *colp, PTDB tdbp); // Constructor used in copy process - - // Implementation - virtual int GetAmType(void) {return TYPE_AM_VCT;} - - // Methods - virtual void ReadColumn(PGLOBAL g); - virtual void WriteColumn(PGLOBAL g); - virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); - virtual void SetOk(void); - - protected: - virtual void ReadBlock(PGLOBAL g); - virtual void WriteBlock(PGLOBAL g); - - VCTCOL(void) {} // Default constructor not to be used - - // Members - PVBLK Blk; // Block buffer - int Clen; // Internal length in table - int ColBlk; // Block pointed by column - int ColPos; // Last position read - int Modif; // Number of modified lines in block - }; // end of class VCTCOL - -#endif // __TABVCT__ - + + // Database routines + virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); + virtual bool OpenDB(PGLOBAL g); + virtual int ReadDB(PGLOBAL g); + virtual void CloseDB(PGLOBAL g); + + protected: + // Members + }; // end of class TDBVCT + +/***********************************************************************/ +/* Class VCTCOL: VCT access method column descriptor. */ +/* This A.M. is used for file having column wise organization. */ +/***********************************************************************/ +class DllExport VCTCOL : public DOSCOL { + friend class TDBVCT; + friend class VCTFAM; + friend class VCMFAM; + friend class VECFAM; + friend class VMPFAM; + friend class BGVFAM; + public: + // Constructors + VCTCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); + VCTCOL(VCTCOL *colp, PTDB tdbp); // Constructor used in copy process + + // Implementation + virtual int GetAmType(void) {return TYPE_AM_VCT;} + + // Methods + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); + virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); + virtual void SetOk(void); + + protected: + virtual void ReadBlock(PGLOBAL g); + virtual void WriteBlock(PGLOBAL g); + + VCTCOL(void) {} // Default constructor not to be used + + // Members + PVBLK Blk; // Block buffer + int Clen; // Internal length in table + int ColBlk; // Block pointed by column + int ColPos; // Last position read + int Modif; // Number of modified lines in block + }; // end of class VCTCOL + +#endif // __TABVCT__ +