mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
0219ac1e98
have been created by the last addition of new CONNECT features. The version previous to this one is a preliminary test version and should not be distributed. - Handle indexed UPDATE/DELETE. Previously this was just tested and an error message send when it could not be done. Now CONNECT can do it in all the cases. It is done by a MRR like tchnique by making a list of all update or delete to do, sort them, then execute them. modified: storage/connect/array.cpp storage/connect/array.h storage/connect/filamap.cpp storage/connect/filamap.h storage/connect/filamdbf.cpp storage/connect/filamfix.cpp storage/connect/filamfix.h storage/connect/filamtxt.cpp storage/connect/filamtxt.h storage/connect/filamvct.cpp storage/connect/filamvct.h storage/connect/filamzip.cpp storage/connect/filamzip.h storage/connect/global.h storage/connect/ha_connect.cc storage/connect/ha_connect.h - Differenciate Cardinality that returns a true or estimated table size and GetMaxSize that return a value equal or greater than the table row number. This fixes the errors of non matching opt files. modified: storage/connect/connect.cc storage/connect/tabdos.cpp storage/connect/tabdos.h storage/connect/tabfix.cpp storage/connect/table.cpp storage/connect/tabmac.h storage/connect/tabmysql.cpp storage/connect/tabmysql.h storage/connect/tabodbc.cpp storage/connect/tabodbc.h storage/connect/tabpivot.h storage/connect/tabtbl.cpp storage/connect/tabtbl.h storage/connect/tabutil.cpp storage/connect/tabutil.h storage/connect/tabwmi.h storage/connect/xtable.h - Fix some errors and issues when making index and opt files. Erase opt and index files for void tables. Fix wrong calculation of Block and Last in MakeBlockValues. Invalidate indexes before making opt file. Fully handle blocked variable tables. Make opt file for blocked variable tables even when they have no optimised colums. modified: storage/connect/tabdos.cpp storage/connect/xindex.h - Fix some errors making index Return an error when the allocation is too small (should not really occur now that GetMaxSize is sure) Don't use XXROW index for DBF tables because of soft deleted lines. modified: storage/connect/xindex.cpp - Typo modified: storage/connect/macutil.cpp storage/connect/tabdos.h storage/connect/tabsys.cpp storage/connect/tabsys.h
256 lines
9.4 KiB
C++
256 lines
9.4 KiB
C++
/************** FilAMVct H Declares Source Code File (.H) **************/
|
|
/* Name: FILAMVCT.H Version 1.5 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2012 */
|
|
/* */
|
|
/* This file contains the VCT file access method classes declares. */
|
|
/***********************************************************************/
|
|
#ifndef __FILAMVCT__
|
|
#define __FILAMVCT__
|
|
|
|
#include "filamfix.h"
|
|
|
|
typedef class VCTFAM *PVCTFAM;
|
|
typedef class VCTCOL *PVCTCOL;
|
|
typedef class VCMFAM *PVCMFAM;
|
|
typedef class VECFAM *PVECFAM;
|
|
typedef class VMPFAM *PVMPFAM;
|
|
typedef class BGVFAM *PBGVFAM;
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* in vector format. If MaxBlk=0, each block containing "Elements" */
|
|
/* records, values of each columns are consecutively stored (vector). */
|
|
/* Otherwise, data is arranged by column in the file and MaxBlk is */
|
|
/* used to set the maximum number of blocks. This leave some white */
|
|
/* space allowing to insert new values up to this maximum size. */
|
|
/***********************************************************************/
|
|
class DllExport VCTFAM : public FIXFAM {
|
|
friend class TDBVCT;
|
|
friend class VCTCOL;
|
|
public:
|
|
// Constructor
|
|
VCTFAM(PVCTDEF tdp);
|
|
VCTFAM(PVCTFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_VCT;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) VCTFAM(this);}
|
|
virtual int GetFileLength(PGLOBAL g);
|
|
|
|
// Methods
|
|
virtual void Reset(void);
|
|
virtual int MaxBlkSize(PGLOBAL g, int s);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual bool InitInsert(PGLOBAL g);
|
|
virtual void ResetBuffer(PGLOBAL g) {}
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int GetRowID(void);
|
|
|
|
// Database routines
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
virtual void Rewind(void);
|
|
|
|
// Specific functions
|
|
virtual bool ReadBlock(PGLOBAL g, PVCTCOL colp);
|
|
virtual bool WriteBlock(PGLOBAL g, PVCTCOL colp);
|
|
|
|
protected:
|
|
virtual bool MakeEmptyFile(PGLOBAL g, char *fn);
|
|
virtual bool OpenTempFile(PGLOBAL g);
|
|
virtual bool MoveLines(PGLOBAL g) {return false;}
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b = NULL);
|
|
virtual bool CleanUnusedSpace(PGLOBAL g);
|
|
virtual bool MakeDeletedFile(PGLOBAL g);
|
|
virtual int GetBlockInfo(PGLOBAL g);
|
|
virtual bool SetBlockInfo(PGLOBAL g);
|
|
bool ResetTableSize(PGLOBAL g, int block, int last);
|
|
|
|
// Members
|
|
char *NewBlock; // To block written on Insert
|
|
char *Colfn; // Pattern for column file names (VEC)
|
|
char *Tempat; // Pattern for temp file names (VEC)
|
|
int *Clens; // Pointer to col size array
|
|
int *Deplac; // Pointer to col start position array
|
|
bool *Isnum; // Pointer to buffer type isnum result
|
|
bool AddBlock; // True when adding new blocks on Insert
|
|
bool Split; // true: split column file vector format
|
|
int Header; // 0: no, 1: separate, 2: in data file
|
|
int MaxBlk; // Max number of blocks (True vector format)
|
|
int Bsize; // Because Nrec can be modified
|
|
int Ncol; // The number of columns;
|
|
}; // end of class VCTFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* in vector format accessed using file mapping. */
|
|
/***********************************************************************/
|
|
class DllExport VCMFAM : public VCTFAM {
|
|
friend class TDBVCT;
|
|
friend class VCTCOL;
|
|
public:
|
|
// Constructor
|
|
VCMFAM(PVCTDEF tdp);
|
|
VCMFAM(PVCMFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_VMP;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) VCMFAM(this);}
|
|
|
|
// Methods
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual bool InitInsert(PGLOBAL g);
|
|
|
|
// Database routines
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
|
|
protected:
|
|
// Specific functions
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b = NULL);
|
|
virtual bool MakeDeletedFile(PGLOBAL g);
|
|
virtual bool ReadBlock(PGLOBAL g, PVCTCOL colp);
|
|
virtual bool WriteBlock(PGLOBAL g, PVCTCOL colp);
|
|
|
|
// Members
|
|
char* Memory; // Pointer on file mapping view.
|
|
char* *Memcol; // Pointer on column start.
|
|
}; // end of class VCMFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* in full vertical format. Each column is contained in a separate */
|
|
/* file whose name is the table name followed by the column number. */
|
|
/***********************************************************************/
|
|
class DllExport VECFAM : public VCTFAM {
|
|
friend class TDBVCT;
|
|
friend class VCTCOL;
|
|
public:
|
|
// Constructor
|
|
VECFAM(PVCTDEF tdp);
|
|
VECFAM(PVECFAM txfp);
|
|
|
|
// Implementation
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) VECFAM(this);}
|
|
|
|
// Methods
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual bool InitInsert(PGLOBAL g);
|
|
virtual void ResetBuffer(PGLOBAL g);
|
|
|
|
// Database routines
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
|
|
// Specific functions
|
|
virtual bool ReadBlock(PGLOBAL g, PVCTCOL colp);
|
|
virtual bool WriteBlock(PGLOBAL g, PVCTCOL colp);
|
|
|
|
protected:
|
|
virtual bool OpenTempFile(PGLOBAL g);
|
|
virtual bool MoveLines(PGLOBAL g);
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b = NULL);
|
|
virtual int RenameTempFile(PGLOBAL g);
|
|
virtual bool MakeDeletedFile(PGLOBAL g);
|
|
bool OpenColumnFile(PGLOBAL g, char *opmode, int i);
|
|
|
|
// Members
|
|
FILE* *Streams; // Points to Dos file structure array
|
|
FILE* *T_Streams; // Points to temp file structure array
|
|
PFBLOCK *To_Fbs; // Pointer to file block array
|
|
PFBLOCK *T_Fbs; // Pointer to temp file block array
|
|
void* *To_Bufs; // Pointer to col val block array
|
|
bool InitUpdate; // Used to initialize updating
|
|
}; // end of class VECFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* in full vertical format accessed using file mapping. */
|
|
/***********************************************************************/
|
|
class DllExport VMPFAM : public VCMFAM {
|
|
friend class TDBVCT;
|
|
friend class VCTCOL;
|
|
public:
|
|
// Constructor
|
|
VMPFAM(PVCTDEF tdp);
|
|
VMPFAM(PVMPFAM txfp);
|
|
|
|
// Implementation
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) VMPFAM(this);}
|
|
|
|
// Methods
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
|
|
// Database routines
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
|
|
protected:
|
|
virtual bool MakeDeletedFile(PGLOBAL g);
|
|
bool MapColumnFile(PGLOBAL g, MODE mode, int i);
|
|
|
|
// Members
|
|
PFBLOCK *To_Fbs; // Pointer to file block array
|
|
}; // end of class VMPFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* in (possibly blocked) vector format that can be larger than 2GB. */
|
|
/***********************************************************************/
|
|
class BGVFAM : public VCTFAM {
|
|
friend class VCTCOL;
|
|
public:
|
|
// Constructors
|
|
BGVFAM(PVCTDEF tdp);
|
|
BGVFAM(PBGVFAM txfp);
|
|
|
|
// Implementation
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) BGVFAM(this);}
|
|
|
|
// Methods
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
|
|
// Database routines
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
virtual void Rewind(void);
|
|
|
|
// Specific functions
|
|
virtual bool ReadBlock(PGLOBAL g, PVCTCOL colp);
|
|
virtual bool WriteBlock(PGLOBAL g, PVCTCOL colp);
|
|
|
|
protected:
|
|
bool BigSeek(PGLOBAL g, HANDLE h, BIGINT pos, bool b = false);
|
|
bool BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req);
|
|
bool BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req);
|
|
virtual bool MakeEmptyFile(PGLOBAL g, char *fn);
|
|
virtual bool OpenTempFile(PGLOBAL g);
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b = NULL);
|
|
virtual bool CleanUnusedSpace(PGLOBAL g);
|
|
virtual bool SetBlockInfo(PGLOBAL g);
|
|
virtual int GetBlockInfo(PGLOBAL g);
|
|
|
|
// Members
|
|
HANDLE Hfile; // Handle to big file
|
|
HANDLE Tfile; // Handle to temporary file
|
|
BIGINT *BigDep; // Pointer to col start position array
|
|
}; // end of class BGVFAM
|
|
|
|
#endif // __FILAMVCT__
|
|
|