mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +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
170 lines
6.6 KiB
C++
170 lines
6.6 KiB
C++
/************** FilAmZip H Declares Source Code File (.H) **************/
|
|
/* Name: FILAMZIP.H Version 1.2 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2014 */
|
|
/* */
|
|
/* This file contains the GZIP access method classes declares. */
|
|
/***********************************************************************/
|
|
#ifndef __FILAMZIP_H
|
|
#define __FILAMZIP_H
|
|
|
|
#include "zlib.h"
|
|
|
|
typedef class ZIPFAM *PZIPFAM;
|
|
typedef class ZBKFAM *PZBKFAM;
|
|
typedef class ZIXFAM *PZIXFAM;
|
|
typedef class ZLBFAM *PZLBFAM;
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for not optimized */
|
|
/* variable record length files compressed using the gzip library */
|
|
/* functions. File is accessed record by record (row). */
|
|
/***********************************************************************/
|
|
class DllExport ZIPFAM : public TXTFAM {
|
|
// friend class DOSCOL;
|
|
public:
|
|
// Constructor
|
|
ZIPFAM(PDOSDEF tdp) : TXTFAM(tdp) {Zfile = NULL; Zpos = 0;}
|
|
ZIPFAM(PZIPFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_ZIP;}
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZIPFAM(this);}
|
|
|
|
// Methods
|
|
virtual void Reset(void);
|
|
virtual int GetFileLength(PGLOBAL g);
|
|
virtual int Cardinality(PGLOBAL g) {return (g) ? -1 : 0;}
|
|
virtual int MaxBlkSize(PGLOBAL g, int s) {return s;}
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int GetRowID(void);
|
|
virtual bool RecordPos(PGLOBAL g);
|
|
virtual bool SetPos(PGLOBAL g, int recpos);
|
|
virtual int SkipRecord(PGLOBAL g, bool header);
|
|
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);
|
|
|
|
protected:
|
|
int Zerror(PGLOBAL g); // GZ error function
|
|
|
|
// Members
|
|
gzFile Zfile; // Points to GZ file structure
|
|
z_off_t Zpos; // Uncompressed file position
|
|
}; // end of class ZIPFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for optimized variable */
|
|
/* record length files compressed using the gzip library functions. */
|
|
/* The File is accessed by block (requires an opt file). */
|
|
/***********************************************************************/
|
|
class DllExport ZBKFAM : public ZIPFAM {
|
|
public:
|
|
// Constructor
|
|
ZBKFAM(PDOSDEF tdp);
|
|
ZBKFAM(PZBKFAM txfp);
|
|
|
|
// Implementation
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void) {return 0;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZBKFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int MaxBlkSize(PGLOBAL g, int s);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int GetRowID(void);
|
|
virtual bool RecordPos(PGLOBAL g);
|
|
virtual int SkipRecord(PGLOBAL g, bool header);
|
|
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);
|
|
|
|
protected:
|
|
// Members
|
|
char *CurLine; // Position of current line in buffer
|
|
char *NxtLine; // Position of Next line in buffer
|
|
bool Closing; // True when closing on Insert
|
|
}; // end of class ZBKFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for fixed record */
|
|
/* length files compressed using the gzip library functions. */
|
|
/* The file is always accessed by block. */
|
|
/***********************************************************************/
|
|
class DllExport ZIXFAM : public ZBKFAM {
|
|
public:
|
|
// Constructor
|
|
ZIXFAM(PDOSDEF tdp);
|
|
ZIXFAM(PZIXFAM txfp) : ZBKFAM(txfp) {}
|
|
|
|
// Implementation
|
|
virtual int GetNextPos(void) {return 0;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZIXFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
|
|
protected:
|
|
// No additional Members
|
|
}; // end of class ZIXFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for PlugDB */
|
|
/* fixed/variable files compressed using the zlib library functions. */
|
|
/* Physically these are written and read using the same technique */
|
|
/* than blocked variable files, only the contain of each block is */
|
|
/* compressed using the deflate zlib function. The purpose of this */
|
|
/* specific format is to have a fast mechanism for direct access of */
|
|
/* records so blocked optimization is fast and direct access (joins) */
|
|
/* is allowed. Note that the block length is written ahead of each */
|
|
/* block to enable reading when optimization file is not available. */
|
|
/***********************************************************************/
|
|
class DllExport ZLBFAM : public BLKFAM {
|
|
public:
|
|
// Constructor
|
|
ZLBFAM(PDOSDEF tdp);
|
|
ZLBFAM(PZLBFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_ZLIB;}
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZLBFAM(this);}
|
|
inline void SetOptimized(bool b) {Optimized = b;}
|
|
|
|
// Methods
|
|
virtual int GetFileLength(PGLOBAL g);
|
|
virtual bool SetPos(PGLOBAL g, int recpos);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
virtual void Rewind(void);
|
|
|
|
protected:
|
|
bool WriteCompressedBuffer(PGLOBAL g);
|
|
int ReadCompressedBuffer(PGLOBAL g, void *rdbuf);
|
|
|
|
// Members
|
|
z_streamp Zstream; // Compression/decompression stream
|
|
Byte *Zbuffer; // Compressed block buffer
|
|
int *Zlenp; // Pointer to block length
|
|
bool Optimized; // true when opt file is available
|
|
}; // end of class ZLBFAM
|
|
|
|
#endif // __FILAMZIP_H
|