Commit 26e4b69f authored by Olivier Bertrand's avatar Olivier Bertrand

- FIX errors and some gcc warnings

modified:
  storage/connect/array.cpp
  storage/connect/array.h
  storage/connect/blkfil.cpp
  storage/connect/blkfil.h
  storage/connect/filter.cpp
  storage/connect/filter.h
  storage/connect/ha_connect.cc
  storage/connect/tabdos.cpp
  
- FIX problems of DIR table on LINUX:
  The order of the result is not the same than the one on Windows
  An error occurs when no file match the pattern
  Also the row numbers may also be different (not fixed yet)
modified:
  storage/connect/mysql-test/connect/r/part_file.result
  storage/connect/mysql-test/connect/r/part_table.result
  storage/connect/mysql-test/connect/t/part_file.test
parent 4b2092eb
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
//#include <windows.h> //#include <windows.h>
#else // !WIN32 #else // !WIN32
#include <string.h> #include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif // !WIN32 #endif // !WIN32
/***********************************************************************/ /***********************************************************************/
...@@ -63,6 +65,7 @@ extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */ ...@@ -63,6 +65,7 @@ extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
/***********************************************************************/ /***********************************************************************/
BYTE OpBmp(PGLOBAL g, OPVAL opc); BYTE OpBmp(PGLOBAL g, OPVAL opc);
void EncodeValue(int *lp, char *strp, int n); void EncodeValue(int *lp, char *strp, int n);
PARRAY MakeValueArray(PGLOBAL g, PPARM pp); // avoid gcc warning
/***********************************************************************/ /***********************************************************************/
/* MakeValueArray: Makes a value array from a value list. */ /* MakeValueArray: Makes a value array from a value list. */
...@@ -94,7 +97,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp) ...@@ -94,7 +97,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
sprintf(g->Message, MSG(BAD_PARAM_TYPE), "MakeValueArray", parmp->Type); sprintf(g->Message, MSG(BAD_PARAM_TYPE), "MakeValueArray", parmp->Type);
return NULL; return NULL;
} else if (valtyp == TYPE_STRING) } else if (valtyp == TYPE_STRING)
len = max(len, strlen((char*)parmp->Value)); len = MY_MAX(len, strlen((char*)parmp->Value));
/*********************************************************************/ /*********************************************************************/
/* Make an array object with one block of the proper size. */ /* Make an array object with one block of the proper size. */
...@@ -113,7 +116,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp) ...@@ -113,7 +116,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
par->AddValue(g, (PSZ)parmp->Value); par->AddValue(g, (PSZ)parmp->Value);
break; break;
case TYPE_SHORT: case TYPE_SHORT:
par->AddValue(g, *(SHORT*)parmp->Value); par->AddValue(g, *(short*)parmp->Value);
break; break;
case TYPE_INT: case TYPE_INT:
par->AddValue(g, *(int*)parmp->Value); par->AddValue(g, *(int*)parmp->Value);
...@@ -287,7 +290,7 @@ bool ARRAY::AddValue(PGLOBAL g, PSZ strp) ...@@ -287,7 +290,7 @@ bool ARRAY::AddValue(PGLOBAL g, PSZ strp)
/***********************************************************************/ /***********************************************************************/
/* Add a SHORT integer element to an array. */ /* Add a SHORT integer element to an array. */
/***********************************************************************/ /***********************************************************************/
bool ARRAY::AddValue(PGLOBAL g, SHORT n) bool ARRAY::AddValue(PGLOBAL g, short n)
{ {
if (Type != TYPE_SHORT) { if (Type != TYPE_SHORT) {
sprintf(g->Message, MSG(ADD_BAD_TYPE), GetTypeName(Type), "SHORT"); sprintf(g->Message, MSG(ADD_BAD_TYPE), GetTypeName(Type), "SHORT");
...@@ -539,14 +542,14 @@ bool ARRAY::CanBeShort(void) ...@@ -539,14 +542,14 @@ bool ARRAY::CanBeShort(void)
/***********************************************************************/ /***********************************************************************/
/* Convert an array to new numeric type k. */ /* Convert an array to new numeric type k. */
/* Note: conversion is always made in ascending order from STRING to */ /* Note: conversion is always made in ascending order from STRING to */
/* SHORT to int to double so no precision is lost in the conversion. */ /* short to int to double so no precision is lost in the conversion. */
/* One exception is converting from int to SHORT compatible arrays. */ /* One exception is converting from int to short compatible arrays. */
/***********************************************************************/ /***********************************************************************/
int ARRAY::Convert(PGLOBAL g, int k, PVAL vp) int ARRAY::Convert(PGLOBAL g, int k, PVAL vp)
{ {
int i, prec = 0; int i, prec = 0;
bool b = FALSE; bool b = FALSE;
PMBV ovblk = Valblk; PMBV ovblk = Valblk;
PVBLK ovblp = Vblp; PVBLK ovblp = Vblp;
Type = k; // k is the new type Type = k; // k is the new type
...@@ -796,8 +799,8 @@ int ARRAY::BlockTest(PGLOBAL g, int opc, int opm, ...@@ -796,8 +799,8 @@ int ARRAY::BlockTest(PGLOBAL g, int opc, int opm,
case TYPE_STRING: veq = (Vblp->IsCi()) case TYPE_STRING: veq = (Vblp->IsCi())
? !stricmp((char*)minp, (char*)maxp) ? !stricmp((char*)minp, (char*)maxp)
: !strcmp((char*)minp, (char*)maxp); break; : !strcmp((char*)minp, (char*)maxp); break;
case TYPE_SHORT: veq = *(SHORT*)minp == *(SHORT*)maxp; break; case TYPE_SHORT: veq = *(short*)minp == *(short*)maxp; break;
case TYPE_INT: veq = *(PINT)minp == *(PINT)maxp; break; case TYPE_INT: veq = *(int*)minp == *(int*)maxp; break;
case TYPE_DOUBLE: veq = *(double*)minp == *(double*)maxp; break; case TYPE_DOUBLE: veq = *(double*)minp == *(double*)maxp; break;
default: veq = FALSE; // Error ? default: veq = FALSE; // Error ?
} // endswitch type } // endswitch type
...@@ -904,7 +907,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g) ...@@ -904,7 +907,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
if (Type == TYPE_LIST) if (Type == TYPE_LIST)
return "(???)"; // To be implemented return "(???)"; // To be implemented
z = max(24, GetTypeSize(Type, Len) + 4); z = MY_MAX(24, GetTypeSize(Type, Len) + 4);
tp = (char*)PlugSubAlloc(g, NULL, z); tp = (char*)PlugSubAlloc(g, NULL, z);
for (i = 0; i < Nval; i++) { for (i = 0; i < Nval; i++) {
...@@ -935,10 +938,10 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g) ...@@ -935,10 +938,10 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
/* Make file output of ARRAY contents. */ /* Make file output of ARRAY contents. */
/***********************************************************************/ /***********************************************************************/
void ARRAY::Print(PGLOBAL g, FILE *f, UINT n) void ARRAY::Print(PGLOBAL g, FILE *f, uint n)
{ {
char m[64]; char m[64];
int lim = min(Nval,10); int lim = MY_MIN(Nval,10);
memset(m, ' ', n); // Make margin string memset(m, ' ', n); // Make margin string
m[n] = '\0'; m[n] = '\0';
...@@ -963,7 +966,7 @@ void ARRAY::Print(PGLOBAL g, FILE *f, UINT n) ...@@ -963,7 +966,7 @@ void ARRAY::Print(PGLOBAL g, FILE *f, UINT n)
/***********************************************************************/ /***********************************************************************/
/* Make string output of ARRAY contents. */ /* Make string output of ARRAY contents. */
/***********************************************************************/ /***********************************************************************/
void ARRAY::Print(PGLOBAL g, char *ps, UINT z) void ARRAY::Print(PGLOBAL g, char *ps, uint z)
{ {
if (z < 16) if (z < 16)
return; return;
......
...@@ -52,12 +52,12 @@ class DllExport ARRAY : public XOBJECT, public CSORT { // Array descblock ...@@ -52,12 +52,12 @@ class DllExport ARRAY : public XOBJECT, public CSORT { // Array descblock
virtual bool Compare(PXOB) {assert(FALSE); return FALSE;} virtual bool Compare(PXOB) {assert(FALSE); return FALSE;}
virtual bool SetFormat(PGLOBAL, FORMAT&) {assert(FALSE); return FALSE;} virtual bool SetFormat(PGLOBAL, FORMAT&) {assert(FALSE); return FALSE;}
//virtual int CheckSpcCol(PTDB, int) {return 0;} //virtual int CheckSpcCol(PTDB, int) {return 0;}
virtual void Print(PGLOBAL g, FILE *f, UINT n); virtual void Print(PGLOBAL g, FILE *f, uint n);
virtual void Print(PGLOBAL g, char *ps, UINT z); virtual void Print(PGLOBAL g, char *ps, uint z);
void Empty(void); void Empty(void);
void SetPrecision(PGLOBAL g, int p); void SetPrecision(PGLOBAL g, int p);
bool AddValue(PGLOBAL g, PSZ sp); bool AddValue(PGLOBAL g, PSZ sp);
bool AddValue(PGLOBAL g, SHORT n); bool AddValue(PGLOBAL g, short n);
bool AddValue(PGLOBAL g, int n); bool AddValue(PGLOBAL g, int n);
bool AddValue(PGLOBAL g, double f); bool AddValue(PGLOBAL g, double f);
bool AddValue(PGLOBAL g, PXOB xp); bool AddValue(PGLOBAL g, PXOB xp);
......
...@@ -61,7 +61,7 @@ BLOCKFILTER::BLOCKFILTER(PTDBDOS tdbp, int op) ...@@ -61,7 +61,7 @@ BLOCKFILTER::BLOCKFILTER(PTDBDOS tdbp, int op)
/***********************************************************************/ /***********************************************************************/
/* Make file output of BLOCKFILTER contents. */ /* Make file output of BLOCKFILTER contents. */
/***********************************************************************/ /***********************************************************************/
void BLOCKFILTER::Print(PGLOBAL g, FILE *f, UINT n) void BLOCKFILTER::Print(PGLOBAL g, FILE *f, uint n)
{ {
char m[64]; char m[64];
...@@ -75,7 +75,7 @@ void BLOCKFILTER::Print(PGLOBAL g, FILE *f, UINT n) ...@@ -75,7 +75,7 @@ void BLOCKFILTER::Print(PGLOBAL g, FILE *f, UINT n)
/***********************************************************************/ /***********************************************************************/
/* Make string output of BLOCKFILTER contents. */ /* Make string output of BLOCKFILTER contents. */
/***********************************************************************/ /***********************************************************************/
void BLOCKFILTER::Print(PGLOBAL g, char *ps, UINT z) void BLOCKFILTER::Print(PGLOBAL g, char *ps, uint z)
{ {
strncat(ps, "BlockFilter(s)", z); strncat(ps, "BlockFilter(s)", z);
} // end of Print } // end of Print
...@@ -131,10 +131,10 @@ int BLKFILLOG::BlockEval(PGLOBAL g) ...@@ -131,10 +131,10 @@ int BLKFILLOG::BlockEval(PGLOBAL g)
Result = (Opc == OP_NOT) ? -rc : rc; Result = (Opc == OP_NOT) ? -rc : rc;
else switch (Opc) { else switch (Opc) {
case OP_AND: case OP_AND:
Result = min(Result, rc); Result = MY_MIN(Result, rc);
break; break;
case OP_OR: case OP_OR:
Result = max(Result, rc); Result = MY_MAX(Result, rc);
break; break;
default: default:
// Should never happen // Should never happen
...@@ -318,8 +318,8 @@ int BLKFILAR2::BlockEval(PGLOBAL g) ...@@ -318,8 +318,8 @@ int BLKFILAR2::BlockEval(PGLOBAL g)
#endif #endif
int n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk(); int n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
ULONG bkmp = *(PULONG)Colp->GetBmap()->GetValPtr(n); uint bkmp = *(uint*)Colp->GetBmap()->GetValPtr(n);
ULONG bres = Bmp & bkmp; uint bres = Bmp & bkmp;
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE // Set result as if Opc were OP_EQ, OP_LT, or OP_LE
if (!bres) { if (!bres) {
...@@ -358,8 +358,8 @@ BLKFILMR2::BLKFILMR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp) ...@@ -358,8 +358,8 @@ BLKFILMR2::BLKFILMR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp)
: BLKFILARI(g, tdbp, op, xp) : BLKFILARI(g, tdbp, op, xp)
{ {
Nbm = Colp->GetNbm(); Nbm = Colp->GetNbm();
Bmp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG)); Bmp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
Bxp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG)); Bxp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
MakeValueBitmap(); MakeValueBitmap();
} // end of BLKFILMR2 constructor } // end of BLKFILMR2 constructor
...@@ -441,8 +441,8 @@ int BLKFILMR2::BlockEval(PGLOBAL g) ...@@ -441,8 +441,8 @@ int BLKFILMR2::BlockEval(PGLOBAL g)
int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk(); int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
bool fnd = FALSE, all = TRUE, gt = TRUE; bool fnd = FALSE, all = TRUE, gt = TRUE;
ULONG bres; uint bres;
PULONG bkmp = (PULONG)Colp->GetBmap()->GetValPtr(n * Nbm); uint *bkmp = (uint*)Colp->GetBmap()->GetValPtr(n * Nbm);
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE // Set result as if Opc were OP_EQ, OP_LT, or OP_LE
for (i = 0; i < Nbm; i++) for (i = 0; i < Nbm; i++)
...@@ -645,8 +645,8 @@ BLKFILIN2::BLKFILIN2(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp) ...@@ -645,8 +645,8 @@ BLKFILIN2::BLKFILIN2(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp)
Nbm = Colp->GetNbm(); Nbm = Colp->GetNbm();
Valp = AllocateValue(g, Colp->GetValue()); Valp = AllocateValue(g, Colp->GetValue());
Invert = (Opc == OP_NE || Opc == OP_GE || Opc ==OP_GT); Invert = (Opc == OP_NE || Opc == OP_GE || Opc ==OP_GT);
Bmp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG)); Bmp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
Bxp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG)); Bxp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
MakeValueBitmap(); MakeValueBitmap();
} // end of BLKFILIN2 constructor } // end of BLKFILIN2 constructor
...@@ -662,7 +662,7 @@ void BLKFILIN2::MakeValueBitmap(void) ...@@ -662,7 +662,7 @@ void BLKFILIN2::MakeValueBitmap(void)
int i, k, n, ndv = Colp->GetNdv(); int i, k, n, ndv = Colp->GetNdv();
bool found, noteq = !(Opc == OP_EQ || Opc == OP_NE); bool found, noteq = !(Opc == OP_EQ || Opc == OP_NE);
bool all = (!Invert) ? (Opm == 2) : (Opm != 2); bool all = (!Invert) ? (Opm == 2) : (Opm != 2);
ULONG btp; uint btp;
PVBLK dval = Colp->GetDval(); PVBLK dval = Colp->GetDval();
N = -1; N = -1;
...@@ -748,8 +748,8 @@ int BLKFILIN2::BlockEval(PGLOBAL g) ...@@ -748,8 +748,8 @@ int BLKFILIN2::BlockEval(PGLOBAL g)
int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk(); int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
bool fnd = FALSE, all = TRUE, gt = TRUE; bool fnd = FALSE, all = TRUE, gt = TRUE;
ULONG bres; uint bres;
PULONG bkmp = (PULONG)Colp->GetBmap()->GetValPtr(n * Nbm); uint *bkmp = (uint*)Colp->GetBmap()->GetValPtr(n * Nbm);
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE // Set result as if Opc were OP_EQ, OP_LT, or OP_LE
// The difference between ALL or ANY was handled in MakeValueBitmap // The difference between ALL or ANY was handled in MakeValueBitmap
......
...@@ -27,8 +27,8 @@ class DllExport BLOCKFILTER : public BLOCK { /* Block Filter */ ...@@ -27,8 +27,8 @@ class DllExport BLOCKFILTER : public BLOCK { /* Block Filter */
// Methods // Methods
virtual void Reset(PGLOBAL) = 0; virtual void Reset(PGLOBAL) = 0;
virtual int BlockEval(PGLOBAL) = 0; virtual int BlockEval(PGLOBAL) = 0;
virtual void Print(PGLOBAL g, FILE *f, UINT n); virtual void Print(PGLOBAL g, FILE *f, uint n);
virtual void Print(PGLOBAL g, char *ps, UINT z); virtual void Print(PGLOBAL g, char *ps, uint z);
protected: protected:
BLOCKFILTER(void) {} // Standard constructor not to be used BLOCKFILTER(void) {} // Standard constructor not to be used
...@@ -100,8 +100,8 @@ class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */ ...@@ -100,8 +100,8 @@ class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */
BLKFILAR2(void) {} // Standard constructor not to be used BLKFILAR2(void) {} // Standard constructor not to be used
// Members // Members
ULONG Bmp; // The value bitmap used to test blocks uint Bmp; // The value bitmap used to test blocks
ULONG Bxp; // Bitmap used when Opc = OP_EQ uint Bxp; // Bitmap used when Opc = OP_EQ
}; // end of class BLKFILAR2 }; // end of class BLKFILAR2
/***********************************************************************/ /***********************************************************************/
...@@ -124,8 +124,8 @@ class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */ ...@@ -124,8 +124,8 @@ class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */
int Nbm; // The number of ULONG bitmaps int Nbm; // The number of ULONG bitmaps
int N; // The position of the leftmost ULONG int N; // The position of the leftmost ULONG
bool Void; // True if all file blocks can be skipped bool Void; // True if all file blocks can be skipped
PULONG Bmp; // The values bitmaps used to test blocks uint *Bmp; // The values bitmaps used to test blocks
PULONG Bxp; // Bit of values <= max value uint *Bxp; // Bit of values <= max value
}; // end of class BLKFILMR2 }; // end of class BLKFILMR2
/***********************************************************************/ /***********************************************************************/
...@@ -191,8 +191,8 @@ class DllExport BLKFILIN2 : public BLKFILIN { // With array arguments. ...@@ -191,8 +191,8 @@ class DllExport BLKFILIN2 : public BLKFILIN { // With array arguments.
//bool Bitmap; // True for IN operator (temporary) //bool Bitmap; // True for IN operator (temporary)
bool Void; // True if all file blocks can be skipped bool Void; // True if all file blocks can be skipped
bool Invert; // True when Result must be inverted bool Invert; // True when Result must be inverted
PULONG Bmp; // The values bitmaps used to test blocks uint *Bmp; // The values bitmaps used to test blocks
PULONG Bxp; // Bit of values <= max value uint *Bxp; // Bit of values <= max value
PVAL Valp; // Used while building the bitmaps PVAL Valp; // Used while building the bitmaps
}; // end of class BLKFILIN2 }; // end of class BLKFILIN2
......
...@@ -47,12 +47,12 @@ extern "C" int trace; ...@@ -47,12 +47,12 @@ extern "C" int trace;
/***********************************************************************/ /***********************************************************************/
/* Utility routines. */ /* Utility routines. */
/***********************************************************************/ /***********************************************************************/
void PlugConvertConstant(PGLOBAL, PVOID&, SHORT&); void PlugConvertConstant(PGLOBAL, void* &, short&);
PVOID PlugCopyDB(PTABS, PVOID, INT); //void *PlugCopyDB(PTABS, void*, INT);
void NewPointer(PTABS, PVOID, PVOID); void NewPointer(PTABS, void*, void*);
void AddPointer(PTABS, PVOID); void AddPointer(PTABS, void*);
PPARM MakeParm(PGLOBAL g, PXOB xp) static PPARM MakeParm(PGLOBAL g, PXOB xp)
{ {
PPARM pp = (PPARM)PlugSubAlloc(g, NULL, sizeof(PARM)); PPARM pp = (PPARM)PlugSubAlloc(g, NULL, sizeof(PARM));
pp->Type = TYPE_XOBJECT; pp->Type = TYPE_XOBJECT;
...@@ -1387,7 +1387,7 @@ PFIL FILTER::Copy(PTABS t) ...@@ -1387,7 +1387,7 @@ PFIL FILTER::Copy(PTABS t)
/*********************************************************************/ /*********************************************************************/
/* Make file output of FILTER contents. */ /* Make file output of FILTER contents. */
/*********************************************************************/ /*********************************************************************/
void FILTER::Print(PGLOBAL g, FILE *f, UINT n) void FILTER::Print(PGLOBAL g, FILE *f, uint n)
{ {
char m[64]; char m[64];
...@@ -1420,7 +1420,7 @@ void FILTER::Print(PGLOBAL g, FILE *f, UINT n) ...@@ -1420,7 +1420,7 @@ void FILTER::Print(PGLOBAL g, FILE *f, UINT n)
/***********************************************************************/ /***********************************************************************/
/* Make string output of TABLE contents (z should be checked). */ /* Make string output of TABLE contents (z should be checked). */
/***********************************************************************/ /***********************************************************************/
void FILTER::Print(PGLOBAL g, char *ps, UINT z) void FILTER::Print(PGLOBAL g, char *ps, uint z)
{ {
#define FLEN 100 #define FLEN 100
...@@ -1510,14 +1510,14 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z) ...@@ -1510,14 +1510,14 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
bcp = bxp; bcp = bxp;
break; break;
case OP_NOT: // Filter NOT operator case OP_NOT: // Filter NOT operator
for (n = min((int)strlen(bcp->Cold), FLEN-3); n >= 0; n--) for (n = MY_MIN((int)strlen(bcp->Cold), FLEN-3); n >= 0; n--)
bcp->Cold[n+2] = bcp->Cold[n]; bcp->Cold[n+2] = bcp->Cold[n];
bcp->Cold[0] = '^'; bcp->Cold[0] = '^';
bcp->Cold[1] = '('; bcp->Cold[1] = '(';
strcat(bcp->Cold, ")"); strcat(bcp->Cold, ")");
break; break;
default: default:
for (n = min((int)strlen(bcp->Cold), FLEN-4); n >= 0; n--) for (n = MY_MIN((int)strlen(bcp->Cold), FLEN-4); n >= 0; n--)
bcp->Cold[n+3] = bcp->Cold[n]; bcp->Cold[n+3] = bcp->Cold[n];
bcp->Cold[0] = ')'; bcp->Cold[0] = ')';
switch (fp->Opc) { switch (fp->Opc) {
...@@ -1528,7 +1528,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z) ...@@ -1528,7 +1528,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
bcp->Cold[2] = '('; bcp->Cold[2] = '(';
strcat(bcp->Cold, ")"); strcat(bcp->Cold, ")");
bxp = bcp->Next; bxp = bcp->Next;
for (n = min((int)strlen(bxp->Cold), FLEN-1); n >= 0; n--) for (n = MY_MIN((int)strlen(bxp->Cold), FLEN-1); n >= 0; n--)
bxp->Cold[n+1] = bxp->Cold[n]; bxp->Cold[n+1] = bxp->Cold[n];
bxp->Cold[0] = '('; bxp->Cold[0] = '(';
strncat(bxp->Cold, bcp->Cold, FLEN-strlen(bxp->Cold)); strncat(bxp->Cold, bcp->Cold, FLEN-strlen(bxp->Cold));
...@@ -1546,7 +1546,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z) ...@@ -1546,7 +1546,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
if (z > 0) { if (z > 0) {
if (n++ > 0) { if (n++ > 0) {
strncat(ps, "*?*", z); strncat(ps, "*?*", z);
z = max(0, (int)z-3); z = MY_MAX(0, (int)z-3);
} // endif } // endif
strncat(ps, bcp->Cold, z); strncat(ps, bcp->Cold, z);
z -= strlen(bcp->Cold); z -= strlen(bcp->Cold);
......
...@@ -61,8 +61,8 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */ ...@@ -61,8 +61,8 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
//virtual PXOB CheckSubQuery(PGLOBAL, PSQL); //virtual PXOB CheckSubQuery(PGLOBAL, PSQL);
//virtual bool CheckLocal(PTDB); //virtual bool CheckLocal(PTDB);
//virtual int CheckSpcCol(PTDB tdbp, int n); //virtual int CheckSpcCol(PTDB tdbp, int n);
virtual void Print(PGLOBAL g, FILE *f, UINT n); virtual void Print(PGLOBAL g, FILE *f, uint n);
virtual void Print(PGLOBAL g, char *ps, UINT z); virtual void Print(PGLOBAL g, char *ps, uint z);
// PFIL Linearize(bool nosep); // PFIL Linearize(bool nosep);
// PFIL Link(PGLOBAL g, PFIL fil2); // PFIL Link(PGLOBAL g, PFIL fil2);
// PFIL RemoveLastSep(void); // PFIL RemoveLastSep(void);
...@@ -106,9 +106,11 @@ class FILTERX : public FILTER { ...@@ -106,9 +106,11 @@ class FILTERX : public FILTER {
// Fake operator new used to change a filter into a derived filter // Fake operator new used to change a filter into a derived filter
void * operator new(size_t size, PFIL filp) {return filp;} void * operator new(size_t size, PFIL filp) {return filp;}
#if !defined(__BORLANDC__) #if defined(WIN32)
// Avoid warning C4291 by defining a matching dummy delete operator // Avoid warning C4291 by defining a matching dummy delete operator
void operator delete(void *, PFIL) {} void operator delete(void *, PFIL) {}
#else
void operator delete(void *) {}
#endif #endif
}; // end of class FILTERX }; // end of class FILTERX
......
...@@ -209,6 +209,9 @@ static my_bool indx_map= 0; ...@@ -209,6 +209,9 @@ static my_bool indx_map= 0;
/***********************************************************************/ /***********************************************************************/
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
void PushWarning(PGLOBAL g, THD *thd, int level); void PushWarning(PGLOBAL g, THD *thd, int level);
bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, const char *host,
const char *db, char *tab, const char *src, int port);
static PCONNECT GetUser(THD *thd, PCONNECT xp); static PCONNECT GetUser(THD *thd, PCONNECT xp);
static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp); static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp);
......
# This will be used to see what data files are created # This will be used to see what data files are created
CREATE TABLE dr1 ( CREATE TABLE dr1 (
FNAME VARCHAR(256) NOT NULL FLAG=2, fname VARCHAR(256) NOT NULL FLAG=2,
FTYPE CHAR(8) NOT NULL FLAG=3 ftype CHAR(8) NOT NULL FLAG=3
# ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size # ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size
) engine=CONNECT table_type=DIR file_name='t1#P#*.*'; ) engine=CONNECT table_type=DIR file_name='t1#P#*.*';
# #
...@@ -33,19 +33,19 @@ id msg ...@@ -33,19 +33,19 @@ id msg
81 eighty one 81 eighty one
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 last ALL NULL NULL NULL NULL 13 Using where 1 SIMPLE t1 last ALL NULL NULL NULL NULL 23 Using where
SELECT * FROM t1 WHERE id > 50; SELECT * FROM t1 WHERE id > 50;
id msg id msg
60 sixty 60 sixty
81 eighty one 81 eighty one
SHOW TABLE STATUS LIKE 't1'; SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 CONNECT 10 Dynamic 7 10 76 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned `TABLE_TYPE`=CSV t1 CONNECT 10 Dynamic 7 9 69 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned `TABLE_TYPE`=CSV
UPDATE t1 set id = 41 WHERE msg = 'four'; UPDATE t1 set id = 41 WHERE msg = 'four';
ERROR HY000: Got error 174 'Cannot update column id because it is used for partitioning' from CONNECT ERROR HY000: Got error 174 'Cannot update column id because it is used for partitioning' from CONNECT
UPDATE t1 set msg = 'quatre' WHERE id = 4; UPDATE t1 set msg = 'quatre' WHERE id = 4;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
t1#P#first .csv t1#P#first .csv
t1#P#last .csv t1#P#last .csv
t1#P#middle .csv t1#P#middle .csv
...@@ -62,14 +62,14 @@ partition_name table_rows ...@@ -62,14 +62,14 @@ partition_name table_rows
first 3 first 3
middle 2 middle 2
last 2 last 2
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
t1#P#first .csv t1#P#first .csv
t1#P#last .csv t1#P#last .csv
t1#P#middle .csv t1#P#middle .csv
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id=10; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id=10;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 first ALL NULL NULL NULL NULL 14 Using where 1 SIMPLE t1 first ALL NULL NULL NULL NULL 24 Using where
SELECT * FROM t1 WHERE id=10; SELECT * FROM t1 WHERE id=10;
id msg id msg
10 ten 10 ten
...@@ -82,12 +82,10 @@ id msg ...@@ -82,12 +82,10 @@ id msg
40 forty 40 forty
81 eighty one 81 eighty one
DROP TABLE t1; DROP TABLE t1;
SELECT * FROM dr1;
FNAME FTYPE
# #
# Testing partitioning on a void outward table # Testing partitioning on a void outward table
# #
ALTER TABLE dr1 file_name='part*.*'; ALTER TABLE dr1 FILE_NAME='part*.*';
CREATE TABLE t1 ( CREATE TABLE t1 (
rwid INT(6) DEFAULT 0 SPECIAL=ROWID, rwid INT(6) DEFAULT 0 SPECIAL=ROWID,
rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM, rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM,
...@@ -105,11 +103,9 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE)); ...@@ -105,11 +103,9 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE));
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX
SELECT * FROM dr1;
FNAME FTYPE
INSERT INTO t1(id,msg) VALUES(4, 'four'); INSERT INTO t1(id,msg) VALUES(4, 'four');
SELECT * FROM dr1; SELECT * FROM dr1;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
INSERT INTO t1(id,msg) VALUES(7,'seven'),(10,'ten'),(40,'forty'),(60,'sixty'),(81,'eighty one'); INSERT INTO t1(id,msg) VALUES(7,'seven'),(10,'ten'),(40,'forty'),(60,'sixty'),(81,'eighty one');
...@@ -182,8 +178,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra ...@@ -182,8 +178,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
SELECT * FROM t1 WHERE id = 35; SELECT * FROM t1 WHERE id = 35;
rwid rnum prtn tbn fid id msg rwid rnum prtn tbn fid id msg
4 4 2 t1 part2 35 thirty five 4 4 2 t1 part2 35 thirty five
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -210,8 +206,8 @@ partition_name table_rows ...@@ -210,8 +206,8 @@ partition_name table_rows
1 4 1 4
2 4 2 4
3 3 3 3
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -249,8 +245,8 @@ rwid rnum prtn tbn fid id msg ...@@ -249,8 +245,8 @@ rwid rnum prtn tbn fid id msg
4 4 2 t1 part2 60 sixty 4 4 2 t1 part2 60 sixty
1 1 3 t1 part3 81 eighty one 1 1 3 t1 part3 81 eighty one
2 2 3 t1 part3 72 seventy two 2 2 3 t1 part3 72 seventy two
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -290,8 +286,8 @@ SELECT * FROM t1 WHERE id >= 70; ...@@ -290,8 +286,8 @@ SELECT * FROM t1 WHERE id >= 70;
id msg id msg
81 eighty one 81 eighty one
72 seventy two 72 seventy two
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -305,8 +301,8 @@ CREATE INDEX XID ON t1(id); ...@@ -305,8 +301,8 @@ CREATE INDEX XID ON t1(id);
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 1 XID 1 id A NULL NULL NULL XINDEX t1 1 XID 1 id A NULL NULL NULL XINDEX
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -319,8 +315,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra ...@@ -319,8 +315,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
DROP INDEX XID ON t1; DROP INDEX XID ON t1;
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .txt part1 .txt
part2 .txt part2 .txt
part3 .txt part3 .txt
...@@ -328,8 +324,8 @@ ALTER TABLE t1 ADD PRIMARY KEY (id); ...@@ -328,8 +324,8 @@ ALTER TABLE t1 ADD PRIMARY KEY (id);
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .fnx part1 .fnx
part1 .txt part1 .txt
part2 .fnx part2 .fnx
...@@ -342,8 +338,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra ...@@ -342,8 +338,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
ALTER TABLE t1 DROP PRIMARY KEY; ALTER TABLE t1 DROP PRIMARY KEY;
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
FNAME FTYPE fname ftype
part1 .txt part1 .txt
part2 .txt part2 .txt
part3 .txt part3 .txt
......
...@@ -91,7 +91,7 @@ id msg ...@@ -91,7 +91,7 @@ id msg
EXPLAIN PARTITIONS EXPLAIN PARTITIONS
SELECT * FROM t1 WHERE id = 81; SELECT * FROM t1 WHERE id = 81;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 3 ALL NULL NULL NULL NULL 21 Using where 1 SIMPLE t1 3 ALL NULL NULL NULL NULL 38 Using where
DELETE FROM t1; DELETE FROM t1;
Warnings: Warnings:
Note 1105 xt1: 4 affected rows Note 1105 xt1: 4 affected rows
......
...@@ -3,8 +3,8 @@ let $MYSQLD_DATADIR= `select @@datadir`; ...@@ -3,8 +3,8 @@ let $MYSQLD_DATADIR= `select @@datadir`;
--echo # This will be used to see what data files are created --echo # This will be used to see what data files are created
CREATE TABLE dr1 ( CREATE TABLE dr1 (
FNAME VARCHAR(256) NOT NULL FLAG=2, fname VARCHAR(256) NOT NULL FLAG=2,
FTYPE CHAR(8) NOT NULL FLAG=3 ftype CHAR(8) NOT NULL FLAG=3
# ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size # ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size
) engine=CONNECT table_type=DIR file_name='t1#P#*.*'; ) engine=CONNECT table_type=DIR file_name='t1#P#*.*';
...@@ -29,7 +29,7 @@ SHOW TABLE STATUS LIKE 't1'; ...@@ -29,7 +29,7 @@ SHOW TABLE STATUS LIKE 't1';
--error ER_GET_ERRMSG --error ER_GET_ERRMSG
UPDATE t1 set id = 41 WHERE msg = 'four'; UPDATE t1 set id = 41 WHERE msg = 'four';
UPDATE t1 set msg = 'quatre' WHERE id = 4; UPDATE t1 set msg = 'quatre' WHERE id = 4;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
--echo # --echo #
--echo # Altering partitioning on inward table --echo # Altering partitioning on inward table
--echo # --echo #
...@@ -39,18 +39,19 @@ PARTITION first VALUES LESS THAN(11), ...@@ -39,18 +39,19 @@ PARTITION first VALUES LESS THAN(11),
PARTITION middle VALUES LESS THAN(50), PARTITION middle VALUES LESS THAN(50),
PARTITION last VALUES LESS THAN(MAXVALUE)); PARTITION last VALUES LESS THAN(MAXVALUE));
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1'; SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id=10; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id=10;
SELECT * FROM t1 WHERE id=10; SELECT * FROM t1 WHERE id=10;
DELETE FROM t1 WHERE id in (4,60); DELETE FROM t1 WHERE id in (4,60);
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
SELECT * FROM dr1; # TODO: this fails on Linux
#SELECT * FROM dr1;
--echo # --echo #
--echo # Testing partitioning on a void outward table --echo # Testing partitioning on a void outward table
--echo # --echo #
ALTER TABLE dr1 file_name='part*.*'; ALTER TABLE dr1 FILE_NAME='part*.*';
CREATE TABLE t1 ( CREATE TABLE t1 (
rwid INT(6) DEFAULT 0 SPECIAL=ROWID, rwid INT(6) DEFAULT 0 SPECIAL=ROWID,
rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM, rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM,
...@@ -67,7 +68,8 @@ PARTITION `1` VALUES LESS THAN(10), ...@@ -67,7 +68,8 @@ PARTITION `1` VALUES LESS THAN(10),
PARTITION `2` VALUES LESS THAN(50), PARTITION `2` VALUES LESS THAN(50),
PARTITION `3` VALUES LESS THAN(MAXVALUE)); PARTITION `3` VALUES LESS THAN(MAXVALUE));
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
SELECT * FROM dr1; # TODO: this fails on Linux
#SELECT * FROM dr1 ORDER BY fname, ftype;
INSERT INTO t1(id,msg) VALUES(4, 'four'); INSERT INTO t1(id,msg) VALUES(4, 'four');
SELECT * FROM dr1; SELECT * FROM dr1;
INSERT INTO t1(id,msg) VALUES(7,'seven'),(10,'ten'),(40,'forty'),(60,'sixty'),(81,'eighty one'); INSERT INTO t1(id,msg) VALUES(7,'seven'),(10,'ten'),(40,'forty'),(60,'sixty'),(81,'eighty one');
...@@ -84,7 +86,7 @@ SELECT case when id < 10 then 1 when id < 50 then 2 else 3 end as pn, count(*) F ...@@ -84,7 +86,7 @@ SELECT case when id < 10 then 1 when id < 50 then 2 else 3 end as pn, count(*) F
SELECT prtn, count(*) FROM t1 group by prtn; SELECT prtn, count(*) FROM t1 group by prtn;
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50;
SELECT * FROM t1 WHERE id = 35; SELECT * FROM t1 WHERE id = 35;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
--echo # This does not change the partition file data and is WRONG --echo # This does not change the partition file data and is WRONG
ALTER TABLE t1 ALTER TABLE t1
PARTITION by range columns(id) ( PARTITION by range columns(id) (
...@@ -93,7 +95,7 @@ PARTITION `2` VALUES LESS THAN(70), ...@@ -93,7 +95,7 @@ PARTITION `2` VALUES LESS THAN(70),
PARTITION `3` VALUES LESS THAN(MAXVALUE)); PARTITION `3` VALUES LESS THAN(MAXVALUE));
SELECT CASE WHEN id < 11 THEN 1 WHEN id < 70 THEN 2 ELSE 3 END AS pn, COUNT(*) FROM t1 GROUP BY pn; SELECT CASE WHEN id < 11 THEN 1 WHEN id < 70 THEN 2 ELSE 3 END AS pn, COUNT(*) FROM t1 GROUP BY pn;
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1'; SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
--echo # --echo #
--echo # This is the correct way to change partitioning: --echo # This is the correct way to change partitioning:
--echo # Save table values, erase the table, then re-insert saved values in modified table --echo # Save table values, erase the table, then re-insert saved values in modified table
...@@ -107,7 +109,7 @@ DELETE FROM t1; ...@@ -107,7 +109,7 @@ DELETE FROM t1;
INSERT INTO t1(id,msg) SELECT * FROM t2; INSERT INTO t1(id,msg) SELECT * FROM t2;
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1'; SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
SELECT * FROM t1; SELECT * FROM t1;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
DROP TABLE t2; DROP TABLE t2;
DROP TABLE t1; DROP TABLE t1;
...@@ -125,25 +127,25 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE)); ...@@ -125,25 +127,25 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE));
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1'; SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
SELECT * FROM t1 WHERE id < 11; SELECT * FROM t1 WHERE id < 11;
SELECT * FROM t1 WHERE id >= 70; SELECT * FROM t1 WHERE id >= 70;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
--echo # --echo #
--echo # Testing indexing on a partitioned table --echo # Testing indexing on a partitioned table
--echo # --echo #
CREATE INDEX XID ON t1(id); CREATE INDEX XID ON t1(id);
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10;
DROP INDEX XID ON t1; DROP INDEX XID ON t1;
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
ALTER TABLE t1 ADD PRIMARY KEY (id); ALTER TABLE t1 ADD PRIMARY KEY (id);
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10; EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10;
ALTER TABLE t1 DROP PRIMARY KEY; ALTER TABLE t1 DROP PRIMARY KEY;
SHOW INDEX FROM t1; SHOW INDEX FROM t1;
SELECT * FROM dr1; SELECT * FROM dr1 ORDER BY fname, ftype;
DROP TABLE t1; DROP TABLE t1;
DROP TABLE dr1; DROP TABLE dr1;
......
...@@ -933,7 +933,7 @@ bool TDBDOS::GetBlockValues(PGLOBAL g) ...@@ -933,7 +933,7 @@ bool TDBDOS::GetBlockValues(PGLOBAL g)
int flen = -1; int flen = -1;
PlugSetPath(filename, defp->Fn, GetPath()); PlugSetPath(filename, defp->Fn, GetPath());
h = open(filename, _O_RDONLY); h = open(filename, O_RDONLY);
flen = (h == -1 && errno == ENOENT) ? 0 : _filelength(h); flen = (h == -1 && errno == ENOENT) ? 0 : _filelength(h);
defp->SetOptimized((flen) ? 0 : 1); defp->SetOptimized((flen) ? 0 : 1);
...@@ -2615,12 +2615,12 @@ bool DOSCOL::SetMinMax(PGLOBAL g) ...@@ -2615,12 +2615,12 @@ bool DOSCOL::SetMinMax(PGLOBAL g)
bool DOSCOL::SetBitMap(PGLOBAL g) bool DOSCOL::SetBitMap(PGLOBAL g)
{ {
int i, m, n; int i, m, n;
PULONG bmp; uint *bmp;
PTDBDOS tp = (PTDBDOS)To_Tdb; PTDBDOS tp = (PTDBDOS)To_Tdb;
PDBUSER dup = PlgGetUser(g); PDBUSER dup = PlgGetUser(g);
n = tp->Txfp->CurNum; n = tp->Txfp->CurNum;
bmp = (PULONG)Bmap->GetValPtr(Nbm * tp->Txfp->CurBlk); bmp = (uint*)Bmap->GetValPtr(Nbm * tp->Txfp->CurBlk);
// Extract column value from current line // Extract column value from current line
ReadColumn(g); ReadColumn(g);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment