Commit e3f3c6f0 authored by unknown's avatar unknown

Bug #26986 BIT(33) for ndb is broken on solaris.

- always store lsw first in ndb

parent df4d3039
...@@ -726,11 +726,8 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field, ...@@ -726,11 +726,8 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
DBUG_PRINT("info", ("bit field")); DBUG_PRINT("info", ("bit field"));
DBUG_DUMP("value", (char*)&bits, pack_len); DBUG_DUMP("value", (char*)&bits, pack_len);
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (pack_len < 5) /* store lsw first */
{ bits = (bits >> 32) | (bits << 32);
DBUG_RETURN(ndb_op->setValue(fieldnr,
((char*)&bits)+4, pack_len) != 0);
}
#endif #endif
DBUG_RETURN(ndb_op->setValue(fieldnr, (char*)&bits, pack_len) != 0); DBUG_RETURN(ndb_op->setValue(fieldnr, (char*)&bits, pack_len) != 0);
} }
...@@ -2653,8 +2650,15 @@ void ha_ndbcluster::unpack_record(byte* buf) ...@@ -2653,8 +2650,15 @@ void ha_ndbcluster::unpack_record(byte* buf)
DBUG_PRINT("info", ("bit field H'%.8X%.8X", DBUG_PRINT("info", ("bit field H'%.8X%.8X",
*(Uint32 *)(*value).rec->aRef(), *(Uint32 *)(*value).rec->aRef(),
*((Uint32 *)(*value).rec->aRef()+1))); *((Uint32 *)(*value).rec->aRef()+1)));
#ifdef WORDS_BIGENDIAN
/* lsw is stored first */
Uint32 *buf= (Uint32 *)(*value).rec->aRef();
((Field_bit *) *field)->store(*buf | (((longlong)*(buf+1)) << 32),
TRUE);
#else
((Field_bit *) *field)->store((longlong) ((Field_bit *) *field)->store((longlong)
(*value).rec->u_64_value(), TRUE); (*value).rec->u_64_value(), TRUE);
#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