diff options
author | Olivier Bertrand <bertrandop@gmail.com> | 2014-08-22 17:30:22 +0200 |
---|---|---|
committer | Olivier Bertrand <bertrandop@gmail.com> | 2014-08-22 17:30:22 +0200 |
commit | f930f4eda9dd849b48e67eaecc8c130bb9310107 (patch) | |
tree | 9b4cee3b93a6a2d5e7445f088449718c75786186 /storage/connect/connect.cc | |
parent | 8b9ed85b8a198e4de71677e3e9478c9162471e1b (diff) | |
download | mariadb-git-f930f4eda9dd849b48e67eaecc8c130bb9310107.tar.gz |
- Add a new CONNECT global variable allowing to tell whether or not
a temporary file should be used for UPDATE/DELETE of file tables.
Also use the "sorted" argument of index_init to help decide if
sorting of positions must be done.
modified:
storage/connect/checklvl.h
storage/connect/connect.cc
storage/connect/connect.h
storage/connect/filamdbf.cpp
storage/connect/filamfix.cpp
storage/connect/filamfix.h
storage/connect/filamtxt.cpp
storage/connect/ha_connect.cc
storage/connect/mysql-test/connect/r/part_table.result
storage/connect/plgdbsem.h
storage/connect/plgdbutl.cpp
storage/connect/reldef.cpp
storage/connect/tabdos.cpp
storage/connect/tabdos.h
storage/connect/tabfix.cpp
storage/connect/tabfmt.cpp
storage/connect/tabvct.cpp
storage/connect/tabvct.h
storage/connect/xindex.cpp
- Fix a bug in TDBASE::ColDB that caused some special columns not to
be found in the column list and reallocated without their Value
causing a crash of some queries.
modified:
storage/connect/table.cpp
- Fix a bug causing RestoreNrec to be called before closing a table
causing a wrong value given to Spos
modified:
storage/connect/tabdos.cpp
storage/connect/xindex.cpp
- Add a new CONNECT global variable connect_exact_info. Set to ON, it
tells CONNECT to return exact record numbers on info queries. If OFF
it just gives an estimate. In version 10.0.13 this was unconditionally
ON and caused info queries on remote tables to be extremely long and
was the subject of MDEV-6612.
modified:
storage/connect/ha_connect.cc
storage/connect/tabdos.cpp
storage/connect/tabmysql.cpp
storage/connect/tabodbc.cpp
Diffstat (limited to 'storage/connect/connect.cc')
-rw-r--r-- | storage/connect/connect.cc | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/storage/connect/connect.cc b/storage/connect/connect.cc index a458c0e0c5a..c835d8c8233 100644 --- a/storage/connect/connect.cc +++ b/storage/connect/connect.cc @@ -142,7 +142,7 @@ bool CntCheckDB(PGLOBAL g, PHC handler, const char *pathname) return true; ((MYCAT *)dbuserp->Catalog)->SetDataPath(g, pathname); - dbuserp->UseTemp= TMP_AUTO; +//dbuserp->UseTemp= TMP_AUTO; /*********************************************************************/ /* All is correct. */ @@ -503,8 +503,6 @@ RCODE CntWriteRow(PGLOBAL g, PTDB tdbp) if (!colp->GetColUse(U_VIRTUAL)) colp->WriteColumn(g); -//if (tp->GetMode() == MODE_UPDATE && tp->IsUsingTemp(g) && -// tp->GetKindex() && !tp->GetKindex()->IsSorted()) if (tp->IsIndexed()) // Index values must be sorted before updating rc= (RCODE)((PTDBDOS)tp)->GetTxfp()->StoreValues(g, true); @@ -580,21 +578,6 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort) printf("CntCloseTable: tdbp=%p mode=%d nox=%d abort=%d\n", tdbp, tdbp->GetMode(), nox, abort); -#if 0 - if (tbxp->GetMode() == MODE_UPDATE && - tbxp->GetKindex() && !tbxp->GetKindex()->IsSorted()) { - rc= tbxp->Txfp->UpdateSortedRows(g); - } else - if (tdbp->GetMode() == MODE_DELETE && tdbp->GetUse() == USE_OPEN) { - if (tbxp->GetKindex() && !tbxp->GetKindex()->IsSorted()) - rc= tbxp->Txfp->DeleteSortedRows(g); - - if (!rc) - rc= tdbp->DeleteDB(g, RC_EF); // Specific A.M. delete routine - - } // endif Mode -#endif // 0 - if (tdbp->GetMode() == MODE_DELETE && tdbp->GetUse() == USE_OPEN) { if (tbxp->IsIndexed()) rc= ((PTDBDOS)tdbp)->GetTxfp()->DeleteSortedRows(g); @@ -605,6 +588,15 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort) } else if (tbxp->GetMode() == MODE_UPDATE && tbxp->IsIndexed()) rc= ((PTDBDOX)tdbp)->Txfp->UpdateSortedRows(g); + switch(rc) { + case RC_FX: + abort= true; + break; + case RC_INFO: + PushWarning(g, tbxp); + break; + } // endswitch rc + // Prepare error return if (g->jump_level == MAX_JUMP) { strcpy(g->Message, MSG(TOO_MANY_JUMPS)); @@ -655,7 +647,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort) /* This is the condition(s) for doing indexing. */ /* Note: FIX table are not reset here to Nrec= 1. */ /***********************************************************************/ -int CntIndexInit(PGLOBAL g, PTDB ptdb, int id) +int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted) { PIXDEF xdp; PTDBDOX tdbp; @@ -707,7 +699,7 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id) #endif // 0 // Static indexes must be initialized now for records_in_range - if (tdbp->InitialyzeIndex(g, xdp)) + if (tdbp->InitialyzeIndex(g, xdp, sorted)) return 0; return (tdbp->To_Kindex->IsMul()) ? 2 : 1; @@ -754,7 +746,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op, #if 0 } // endif !To_Xdp // Now it's time to make the dynamic index - if (tdbp->InitialyzeIndex(g, NULL)) { + if (tdbp->InitialyzeIndex(g, NULL, false)) { sprintf(g->Message, "Fail to make dynamic index %s", tdbp->To_Xdp->GetName()); return RC_FX; |