#At file:///export/home2/tmp/jw1159207/mysql/mysql-5.1-telco-7.0-spj/ based on revid:jan.wedvik@stripped
2921 Jan Wedvik 2009-07-07 [merge]
Moved serialization steps from test_spj.cpp into NdbQueryOperationImpl class.
modified:
storage/ndb/include/ndbapi/NdbOperation.hpp
storage/ndb/include/ndbapi/NdbQueryOperation.hpp
storage/ndb/include/ndbapi/NdbTransaction.hpp
storage/ndb/src/ndbapi/NdbQueryBuilderImpl.hpp
storage/ndb/src/ndbapi/NdbQueryOperation.cpp
storage/ndb/src/ndbapi/NdbQueryOperationImpl.hpp
storage/ndb/src/ndbapi/NdbTransaction.cpp
storage/ndb/test/tools/test_spj.cpp
=== modified file 'storage/ndb/include/ndbapi/NdbOperation.hpp'
--- a/storage/ndb/include/ndbapi/NdbOperation.hpp 2009-06-22 13:22:11 +0000
+++ b/storage/ndb/include/ndbapi/NdbOperation.hpp 2009-07-07 14:35:36 +0000
@@ -53,6 +53,7 @@ class NdbOperation
friend class NdbScanFilterImpl;
friend class NdbReceiver;
friend class NdbBlob;
+ friend class NdbQueryImpl;
#endif
public:
=== modified file 'storage/ndb/include/ndbapi/NdbQueryOperation.hpp'
--- a/storage/ndb/include/ndbapi/NdbQueryOperation.hpp 2009-07-06 11:51:39 +0000
+++ b/storage/ndb/include/ndbapi/NdbQueryOperation.hpp 2009-07-07 14:35:36 +0000
@@ -57,14 +57,14 @@ protected:
public:
// Factory method which instantiate a query from its definition
- static NdbQuery*
- buildQuery(NdbTransaction& trans, const NdbQueryDef& queryDef);
+ //static NdbQuery*
+ //buildQuery(NdbTransaction& trans, const NdbQueryDef& queryDef);
////////////////////////////////////////////////////////
// START: TEMP HACK for Jans result set coding until we
// have a usable 'queryDef'
- static NdbQuery*
- buildQuery(NdbTransaction& trans);
+ //static NdbQuery*
+ //buildQuery(NdbTransaction& trans);
// END Jans hack.
/////////////////////////////////////////////////
=== modified file 'storage/ndb/include/ndbapi/NdbTransaction.hpp'
--- a/storage/ndb/include/ndbapi/NdbTransaction.hpp 2009-06-12 12:01:12 +0000
+++ b/storage/ndb/include/ndbapi/NdbTransaction.hpp 2009-07-07 14:35:36 +0000
@@ -1084,6 +1084,7 @@ private:
// optim: any blobs
bool theBlobFlag;
Uint8 thePendingBlobOps;
+ NdbQueryImpl* m_firstQuery;
inline bool hasBlobOperation() { return theBlobFlag; }
static void sendTC_COMMIT_ACK(class TransporterFacade *, NdbApiSignal *,
=== modified file 'storage/ndb/src/ndbapi/NdbQueryBuilderImpl.hpp'
--- a/storage/ndb/src/ndbapi/NdbQueryBuilderImpl.hpp 2009-07-07 09:52:31 +0000
+++ b/storage/ndb/src/ndbapi/NdbQueryBuilderImpl.hpp 2009-07-07 14:35:36 +0000
@@ -115,6 +115,11 @@ public:
Uint32Buffer& getSerialized(){
return m_serializedDef;
}
+
+ /**TODO: Remove this method. Only needed by testSerialize() test code.*/
+ const Uint32Buffer& getSerialized() const {
+ return m_serializedDef;
+ }
private:
NdbQueryDef m_interface;
=== modified file 'storage/ndb/src/ndbapi/NdbQueryOperation.cpp'
--- a/storage/ndb/src/ndbapi/NdbQueryOperation.cpp 2009-07-07 09:52:31 +0000
+++ b/storage/ndb/src/ndbapi/NdbQueryOperation.cpp 2009-07-07 14:35:36 +0000
@@ -33,17 +33,17 @@ NdbQuery::~NdbQuery()
//static
-NdbQuery*
-NdbQuery::buildQuery(NdbTransaction& trans, const NdbQueryDef& queryDef)
-{ NdbQueryImpl* query = NdbQueryImpl::buildQuery(trans, queryDef.getImpl());
- return (query) ? &query->getInterface() : NULL;
-}
-
-NdbQuery*
-NdbQuery::buildQuery(NdbTransaction& trans) // TEMP hack to be removed
-{ NdbQueryImpl* query = NdbQueryImpl::buildQuery(trans);
- return (query) ? &query->getInterface() : NULL;
-}
+//NdbQuery*
+//NdbQuery::buildQuery(NdbTransaction& trans, const NdbQueryDef& queryDef)
+//{ NdbQueryImpl* query = NdbQueryImpl::buildQuery(trans, queryDef.getImpl());
+// return (query) ? &query->getInterface() : NULL;
+//}
+
+//NdbQuery*
+//NdbQuery::buildQuery(NdbTransaction& trans) // TEMP hack to be removed
+//{ NdbQueryImpl* query = NdbQueryImpl::buildQuery(trans);
+// return (query) ? &query->getInterface() : NULL;
+//}
Uint32
NdbQuery::getNoOfOperations() const
@@ -111,18 +111,6 @@ NdbQueryOperation::NdbQueryOperation(Ndb
NdbQueryOperation::~NdbQueryOperation()
{}
-// TODO: Remove this factory. Needed for result prototype only.
-// Temp factory for Jan - will be replaced later
-//static
-NdbQueryOperation*
-NdbQueryOperation::buildQueryOperation(NdbQueryImpl& queryImpl,
- class NdbOperation& operation)
-{
- NdbQueryOperationImpl* op =
- NdbQueryOperationImpl::buildQueryOperation(queryImpl, operation);
- return (op) ? &op->getInterface() : NULL;
-}
-
Uint32
NdbQueryOperation::getNoOfParentOperations() const
{
@@ -213,7 +201,22 @@ NdbQueryOperation::isRowChanged() const
///////////////////////////////////////////
///////// NdbQueryImpl methods ///////////
///////////////////////////////////////////
-NdbQueryImpl::NdbQueryImpl(NdbTransaction& trans):
+//NdbQueryImpl::NdbQueryImpl(NdbTransaction& trans):
+// m_interface(*this),
+// m_magic(MAGIC),
+// m_id(trans.getNdb()->theImpl->theNdbObjectIdMap.map(this)),
+// m_error(),
+// m_transaction(trans),
+// m_operations(),
+// m_tcKeyConfReceived(false),
+// m_pendingOperations(0)
+//{
+// assert(m_id != NdbObjectIdMap::InvalidId);
+//}
+
+NdbQueryImpl::NdbQueryImpl(NdbTransaction& trans,
+ const NdbQueryDefImpl& queryDef,
+ NdbQueryImpl* next):
m_interface(*this),
m_magic(MAGIC),
m_id(trans.getNdb()->theImpl->theNdbObjectIdMap.map(this)),
@@ -221,20 +224,10 @@ NdbQueryImpl::NdbQueryImpl(NdbTransactio
m_transaction(trans),
m_operations(),
m_tcKeyConfReceived(false),
- m_pendingOperations(0)
-{
- assert(m_id != NdbObjectIdMap::InvalidId);
-}
-
-NdbQueryImpl::NdbQueryImpl(NdbTransaction& trans, const NdbQueryDefImpl& queryDef):
- m_interface(*this),
- m_magic(MAGIC),
- m_id(trans.getNdb()->theImpl->theNdbObjectIdMap.map(this)),
- m_error(),
- m_transaction(trans),
- m_operations(),
- m_tcKeyConfReceived(false),
- m_pendingOperations(0)
+ m_pendingOperations(0),
+ m_next(next),
+ m_ndbOperation(NULL),
+ m_queryDef(queryDef)
{
assert(m_id != NdbObjectIdMap::InvalidId);
@@ -255,6 +248,13 @@ NdbQueryImpl::NdbQueryImpl(NdbTransactio
}
m_operations.push_back(op);
+ if(def.getNoOfParentOperations()==0){
+ assert(m_ndbOperation == NULL);
+ m_ndbOperation = m_transaction.getNdbOperation(&def.getTable());
+ m_ndbOperation->readTuple(NdbOperation::LM_Dirty);
+ m_ndbOperation->m_isLinked = true;
+ m_ndbOperation->setQueryImpl(this);
+ }
}
}
@@ -271,15 +271,11 @@ NdbQueryImpl::~NdbQueryImpl()
//static
NdbQueryImpl*
-NdbQueryImpl::buildQuery(NdbTransaction& trans, const NdbQueryDefImpl& queryDef)
+NdbQueryImpl::buildQuery(NdbTransaction& trans,
+ const NdbQueryDefImpl& queryDef,
+ NdbQueryImpl* next)
{
- return new NdbQueryImpl(trans, queryDef);
-}
-
-NdbQueryImpl*
-NdbQueryImpl::buildQuery(NdbTransaction& trans) // TEMP hack to be removed
-{
- return new NdbQueryImpl(trans);
+ return new NdbQueryImpl(trans, queryDef, next);
}
Uint32
@@ -338,10 +334,25 @@ NdbQueryImpl::getNdbTransaction() const
void
NdbQueryImpl::prepareSend(){
- m_pendingOperations = m_operations.size();
+ m_pendingOperations = m_operations.size();
for(Uint32 i = 0; i < m_operations.size(); i++){
- m_operations[i]->prepareSend(m_serializedParams);
+ m_operations[i]->prepareSend(m_serializedParams);
+ }
+ // TODO: Replace heap allocation.
+ Uint32* tree = new Uint32[m_queryDef.getSerialized().getSize()];
+ for(Uint32 i = 0; i < m_queryDef.getSerialized().getSize(); i++){
+ tree[i] = m_queryDef.getSerialized().get(i);
+ }
+ m_ndbOperation->insertATTRINFOloop(tree,
+ m_queryDef.getSerialized().getSize());
+ delete[] tree;
+ Uint32* params = new Uint32[m_serializedParams.getSize()];
+ for(Uint32 i = 0; i < m_serializedParams.getSize(); i++){
+ params[i] = m_serializedParams.get(i);
}
+ m_ndbOperation->insertATTRINFOloop(params, m_serializedParams.getSize());
+ delete[] params;
+
#ifdef TRACE_SERIALIZATION
ndbout << "Serialized params for all : ";
for(Uint32 i = 0; i < m_serializedParams.getSize(); i++){
@@ -387,34 +398,34 @@ NdbQueryOperationImpl::NdbQueryOperation
// START: Temp code for Jan until we have a propper NdbQueryOperationDef
/** Only used for result processing prototype purposes. To be removed.*/
-NdbQueryOperationImpl::NdbQueryOperationImpl(NdbQueryImpl& queryImpl,
- NdbOperation& operation):
- m_interface(*this),
- m_magic(MAGIC),
- m_id(queryImpl.getNdbTransaction()->getNdb()->theImpl
- ->theNdbObjectIdMap.map(this)),
- m_operationDef(*reinterpret_cast<NdbQueryOperationDefImpl*>(NULL)),
- m_parents(),
- m_children(),
- m_receiver(queryImpl.getNdbTransaction()->getNdb()),
- m_queryImpl(queryImpl),
- m_state(State_Initial),
- m_operation(operation)
-{
- assert(m_id != NdbObjectIdMap::InvalidId);
- m_receiver.init(NdbReceiver::NDB_OPERATION, false, &operation);
- queryImpl.addQueryOperation(this);
-}
+//NdbQueryOperationImpl::NdbQueryOperationImpl(NdbQueryImpl& queryImpl,
+// NdbOperation& operation):
+// m_interface(*this),
+// m_magic(MAGIC),
+// m_id(queryImpl.getNdbTransaction()->getNdb()->theImpl
+// ->theNdbObjectIdMap.map(this)),
+// m_operationDef(*reinterpret_cast<NdbQueryOperationDefImpl*>(NULL)),
+// m_parents(),
+// m_children(),
+// m_receiver(queryImpl.getNdbTransaction()->getNdb()),
+// m_queryImpl(queryImpl),
+// m_state(State_Initial),
+// m_operation(operation)
+//{
+// assert(m_id != NdbObjectIdMap::InvalidId);
+// m_receiver.init(NdbReceiver::NDB_OPERATION, false, &operation);
+// queryImpl.addQueryOperation(this);
+//}
// Temp factory for Jan - will be removed later
// static
-NdbQueryOperationImpl*
-NdbQueryOperationImpl::buildQueryOperation(NdbQueryImpl& queryImpl,
- class NdbOperation& operation)
-{
- NdbQueryOperationImpl* op = new NdbQueryOperationImpl(queryImpl, operation);
- return op;
-}
+//NdbQueryOperationImpl*
+//NdbQueryOperationImpl::buildQueryOperation(NdbQueryImpl& queryImpl,
+// class NdbOperation& operation)
+//{
+// NdbQueryOperationImpl* op = new NdbQueryOperationImpl(queryImpl, operation);
+// return op;
+//}
// END temp code
//////////////////////////////////////////////////////////
=== modified file 'storage/ndb/src/ndbapi/NdbQueryOperationImpl.hpp'
--- a/storage/ndb/src/ndbapi/NdbQueryOperationImpl.hpp 2009-07-07 09:52:31 +0000
+++ b/storage/ndb/src/ndbapi/NdbQueryOperationImpl.hpp 2009-07-07 14:35:36 +0000
@@ -32,29 +32,31 @@ class NdbQueryImpl {
private:
// Only constructable from factory ::buildQuery();
explicit NdbQueryImpl(NdbTransaction& trans,
- const NdbQueryDefImpl& queryDef);
+ const NdbQueryDefImpl& queryDef,
+ NdbQueryImpl* next);
~NdbQueryImpl();
public:
STATIC_CONST (MAGIC = 0xdeadface);
// Factory method which instantiate a query from its definition
- static NdbQueryImpl*
- buildQuery(NdbTransaction& trans, const NdbQueryDefImpl& queryDef);
+ static NdbQueryImpl* buildQuery(NdbTransaction& trans,
+ const NdbQueryDefImpl& queryDef,
+ NdbQueryImpl* next);
///////////////////////////////////////////////////
// START: Temp hacks for Jans result set coding
- explicit NdbQueryImpl(NdbTransaction& trans); // TEMP, will be removed
+ //explicit NdbQueryImpl(NdbTransaction& trans); // TEMP, will be removed
- static NdbQueryImpl*
- buildQuery(NdbTransaction& trans);
+ //static NdbQueryImpl*
+ //buildQuery(NdbTransaction& trans);
/** Set an NdbQueryOperation to be the root of a linked operation */
// LATER: root and *all* NdbQueryOperations will be constructed
// together with NdbQuery itself in :.buildQuery()
- void addQueryOperation(NdbQueryOperationImpl* op) {
- m_operations.push_back(op);
- }
+ //void addQueryOperation(NdbQueryOperationImpl* op) {
+ // m_operations.push_back(op);
+ //}
//// END: TEMP hacks
//////////////////////////////////////////////////
@@ -97,6 +99,11 @@ public:
return m_serializedParams;
}
+ /**TODO: Remove this method. Only needed by testSerialize() test code.*/
+ const Uint32Buffer& getSerialized() const{
+ return m_serializedParams;
+ }
+
/** Prepare NdbReceiver objects for receiving the first results batch.*/
void prepareSend();
@@ -111,7 +118,12 @@ public:
NdbQuery& getInterface()
{ return m_interface; }
+
+ /** Get next query in same transaction.*/
+ NdbQueryImpl* getNext() const {return m_next;}
+ /** TODO: Remove. Temporary hack for prototype.*/
+ NdbOperation* getNdbOperation() const {return m_ndbOperation;}
private:
NdbQuery m_interface;
@@ -131,8 +143,29 @@ private:
int m_pendingOperations;
/** Serialized representation of parameters. To be sent in TCKEYREQ*/
Uint32Buffer m_serializedParams;
+ /** Next query in same transaction.*/
+ NdbQueryImpl* const m_next;
+ /** TODO: Remove this.*/
+ NdbOperation* m_ndbOperation;
+ /** Definition of this query.*/
+ const NdbQueryDefImpl& m_queryDef;
}; // class NdbQueryImpl
+/*
+class NdbQueryListElem{
+public:
+ NdbQueryListElem* getNext() const {return m_next;}
+private:
+ friend class NdbQueryImpl;
+ NdbQueryImpl(NdbTransaction& trans,
+ const NdbQueryDefImpl& queryDef,
+ NdbQueryListElem* next):
+ m_query(trans, queryDef),
+ m_next(next){}
+ NdbQueryImpl m_query;
+ NdbQueryListElem* const m_next
+};
+*/
/** This class contains data members for NdbQueryOperation, such that these
* do not need to exposed in NdbQueryOperation.hpp. This class may be
=== modified file 'storage/ndb/src/ndbapi/NdbTransaction.cpp'
--- a/storage/ndb/src/ndbapi/NdbTransaction.cpp 2009-07-06 10:54:23 +0000
+++ b/storage/ndb/src/ndbapi/NdbTransaction.cpp 2009-07-07 14:35:36 +0000
@@ -85,7 +85,8 @@ NdbTransaction::NdbTransaction( Ndb* aNd
theScanningOp(NULL),
theBuddyConPtr(0xFFFFFFFF),
theBlobFlag(false),
- thePendingBlobOps(0)
+ thePendingBlobOps(0),
+ m_firstQuery(NULL)
{
theListState = NotInList;
theError.code = 0;
@@ -631,6 +632,12 @@ NdbTransaction::executeAsynchPrepare(Ndb
*/
if (theError.code != 4012)
theError.code = 0;
+ NdbQueryImpl* query = m_firstQuery;
+ while(query!=NULL){
+ query->prepareSend();
+ query = query->getNext();
+ }
+
NdbScanOperation* tcOp = m_theFirstScanOperation;
if (tcOp != 0){
// Execute any cursor operations
@@ -2765,6 +2772,15 @@ NdbTransaction::createQuery(const NdbQue
const void* const param[],
NdbOperation::LockMode lock_mode)
{
- NdbQuery* query = NdbQuery::buildQuery(*this, *def);
- return query;
+ NdbQueryImpl* query
+ = NdbQueryImpl::buildQuery(*this, def->getImpl(), m_firstQuery);
+ if(query!=NULL)
+ {
+ m_firstQuery = query;
+ return &query->getInterface();
+ }
+ else
+ {
+ return NULL;
+ }
}
=== modified file 'storage/ndb/test/tools/test_spj.cpp'
--- a/storage/ndb/test/tools/test_spj.cpp 2009-07-07 09:52:31 +0000
+++ b/storage/ndb/test/tools/test_spj.cpp 2009-07-07 14:35:36 +0000
@@ -311,6 +311,7 @@ int spjTest(int argc, char** argv){
if (_scan == 0)
{
+#ifdef UNUSED
/**
SELECT t1.*, t2.*
FROM T t1 LEFT OUTER JOIN T t2 ON t2.a = t1.b0 AND t2.b = t1.a0
@@ -400,6 +401,7 @@ int spjTest(int argc, char** argv){
for(int i=0; i<nNodes; i++){
rSet[i]->print();
}
+#endif
}
else if (_scan != 0)
{
@@ -631,15 +633,16 @@ int testSerialize(int argc, char** argv)
NdbTransaction* myTransaction= myNdb.startTransaction();
if (myTransaction == NULL) APIERROR(myNdb.getNdbError());
- NdbOperation* ndbOperation = myTransaction->getNdbOperation(tab);
- ndbOperation->readTuple(NdbOperation::LM_Dirty);
- // Set keys for root lookup.
- ndbOperation->equal("a", 11);
- ndbOperation->equal("b", 3);
+ //NdbOperation* ndbOperation = myTransaction->getNdbOperation(tab);
// Instantiate NdbQuery for this transaction.
NdbQuery* query = myTransaction->createQuery(queryDef, NULL);
+ // ndbOperation->readTuple(NdbOperation::LM_Dirty);
+ // Set keys for root lookup.
+ query->getImpl().getNdbOperation()->equal("a", 11);
+ query->getImpl().getNdbOperation()->equal("b", 3);
+
/* Read all attributes from result tuples.*/
const Uint32 nNodes = query->getNoOfOperations();
const ResultSet** resultSet = new const ResultSet*[nNodes];
@@ -648,7 +651,7 @@ int testSerialize(int argc, char** argv)
}
/* Serialize query tree and parameters.*/
- query->getImpl().prepareSend();
+ /*query->getImpl().prepareSend();
Uint32* const tree = new Uint32[queryDef->getImpl().getSerialized().getSize()];
for(Uint32 i = 0; i<queryDef->getImpl().getSerialized().getSize(); i++){
@@ -658,18 +661,18 @@ int testSerialize(int argc, char** argv)
Uint32* const params = new Uint32[paramSize];
for(Uint32 i = 0; i<paramSize; i++){
params[i] = query->getImpl().getSerialized().get(i);
- }
+ }*/
/* Copy serialized data into ATTRINFO.*/
- NdbScanFilterImpl::add(ndbOperation, tree, queryDef->getImpl().getSerialized().getSize());
- NdbScanFilterImpl::add(ndbOperation, params, paramSize);
- NdbScanFilterImpl::setIsLinkedFlag(ndbOperation);
+ /*NdbScanFilterImpl::add(ndbOperation, tree, queryDef->getImpl().getSerialized().getSize());
+ NdbScanFilterImpl::add(ndbOperation, params, paramSize);
+ NdbScanFilterImpl::setIsLinkedFlag(ndbOperation);*/
// Add link to
- ndbOperation->setQueryImpl(&query->getImpl());
+ // ndbOperation->setQueryImpl(&query->getImpl());
myTransaction->execute(NoCommit);
// Print results.
- for(int i=0; i<nNodes; i++){
+ for(Uint32 i=0; i<nNodes; i++){
resultSet[i]->print();
}
Attachment: [text/bzr-bundle] bzr/jan.wedvik@sun.com-20090707143536-or9ip1ns7scv1y75.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-7.0-spj branch (jan.wedvik:2921) | Jan Wedvik | 7 Jul |