List:Commits« Previous MessageNext Message »
From:msvensson Date:May 10 2006 7:38pm
Subject:bk commit into 5.1 tree (msvensson:1.2381)
View as plain text  
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)msvensson10 May