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 @@
//#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);
......
# 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);
......
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