mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
- 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
This commit is contained in:
@@ -23,6 +23,8 @@
|
||||
//#include <windows.h>
|
||||
#else // !WIN32
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#endif // !WIN32
|
||||
|
||||
/***********************************************************************/
|
||||
@@ -63,6 +65,7 @@ extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
|
||||
/***********************************************************************/
|
||||
BYTE OpBmp(PGLOBAL g, OPVAL opc);
|
||||
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. */
|
||||
@@ -94,7 +97,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
|
||||
sprintf(g->Message, MSG(BAD_PARAM_TYPE), "MakeValueArray", parmp->Type);
|
||||
return NULL;
|
||||
} 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. */
|
||||
@@ -113,7 +116,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
|
||||
par->AddValue(g, (PSZ)parmp->Value);
|
||||
break;
|
||||
case TYPE_SHORT:
|
||||
par->AddValue(g, *(SHORT*)parmp->Value);
|
||||
par->AddValue(g, *(short*)parmp->Value);
|
||||
break;
|
||||
case TYPE_INT:
|
||||
par->AddValue(g, *(int*)parmp->Value);
|
||||
@@ -287,7 +290,7 @@ bool ARRAY::AddValue(PGLOBAL g, PSZ strp)
|
||||
/***********************************************************************/
|
||||
/* 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) {
|
||||
sprintf(g->Message, MSG(ADD_BAD_TYPE), GetTypeName(Type), "SHORT");
|
||||
@@ -539,14 +542,14 @@ bool ARRAY::CanBeShort(void)
|
||||
/***********************************************************************/
|
||||
/* Convert an array to new numeric type k. */
|
||||
/* Note: conversion is always made in ascending order from STRING to */
|
||||
/* SHORT to int to double so no precision is lost in the conversion. */
|
||||
/* One exception is converting from int to SHORT compatible arrays. */
|
||||
/* short to int to double so no precision is lost in the conversion. */
|
||||
/* One exception is converting from int to short compatible arrays. */
|
||||
/***********************************************************************/
|
||||
int ARRAY::Convert(PGLOBAL g, int k, PVAL vp)
|
||||
{
|
||||
int i, prec = 0;
|
||||
bool b = FALSE;
|
||||
PMBV ovblk = Valblk;
|
||||
int i, prec = 0;
|
||||
bool b = FALSE;
|
||||
PMBV ovblk = Valblk;
|
||||
PVBLK ovblp = Vblp;
|
||||
|
||||
Type = k; // k is the new type
|
||||
@@ -796,8 +799,8 @@ int ARRAY::BlockTest(PGLOBAL g, int opc, int opm,
|
||||
case TYPE_STRING: veq = (Vblp->IsCi())
|
||||
? !stricmp((char*)minp, (char*)maxp)
|
||||
: !strcmp((char*)minp, (char*)maxp); break;
|
||||
case TYPE_SHORT: veq = *(SHORT*)minp == *(SHORT*)maxp; break;
|
||||
case TYPE_INT: veq = *(PINT)minp == *(PINT)maxp; break;
|
||||
case TYPE_SHORT: veq = *(short*)minp == *(short*)maxp; break;
|
||||
case TYPE_INT: veq = *(int*)minp == *(int*)maxp; break;
|
||||
case TYPE_DOUBLE: veq = *(double*)minp == *(double*)maxp; break;
|
||||
default: veq = FALSE; // Error ?
|
||||
} // endswitch type
|
||||
@@ -904,7 +907,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
|
||||
if (Type == TYPE_LIST)
|
||||
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);
|
||||
|
||||
for (i = 0; i < Nval; i++) {
|
||||
@@ -935,10 +938,10 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
|
||||
/***********************************************************************/
|
||||
/* 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];
|
||||
int lim = min(Nval,10);
|
||||
int lim = MY_MIN(Nval,10);
|
||||
|
||||
memset(m, ' ', n); // Make margin string
|
||||
m[n] = '\0';
|
||||
@@ -963,7 +966,7 @@ void ARRAY::Print(PGLOBAL g, FILE *f, UINT n)
|
||||
/***********************************************************************/
|
||||
/* 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)
|
||||
return;
|
||||
|
@@ -52,12 +52,12 @@ class DllExport ARRAY : public XOBJECT, public CSORT { // Array descblock
|
||||
virtual bool Compare(PXOB) {assert(FALSE); return FALSE;}
|
||||
virtual bool SetFormat(PGLOBAL, FORMAT&) {assert(FALSE); return FALSE;}
|
||||
//virtual int CheckSpcCol(PTDB, int) {return 0;}
|
||||
virtual void Print(PGLOBAL g, FILE *f, UINT n);
|
||||
virtual void Print(PGLOBAL g, char *ps, UINT z);
|
||||
virtual void Print(PGLOBAL g, FILE *f, uint n);
|
||||
virtual void Print(PGLOBAL g, char *ps, uint z);
|
||||
void Empty(void);
|
||||
void SetPrecision(PGLOBAL g, int p);
|
||||
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, double f);
|
||||
bool AddValue(PGLOBAL g, PXOB xp);
|
||||
|
@@ -61,7 +61,7 @@ BLOCKFILTER::BLOCKFILTER(PTDBDOS tdbp, int op)
|
||||
/***********************************************************************/
|
||||
/* 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];
|
||||
|
||||
@@ -75,7 +75,7 @@ void BLOCKFILTER::Print(PGLOBAL g, FILE *f, UINT n)
|
||||
/***********************************************************************/
|
||||
/* 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);
|
||||
} // end of Print
|
||||
@@ -131,10 +131,10 @@ int BLKFILLOG::BlockEval(PGLOBAL g)
|
||||
Result = (Opc == OP_NOT) ? -rc : rc;
|
||||
else switch (Opc) {
|
||||
case OP_AND:
|
||||
Result = min(Result, rc);
|
||||
Result = MY_MIN(Result, rc);
|
||||
break;
|
||||
case OP_OR:
|
||||
Result = max(Result, rc);
|
||||
Result = MY_MAX(Result, rc);
|
||||
break;
|
||||
default:
|
||||
// Should never happen
|
||||
@@ -318,8 +318,8 @@ int BLKFILAR2::BlockEval(PGLOBAL g)
|
||||
#endif
|
||||
|
||||
int n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
|
||||
ULONG bkmp = *(PULONG)Colp->GetBmap()->GetValPtr(n);
|
||||
ULONG bres = Bmp & bkmp;
|
||||
uint bkmp = *(uint*)Colp->GetBmap()->GetValPtr(n);
|
||||
uint bres = Bmp & bkmp;
|
||||
|
||||
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE
|
||||
if (!bres) {
|
||||
@@ -358,8 +358,8 @@ BLKFILMR2::BLKFILMR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp)
|
||||
: BLKFILARI(g, tdbp, op, xp)
|
||||
{
|
||||
Nbm = Colp->GetNbm();
|
||||
Bmp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG));
|
||||
Bxp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG));
|
||||
Bmp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
|
||||
Bxp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
|
||||
MakeValueBitmap();
|
||||
} // end of BLKFILMR2 constructor
|
||||
|
||||
@@ -441,8 +441,8 @@ int BLKFILMR2::BlockEval(PGLOBAL g)
|
||||
|
||||
int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
|
||||
bool fnd = FALSE, all = TRUE, gt = TRUE;
|
||||
ULONG bres;
|
||||
PULONG bkmp = (PULONG)Colp->GetBmap()->GetValPtr(n * Nbm);
|
||||
uint bres;
|
||||
uint *bkmp = (uint*)Colp->GetBmap()->GetValPtr(n * Nbm);
|
||||
|
||||
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE
|
||||
for (i = 0; i < Nbm; i++)
|
||||
@@ -645,8 +645,8 @@ BLKFILIN2::BLKFILIN2(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp)
|
||||
Nbm = Colp->GetNbm();
|
||||
Valp = AllocateValue(g, Colp->GetValue());
|
||||
Invert = (Opc == OP_NE || Opc == OP_GE || Opc ==OP_GT);
|
||||
Bmp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG));
|
||||
Bxp = (PULONG)PlugSubAlloc(g, NULL, Nbm * sizeof(ULONG));
|
||||
Bmp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
|
||||
Bxp = (uint*)PlugSubAlloc(g, NULL, Nbm * sizeof(uint));
|
||||
MakeValueBitmap();
|
||||
} // end of BLKFILIN2 constructor
|
||||
|
||||
@@ -662,7 +662,7 @@ void BLKFILIN2::MakeValueBitmap(void)
|
||||
int i, k, n, ndv = Colp->GetNdv();
|
||||
bool found, noteq = !(Opc == OP_EQ || Opc == OP_NE);
|
||||
bool all = (!Invert) ? (Opm == 2) : (Opm != 2);
|
||||
ULONG btp;
|
||||
uint btp;
|
||||
PVBLK dval = Colp->GetDval();
|
||||
|
||||
N = -1;
|
||||
@@ -748,8 +748,8 @@ int BLKFILIN2::BlockEval(PGLOBAL g)
|
||||
|
||||
int i, n = ((PTDBDOS)Colp->GetTo_Tdb())->GetCurBlk();
|
||||
bool fnd = FALSE, all = TRUE, gt = TRUE;
|
||||
ULONG bres;
|
||||
PULONG bkmp = (PULONG)Colp->GetBmap()->GetValPtr(n * Nbm);
|
||||
uint bres;
|
||||
uint *bkmp = (uint*)Colp->GetBmap()->GetValPtr(n * Nbm);
|
||||
|
||||
// Set result as if Opc were OP_EQ, OP_LT, or OP_LE
|
||||
// The difference between ALL or ANY was handled in MakeValueBitmap
|
||||
|
@@ -27,8 +27,8 @@ class DllExport BLOCKFILTER : public BLOCK { /* Block Filter */
|
||||
// Methods
|
||||
virtual void Reset(PGLOBAL) = 0;
|
||||
virtual int BlockEval(PGLOBAL) = 0;
|
||||
virtual void Print(PGLOBAL g, FILE *f, UINT n);
|
||||
virtual void Print(PGLOBAL g, char *ps, UINT z);
|
||||
virtual void Print(PGLOBAL g, FILE *f, uint n);
|
||||
virtual void Print(PGLOBAL g, char *ps, uint z);
|
||||
|
||||
protected:
|
||||
BLOCKFILTER(void) {} // Standard constructor not to be used
|
||||
@@ -100,8 +100,8 @@ class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */
|
||||
BLKFILAR2(void) {} // Standard constructor not to be used
|
||||
|
||||
// Members
|
||||
ULONG Bmp; // The value bitmap used to test blocks
|
||||
ULONG Bxp; // Bitmap used when Opc = OP_EQ
|
||||
uint Bmp; // The value bitmap used to test blocks
|
||||
uint Bxp; // Bitmap used when Opc = OP_EQ
|
||||
}; // end of class BLKFILAR2
|
||||
|
||||
/***********************************************************************/
|
||||
@@ -124,8 +124,8 @@ class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */
|
||||
int Nbm; // The number of ULONG bitmaps
|
||||
int N; // The position of the leftmost ULONG
|
||||
bool Void; // True if all file blocks can be skipped
|
||||
PULONG Bmp; // The values bitmaps used to test blocks
|
||||
PULONG Bxp; // Bit of values <= max value
|
||||
uint *Bmp; // The values bitmaps used to test blocks
|
||||
uint *Bxp; // Bit of values <= max value
|
||||
}; // end of class BLKFILMR2
|
||||
|
||||
/***********************************************************************/
|
||||
@@ -191,8 +191,8 @@ class DllExport BLKFILIN2 : public BLKFILIN { // With array arguments.
|
||||
//bool Bitmap; // True for IN operator (temporary)
|
||||
bool Void; // True if all file blocks can be skipped
|
||||
bool Invert; // True when Result must be inverted
|
||||
PULONG Bmp; // The values bitmaps used to test blocks
|
||||
PULONG Bxp; // Bit of values <= max value
|
||||
uint *Bmp; // The values bitmaps used to test blocks
|
||||
uint *Bxp; // Bit of values <= max value
|
||||
PVAL Valp; // Used while building the bitmaps
|
||||
}; // end of class BLKFILIN2
|
||||
|
||||
|
@@ -47,12 +47,12 @@ extern "C" int trace;
|
||||
/***********************************************************************/
|
||||
/* Utility routines. */
|
||||
/***********************************************************************/
|
||||
void PlugConvertConstant(PGLOBAL, PVOID&, SHORT&);
|
||||
PVOID PlugCopyDB(PTABS, PVOID, INT);
|
||||
void NewPointer(PTABS, PVOID, PVOID);
|
||||
void AddPointer(PTABS, PVOID);
|
||||
void PlugConvertConstant(PGLOBAL, void* &, short&);
|
||||
//void *PlugCopyDB(PTABS, void*, INT);
|
||||
void NewPointer(PTABS, void*, void*);
|
||||
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));
|
||||
pp->Type = TYPE_XOBJECT;
|
||||
@@ -1387,7 +1387,7 @@ PFIL FILTER::Copy(PTABS t)
|
||||
/*********************************************************************/
|
||||
/* 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];
|
||||
|
||||
@@ -1420,7 +1420,7 @@ void FILTER::Print(PGLOBAL g, FILE *f, UINT n)
|
||||
/***********************************************************************/
|
||||
/* 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
|
||||
|
||||
@@ -1510,14 +1510,14 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
|
||||
bcp = bxp;
|
||||
break;
|
||||
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[0] = '^';
|
||||
bcp->Cold[1] = '(';
|
||||
strcat(bcp->Cold, ")");
|
||||
break;
|
||||
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[0] = ')';
|
||||
switch (fp->Opc) {
|
||||
@@ -1528,7 +1528,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
|
||||
bcp->Cold[2] = '(';
|
||||
strcat(bcp->Cold, ")");
|
||||
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[0] = '(';
|
||||
strncat(bxp->Cold, bcp->Cold, FLEN-strlen(bxp->Cold));
|
||||
@@ -1546,7 +1546,7 @@ void FILTER::Print(PGLOBAL g, char *ps, UINT z)
|
||||
if (z > 0) {
|
||||
if (n++ > 0) {
|
||||
strncat(ps, "*?*", z);
|
||||
z = max(0, (int)z-3);
|
||||
z = MY_MAX(0, (int)z-3);
|
||||
} // endif
|
||||
strncat(ps, bcp->Cold, z);
|
||||
z -= strlen(bcp->Cold);
|
||||
|
@@ -61,8 +61,8 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
|
||||
//virtual PXOB CheckSubQuery(PGLOBAL, PSQL);
|
||||
//virtual bool CheckLocal(PTDB);
|
||||
//virtual int CheckSpcCol(PTDB tdbp, int n);
|
||||
virtual void Print(PGLOBAL g, FILE *f, UINT n);
|
||||
virtual void Print(PGLOBAL g, char *ps, UINT z);
|
||||
virtual void Print(PGLOBAL g, FILE *f, uint n);
|
||||
virtual void Print(PGLOBAL g, char *ps, uint z);
|
||||
// PFIL Linearize(bool nosep);
|
||||
// PFIL Link(PGLOBAL g, PFIL fil2);
|
||||
// PFIL RemoveLastSep(void);
|
||||
@@ -106,9 +106,11 @@ class FILTERX : public FILTER {
|
||||
|
||||
// Fake operator new used to change a filter into a derived filter
|
||||
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
|
||||
void operator delete(void *, PFIL) {}
|
||||
#else
|
||||
void operator delete(void *) {}
|
||||
#endif
|
||||
}; // end of class FILTERX
|
||||
|
||||
|
@@ -209,6 +209,9 @@ static my_bool indx_map= 0;
|
||||
/***********************************************************************/
|
||||
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
|
||||
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 PGLOBAL GetPlug(THD *thd, PCONNECT& lxp);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# This will be used to see what data files are created
|
||||
CREATE TABLE dr1 (
|
||||
FNAME VARCHAR(256) NOT NULL FLAG=2,
|
||||
FTYPE CHAR(8) NOT NULL FLAG=3
|
||||
fname VARCHAR(256) NOT NULL FLAG=2,
|
||||
ftype CHAR(8) NOT NULL FLAG=3
|
||||
# ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size
|
||||
) engine=CONNECT table_type=DIR file_name='t1#P#*.*';
|
||||
#
|
||||
@@ -33,19 +33,19 @@ id msg
|
||||
81 eighty one
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50;
|
||||
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;
|
||||
id msg
|
||||
60 sixty
|
||||
81 eighty one
|
||||
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
|
||||
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';
|
||||
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;
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
t1#P#first .csv
|
||||
t1#P#last .csv
|
||||
t1#P#middle .csv
|
||||
@@ -62,14 +62,14 @@ partition_name table_rows
|
||||
first 3
|
||||
middle 2
|
||||
last 2
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
t1#P#first .csv
|
||||
t1#P#last .csv
|
||||
t1#P#middle .csv
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id=10;
|
||||
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;
|
||||
id msg
|
||||
10 ten
|
||||
@@ -82,12 +82,10 @@ id msg
|
||||
40 forty
|
||||
81 eighty one
|
||||
DROP TABLE t1;
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
#
|
||||
# Testing partitioning on a void outward table
|
||||
#
|
||||
ALTER TABLE dr1 file_name='part*.*';
|
||||
ALTER TABLE dr1 FILE_NAME='part*.*';
|
||||
CREATE TABLE t1 (
|
||||
rwid INT(6) DEFAULT 0 SPECIAL=ROWID,
|
||||
rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM,
|
||||
@@ -105,11 +103,9 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE));
|
||||
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
|
||||
t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
INSERT INTO t1(id,msg) VALUES(4, 'four');
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
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
|
||||
SELECT * FROM t1 WHERE id = 35;
|
||||
rwid rnum prtn tbn fid id msg
|
||||
4 4 2 t1 part2 35 thirty five
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -210,8 +206,8 @@ partition_name table_rows
|
||||
1 4
|
||||
2 4
|
||||
3 3
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -249,8 +245,8 @@ rwid rnum prtn tbn fid id msg
|
||||
4 4 2 t1 part2 60 sixty
|
||||
1 1 3 t1 part3 81 eighty one
|
||||
2 2 3 t1 part3 72 seventy two
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -290,8 +286,8 @@ SELECT * FROM t1 WHERE id >= 70;
|
||||
id msg
|
||||
81 eighty one
|
||||
72 seventy two
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -305,8 +301,8 @@ CREATE INDEX XID ON t1(id);
|
||||
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
|
||||
t1 1 XID 1 id A NULL NULL NULL XINDEX
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -319,8 +315,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
DROP INDEX XID ON 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
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .txt
|
||||
part2 .txt
|
||||
part3 .txt
|
||||
@@ -328,8 +324,8 @@ ALTER TABLE t1 ADD PRIMARY KEY (id);
|
||||
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
|
||||
t1 0 PRIMARY 1 id A NULL NULL NULL XINDEX
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .fnx
|
||||
part1 .txt
|
||||
part2 .fnx
|
||||
@@ -342,8 +338,8 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
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
|
||||
SELECT * FROM dr1;
|
||||
FNAME FTYPE
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
fname ftype
|
||||
part1 .txt
|
||||
part2 .txt
|
||||
part3 .txt
|
||||
|
@@ -91,7 +91,7 @@ id msg
|
||||
EXPLAIN PARTITIONS
|
||||
SELECT * FROM t1 WHERE id = 81;
|
||||
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;
|
||||
Warnings:
|
||||
Note 1105 xt1: 4 affected rows
|
||||
|
@@ -3,8 +3,8 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--echo # This will be used to see what data files are created
|
||||
CREATE TABLE dr1 (
|
||||
FNAME VARCHAR(256) NOT NULL FLAG=2,
|
||||
FTYPE CHAR(8) NOT NULL FLAG=3
|
||||
fname VARCHAR(256) NOT NULL FLAG=2,
|
||||
ftype CHAR(8) NOT NULL FLAG=3
|
||||
# ,FSIZE INT(6) NOT NULL FLAG=5 removed because Unix size != Windows size
|
||||
) engine=CONNECT table_type=DIR file_name='t1#P#*.*';
|
||||
|
||||
@@ -29,7 +29,7 @@ SHOW TABLE STATUS LIKE 't1';
|
||||
--error ER_GET_ERRMSG
|
||||
UPDATE t1 set id = 41 WHERE msg = 'four';
|
||||
UPDATE t1 set msg = 'quatre' WHERE id = 4;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
--echo #
|
||||
--echo # Altering partitioning on inward table
|
||||
--echo #
|
||||
@@ -39,18 +39,19 @@ PARTITION first VALUES LESS THAN(11),
|
||||
PARTITION middle VALUES LESS THAN(50),
|
||||
PARTITION last VALUES LESS THAN(MAXVALUE));
|
||||
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;
|
||||
SELECT * FROM t1 WHERE id=10;
|
||||
DELETE FROM t1 WHERE id in (4,60);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
SELECT * FROM dr1;
|
||||
# TODO: this fails on Linux
|
||||
#SELECT * FROM dr1;
|
||||
|
||||
--echo #
|
||||
--echo # Testing partitioning on a void outward table
|
||||
--echo #
|
||||
ALTER TABLE dr1 file_name='part*.*';
|
||||
ALTER TABLE dr1 FILE_NAME='part*.*';
|
||||
CREATE TABLE t1 (
|
||||
rwid INT(6) DEFAULT 0 SPECIAL=ROWID,
|
||||
rnum INT(6) DEFAULT 0 SPECIAL=ROWNUM,
|
||||
@@ -67,7 +68,8 @@ PARTITION `1` VALUES LESS THAN(10),
|
||||
PARTITION `2` VALUES LESS THAN(50),
|
||||
PARTITION `3` VALUES LESS THAN(MAXVALUE));
|
||||
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');
|
||||
SELECT * FROM dr1;
|
||||
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
|
||||
SELECT prtn, count(*) FROM t1 group by prtn;
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id > 50;
|
||||
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
|
||||
ALTER TABLE t1
|
||||
PARTITION by range columns(id) (
|
||||
@@ -93,7 +95,7 @@ PARTITION `2` VALUES LESS THAN(70),
|
||||
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 partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
--echo #
|
||||
--echo # This is the correct way to change partitioning:
|
||||
--echo # Save table values, erase the table, then re-insert saved values in modified table
|
||||
@@ -107,7 +109,7 @@ DELETE FROM t1;
|
||||
INSERT INTO t1(id,msg) SELECT * FROM t2;
|
||||
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
@@ -125,25 +127,25 @@ PARTITION `3` VALUES LESS THAN(MAXVALUE));
|
||||
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name = 't1';
|
||||
SELECT * FROM t1 WHERE id < 11;
|
||||
SELECT * FROM t1 WHERE id >= 70;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
|
||||
--echo #
|
||||
--echo # Testing indexing on a partitioned table
|
||||
--echo #
|
||||
CREATE INDEX XID ON t1(id);
|
||||
SHOW INDEX FROM t1;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10;
|
||||
DROP INDEX XID ON t1;
|
||||
SHOW INDEX FROM t1;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY (id);
|
||||
SHOW INDEX FROM t1;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE id = 10;
|
||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
SHOW INDEX FROM t1;
|
||||
SELECT * FROM dr1;
|
||||
SELECT * FROM dr1 ORDER BY fname, ftype;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE dr1;
|
||||
|
||||
|
@@ -933,7 +933,7 @@ bool TDBDOS::GetBlockValues(PGLOBAL g)
|
||||
int flen = -1;
|
||||
|
||||
PlugSetPath(filename, defp->Fn, GetPath());
|
||||
h = open(filename, _O_RDONLY);
|
||||
h = open(filename, O_RDONLY);
|
||||
flen = (h == -1 && errno == ENOENT) ? 0 : _filelength(h);
|
||||
defp->SetOptimized((flen) ? 0 : 1);
|
||||
|
||||
@@ -2615,12 +2615,12 @@ bool DOSCOL::SetMinMax(PGLOBAL g)
|
||||
bool DOSCOL::SetBitMap(PGLOBAL g)
|
||||
{
|
||||
int i, m, n;
|
||||
PULONG bmp;
|
||||
uint *bmp;
|
||||
PTDBDOS tp = (PTDBDOS)To_Tdb;
|
||||
PDBUSER dup = PlgGetUser(g);
|
||||
|
||||
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
|
||||
ReadColumn(g);
|
||||
|
Reference in New Issue
Block a user