diff --git a/storage/connect/array.cpp b/storage/connect/array.cpp index 052057ad12b..7f9bef4265d 100644 --- a/storage/connect/array.cpp +++ b/storage/connect/array.cpp @@ -23,6 +23,8 @@ //#include #else // !WIN32 #include +#include +#include #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; diff --git a/storage/connect/array.h b/storage/connect/array.h index c05757d7abc..dee1b7a846a 100644 --- a/storage/connect/array.h +++ b/storage/connect/array.h @@ -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); diff --git a/storage/connect/blkfil.cpp b/storage/connect/blkfil.cpp index d6da60166e8..c1099261cef 100644 --- a/storage/connect/blkfil.cpp +++ b/storage/connect/blkfil.cpp @@ -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 diff --git a/storage/connect/blkfil.h b/storage/connect/blkfil.h index a648fc2a422..00b00139042 100644 --- a/storage/connect/blkfil.h +++ b/storage/connect/blkfil.h @@ -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 diff --git a/storage/connect/filter.cpp b/storage/connect/filter.cpp index 229b6f7b0ec..9212432cdde 100644 --- a/storage/connect/filter.cpp +++ b/storage/connect/filter.cpp @@ -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); diff --git a/storage/connect/filter.h b/storage/connect/filter.h index 85dc6dd4795..78e066d9ab7 100644 --- a/storage/connect/filter.h +++ b/storage/connect/filter.h @@ -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 diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index ff66b03649c..6fcb56966c7 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -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); diff --git a/storage/connect/mysql-test/connect/r/part_file.result b/storage/connect/mysql-test/connect/r/part_file.result index 4a343500bf7..55f7c44fdfc 100644 --- a/storage/connect/mysql-test/connect/r/part_file.result +++ b/storage/connect/mysql-test/connect/r/part_file.result @@ -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 diff --git a/storage/connect/mysql-test/connect/r/part_table.result b/storage/connect/mysql-test/connect/r/part_table.result index 03c130548fa..9c191a8362d 100644 --- a/storage/connect/mysql-test/connect/r/part_table.result +++ b/storage/connect/mysql-test/connect/r/part_table.result @@ -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 diff --git a/storage/connect/mysql-test/connect/t/part_file.test b/storage/connect/mysql-test/connect/t/part_file.test index 52225a3cead..356be7d35b9 100644 --- a/storage/connect/mysql-test/connect/t/part_file.test +++ b/storage/connect/mysql-test/connect/t/part_file.test @@ -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; diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp index 7dbe8c71aa6..bb532a141cf 100644 --- a/storage/connect/tabdos.cpp +++ b/storage/connect/tabdos.cpp @@ -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);