mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Merge branch '10.1' into 10.2
This commit is contained in:
commit
4a5d25c338
802 changed files with 37465 additions and 15102 deletions
|
|
@ -383,7 +383,7 @@ DBFBASE::DBFBASE(DBFBASE *txfp)
|
|||
/* and header length. Set Records, check that Reclen is equal to lrecl and */
|
||||
/* return the header length or 0 in case of error. */
|
||||
/****************************************************************************/
|
||||
int DBFBASE::ScanHeader(PGLOBAL g, PSZ fname, int lrecl, char *defpath)
|
||||
int DBFBASE::ScanHeader(PGLOBAL g, PSZ fn, int lrecl, int *rln, char *defpath)
|
||||
{
|
||||
int rc;
|
||||
char filename[_MAX_PATH];
|
||||
|
|
@ -393,7 +393,7 @@ int DBFBASE::ScanHeader(PGLOBAL g, PSZ fname, int lrecl, char *defpath)
|
|||
/************************************************************************/
|
||||
/* Open the input file. */
|
||||
/************************************************************************/
|
||||
PlugSetPath(filename, fname, defpath);
|
||||
PlugSetPath(filename, fn, defpath);
|
||||
|
||||
if (!(infile= global_fopen(g, MSGID_CANNOT_OPEN, filename, "rb")))
|
||||
return 0; // Assume file does not exist
|
||||
|
|
@ -410,11 +410,7 @@ int DBFBASE::ScanHeader(PGLOBAL g, PSZ fname, int lrecl, char *defpath)
|
|||
} else if (rc == RC_FX)
|
||||
return -1;
|
||||
|
||||
if ((int)header.Reclen() != lrecl) {
|
||||
sprintf(g->Message, MSG(BAD_LRECL), lrecl, header.Reclen());
|
||||
return -1;
|
||||
} // endif Lrecl
|
||||
|
||||
*rln = (int)header.Reclen();
|
||||
Records = (int)header.Records();
|
||||
return (int)header.Headlen();
|
||||
} // end of ScanHeader
|
||||
|
|
@ -431,9 +427,27 @@ int DBFFAM::Cardinality(PGLOBAL g)
|
|||
if (!g)
|
||||
return 1;
|
||||
|
||||
if (!Headlen)
|
||||
if ((Headlen = ScanHeader(g, To_File, Lrecl, Tdbp->GetPath())) < 0)
|
||||
return -1; // Error in ScanHeader
|
||||
if (!Headlen) {
|
||||
int rln = 0; // Record length in the file header
|
||||
|
||||
Headlen = ScanHeader(g, To_File, Lrecl, &rln, Tdbp->GetPath());
|
||||
|
||||
if (Headlen < 0)
|
||||
return -1; // Error in ScanHeader
|
||||
|
||||
if (rln && Lrecl != rln) {
|
||||
// This happens always on some Linux platforms
|
||||
sprintf(g->Message, MSG(BAD_LRECL), Lrecl, rln);
|
||||
|
||||
if (Accept) {
|
||||
Lrecl = rln;
|
||||
PushWarning(g, Tdbp);
|
||||
} else
|
||||
return -1;
|
||||
|
||||
} // endif rln
|
||||
|
||||
} // endif Headlen
|
||||
|
||||
// Set number of blocks for later use
|
||||
Block = (Records > 0) ? (Records + Nrec - 1) / Nrec : 0;
|
||||
|
|
@ -565,7 +579,13 @@ bool DBFFAM::AllocateBuffer(PGLOBAL g)
|
|||
|
||||
if (Lrecl != reclen) {
|
||||
sprintf(g->Message, MSG(BAD_LRECL), Lrecl, reclen);
|
||||
return true;
|
||||
|
||||
if (Accept) {
|
||||
Lrecl = reclen;
|
||||
PushWarning(g, Tdbp);
|
||||
} else
|
||||
return true;
|
||||
|
||||
} // endif Lrecl
|
||||
|
||||
hlen = HEADLEN * (n + 1) + 2;
|
||||
|
|
@ -641,8 +661,14 @@ bool DBFFAM::AllocateBuffer(PGLOBAL g)
|
|||
if ((rc = dbfhead(g, Stream, Tdbp->GetFile(g), &header)) == RC_OK) {
|
||||
if (Lrecl != (int)header.Reclen()) {
|
||||
sprintf(g->Message, MSG(BAD_LRECL), Lrecl, header.Reclen());
|
||||
return true;
|
||||
} // endif Lrecl
|
||||
|
||||
if (Accept) {
|
||||
Lrecl = header.Reclen();
|
||||
PushWarning(g, Tdbp);
|
||||
} else
|
||||
return true;
|
||||
|
||||
} // endif Lrecl
|
||||
|
||||
Records = (int)header.Records();
|
||||
Headlen = (int)header.Headlen();
|
||||
|
|
@ -916,9 +942,27 @@ int DBMFAM::Cardinality(PGLOBAL g)
|
|||
if (!g)
|
||||
return 1;
|
||||
|
||||
if (!Headlen)
|
||||
if ((Headlen = ScanHeader(g, To_File, Lrecl, Tdbp->GetPath())) < 0)
|
||||
return -1; // Error in ScanHeader
|
||||
if (!Headlen) {
|
||||
int rln = 0; // Record length in the file header
|
||||
|
||||
Headlen = ScanHeader(g, To_File, Lrecl, &rln, Tdbp->GetPath());
|
||||
|
||||
if (Headlen < 0)
|
||||
return -1; // Error in ScanHeader
|
||||
|
||||
if (rln && Lrecl != rln) {
|
||||
// This happens always on some Linux platforms
|
||||
sprintf(g->Message, MSG(BAD_LRECL), Lrecl, rln);
|
||||
|
||||
if (Accept) {
|
||||
Lrecl = rln;
|
||||
PushWarning(g, Tdbp);
|
||||
} else
|
||||
return -1;
|
||||
|
||||
} // endif rln
|
||||
|
||||
} // endif Headlen
|
||||
|
||||
// Set number of blocks for later use
|
||||
Block = (Records > 0) ? (Records + Nrec - 1) / Nrec : 0;
|
||||
|
|
@ -961,8 +1005,14 @@ bool DBMFAM::AllocateBuffer(PGLOBAL g)
|
|||
|
||||
if (Lrecl != (int)hp->Reclen()) {
|
||||
sprintf(g->Message, MSG(BAD_LRECL), Lrecl, hp->Reclen());
|
||||
return true;
|
||||
} // endif Lrecl
|
||||
|
||||
if (Accept) {
|
||||
Lrecl = hp->Reclen();
|
||||
PushWarning(g, Tdbp);
|
||||
} else
|
||||
return true;
|
||||
|
||||
} // endif Lrecl
|
||||
|
||||
Records = (int)hp->Records();
|
||||
Headlen = (int)hp->Headlen();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue