Commit 16a32bc2 authored by jonas@perch.ndb.mysql.com's avatar jonas@perch.ndb.mysql.com

Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb

into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
parents 454d5454 5a78db3d
......@@ -7295,7 +7295,7 @@ void Dbdict::execGET_TABINFOREQ(Signal* signal)
if(objEntry->m_tableType==DictTabInfo::Datafile)
{
jam();
GetTabInfoReq *req= (GetTabInfoReq*)signal->theData;
GetTabInfoReq *req= (GetTabInfoReq*)signal->getDataPtrSend();
req->senderData= c_retrieveRecord.retrievePage;
req->senderRef= reference();
req->requestType= GetTabInfoReq::RequestById;
......@@ -7307,7 +7307,7 @@ void Dbdict::execGET_TABINFOREQ(Signal* signal)
else if(objEntry->m_tableType==DictTabInfo::LogfileGroup)
{
jam();
GetTabInfoReq *req= (GetTabInfoReq*)signal->theData;
GetTabInfoReq *req= (GetTabInfoReq*)signal->getDataPtrSend();
req->senderData= c_retrieveRecord.retrievePage;
req->senderRef= reference();
req->requestType= GetTabInfoReq::RequestById;
......
......@@ -57,6 +57,8 @@ Restore::Restore(Block_context& ctx) :
addRecSignal(GSN_LQHKEYREF, &Restore::execLQHKEYREF);
addRecSignal(GSN_LQHKEYCONF, &Restore::execLQHKEYCONF);
ndbrequire(sizeof(Column) == 8);
}
Restore::~Restore()
......@@ -794,10 +796,10 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
return;
}
DataBuffer<15> variable(m_databuffer_pool);
Uint32 null_offset = 0;
union { Column c; Uint32 _align[2];};
Column c;
Uint32 colstore[sizeof(Column)/sizeof(Uint32)];
for(Uint32 i = 0; i<tmpTab.NoOfAttributes; i++) {
jam();
DictTabInfo::Attribute tmp; tmp.init();
......@@ -814,10 +816,6 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
const Uint32 sz32 = (sz * arr + 31) >> 5;
const bool varsize = tmp.AttributeArrayType != NDB_ARRAYTYPE_FIXED;
union {
Column c;
Uint32 _align[2];
};
c.m_id = tmp.AttributeId;
c.m_size = sz32;
c.m_flags = (tmp.AttributeKeyFlag ? Column::COL_KEY : 0);
......@@ -836,22 +834,19 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
if(!tmp.AttributeNullableFlag && !varsize)
{
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, i);
return;
}
}
else if (true) // null mask dropped in 5.1
{
c.m_flags |= (varsize ? Column::COL_VAR : 0);
c.m_flags |= (tmp.AttributeNullableFlag ? Column::COL_NULL : 0);
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, i);
return;
}
}
memcpy(colstore, &c, sizeof(Column));
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, i);
return;
}
}
if(lcp)
......@@ -861,7 +856,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
c.m_id = AttributeHeader::DISK_REF;
c.m_size = 2;
c.m_flags = 0;
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
memcpy(colstore, &c, sizeof(Column));
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, 0);
return;
......@@ -872,7 +868,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
c.m_id = AttributeHeader::ROWID;
c.m_size = 2;
c.m_flags = 0;
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
memcpy(colstore, &c, sizeof(Column));
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, 0);
return;
......@@ -884,7 +881,8 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
c.m_id = AttributeHeader::ROW_GCI;
c.m_size = 2;
c.m_flags = 0;
if(!columns.append(_align, sizeof(Column)/sizeof(Uint32)))
memcpy(colstore, &c, sizeof(Column));
if(!columns.append(colstore, sizeof(Column)/sizeof(Uint32)))
{
parse_error(signal, file_ptr, __LINE__, 0);
return;
......@@ -942,7 +940,7 @@ Restore::parse_record(Signal* signal, FilePtr file_ptr,
Uint32 *attrData = attr_start;
union {
Column c;
Uint32 _align[2];
Uint32 _align[sizeof(Column)/sizeof(Uint32)];
};
bool disk = false;
bool rowid = false;
......
......@@ -32,19 +32,33 @@ public:
bool find(Ptr<T>& ptr, Uint32 key) const {
U rec;
rec.key = key;
return m_ref.find(*(Ptr<U>*)&ptr, rec);
Ptr<U> tmp;
bool ret = m_ref.find(tmp, rec);
ptr.i = tmp.i;
ptr.p = static_cast<T*>(tmp.p);
return ret;
}
bool seize(Ptr<T> & ptr) {
return m_ref.seize(*(Ptr<U>*)&ptr);
Ptr<U> tmp;
bool ret = m_ref.seize(tmp);
ptr.i = tmp.i;
ptr.p = static_cast<T*>(tmp.p);
return ret;
}
void add(Ptr<T> & ptr) {
m_ref.add(*(Ptr<U>*)&ptr);
Ptr<U> tmp;
tmp.i = ptr.i;
tmp.p = static_cast<U*>(ptr.p);
m_ref.add(tmp);
}
void release(Ptr<T> & ptr) {
m_ref.release(*(Ptr<U>*)&ptr);
Ptr<U> tmp;
tmp.i = ptr.i;
tmp.p = static_cast<U*>(ptr.p);
m_ref.release(tmp);
}
};
......
......@@ -324,7 +324,10 @@ inline
void
RecordPool<T, P>::release(Ptr<T> ptr)
{
m_pool.release(*(Ptr<void>*)&ptr);
Ptr<void> tmp;
tmp.i = ptr.i;
tmp.p = ptr.p;
m_pool.release(tmp);
}
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment