Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
ca012682
Commit
ca012682
authored
Apr 02, 2013
by
Olivier Bertrand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Fix huge vec tables bug. This was not yet completely implemented for Unix.
modified: storage/connect/filamvct.cpp
parent
d8056905
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
262 additions
and
277 deletions
+262
-277
storage/connect/filamvct.cpp
storage/connect/filamvct.cpp
+262
-277
No files found.
storage/connect/filamvct.cpp
View file @
ca012682
...
...
@@ -10,7 +10,7 @@
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
/* This program are the VCT file access method classes. */
/* Added in version 2: */
/* Added in version 2:
F
*/
/* - Split Vec format. */
/* - Partial delete. */
/* - Use of tempfile for update. */
...
...
@@ -65,6 +65,7 @@
extern
int
num_read
,
num_there
;
// Statistics
static
int
num_write
;
extern
"C"
int
trace
;
#if defined(UNIX)
// Add dummy strerror (NGC)
...
...
@@ -302,10 +303,9 @@ int VCTFAM::Cardinality(PGLOBAL g)
else
sprintf
(
g
->
Message
,
MSG
(
NOT_FIXED_LEN
),
To_File
,
len
,
clen
);
#ifdef DEBTRACE
htrc
(
" Computed max_K=%d Filen=%d Clen=%d
\n
"
,
card
,
len
,
clen
);
#endif
if
(
trace
)
htrc
(
" Computed max_K=%d Filen=%d Clen=%d
\n
"
,
card
,
len
,
clen
);
}
else
card
=
0
;
...
...
@@ -430,16 +430,15 @@ bool VCTFAM::OpenTableFile(PGLOBAL g)
PlugSetPath
(
filename
,
To_File
,
Tdbp
->
GetPath
());
if
(
!
(
Stream
=
PlugOpenFile
(
g
,
filename
,
opmode
)))
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
return
(
mode
==
MODE_READ
&&
errno
==
ENOENT
)
?
PushWarning
(
g
,
Tdbp
)
:
true
;
}
// endif Stream
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"File %s is open in mode %s
\n
"
,
filename
,
opmode
);
#endif
To_Fb
=
dbuserp
->
Openlist
;
// Keep track of File block
...
...
@@ -601,10 +600,9 @@ int VCTFAM::ReadBuffer(PGLOBAL g)
OldBlk
=
CurBlk
;
// Last block actually read
}
// endif oldblk
#ifdef DEBTRACE
htrc
(
" Read: CurNum=%d CurBlk=%d rc=%d
\n
"
,
CurNum
,
CurBlk
,
RC_OK
);
#endif
if
(
trace
)
htrc
(
" Read: CurNum=%d CurBlk=%d rc=%d
\n
"
,
CurNum
,
CurBlk
,
RC_OK
);
return
rc
;
}
// end of ReadBuffer
...
...
@@ -613,10 +611,9 @@ int VCTFAM::ReadBuffer(PGLOBAL g)
/***********************************************************************/
int
VCTFAM
::
WriteBuffer
(
PGLOBAL
g
)
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d
\n
"
,
Tdbp
->
GetTdb_No
(),
Tdbp
->
GetMode
(),
CurNum
,
CurBlk
);
#endif
if
(
Tdbp
->
GetMode
()
==
MODE_UPDATE
)
{
// Mode Update is done in ReadDB, we just initialize it here
...
...
@@ -706,20 +703,20 @@ int VCTFAM::WriteBuffer(PGLOBAL g)
int
VCTFAM
::
DeleteRecords
(
PGLOBAL
g
,
int
irc
)
{
bool
eof
=
false
;
#ifdef DEBTRACE
fprintf
(
debug
,
"VCT DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
if
(
trace
)
htrc
(
"VCT DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
irc
,
UseTemp
,
Fpos
,
Tpos
,
Spos
);
#endif
if
(
irc
!=
RC_OK
)
{
/*******************************************************************/
/* EOF: position Fpos at the end-of-file position. */
/*******************************************************************/
Fpos
=
(
Block
-
1
)
*
Nrec
+
Last
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Fpos placed at file end=%d
\n
"
,
Fpos
);
#endif
eof
=
UseTemp
&&
!
MaxBlk
;
}
else
// Fpos is the Deleted line position
Fpos
=
CurBlk
*
Nrec
+
CurNum
;
...
...
@@ -753,14 +750,13 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/
/* Reposition the file pointer and set Spos. */
/*******************************************************************/
#ifdef
DEBTRACE
#ifdef
_DEBUG
assert
(
Spos
==
Fpos
);
#endif
Spos
++
;
// New start position is on next line
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
}
else
{
/*******************************************************************/
...
...
@@ -808,9 +804,9 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
close
(
h
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"done, h=%d irc=%d
\n
"
,
h
,
irc
);
#endif
}
else
// Clean the unused space in the file, this is required when
// inserting again with a partial column list.
...
...
@@ -850,9 +846,9 @@ bool VCTFAM::OpenTempFile(PGLOBAL g)
opmode
=
"wb"
;
if
(
!
(
T_Stream
=
PlugOpenFile
(
g
,
tempname
,
opmode
)))
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
rc
=
true
;
}
else
To_Fbt
=
PlgGetUser
(
g
)
->
Openlist
;
...
...
@@ -898,9 +894,8 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
len
=
fread
(
To_Buf
,
Clens
[
i
],
req
,
Stream
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after read req=%d len=%d
\n
"
,
req
,
len
);
#endif
if
(
len
!=
req
)
{
sprintf
(
g
->
Message
,
MSG
(
DEL_READ_ERROR
),
(
int
)
req
,
(
int
)
len
);
...
...
@@ -928,9 +923,9 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
}
// endif UseTemp
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after write pos=%d
\n
"
,
ftell
(
Stream
));
#endif
}
// endfor i
Tpos
+=
(
int
)
req
;
...
...
@@ -959,9 +954,9 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
}
// endif UseTemp
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"loop: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
}
// endfor n
return
false
;
...
...
@@ -1094,10 +1089,10 @@ void VCTFAM::CloseTableFile(PGLOBAL g)
if
(
!
(
UseTemp
&&
T_Stream
))
rc
=
PlugCloseFile
(
g
,
To_Fb
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"VCT CloseTableFile: closing %s wrc=%d rc=%d
\n
"
,
To_File
,
wrc
,
rc
);
#endif
Stream
=
NULL
;
}
// end of CloseTableFile
...
...
@@ -1168,10 +1163,9 @@ bool VCTFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
else
// Blocked vector format
len
=
Nrec
*
(
colp
->
Deplac
+
Lrecl
*
CurBlk
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"len=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d maxblk=%d
\n
"
,
len
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
CurBlk
,
MaxBlk
);
#endif
if
(
fseek
(
Stream
,
len
,
SEEK_SET
))
{
sprintf
(
g
->
Message
,
MSG
(
FSEEK_ERROR
),
strerror
(
errno
));
...
...
@@ -1188,15 +1182,15 @@ bool VCTFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
sprintf
(
g
->
Message
,
MSG
(
READ_ERROR
),
To_File
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
" Read error: %s
\n
"
,
g
->
Message
);
#endif
return
true
;
}
// endif
#ifdef DEBTRACE
if
(
trace
)
num_read
++
;
#endif
return
false
;
}
// end of ReadBlock
...
...
@@ -1220,10 +1214,9 @@ bool VCTFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
else
// Old VCT format
len
=
Nrec
*
(
colp
->
Deplac
+
Lrecl
*
colp
->
ColBlk
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"modif=%d len=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d
\n
"
,
Modif
,
len
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
colp
->
ColBlk
);
#endif
if
(
fseek
(
T_Stream
,
len
,
SEEK_SET
))
{
sprintf
(
g
->
Message
,
MSG
(
FSEEK_ERROR
),
strerror
(
errno
));
...
...
@@ -1239,9 +1232,10 @@ bool VCTFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
(
size_t
)
colp
->
Clen
,
n
,
T_Stream
))
{
sprintf
(
g
->
Message
,
MSG
(
WRITE_STRERROR
),
(
UseTemp
)
?
To_Fbt
->
Fname
:
To_File
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Write error: %s
\n
"
,
strerror
(
errno
));
#endif
return
true
;
}
// endif
...
...
@@ -1310,9 +1304,9 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
&&
fp
->
Count
&&
fp
->
Mode
==
mode
)
break
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Mapping VCM file, fp=%p cnt=%d
\n
"
,
fp
,
fp
->
Count
);
#endif
}
else
fp
=
NULL
;
...
...
@@ -1368,9 +1362,9 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
sprintf
(
g
->
Message
,
MSG
(
OPEN_MODE_ERROR
),
"map"
,
(
int
)
rc
,
filename
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
return
(
mode
==
MODE_READ
&&
rc
==
ENOENT
)
?
PushWarning
(
g
,
Tdbp
)
:
true
;
}
// endif hFile
...
...
@@ -1420,10 +1414,9 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
To_Fb
=
fp
;
// Useful when closing
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"fp=%p count=%d MapView=%p len=%d Top=%p
\n
"
,
fp
,
fp
->
Count
,
Memory
,
len
);
#endif
return
AllocateBuffer
(
g
);
}
// end of OpenTableFile
...
...
@@ -1523,10 +1516,9 @@ bool VCMFAM::InitInsert(PGLOBAL g)
/***********************************************************************/
int
VCMFAM
::
WriteBuffer
(
PGLOBAL
g
)
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"VCM WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d
\n
"
,
Tdbp
->
GetTdb_No
(),
Tdbp
->
GetMode
(),
CurNum
,
CurBlk
);
#endif
// Mode Update being done in ReadDB we process here Insert mode only.
if
(
Tdbp
->
GetMode
()
==
MODE_INSERT
)
{
...
...
@@ -1568,20 +1560,19 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
int
i
;
int
m
,
n
;
#ifdef DEBTRACE
fprintf
(
debug
,
"VCM DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p
\n
"
,
if
(
trace
)
htrc
(
"VCM DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p
\n
"
,
irc
,
To_Buf
,
Tpos
,
Spos
);
#endif
if
(
irc
!=
RC_OK
)
{
/*******************************************************************/
/* EOF: position Fpos at the top of map position. */
/*******************************************************************/
Fpos
=
(
Block
-
1
)
*
Nrec
+
Last
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Fpos placed at file top=%p
\n
"
,
Fpos
);
#endif
}
else
// Fpos is the Deleted line position
Fpos
=
CurBlk
*
Nrec
+
CurNum
;
...
...
@@ -1627,17 +1618,16 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
Tpos
+=
n
;
}
// endif MaxBlk
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"move %d bytes
\n
"
,
n
);
#endif
}
// endif n
if
(
irc
==
RC_OK
)
{
Spos
=
Fpos
+
1
;
// New start position
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after: Tpos=%p Spos=%p
\n
"
,
Tpos
,
Spos
);
#endif
}
else
{
/*******************************************************************/
...
...
@@ -1676,9 +1666,8 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
return
RC_FX
;
}
// endif
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"done, Tpos=%p newsize=%d drc=%d
\n
"
,
Tpos
,
n
,
drc
);
#endif
if
(
!
SetEndOfFile
(
fp
->
Handle
))
{
sprintf
(
g
->
Message
,
MSG
(
FUNCTION_ERROR
),
...
...
@@ -1760,17 +1749,16 @@ bool VCMFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
/*********************************************************************/
mempos
=
Memcol
[
i
]
+
n
*
CurBlk
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"mempos=%p i=%d Nrec=%d Clen=%d CurBlk=%d
\n
"
,
mempos
,
i
,
Nrec
,
colp
->
Clen
,
CurBlk
);
#endif
if
(
colp
->
GetStatus
(
BUF_MAPPED
))
colp
->
Blk
->
SetValPointer
(
mempos
);
#ifdef DEBTRACE
if
(
trace
)
num_read
++
;
#endif
return
false
;
}
// end of ReadBlock
...
...
@@ -1792,10 +1780,9 @@ bool VCMFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
/*********************************************************************/
mempos
=
Memcol
[
i
]
+
n
*
CurBlk
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"modif=%d mempos=%p i=%d Nrec=%d Clen=%d colblk=%d
\n
"
,
Modif
,
mempos
,
i
,
Nrec
,
colp
->
Clen
,
colp
->
ColBlk
);
#endif
#endif // _DEBUG
...
...
@@ -1954,16 +1941,15 @@ bool VECFAM::OpenColumnFile(PGLOBAL g, char *opmode, int i)
sprintf
(
filename
,
Colfn
,
i
+
1
);
if
(
!
(
Streams
[
i
]
=
PlugOpenFile
(
g
,
filename
,
opmode
)))
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
return
(
Tdbp
->
GetMode
()
==
MODE_READ
&&
errno
==
ENOENT
)
?
PushWarning
(
g
,
Tdbp
)
:
true
;
}
// endif Streams
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"File %s is open in mode %s
\n
"
,
filename
,
opmode
);
#endif
To_Fbs
[
i
]
=
dup
->
Openlist
;
// Keep track of File blocks
return
false
;
...
...
@@ -2110,10 +2096,9 @@ void VECFAM::ResetBuffer(PGLOBAL g)
/***********************************************************************/
int
VECFAM
::
WriteBuffer
(
PGLOBAL
g
)
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d
\n
"
,
Tdbp
->
GetTdb_No
(),
Tdbp
->
GetMode
(),
CurNum
,
CurBlk
);
#endif
if
(
Tdbp
->
GetMode
()
==
MODE_INSERT
)
{
if
(
Closing
||
++
CurNum
==
Nrec
)
{
...
...
@@ -2161,20 +2146,19 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
/* file, and at the end erase all trailing records. */
/* This depends on the Check setting, false by default. */
/*********************************************************************/
#ifdef DEBTRACE
fprintf
(
debug
,
"VEC DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
if
(
trace
)
htrc
(
"VEC DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
irc
,
UseTemp
,
Fpos
,
Tpos
,
Spos
);
#endif
if
(
irc
!=
RC_OK
)
{
/*******************************************************************/
/* EOF: position Fpos at the end-of-file position. */
/*******************************************************************/
Fpos
=
Cardinality
(
g
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Fpos placed at file end=%d
\n
"
,
Fpos
);
#endif
}
else
// Fpos is the Deleted line position
Fpos
=
CurBlk
*
Nrec
+
CurNum
;
...
...
@@ -2201,14 +2185,13 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
return
RC_FX
;
if
(
irc
==
RC_OK
)
{
#ifdef
DEBTRACE
#ifdef
_DEBUG
assert
(
Spos
==
Fpos
);
#endif
Spos
++
;
// New start position is on next line
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
}
else
{
/*******************************************************************/
...
...
@@ -2250,9 +2233,9 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
close
(
h
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"done, h=%d irc=%d
\n
"
,
h
,
irc
);
#endif
}
// endfor i
}
else
// UseTemp
...
...
@@ -2288,9 +2271,9 @@ bool VECFAM::OpenTempFile(PGLOBAL g)
sprintf
(
tempname
,
Tempat
,
i
+
1
);
if
(
!
(
T_Streams
[
i
]
=
PlugOpenFile
(
g
,
tempname
,
"wb"
)))
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
return
true
;
}
else
T_Fbs
[
i
]
=
PlgGetUser
(
g
)
->
Openlist
;
...
...
@@ -2348,9 +2331,8 @@ bool VECFAM::MoveIntermediateLines(PGLOBAL g, bool *bn)
len
=
fread
(
To_Buf
,
Clens
[
i
],
req
,
Streams
[
i
]);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after read req=%d len=%d
\n
"
,
req
,
len
);
#endif
if
(
len
!=
req
)
{
sprintf
(
g
->
Message
,
MSG
(
DEL_READ_ERROR
),
(
int
)
req
,
(
int
)
len
);
...
...
@@ -2368,17 +2350,16 @@ bool VECFAM::MoveIntermediateLines(PGLOBAL g, bool *bn)
return
true
;
}
// endif
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after write pos=%d
\n
"
,
ftell
(
Streams
[
i
]));
#endif
}
// endfor i
Tpos
+=
(
int
)
req
;
Spos
+=
(
int
)
req
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"loop: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
b
=
true
;
}
// endfor n
...
...
@@ -2496,10 +2477,9 @@ void VECFAM::CloseTableFile(PGLOBAL g)
To_Fbs
[
i
]
=
NULL
;
}
// endif Streams
#ifdef DEBTRACE
htrc
(
"VCT CloseTableFile: closing %s wrc=%d rc=%d
\n
"
,
To_File
,
wrc
,
rc
);
#endif
if
(
trace
)
htrc
(
"VCT CloseTableFile: closing %s wrc=%d rc=%d
\n
"
,
To_File
,
wrc
,
rc
);
}
// end of CloseTableFile
/***********************************************************************/
...
...
@@ -2516,10 +2496,9 @@ bool VECFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
len
=
Nrec
*
colp
->
Clen
*
CurBlk
;
i
=
colp
->
Index
-
1
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d
\n
"
,
len
,
i
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
CurBlk
);
#endif
if
(
fseek
(
Streams
[
i
],
len
,
SEEK_SET
))
{
sprintf
(
g
->
Message
,
MSG
(
FSEEK_ERROR
),
strerror
(
errno
));
...
...
@@ -2543,15 +2522,15 @@ bool VECFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
sprintf
(
g
->
Message
,
MSG
(
READ_ERROR
),
fn
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
" Read error: %s
\n
"
,
g
->
Message
);
#endif
return
true
;
}
// endif
#ifdef DEBTRACE
if
(
trace
)
num_read
++
;
#endif
return
false
;
}
// end of ReadBlock
...
...
@@ -2572,10 +2551,9 @@ bool VECFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
len
=
Nrec
*
colp
->
Clen
*
colp
->
ColBlk
;
i
=
colp
->
Index
-
1
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"modif=%d len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d
\n
"
,
Modif
,
len
,
i
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
colp
->
ColBlk
);
#endif
if
(
Tdbp
->
GetMode
()
==
MODE_UPDATE
&&
!
UseTemp
)
if
(
fseek
(
T_Streams
[
i
],
len
,
SEEK_SET
))
{
...
...
@@ -2595,9 +2573,10 @@ bool VECFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
sprintf
(
fn
,
(
UseTemp
)
?
Tempat
:
Colfn
,
colp
->
Index
);
sprintf
(
g
->
Message
,
MSG
(
WRITE_STRERROR
),
fn
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Write error: %s
\n
"
,
strerror
(
errno
));
#endif
return
true
;
}
else
Spos
=
Fpos
+
n
;
...
...
@@ -2605,11 +2584,6 @@ bool VECFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
#if defined(UNIX)
fflush
(
Streams
[
i
]);
//NGC
#endif
#ifdef DEBTRACE
//num_write++;
#endif
return
false
;
}
// end of WriteBlock
...
...
@@ -2740,9 +2714,9 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
&&
fp
->
Count
&&
fp
->
Mode
==
mode
)
break
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Mapping file, fp=%p
\n
"
,
fp
);
#endif
}
else
fp
=
NULL
;
...
...
@@ -2765,9 +2739,9 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
if
(
!
(
*
g
->
Message
))
sprintf
(
g
->
Message
,
MSG
(
OPEN_MODE_ERROR
),
"map"
,
(
int
)
rc
,
filename
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"%s
\n
"
,
g
->
Message
);
#endif
return
(
mode
==
MODE_READ
&&
rc
==
ENOENT
)
?
PushWarning
(
g
,
Tdbp
)
:
true
;
}
// endif hFile
...
...
@@ -2817,10 +2791,9 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
To_Fbs
[
i
]
=
fp
;
// Useful when closing
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"fp=%p count=%d MapView=%p len=%d
\n
"
,
fp
,
fp
->
Count
,
Memcol
[
i
],
len
);
#endif
return
false
;
}
// end of MapColumnFile
...
...
@@ -2863,20 +2836,19 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
int
i
;
int
m
,
n
;
#ifdef DEBTRACE
fprintf
(
debug
,
"VMP DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p
\n
"
,
if
(
trace
)
htrc
(
"VMP DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p
\n
"
,
irc
,
To_Buf
,
Tpos
,
Spos
);
#endif
if
(
irc
!=
RC_OK
)
{
/*******************************************************************/
/* EOF: position Fpos at the top of map position. */
/*******************************************************************/
Fpos
=
(
Block
-
1
)
*
Nrec
+
Last
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Fpos placed at file top=%p
\n
"
,
Fpos
);
#endif
}
else
// Fpos is the Deleted line position
Fpos
=
CurBlk
*
Nrec
+
CurNum
;
...
...
@@ -2897,17 +2869,16 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
Tpos
+=
n
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"move %d bytes
\n
"
,
n
);
#endif
}
// endif n
if
(
irc
==
RC_OK
)
{
Spos
=
Fpos
+
1
;
// New start position
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after: Tpos=%p Spos=%p
\n
"
,
Tpos
,
Spos
);
#endif
}
else
{
/*******************************************************************/
...
...
@@ -2937,9 +2908,8 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
return
RC_FX
;
}
// endif
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"done, Tpos=%p newsize=%d drc=%d
\n
"
,
Tpos
,
n
,
drc
);
#endif
if
(
!
SetEndOfFile
(
fp
->
Handle
))
{
sprintf
(
g
->
Message
,
MSG
(
FUNCTION_ERROR
),
...
...
@@ -3045,9 +3015,8 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
DWORD
nbr
,
drc
,
len
=
(
DWORD
)
req
;
bool
brc
=
ReadFile
(
h
,
inbuf
,
len
,
&
nbr
,
NULL
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after read req=%d brc=%d nbr=%d
\n
"
,
req
,
brc
,
nbr
);
#endif
if
(
!
brc
||
nbr
!=
len
)
{
char
buf
[
256
];
// , *fn = (h == Hfile) ? To_File : "Tempfile";
...
...
@@ -3062,9 +3031,10 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
}
// endelse brc
sprintf
(
g
->
Message
,
MSG
(
READ_ERROR
),
To_File
,
buf
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BIGREAD: %s
\n
"
,
g
->
Message
);
#endif
rc
=
true
;
}
// endif brc || nbr
#else // !WIN32
...
...
@@ -3075,10 +3045,11 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
const
char
*
fn
=
(
h
==
Hfile
)
?
To_File
:
"Tempfile"
;
sprintf
(
g
->
Message
,
MSG
(
READ_ERROR
),
fn
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BIGREAD: nbr=%d len=%d errno=%d %s
\n
"
,
nbr
,
len
,
errno
,
g
->
Message
);
#endif
rc
=
true
;
}
// endif nbr
#endif // !WIN32
...
...
@@ -3097,9 +3068,8 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
DWORD
nbw
,
drc
,
len
=
(
DWORD
)
req
;
bool
brc
=
WriteFile
(
h
,
inbuf
,
len
,
&
nbw
,
NULL
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after write req=%d brc=%d nbw=%d
\n
"
,
req
,
brc
,
nbw
);
#endif
if
(
!
brc
||
nbw
!=
len
)
{
char
buf
[
256
],
*
fn
=
(
h
==
Hfile
)
?
To_File
:
"Tempfile"
;
...
...
@@ -3115,10 +3085,10 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf
(
g
->
Message
,
MSG
(
WRITE_STRERROR
),
fn
,
buf
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BIGWRITE: nbw=%d len=%d errno=%d %s
\n
"
,
nbw
,
len
,
drc
,
g
->
Message
);
#endif
rc
=
true
;
}
// endif brc || nbw
#else // !WIN32
...
...
@@ -3129,10 +3099,11 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
const
char
*
fn
=
(
h
==
Hfile
)
?
To_File
:
"Tempfile"
;
sprintf
(
g
->
Message
,
MSG
(
WRITE_STRERROR
),
fn
,
strerror
(
errno
));
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BIGWRITE: nbw=%d len=%d errno=%d %s
\n
"
,
nbw
,
len
,
errno
,
g
->
Message
);
#endif
rc
=
true
;
}
// endif nbr
#endif // !WIN32
...
...
@@ -3180,6 +3151,9 @@ int BGVFAM::GetBlockInfo(PGLOBAL g)
if
(
h
==
INVALID_HANDLE_VALUE
||
!
_filelength
(
h
))
{
#endif // !WIN32
// Consider this is a void table
if
(
trace
)
htrc
(
"Void table h=%d
\n
"
,
h
);
Last
=
Nrec
;
Block
=
0
;
...
...
@@ -3200,6 +3174,10 @@ int BGVFAM::GetBlockInfo(PGLOBAL g)
}
else
{
Block
=
(
vh
.
NumRec
>
0
)
?
(
vh
.
NumRec
+
Nrec
-
1
)
/
Nrec
:
0
;
Last
=
(
vh
.
NumRec
+
Nrec
-
1
)
%
Nrec
+
1
;
if
(
trace
)
htrc
(
"Block=%d Last=%d
\n
"
,
Block
,
Last
);
}
// endif's
CloseFileHandle
(
h
);
...
...
@@ -3297,6 +3275,10 @@ bool BGVFAM::MakeEmptyFile(PGLOBAL g, char *fn)
of
.
QuadPart
=
(
BIGINT
)
n
+
(
BIGINT
)
MaxBlk
*
(
BIGINT
)
Blksize
-
(
BIGINT
)
1
;
if
(
trace
)
htrc
(
"MEF: of=%lld n=%d maxblk=%d blksize=%d
\n
"
,
of
.
QuadPart
,
n
,
Maxblk
,
Blksize
);
of
.
LowPart
=
SetFilePointer
(
h
,
of
.
LowPart
,
&
of
.
HighPart
,
FILE_BEGIN
);
...
...
@@ -3332,14 +3314,17 @@ bool BGVFAM::MakeEmptyFile(PGLOBAL g, char *fn)
int
h
;
BIGINT
pos
;
h
=
global_open64
(
g
,
MSGID_OPEN_EMPTY_FILE
,
filename
,
O_CREAT
|
O_WRONLY
,
S_IREAD
|
S_IWRITE
);
h
=
open64
(
filename
,
O_CREAT
|
O_WRONLY
,
S_IREAD
|
S_IWRITE
);
if
(
h
==
-
1
)
return
true
;
pos
=
(
BIGINT
)
n
+
(
BIGINT
)
MaxBlk
*
(
BIGINT
)
Blksize
-
(
BIGINT
)
1
;
if
(
trace
)
htrc
(
"MEF: pos=%lld n=%d maxblk=%d blksize=%d
\n
"
,
pos
,
n
,
MaxBlk
,
Blksize
);
if
(
lseek64
(
h
,
pos
,
SEEK_SET
)
<
0
)
{
sprintf
(
g
->
Message
,
MSG
(
MAKE_EMPTY_FILE
),
To_File
,
strerror
(
errno
));
close
(
h
);
...
...
@@ -3376,10 +3361,9 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
PlugSetPath
(
filename
,
To_File
,
Tdbp
->
GetPath
());
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"OpenTableFile: filename=%s mode=%d Last=%d
\n
"
,
filename
,
mode
,
Last
);
#endif
#if defined(WIN32)
DWORD
access
,
creation
,
share
=
0
,
rc
=
0
;
...
...
@@ -3454,11 +3438,9 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
strcat
(
g
->
Message
,
filename
);
}
// endif Hfile
#ifdef DEBTRACE
fprintf
(
debug
,
" rc=%d access=%p share=%p creation=%d handle=%p fn=%s
\n
"
,
if
(
trace
)
htrc
(
" rc=%d access=%p share=%p creation=%d handle=%p fn=%s
\n
"
,
drc
,
access
,
share
,
creation
,
Hfile
,
filename
);
#endif
if
(
mode
==
MODE_INSERT
)
{
/*******************************************************************/
...
...
@@ -3497,7 +3479,19 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
oflag
=
O_RDONLY
;
break
;
case
MODE_INSERT
:
if
(
MaxBlk
)
{
if
(
!
Block
)
if
(
MakeEmptyFile
(
g
,
To_File
))
return
true
;
// Required to update empty blocks
oflag
=
O_RDWR
;
}
else
if
(
Last
==
Nrec
)
oflag
=
O_WRONLY
|
O_CREAT
|
O_APPEND
;
else
// Required to update the last block
oflag
=
O_RDWR
|
O_CREAT
|
O_APPEND
;
pmd
=
S_IREAD
|
S_IWRITE
;
break
;
case
MODE_DELETE
:
...
...
@@ -3532,11 +3526,9 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
strcat
(
g
->
Message
,
strerror
(
errno
));
}
// endif Hfile
#ifdef DEBTRACE
htrc
(
" lrc=%d oflag=%p mode=%p handle=%d fn=%s
\n
"
,
lrc
,
oflag
,
mode
,
Hfile
,
filename
);
#endif
if
(
trace
)
htrc
(
" rc=%d oflag=%p mode=%p handle=%d fn=%s
\n
"
,
rc
,
oflag
,
mode
,
Hfile
,
filename
);
#endif // UNIX
if
(
!
rc
)
{
...
...
@@ -3555,9 +3547,8 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
To_Fb
->
Mode
=
mode
;
To_Fb
->
Handle
=
Hfile
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"File %s is open in mode %d
\n
"
,
filename
,
mode
);
#endif
if
(
del
)
// This will stop the process by
...
...
@@ -3659,10 +3650,9 @@ bool BGVFAM::AllocateBuffer(PGLOBAL g)
/***********************************************************************/
int
BGVFAM
::
WriteBuffer
(
PGLOBAL
g
)
{
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BGV WriteDB: R%d Mode=%d CurNum=%d CurBlk=%d
\n
"
,
Tdbp
->
GetTdb_No
(),
Tdbp
->
GetMode
(),
CurNum
,
CurBlk
);
#endif
if
(
Tdbp
->
GetMode
()
==
MODE_UPDATE
)
{
// Mode Update is done in ReadDB, we just initialize it here
...
...
@@ -3760,20 +3750,19 @@ int BGVFAM::DeleteRecords(PGLOBAL g, int irc)
/* 2 - directly move the not deleted lines inside the original */
/* file, and at the end erase all trailing records. */
/*********************************************************************/
#ifdef DEBTRACE
fprintf
(
debug
,
"BGV DeleteDB: irc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
if
(
trace
)
htrc
(
"BGV DeleteDB: irc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d
\n
"
,
irc
,
UseTemp
,
Fpos
,
Tpos
,
Spos
);
#endif
if
(
irc
!=
RC_OK
)
{
/*******************************************************************/
/* EOF: position Fpos at the end-of-file position. */
/*******************************************************************/
Fpos
=
(
Block
-
1
)
*
Nrec
+
Last
;
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"Fpos placed at file end=%d
\n
"
,
Fpos
);
#endif
eof
=
UseTemp
&&
!
MaxBlk
;
}
else
// Fpos is the deleted line position
Fpos
=
CurBlk
*
Nrec
+
CurNum
;
...
...
@@ -3805,14 +3794,13 @@ int BGVFAM::DeleteRecords(PGLOBAL g, int irc)
return
RC_FX
;
if
(
irc
==
RC_OK
)
{
#ifdef
DEBTRACE
#ifdef
_DEBUG
assert
(
Spos
==
Fpos
);
#endif
Spos
++
;
// New start position is on next line
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"after: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
}
else
{
/*******************************************************************/
...
...
@@ -3998,9 +3986,9 @@ bool BGVFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
}
// endif Usetemp...
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"loop: Tpos=%d Spos=%d
\n
"
,
Tpos
,
Spos
);
#endif
}
// endfor n
return
false
;
...
...
@@ -4132,10 +4120,10 @@ void BGVFAM::CloseTableFile(PGLOBAL g)
if
(
Hfile
!=
INVALID_HANDLE_VALUE
)
rc
=
PlugCloseFile
(
g
,
To_Fb
);
#ifdef DEBTRACE
if
(
trace
)
htrc
(
"BGV CloseTableFile: closing %s wrc=%d rc=%d
\n
"
,
To_File
,
wrc
,
rc
);
#endif
Hfile
=
INVALID_HANDLE_VALUE
;
}
// end of CloseDB
...
...
@@ -4178,11 +4166,9 @@ bool BGVFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
pos
=
(
BIGINT
)
Nrec
*
((
BIGINT
)
colp
->
Deplac
+
(
BIGINT
)
Lrecl
*
(
BIGINT
)
CurBlk
);
#ifdef DEBTRACE
fprintf
(
debug
,
"RB: offset=%lf Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d MaxBlk=%d
\n
"
,
(
double
)
pos
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
CurBlk
,
MaxBlk
);
#endif
if
(
trace
)
htrc
(
"RB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d MaxBlk=%d
\n
"
,
pos
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
CurBlk
,
MaxBlk
);
if
(
BigSeek
(
g
,
Hfile
,
pos
))
return
true
;
...
...
@@ -4190,9 +4176,9 @@ bool BGVFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
if
(
BigRead
(
g
,
Hfile
,
colp
->
Blk
->
GetValPointer
(),
colp
->
Clen
*
Nrec
))
return
true
;
#ifdef DEBTRACE
if
(
trace
)
num_read
++
;
#endif
return
false
;
}
// end of ReadBlock
...
...
@@ -4217,10 +4203,9 @@ bool BGVFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
pos
=
(
BIGINT
)
Nrec
*
((
BIGINT
)
colp
->
Deplac
+
(
BIGINT
)
Lrecl
*
(
BIGINT
)
colp
->
ColBlk
);
#ifdef DEBTRACE
htrc
(
"WB: offset=%lf Nrec=%d Deplac=%d Lrecl=%d ColBlk=%d
\n
"
,
(
double
)
pos
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
colp
->
ColBlk
);
#endif
if
(
trace
)
htrc
(
"WB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d ColBlk=%d
\n
"
,
pos
,
Nrec
,
colp
->
Deplac
,
Lrecl
,
colp
->
ColBlk
);
if
(
BigSeek
(
g
,
Tfile
,
pos
))
return
true
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment