From c7b95cb9dfa045c700c6ac83a14b28bf88b206c0 Mon Sep 17 00:00:00 2001
From: Olivier Bertrand <bertrandop@gmail.com>
Date: Fri, 8 Mar 2013 22:48:27 +0100
Subject: [PATCH] - Delete ALL or truncate must not be done using file mapping.

modified:
  storage/connect/tabdos.cpp
  storage/connect/tabfix.cpp
  storage/connect/tabvct.cpp
---
 storage/connect/tabdos.cpp |  6 +++++-
 storage/connect/tabfix.cpp |  6 ++++++
 storage/connect/tabvct.cpp | 15 ++++-----------
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp
index be343690f08..721283d42e9 100644
--- a/storage/connect/tabdos.cpp
+++ b/storage/connect/tabdos.cpp
@@ -721,7 +721,11 @@ bool TDBDOS::OpenDB(PGLOBAL g)
     return false;
     } // endif use
 
-  if (Txfp->Blocked && (Mode == MODE_DELETE ||
+  if (Mode == MODE_DELETE && !Next && Txfp->GetAmType() != TYPE_AM_DOS) {
+    // Delete all lines. Not handled in MAP or block mode
+    Txfp = new(g) DOSFAM((PDOSDEF)To_Def);
+    Txfp->SetTdbp(this);
+  } else if (Txfp->Blocked && (Mode == MODE_DELETE ||
       (Mode == MODE_UPDATE && PlgGetUser(g)->UseTemp != TMP_NO))) {
     /*******************************************************************/
     /*  Delete is not currently handled in block mode neither Update   */
diff --git a/storage/connect/tabfix.cpp b/storage/connect/tabfix.cpp
index 9ce04a47410..1f2fb58d153 100644
--- a/storage/connect/tabfix.cpp
+++ b/storage/connect/tabfix.cpp
@@ -249,6 +249,12 @@ bool TDBFIX::OpenDB(PGLOBAL g)
     return false;
     } // endif use
 
+  if (Mode == MODE_DELETE && !Next && Txfp->GetAmType() == TYPE_AM_MAP) {
+    // Delete all lines. Not handled in MAP mode
+    Txfp = new(g) FIXFAM((PDOSDEF)To_Def);
+    Txfp->SetTdbp(this);
+    } // endif Mode
+
   /*********************************************************************/
   /*  Call Cardinality to calculate Block in the case of Func queries. */
   /*  and also in the case of multiple tables.                         */
diff --git a/storage/connect/tabvct.cpp b/storage/connect/tabvct.cpp
index c06f7bbead1..29e0b89ebd3 100644
--- a/storage/connect/tabvct.cpp
+++ b/storage/connect/tabvct.cpp
@@ -299,18 +299,11 @@ bool TDBVCT::OpenDB(PGLOBAL g)
     } // endif Use
 
   /*********************************************************************/
-  /*  Insert is not handled using file mapping.                        */
+  /*  Delete all is not handled using file mapping.                    */
   /*********************************************************************/
-  if (Mode == MODE_INSERT && !((PVCTDEF)To_Def)->GetEstimate() && 
-              Txfp->GetAmType() == TYPE_AM_VMP) {
-    if (!((PVCTFAM)Txfp)->Split) {
-      Txfp = new(g) VCTFAM((PVCTDEF)To_Def);
-      Txfp->SetTdbp(this);
-    } else {
-      Txfp = new(g) VECFAM((PVCTDEF)To_Def);
-      Txfp->SetTdbp(this);
-    } // endif Split
-
+  if (Mode == MODE_DELETE && !Next && Txfp->GetAmType() == TYPE_AM_MAP) {
+    Txfp = new(g) VCTFAM((PVCTDEF)To_Def);
+    Txfp->SetTdbp(this);
     } // endif Mode
 
   /*********************************************************************/
-- 
2.30.9