summaryrefslogtreecommitdiff
path: root/storage/connect/filamdbf.cpp
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2013-01-31 22:55:56 +0100
committerOlivier Bertrand <bertrandop@gmail.com>2013-01-31 22:55:56 +0100
commit627d046df53be05655970362df6167e10c41e418 (patch)
tree349677c52def536adf00827d9f2e7f611bc04917 /storage/connect/filamdbf.cpp
parente8c24a7374651c4e9c6122846a205b70abbfb077 (diff)
downloadmariadb-git-627d046df53be05655970362df6167e10c41e418.tar.gz
DBF type N is now BIGINT when length is > 10.
Fix ha_connect::external_lock to use F_RDLCK, F_WRLCK, F_UNLCK.
Diffstat (limited to 'storage/connect/filamdbf.cpp')
-rw-r--r--storage/connect/filamdbf.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/storage/connect/filamdbf.cpp b/storage/connect/filamdbf.cpp
index f8059066ac0..26cf33d9c71 100644
--- a/storage/connect/filamdbf.cpp
+++ b/storage/connect/filamdbf.cpp
@@ -194,7 +194,7 @@ PQRYRES DBFColumns(PGLOBAL g, char *fn, BOOL info)
static unsigned int length[] = {11, 6, 8, 10, 10, 6};
char buf[2], filename[_MAX_PATH];
int ncol = sizeof(dbtype) / sizeof(int);
- int rc, type, field, fields;
+ int rc, type, len, field, fields;
BOOL bad;
DBFHEADER mainhead;
DESCRIPTOR thisfield;
@@ -260,11 +260,12 @@ PQRYRES DBFColumns(PGLOBAL g, char *fn, BOOL info)
if (fread(&thisfield, HEADLEN, 1, infile) != 1) {
sprintf(g->Message, MSG(ERR_READING_REC), field+1, fn);
goto err;
- } // endif fread
+ } else
+ len = thisfield.Length;
if (trace)
htrc("%-11s %c %6ld %3d %2d %3d %3d\n",
- thisfield.Name, thisfield.Type, thisfield.Offset, thisfield.Length,
+ thisfield.Name, thisfield.Type, thisfield.Offset, len,
thisfield.Decimals, thisfield.Setfield, thisfield.Mdxfield);
/************************************************************************/
@@ -276,7 +277,8 @@ PQRYRES DBFColumns(PGLOBAL g, char *fn, BOOL info)
type = TYPE_STRING;
break;
case 'N':
- type = (thisfield.Decimals) ? TYPE_FLOAT : TYPE_INT;
+ type = (thisfield.Decimals) ? TYPE_FLOAT
+ : (len > 10) ? TYPE_BIGINT : TYPE_INT;
break;
case 'F':
type = TYPE_FLOAT;