Below is the list of changes that have just been committed into a local
5.1 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2381 06/05/10 21:38:48 msvensson@neptunus.(none) +6 -0
Merge neptunus.(none):/home/msvensson/mysql/tmp/tmp_merge
into neptunus.(none):/home/msvensson/mysql/mysql-5.1
storage/ndb/src/common/util/NdbSqlUtil.cpp
1.32 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
storage/ndb/include/util/NdbSqlUtil.hpp
1.26 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
storage/ndb/include/ndbapi/NdbOperation.hpp
1.37 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
storage/ndb/src/common/util/NdbSqlUtil.cpp
1.29.2.2 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Merge rename: ndb/src/common/util/NdbSqlUtil.cpp -> storage/ndb/src/common/util/NdbSqlUtil.cpp
storage/ndb/include/util/NdbSqlUtil.hpp
1.23.2.2 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Merge rename: ndb/include/util/NdbSqlUtil.hpp -> storage/ndb/include/util/NdbSqlUtil.hpp
storage/ndb/include/ndbapi/NdbOperation.hpp
1.31.3.2 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Merge rename: ndb/include/ndbapi/NdbOperation.hpp -> storage/ndb/include/ndbapi/NdbOperation.hpp
mysql-test/t/ndb_condition_pushdown.test
1.18 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
mysql-test/r/ndb_condition_pushdown.result
1.20 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
BitKeeper/deleted/.del-changelog-5.0.xml~f4c50926ccdd7434
1.3 06/05/10 21:38:42 msvensson@neptunus.(none) +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: msvensson
# Host: neptunus.(none)
# Root: /home/msvensson/mysql/mysql-5.1/RESYNC
--- 1.31.3.1/ndb/include/ndbapi/NdbOperation.hpp 2006-05-05 00:52:29 +02:00
+++ 1.37/storage/ndb/include/ndbapi/NdbOperation.hpp 2006-05-10 21:38:42 +02:00
@@ -274,28 +274,27 @@
* @note There are 10 versions of equal() with
* slightly different parameters.
*
- * @note When using equal() with a string (char *) as
- * second argument, the string needs to be padded with
- * zeros in the following sense:
- * @code
- * // Equal needs strings to be padded with zeros
- * strncpy(buf, str, sizeof(buf));
- * NdbOperation->equal("Attr1", buf);
- * @endcode
- *
- *
+ * @note If attribute has fixed size, value must include all bytes.
+ * In particular a Char must be native-blank padded.
+ * If attribute has variable size, value must start with
+ * 1 or 2 little-endian length bytes (2 if Long*).
*
* @param anAttrName Attribute name
* @param aValue Attribute value.
- * @param len Attribute length expressed in bytes.
* @return -1 if unsuccessful.
*/
- int equal(const char* anAttrName, const char* aValue, Uint32 len = 0);
- int equal(const char* anAttrName, Uint32 aValue);
+#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
+ int equal(const char* anAttrName, const char* aValue, Uint32 len);
+#endif
+ int equal(const char* anAttrName, const char* aValue);
int equal(const char* anAttrName, Int32 aValue);
+ int equal(const char* anAttrName, Uint32 aValue);
int equal(const char* anAttrName, Int64 aValue);
int equal(const char* anAttrName, Uint64 aValue);
- int equal(Uint32 anAttrId, const char* aValue, Uint32 len = 0);
+#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
+ int equal(Uint32 anAttrId, const char* aValue, Uint32 len);
+#endif
+ int equal(Uint32 anAttrId, const char* aValue);
int equal(Uint32 anAttrId, Int32 aValue);
int equal(Uint32 anAttrId, Uint32 aValue);
int equal(Uint32 anAttrId, Int64 aValue);
@@ -372,28 +371,34 @@
*
* @note There are 14 versions of NdbOperation::setValue with
* slightly different parameters.
+ *
+ * @note See note under equal() about value format and length.
*
* @param anAttrName Name (or Id) of attribute.
* @param aValue Attribute value to set.
- * @param len Attribute length expressed in bytes.
* @return -1 if unsuccessful.
*/
- virtual int setValue(const char* anAttrName, const char* aValue,
- Uint32 len = 0);
- virtual int setValue(const char* anAttrName, Int32 aValue);
- virtual int setValue(const char* anAttrName, Uint32 aValue);
- virtual int setValue(const char* anAttrName, Uint64 aValue);
- virtual int setValue(const char* anAttrName, Int64 aValue);
- virtual int setValue(const char* anAttrName, float aValue);
- virtual int setValue(const char* anAttrName, double aValue);
-
- virtual int setValue(Uint32 anAttrId, const char* aValue, Uint32 len = 0);
- virtual int setValue(Uint32 anAttrId, Int32 aValue);
- virtual int setValue(Uint32 anAttrId, Uint32 aValue);
- virtual int setValue(Uint32 anAttrId, Uint64 aValue);
- virtual int setValue(Uint32 anAttrId, Int64 aValue);
- virtual int setValue(Uint32 anAttrId, float aValue);
- virtual int setValue(Uint32 anAttrId, double aValue);
+#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
+ int setValue(const char* anAttrName, const char* aValue, Uint32 len);
+#endif
+ int setValue(const char* anAttrName, const char* aValue);
+ 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);
+
+#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
+ int setValue(Uint32 anAttrId, const char* aValue, Uint32 len);
+#endif
+ int setValue(Uint32 anAttrId, const char* aValue);
+ 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);
/**
* This method replaces getValue/setValue for blobs. It creates
@@ -867,9 +872,9 @@
* These are support methods only used locally in this class.
******************************************************************************/
- virtual int equal_impl(const NdbColumnImpl*,const char* aValue, Uint32 len);
+ virtual int equal_impl(const NdbColumnImpl*,const char* aValue);
virtual NdbRecAttr* getValue_impl(const NdbColumnImpl*, char* aValue = 0);
- int setValue(const NdbColumnImpl* anAttrObject, const char* aValue, Uint32 len);
+ int setValue(const NdbColumnImpl* anAttrObject, const char* aValue);
NdbBlob* getBlobHandle(NdbTransaction* aCon, const NdbColumnImpl* anAttrObject);
int incValue(const NdbColumnImpl* anAttrObject, Uint32 aValue);
int incValue(const NdbColumnImpl* anAttrObject, Uint64 aValue);
@@ -888,6 +893,7 @@
int insertKEYINFO(const char* aValue,
Uint32 aStartPosition,
Uint32 aKeyLenInByte);
+ void reorderKEYINFO();
virtual void setErrorCode(int aErrorCode);
virtual void setErrorCodeAbort(int aErrorCode);
@@ -907,7 +913,7 @@
Uint32 ptr2int() { return theReceiver.getId(); };
// get table or index key from prepared signals
- int getKeyFromTCREQ(Uint32* data, unsigned size);
+ int getKeyFromTCREQ(Uint32* data, Uint32 & size);
/******************************************************************************
* These are the private variables that are defined in the operation objects.
@@ -985,6 +991,7 @@
Uint8 theDirtyIndicator; // Indicator of whether dirty operation
Uint8 theInterpretIndicator; // Indicator of whether interpreted operation
Int8 theDistrKeyIndicator_; // Indicates whether distr. key is used
+ Uint8 m_no_disk_flag;
Uint16 m_tcReqGSN;
Uint16 m_keyInfoGSN;
@@ -1133,6 +1140,13 @@
inline
int
+NdbOperation::equal(const char* anAttrName, const char* aValue, Uint32 len)
+{
+ return equal(anAttrName, aValue);
+}
+
+inline
+int
NdbOperation::equal(const char* anAttrName, Int32 aPar)
{
return equal(anAttrName, (const char*)&aPar, (Uint32)4);
@@ -1161,6 +1175,13 @@
inline
int
+NdbOperation::equal(Uint32 anAttrId, const char* aValue, Uint32 len)
+{
+ return equal(anAttrId, aValue);
+}
+
+inline
+int
NdbOperation::equal(Uint32 anAttrId, Int32 aPar)
{
return equal(anAttrId, (const char*)&aPar, (Uint32)4);
@@ -1189,6 +1210,13 @@
inline
int
+NdbOperation::setValue(const char* anAttrName, const char* aValue, Uint32 len)
+{
+ return setValue(anAttrName, aValue);
+}
+
+inline
+int
NdbOperation::setValue(const char* anAttrName, Int32 aPar)
{
return setValue(anAttrName, (const char*)&aPar, (Uint32)4);
@@ -1227,6 +1255,13 @@
NdbOperation::setValue(const char* anAttrName, double aPar)
{
return setValue(anAttrName, (const char*)&aPar, (Uint32)8);
+}
+
+inline
+int
+NdbOperation::setValue(Uint32 anAttrId, const char* aValue, Uint32 len)
+{
+ return setValue(anAttrId, aValue);
}
inline
--- 1.19/mysql-test/r/ndb_condition_pushdown.result 2006-03-29 16:28:33 +02:00
+++ 1.20/mysql-test/r/ndb_condition_pushdown.result 2006-05-10 21:38:42 +02:00
@@ -1782,5 +1782,65 @@
a b
1 jonas
3 johan
+drop table t1;
+create table t1 (a int, b varchar(3), primary key using hash(a))
+engine=ndb;
+insert into t1 values (1,'a'), (2,'ab'), (3,'abc');
+set engine_condition_pushdown = off;
+select * from t1 where b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'ab' or b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'abc';
+a b
+3 abc
+select * from t1 where b like 'abc' or b like 'abc';
+a b
+3 abc
+set engine_condition_pushdown = on;
+select * from t1 where b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'ab' or b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'abc';
+a b
+3 abc
+select * from t1 where b like 'abc' or b like 'abc';
+a b
+3 abc
+drop table t1;
+create table t1 (a int, b char(3), primary key using hash(a))
+engine=ndb;
+insert into t1 values (1,'a'), (2,'ab'), (3,'abc');
+set engine_condition_pushdown = off;
+select * from t1 where b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'ab' or b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'abc';
+a b
+3 abc
+select * from t1 where b like 'abc' or b like 'abc';
+a b
+3 abc
+set engine_condition_pushdown = on;
+select * from t1 where b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'ab' or b like 'ab';
+a b
+2 ab
+select * from t1 where b like 'abc';
+a b
+3 abc
+select * from t1 where b like 'abc' or b like 'abc';
+a b
+3 abc
set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4,t5;
--- 1.17/mysql-test/t/ndb_condition_pushdown.test 2006-03-29 16:28:33 +02:00
+++ 1.18/mysql-test/t/ndb_condition_pushdown.test 2006-05-10 21:38:42 +02:00
@@ -1649,5 +1649,42 @@
explain select * from t5 where b like '%jo%';
select * from t5 where b like '%jo%' order by a;
+# bug#17421 -1
+drop table t1;
+create table t1 (a int, b varchar(3), primary key using hash(a))
+engine=ndb;
+insert into t1 values (1,'a'), (2,'ab'), (3,'abc');
+# in TUP the constants 'ab' 'abc' were expected in varchar format
+# "like" returned error which became "false"
+# scan filter negates "or" which exposes the bug
+set engine_condition_pushdown = off;
+select * from t1 where b like 'ab';
+select * from t1 where b like 'ab' or b like 'ab';
+select * from t1 where b like 'abc';
+select * from t1 where b like 'abc' or b like 'abc';
+set engine_condition_pushdown = on;
+select * from t1 where b like 'ab';
+select * from t1 where b like 'ab' or b like 'ab';
+select * from t1 where b like 'abc';
+select * from t1 where b like 'abc' or b like 'abc';
+
+# bug#17421 -2
+drop table t1;
+create table t1 (a int, b char(3), primary key using hash(a))
+engine=ndb;
+insert into t1 values (1,'a'), (2,'ab'), (3,'abc');
+# test that incorrect MySQL behaviour is preserved
+# 'ab ' LIKE 'ab' is true in MySQL
+set engine_condition_pushdown = off;
+select * from t1 where b like 'ab';
+select * from t1 where b like 'ab' or b like 'ab';
+select * from t1 where b like 'abc';
+select * from t1 where b like 'abc' or b like 'abc';
+set engine_condition_pushdown = on;
+select * from t1 where b like 'ab';
+select * from t1 where b like 'ab' or b like 'ab';
+select * from t1 where b like 'abc';
+select * from t1 where b like 'abc' or b like 'abc';
+
set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4,t5;
| Thread |
|---|
| • bk commit into 5.1 tree (msvensson:1.2381) | msvensson | 10 May |