mariadb/ndb/include/ndbapi/NdbScanOperation.hpp

230 lines
6.1 KiB
C++
Raw Normal View History

2004-04-14 10:53:21 +02:00
/* Copyright (C) 2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/*****************************************************************************
* Name: NdbScanOperation.hpp
* Include:
* Link:
* Author: Martin Sk<EFBFBD>ld
* Date: 2002-04-01
* Version: 0.1
* Description: Table scan support
* Documentation:
* Adjust: 2002-04-01 Martin Sk<EFBFBD>ld First version.
****************************************************************************/
#ifndef NdbScanOperation_H
#define NdbScanOperation_H
#include <NdbOperation.hpp>
#include <NdbCursorOperation.hpp>
/**
* @class NdbScanOperation
* @brief Class of scan operations for use in transactions.
*/
class NdbScanOperation : public NdbCursorOperation
{
friend class Ndb;
friend class NdbConnection;
friend class NdbResultSet;
friend class NdbOperation;
public:
/**
* readTuples returns a NdbResultSet where tuples are stored.
* Tuples are not stored in NdbResultSet until execute(NoCommit)
* has been executed and nextResult has been called.
*
* @param parallel Scan parallelism
* @param LockMode Scan lock handling
* @returns NdbResultSet.
*/
virtual NdbResultSet* readTuples(unsigned parallel = 0,
LockMode = LM_Read );
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
int updateTuples();
int updateTuples(Uint32 parallelism);
int deleteTuples();
int deleteTuples(Uint32 parallelism);
// Overload setValue for updateTuples
int setValue(const char* anAttrName, const char* aValue, Uint32 len = 0);
int setValue(const char* anAttrName, Int32 aValue);
int setValue(const char* anAttrName, Uint32 aValue);
int setValue(const char* anAttrName, Int64 aValue);
int setValue(const char* anAttrName, Uint64 aValue);
int setValue(const char* anAttrName, float aValue);
int setValue(const char* anAttrName, double aValue);
int setValue(Uint32 anAttrId, const char* aValue, Uint32 len = 0);
int setValue(Uint32 anAttrId, Int32 aValue);
int setValue(Uint32 anAttrId, Uint32 aValue);
int setValue(Uint32 anAttrId, Int64 aValue);
int setValue(Uint32 anAttrId, Uint64 aValue);
int setValue(Uint32 anAttrId, float aValue);
int setValue(Uint32 anAttrId, double aValue);
#endif
private:
NdbScanOperation(Ndb* aNdb);
~NdbScanOperation();
NdbCursorOperation::CursorType cursorType();
virtual int nextResult(bool fetchAllowed = true);
virtual void release();
void closeScan();
// Overloaded methods from NdbCursorOperation
int executeCursor(int ProcessorId);
// Overloaded private methods from NdbOperation
int init(NdbTableImpl* tab, NdbConnection* myConnection);
int prepareSend(Uint32 TC_ConnectPtr, Uint64 TransactionId);
int doSend(int ProcessorId);
virtual void setErrorCode(int aErrorCode);
virtual void setErrorCodeAbort(int aErrorCode);
virtual int equal_impl(const NdbColumnImpl* anAttrObject,
const char* aValue,
Uint32 len);
private:
NdbConnection *m_transConnection;
bool m_autoExecute;
bool m_updateOp;
bool m_writeOp;
bool m_deleteOp;
class SetValueRecList* m_setValueList;
};
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
class AttrInfo;
class SetValueRecList;
class SetValueRec {
friend class SetValueRecList;
public:
SetValueRec();
~SetValueRec();
enum SetValueType {
SET_STRING_ATTR1 = 0,
SET_INT32_ATTR1 = 1,
SET_UINT32_ATTR1 = 2,
SET_INT64_ATTR1 = 3,
SET_UINT64_ATTR1 = 4,
SET_FLOAT_ATTR1 = 5,
SET_DOUBLE_ATTR1 = 6,
SET_STRING_ATTR2 = 7,
SET_INT32_ATTR2 = 8,
SET_UINT32_ATTR2 = 9,
SET_INT64_ATTR2 = 10,
SET_UINT64_ATTR2 = 11,
SET_FLOAT_ATTR2 = 12,
SET_DOUBLE_ATTR2 = 13
};
SetValueType stype;
union {
char* anAttrName;
Uint32 anAttrId;
};
Merge NDB patches into 4.1-clone, below is list of changesets # -------------------------------------------- # 04/04/13 joreland@mysql.com 1.1858.1.1 # Removal of NDBT_Table # -------------------------------------------- # 04/04/13 joreland@mysql.com 1.1858.1.2 # Removal of NDBT_Table # -------------------------------------------- # 04/04/13 joreland@mysql.com 1.1858.1.3 # Fix for crashing AT # -------------------------------------------- # 04/04/13 joreland@mysql.com 1.1858.1.4 # Bug fixes in testIndex # -------------------------------------------- # 04/04/13 joreland@mysql.com 1.1866.1.5 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mysql.com:/home/jonas/src/tmp # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.1.5 # Fix for takeover when accessing indexes. # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1866.1.6 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mysql.com:/home/jonas/src/tmp # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.2.1 # Fixed error handling of fire_trigger_ord + lqhkeyref w.r.t indexes # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.2.2 # Simple retry mechanism in UTIL # Helps testIndex -n BuildDuring _a lot_ # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.2.3 # Misc fixes to test prg. # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.2.4 # Allow more retires on application errors # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1858.2.5 # Pass no of rows fetched in SUB_SYNC_CONTINUE_REQ # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1869 # wl1714 # Improve parallellism # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1870 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mysql.com:/home/jonas/src/wl1714 # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1866.1.7 # Merge # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1871 # Merge mysql.com:/home/jonas/src/wl1714 # into mysql.com:/home/jonas/src/mysql-4.1-ndb # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1872 # Fix for testScan -n ScanReadError5030 # -------------------------------------------- # 04/04/14 joreland@mysql.com 1.1873 # fix testDict -n FragmentType* # -------------------------------------------- # 04/04/14 johan@stingray.(none) 1.1866.2.1 # small fixes # -------------------------------------------- # 04/04/14 johan@stingray.(none) 1.1874 # Merge jandersson@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into stingray.(none):/space/bk/rep/mysql-4.1-ndb # -------------------------------------------- # 04/04/14 johan@stingray.(none) 1.1875 # handle rep node as an api node # -------------------------------------------- # 04/04/14 pekka@mysql.com 1.1873.1.1 # Fix for NDBT_Table removal # -------------------------------------------- # 04/04/15 joreland@mysql.com 1.1873.1.2 # Uninitialized var. # -------------------------------------------- # 04/04/15 johan@stingray.(none) 1.1876 # Merge jandersson@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into stingray.(none):/space/bk/rep/mysql-4.1-ndb # -------------------------------------------- # 04/04/15 joreland@mysql.com 1.1873.1.3 # Write pid before changing user # (as runas user probably doesn't have permissions on pid-dir) # -------------------------------------------- # -------------------------------------------- # 04/04/15 ndb@mc03.ndb.mysql.com 1.1862.1.3 # Fix printout of varchars # -------------------------------------------- # 04/04/15 ndb@mc03.ndb.mysql.com 1.1877 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mc03.ndb.mysql.com:/space/ndb/tmp # -------------------------------------------- # 04/04/15 ndb@mc03.ndb.mysql.com 1.1862.1.4 # Hmm.. don't print attr as many times as length of array # -------------------------------------------- # 04/04/15 ndb@mc03.ndb.mysql.com 1.1878 # Merge mc03.ndb.mysql.com:/space/ndb/mysql-4.1-ndb # into mc03.ndb.mysql.com:/space/ndb/tmp # -------------------------------------------- # 04/04/15 joreland@mysql.com 1.1876.1.1 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mysql.com:/home/jonas/src/mysql-4.1-ndb # -------------------------------------------- # 04/04/15 joreland@mysql.com 1.1877.1.1 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mysql.com:/home/jonas/src/mysql-4.1-ndb # -------------------------------------------- # 04/04/15 ndb@mc03.ndb.mysql.com 1.1879 # Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb # into mc03.ndb.mysql.com:/space/ndb/tmp # -------------------------------------------- # 04/04/17 joreland@mysql.com 1.1880 # LCP bug when restarting ops take's longer than DIH sending a new lcp ord # Solution: # Send LCP_FRAG_REP after restarting all ops # -------------------------------------------- # 04/04/18 joreland@mysql.com 1.1881 # Missspelled ERROR_INSERT # -------------------------------------------- # 04/04/18 joreland@mysql.com 1.1882 # Added possibility to log only distributed signals # -------------------------------------------- # 04/04/22 joreland@mysql.com 1.1883 # Removed dependancy to libstdc++ # * pure virtual functions "__cxa_pure_virtual" is defined in libstd++ -> # remove all pure virtual functions # -------------------------------------------- # 04/04/23 joreland@mysql.com 1.1884 # Various minor bug fixes for problems found while compiling # with icc # -------------------------------------------- # -------------------------------------------- # 04/04/25 joreland@mysql.com 1.1885 # Removed debug code (joreland:1.1875) # -------------------------------------------- # 04/04/26 ejonore@mc03.ndb.mysql.com 1.1862.1.5 # Lock pages in memory _after_ daemon-mode (exec/fork) # -------------------------------------------- # 04/04/27 ejonore@mc03.ndb.mysql.com 1.1862.1.6 # 1) Trap abort() # 2) StopStart/StopAborted events # 3) warning if memlock fails # 4) use g_logger more often (instead of ndbout) # # -------------------------------------------- # 04/04/27 joreland@mysql.com 1.1886 # bug fix for a bug in wl1714 + software upgrade # -------------------------------------------- # 04/04/27 joreland@mysql.com 1.1887 # Cset exclude: joreland@mysql.com|ChangeSet|20040422160720|05374 # -------------------------------------------- # 04/04/27 joreland@mysql.com 1.1888 # removed libstc++ second try... # -------------------------------------------- # 04/04/28 ejonore@mc03.ndb.mysql.com 1.1862.1.7 # 1) Don't lock FUTURE pages but only current # 2) Do this when SIZEALT has completed # -------------------------------------------- # 04/04/30 joreland@mysql.com 1.1889 # Merge jonas@orca:/home/ndb/releases/mysql-4.1-ndb-3.4.x # into mysql.com:/home/jonas/src/mysql-4.1-ndb # -------------------------------------------- # 04/05/03 ndb@mc03.ndb.mysql.com 1.1862.1.8 # Version update # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1862.3.1 # Changed restart behavior. # Use "angel" process which monitor "real" process # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1862.1.9 # Merge jonas@orca:/home/ndb/releases/mysql-4.1-ndb-3.4.x # into mysql.com:/home/jonas/src/mysql-4.1-ndb-3.4.x # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1890 # Merge B2 fixes # -------------------------------------------- # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1862.1.10 # Better handling of children terminations # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1862.1.11 # Fixes for angel-restarting # -------------------------------------------- # 04/05/03 joreland@mysql.com 1.1891 # Merge mysql.com:/home/jonas/src/mysql-4.1-ndb-3.4.x # into mysql.com:/home/jonas/src/mysql-4.1-ndb # -------------------------------------------- #
2004-05-04 11:19:19 +02:00
struct String {
2004-04-14 10:53:21 +02:00
char* aStringValue;
Uint32 len;
};
union {
String stringStruct;
Int32 anInt32Value;
Uint32 anUint32Value;
Int64 anInt64Value;
Uint64 anUint64Value;
float aFloatValue;
double aDoubleValue;
};
private:
SetValueRec* next;
};
inline
SetValueRec::SetValueRec() :
next(0)
{
}
class SetValueRecList {
public:
SetValueRecList();
~SetValueRecList();
void add(const char* anAttrName, const char* aValue, Uint32 len = 0);
void add(const char* anAttrName, Int32 aValue);
void add(const char* anAttrName, Uint32 aValue);
void add(const char* anAttrName, Int64 aValue);
void add(const char* anAttrName, Uint64 aValue);
void add(const char* anAttrName, float aValue);
void add(const char* anAttrName, double aValue);
void add(Uint32 anAttrId, const char* aValue, Uint32 len = 0);
void add(Uint32 anAttrId, Int32 aValue);
void add(Uint32 anAttrId, Uint32 aValue);
void add(Uint32 anAttrId, Int64 aValue);
void add(Uint32 anAttrId, Uint64 aValue);
void add(Uint32 anAttrId, float aValue);
void add(Uint32 anAttrId, double aValue);
typedef void(* IterateFn)(SetValueRec&, NdbOperation&);
static void callSetValueFn(SetValueRec&, NdbOperation&);
void iterate(IterateFn nextfn, NdbOperation&);
private:
SetValueRec* first;
SetValueRec* last;
};
inline
SetValueRecList::SetValueRecList() :
first(0),
last(0)
{
}
inline
SetValueRecList::~SetValueRecList() {
if (first) delete first;
first = last = 0;
}
inline
void SetValueRecList::iterate(SetValueRecList::IterateFn nextfn, NdbOperation& oper)
{
SetValueRec* recPtr = first;
while(recPtr) {
(*nextfn)(*recPtr, oper);
recPtr = recPtr->next; // Move to next in list - MASV
}
}
#endif
#endif