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
356 lines
14 KiB
C++
356 lines
14 KiB
C++
/*************** Valblk H Declares Source Code File (.H) ***************/
|
|
/* Name: VALBLK.H Version 2.1 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2014 */
|
|
/* */
|
|
/* This file contains the VALBLK and derived classes declares. */
|
|
/***********************************************************************/
|
|
|
|
/***********************************************************************/
|
|
/* Include required application header files */
|
|
/* assert.h is header required when using the assert function. */
|
|
/* block.h is header containing Block global declarations. */
|
|
/***********************************************************************/
|
|
#ifndef __VALBLK__H__
|
|
#define __VALBLK__H__
|
|
#include "value.h"
|
|
|
|
/***********************************************************************/
|
|
/* Utility used to allocate value blocks. */
|
|
/***********************************************************************/
|
|
DllExport PVBLK AllocValBlock(PGLOBAL, void*, int, int, int, int,
|
|
bool, bool, bool);
|
|
const char *GetFmt(int type, bool un = false);
|
|
|
|
/***********************************************************************/
|
|
/* DB static external variables. */
|
|
/***********************************************************************/
|
|
extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
|
|
|
|
/***********************************************************************/
|
|
/* Class MBVALS is a utility class for (re)allocating VALBLK's. */
|
|
/***********************************************************************/
|
|
class MBVALS : public BLOCK {
|
|
//friend class LSTBLK;
|
|
friend class ARRAY;
|
|
public:
|
|
// Constructors
|
|
MBVALS(void) {Vblk = NULL; Mblk = Nmblk;}
|
|
|
|
// Methods
|
|
void *GetMemp(void) {return Mblk.Memp;}
|
|
PVBLK Allocate(PGLOBAL g, int type, int len, int prec,
|
|
int n, bool sub = FALSE);
|
|
bool ReAllocate(PGLOBAL g, int n);
|
|
void Free(void);
|
|
|
|
protected:
|
|
// Members
|
|
PVBLK Vblk; // Pointer to VALBLK
|
|
MBLOCK Mblk; // The memory block
|
|
}; // end of class MBVALS
|
|
|
|
typedef class MBVALS *PMBV;
|
|
|
|
/***********************************************************************/
|
|
/* Class VALBLK represent a base class for variable blocks. */
|
|
/***********************************************************************/
|
|
class VALBLK : public BLOCK {
|
|
public:
|
|
// Constructors
|
|
VALBLK(void *mp, int type, int nval, bool un = false);
|
|
|
|
// Implementation
|
|
int GetNval(void) {return Nval;}
|
|
void SetNval(int n) {Nval = n;}
|
|
void *GetValPointer(void) {return Blkp;}
|
|
void SetValPointer(void *mp) {Blkp = mp;}
|
|
int GetType(void) {return Type;}
|
|
int GetPrec(void) {return Prec;}
|
|
void SetCheck(bool b) {Check = b;}
|
|
void MoveNull(int i, int j)
|
|
{if (To_Nulls) To_Nulls[j] = To_Nulls[j];}
|
|
virtual void SetNull(int n, bool b)
|
|
{if (To_Nulls) {To_Nulls[n] = (b) ? '*' : 0;}}
|
|
virtual bool IsNull(int n) {return To_Nulls && To_Nulls[n];}
|
|
virtual void SetNullable(bool b);
|
|
virtual bool IsUnsigned(void) {return Unsigned;}
|
|
virtual bool Init(PGLOBAL g, bool check) = 0;
|
|
virtual int GetVlen(void) = 0;
|
|
virtual PSZ GetCharValue(int n);
|
|
virtual char GetTinyValue(int n) = 0;
|
|
virtual uchar GetUTinyValue(int n) = 0;
|
|
virtual short GetShortValue(int n) = 0;
|
|
virtual ushort GetUShortValue(int n) = 0;
|
|
virtual int GetIntValue(int n) = 0;
|
|
virtual uint GetUIntValue(int n) = 0;
|
|
virtual longlong GetBigintValue(int n) = 0;
|
|
virtual ulonglong GetUBigintValue(int n) = 0;
|
|
virtual double GetFloatValue(int n) = 0;
|
|
virtual char *GetCharString(char *p, int n) = 0;
|
|
virtual void ReAlloc(void *mp, int n) {Blkp = mp; Nval = n;}
|
|
virtual void Reset(int n) = 0;
|
|
virtual bool SetFormat(PGLOBAL g, PSZ fmt, int len, int year = 0);
|
|
virtual void SetPrec(int p) {}
|
|
virtual bool IsCi(void) {return false;}
|
|
|
|
// Methods
|
|
virtual void SetValue(short sval, int n) {assert(false);}
|
|
virtual void SetValue(ushort sval, int n) {assert(false);}
|
|
virtual void SetValue(int lval, int n) {assert(false);}
|
|
virtual void SetValue(uint lval, int n) {assert(false);}
|
|
virtual void SetValue(longlong lval, int n) {assert(false);}
|
|
virtual void SetValue(ulonglong lval, int n) {assert(false);}
|
|
virtual void SetValue(double fval, int n) {assert(false);}
|
|
virtual void SetValue(char cval, int n) {assert(false);}
|
|
virtual void SetValue(uchar cval, int n) {assert(false);}
|
|
virtual void SetValue(PSZ sp, int n) {assert(false);}
|
|
virtual void SetValue(char *sp, uint len, int n) {assert(false);}
|
|
virtual void SetValue(PVAL valp, int n) = 0;
|
|
virtual void SetValue(PVBLK pv, int n1, int n2) = 0;
|
|
virtual void SetMin(PVAL valp, int n) = 0;
|
|
virtual void SetMax(PVAL valp, int n) = 0;
|
|
virtual void Move(int i, int j) = 0;
|
|
virtual int CompVal(PVAL vp, int n) = 0;
|
|
virtual int CompVal(int i1, int i2) = 0;
|
|
virtual void *GetValPtr(int n) = 0;
|
|
virtual void *GetValPtrEx(int n) = 0;
|
|
virtual int Find(PVAL vp) = 0;
|
|
virtual int GetMaxLength(void) = 0;
|
|
bool Locate(PVAL vp, int& i);
|
|
|
|
protected:
|
|
bool AllocBuff(PGLOBAL g, size_t size);
|
|
void ChkIndx(int n);
|
|
void ChkTyp(PVAL v);
|
|
void ChkTyp(PVBLK vb);
|
|
|
|
// Members
|
|
PGLOBAL Global; // Used for messages and allocation
|
|
MBLOCK Mblk; // Used to allocate buffer
|
|
char *To_Nulls; // Null values array
|
|
void *Blkp; // To value block
|
|
bool Check; // If true SetValue types must match
|
|
bool Nullable; // True if values can be null
|
|
bool Unsigned; // True if values are unsigned
|
|
int Type; // Type of individual values
|
|
int Nval; // Max number of values in block
|
|
int Prec; // Precision of float values
|
|
}; // end of class VALBLK
|
|
|
|
/***********************************************************************/
|
|
/* Class TYPBLK: represents a block of typed values. */
|
|
/***********************************************************************/
|
|
template <class TYPE>
|
|
class TYPBLK : public VALBLK {
|
|
public:
|
|
// Constructors
|
|
TYPBLK(void *mp, int size, int type, int prec = 0, bool un = false);
|
|
|
|
// Implementation
|
|
virtual bool Init(PGLOBAL g, bool check);
|
|
virtual int GetVlen(void) {return sizeof(TYPE);}
|
|
virtual char GetTinyValue(int n) {return (char)Typp[n];}
|
|
virtual uchar GetUTinyValue(int n) {return (uchar)Typp[n];}
|
|
virtual short GetShortValue(int n) {return (short)Typp[n];}
|
|
virtual ushort GetUShortValue(int n) {return (ushort)Typp[n];}
|
|
virtual int GetIntValue(int n) {return (int)Typp[n];}
|
|
virtual uint GetUIntValue(int n) {return (uint)Typp[n];}
|
|
virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];}
|
|
virtual ulonglong GetUBigintValue(int n) {return (ulonglong)Typp[n];}
|
|
virtual double GetFloatValue(int n) {return (double)Typp[n];}
|
|
virtual char *GetCharString(char *p, int n);
|
|
virtual void Reset(int n) {Typp[n] = 0;}
|
|
|
|
// Methods
|
|
virtual void SetValue(PSZ sp, int n);
|
|
virtual void SetValue(char *sp, uint len, int n);
|
|
virtual void SetValue(short sval, int n)
|
|
{Typp[n] = (TYPE)sval; SetNull(n, false);}
|
|
virtual void SetValue(ushort sval, int n)
|
|
{Typp[n] = (TYPE)sval; SetNull(n, false);}
|
|
virtual void SetValue(int lval, int n)
|
|
{Typp[n] = (TYPE)lval; SetNull(n, false);}
|
|
virtual void SetValue(uint lval, int n)
|
|
{Typp[n] = (TYPE)lval; SetNull(n, false);}
|
|
virtual void SetValue(longlong lval, int n)
|
|
{Typp[n] = (TYPE)lval; SetNull(n, false);}
|
|
virtual void SetValue(ulonglong lval, int n)
|
|
{Typp[n] = (TYPE)lval; SetNull(n, false);}
|
|
virtual void SetValue(double fval, int n)
|
|
{Typp[n] = (TYPE)fval; SetNull(n, false);}
|
|
virtual void SetValue(char cval, int n)
|
|
{Typp[n] = (TYPE)cval; SetNull(n, false);}
|
|
virtual void SetValue(uchar cval, int n)
|
|
{Typp[n] = (TYPE)cval; SetNull(n, false);}
|
|
virtual void SetValue(PVAL valp, int n);
|
|
virtual void SetValue(PVBLK pv, int n1, int n2);
|
|
virtual void SetMin(PVAL valp, int n);
|
|
virtual void SetMax(PVAL valp, int n);
|
|
virtual void Move(int i, int j);
|
|
virtual int CompVal(PVAL vp, int n);
|
|
virtual int CompVal(int i1, int i2);
|
|
virtual void *GetValPtr(int n);
|
|
virtual void *GetValPtrEx(int n);
|
|
virtual int Find(PVAL vp);
|
|
virtual int GetMaxLength(void);
|
|
|
|
protected:
|
|
// Specialized functions
|
|
static ulonglong MaxVal(void);
|
|
TYPE GetTypedValue(PVAL vp);
|
|
TYPE GetTypedValue(PVBLK blk, int n);
|
|
|
|
// Members
|
|
TYPE* const &Typp;
|
|
const char *Fmt;
|
|
}; // end of class TYPBLK
|
|
|
|
/***********************************************************************/
|
|
/* Class CHRBLK: represent a block of fixed length strings. */
|
|
/***********************************************************************/
|
|
class CHRBLK : public VALBLK {
|
|
public:
|
|
// Constructors
|
|
CHRBLK(void *mp, int size, int len, int prec, bool b);
|
|
|
|
// Implementation
|
|
virtual bool Init(PGLOBAL g, bool check);
|
|
virtual int GetVlen(void) {return Long;}
|
|
virtual PSZ GetCharValue(int n);
|
|
virtual char GetTinyValue(int n);
|
|
virtual uchar GetUTinyValue(int n);
|
|
virtual short GetShortValue(int n);
|
|
virtual ushort GetUShortValue(int n);
|
|
virtual int GetIntValue(int n);
|
|
virtual uint GetUIntValue(int n);
|
|
virtual longlong GetBigintValue(int n);
|
|
virtual ulonglong GetUBigintValue(int n);
|
|
virtual double GetFloatValue(int n);
|
|
virtual char *GetCharString(char *p, int n);
|
|
virtual void Reset(int n);
|
|
virtual void SetPrec(int p) {Ci = (p != 0);}
|
|
virtual bool IsCi(void) {return Ci;}
|
|
|
|
// Methods
|
|
virtual void SetValue(PSZ sp, int n);
|
|
virtual void SetValue(char *sp, uint len, int n);
|
|
virtual void SetValue(PVAL valp, int n);
|
|
virtual void SetValue(PVBLK pv, int n1, int n2);
|
|
virtual void SetMin(PVAL valp, int n);
|
|
virtual void SetMax(PVAL valp, int n);
|
|
virtual void Move(int i, int j);
|
|
virtual int CompVal(PVAL vp, int n);
|
|
virtual int CompVal(int i1, int i2);
|
|
virtual void *GetValPtr(int n);
|
|
virtual void *GetValPtrEx(int n);
|
|
virtual int Find(PVAL vp);
|
|
virtual int GetMaxLength(void);
|
|
|
|
protected:
|
|
// Members
|
|
char* const &Chrp; // Pointer to char buffer
|
|
PSZ Valp; // Used to make a zero ended value
|
|
bool Blanks; // True for right filling with blanks
|
|
bool Ci; // True if case insensitive
|
|
int Long; // Length of each string
|
|
}; // end of class CHRBLK
|
|
|
|
/***********************************************************************/
|
|
/* Class STRBLK: represent a block of string pointers. */
|
|
/* Currently this class is used only by the DECODE scalar function */
|
|
/* and by the MyColumn function to store date formats. */
|
|
/***********************************************************************/
|
|
class STRBLK : public VALBLK {
|
|
public:
|
|
// Constructors
|
|
STRBLK(PGLOBAL g, void *mp, int size);
|
|
|
|
// Implementation
|
|
virtual void SetNull(int n, bool b) {if (b) {Strp[n] = NULL;}}
|
|
virtual bool IsNull(int n) {return Strp[n] == NULL;}
|
|
virtual void SetNullable(bool b) {} // Always nullable
|
|
virtual bool Init(PGLOBAL g, bool check);
|
|
virtual int GetVlen(void) {return sizeof(PSZ);}
|
|
virtual PSZ GetCharValue(int n) {return Strp[n];}
|
|
virtual char GetTinyValue(int n);
|
|
virtual uchar GetUTinyValue(int n);
|
|
virtual short GetShortValue(int n);
|
|
virtual ushort GetUShortValue(int n);
|
|
virtual int GetIntValue(int n);
|
|
virtual uint GetUIntValue(int n);
|
|
virtual longlong GetBigintValue(int n);
|
|
virtual ulonglong GetUBigintValue(int n);
|
|
virtual double GetFloatValue(int n) {return atof(Strp[n]);}
|
|
virtual char *GetCharString(char *p, int n) {return Strp[n];}
|
|
virtual void Reset(int n) {Strp[n] = NULL;}
|
|
|
|
// Methods
|
|
virtual void SetValue(PSZ sp, int n);
|
|
virtual void SetValue(char *sp, uint len, int n);
|
|
virtual void SetValue(PVAL valp, int n);
|
|
virtual void SetValue(PVBLK pv, int n1, int n2);
|
|
virtual void SetMin(PVAL valp, int n);
|
|
virtual void SetMax(PVAL valp, int n);
|
|
virtual void Move(int i, int j);
|
|
virtual int CompVal(PVAL vp, int n);
|
|
virtual int CompVal(int i1, int i2);
|
|
virtual void *GetValPtr(int n);
|
|
virtual void *GetValPtrEx(int n);
|
|
virtual int Find(PVAL vp);
|
|
virtual int GetMaxLength(void);
|
|
|
|
// Specific
|
|
void SetSorted(bool b) {Sorted = b;}
|
|
|
|
protected:
|
|
// Members
|
|
PSZ* const &Strp; // Pointer to PSZ buffer
|
|
bool Sorted; // Values are (semi?) sorted
|
|
}; // end of class STRBLK
|
|
|
|
/***********************************************************************/
|
|
/* Class DATBLK: represents a block of time stamp values. */
|
|
/***********************************************************************/
|
|
class DATBLK : public TYPBLK<int> {
|
|
public:
|
|
// Constructor
|
|
DATBLK(void *mp, int size);
|
|
|
|
// Implementation
|
|
virtual bool SetFormat(PGLOBAL g, PSZ fmt, int len, int year = 0);
|
|
virtual char *GetCharString(char *p, int n);
|
|
|
|
// Methods
|
|
virtual void SetValue(PSZ sp, int n);
|
|
|
|
protected:
|
|
// Members
|
|
PVAL Dvalp; // Date value used to convert string
|
|
}; // end of class DATBLK
|
|
|
|
/***********************************************************************/
|
|
/* Class PTRBLK: represent a block of char pointers. */
|
|
/* Currently this class is used only by the ARRAY class to make and */
|
|
/* sort a list of char pointers. */
|
|
/***********************************************************************/
|
|
class PTRBLK : public STRBLK {
|
|
friend class ARRAY;
|
|
friend PVBLK AllocValBlock(PGLOBAL, void *, int, int, int, int,
|
|
bool, bool, bool);
|
|
protected:
|
|
// Constructors
|
|
PTRBLK(PGLOBAL g, void *mp, int size) : STRBLK(g, mp, size) {}
|
|
|
|
// Implementation
|
|
|
|
// Methods
|
|
virtual void SetValue(PSZ p, int n) {Strp[n] = p;}
|
|
virtual int CompVal(int i1, int i2);
|
|
|
|
protected:
|
|
// Members
|
|
}; // end of class PTRBLK
|
|
|
|
#endif // __VALBLK__H__
|
|
|