List:Commits« Previous MessageNext Message »
From:bar Date:October 23 2006 11:18am
Subject:bk commit into 5.1 tree (bar:1.2310) BUG#22823
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of bar. When bar 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@stripped, 2006-10-23 14:17:57+05:00, bar@stripped +3 -0
  Bug#22823 gt and lt operators appear to be reversed in ExtractValue() command
  Problem: "greater than" and "less than" XPath operators appeared to have been
implemented in reverse.
  Fix: swap arguments to eq_func() and eq_func_reverse() to provide correct operation
result.

  mysql-test/r/xml.result@stripped, 2006-10-23 14:17:49+05:00, bar@stripped +73 -0
    Adding test case

  mysql-test/t/xml.test@stripped, 2006-10-23 14:17:49+05:00, bar@stripped +30 -0
    Adding test case

  sql/item_xmlfunc.cc@stripped, 2006-10-23 14:17:49+05:00, bar@stripped +8 -8
    Pass argumemtns to eq_func() and eq_func_reverse() in correct order:
    nodeset argument first, then scalar argument.
    Also, fixing eq_func_reverse() to do correct conversion, e.g:
    "scalar > nodeset" into "nodeset < scalar" instead of wrong "nodeset <=
scalar"
    "scalar >= nodeset" into "nodeset <= scalar" instead of wrong "nodeset <
scalar".

# 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:	bar
# Host:	bar.intranet.mysql.r18.ru
# Root:	/usr/home/bar/mysql-5.1.b22823

--- 1.18/mysql-test/r/xml.result	2006-10-23 14:18:10 +05:00
+++ 1.19/mysql-test/r/xml.result	2006-10-23 14:18:10 +05:00
@@ -736,3 +736,76 @@
 select extractValue('<x.-_:>test</x.-_:>','//*');
 extractValue('<x.-_:>test</x.-_:>','//*')
 test
+set @xml=
"<entry><id>pt10</id><pt>10</pt></entry><entry><id>pt50</id><pt>50</pt></entry>";
+select ExtractValue(@xml, "/entry[(pt=10)]/id");
+ExtractValue(@xml, "/entry[(pt=10)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(pt!=10)]/id");
+ExtractValue(@xml, "/entry[(pt!=10)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(pt<10)]/id");
+ExtractValue(@xml, "/entry[(pt<10)]/id")
+
+select ExtractValue(@xml, "/entry[(pt<=10)]/id");
+ExtractValue(@xml, "/entry[(pt<=10)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(pt>10)]/id");
+ExtractValue(@xml, "/entry[(pt>10)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(pt>=10)]/id");
+ExtractValue(@xml, "/entry[(pt>=10)]/id")
+pt10 pt50
+select ExtractValue(@xml, "/entry[(pt=50)]/id");
+ExtractValue(@xml, "/entry[(pt=50)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(pt!=50)]/id");
+ExtractValue(@xml, "/entry[(pt!=50)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(pt<50)]/id");
+ExtractValue(@xml, "/entry[(pt<50)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(pt<=50)]/id");
+ExtractValue(@xml, "/entry[(pt<=50)]/id")
+pt10 pt50
+select ExtractValue(@xml, "/entry[(pt>50)]/id");
+ExtractValue(@xml, "/entry[(pt>50)]/id")
+
+select ExtractValue(@xml, "/entry[(pt>=50)]/id");
+ExtractValue(@xml, "/entry[(pt>=50)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(10=pt)]/id");
+ExtractValue(@xml, "/entry[(10=pt)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(10!=pt)]/id");
+ExtractValue(@xml, "/entry[(10!=pt)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(10>pt)]/id");
+ExtractValue(@xml, "/entry[(10>pt)]/id")
+
+select ExtractValue(@xml, "/entry[(10>=pt)]/id");
+ExtractValue(@xml, "/entry[(10>=pt)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(10<pt)]/id");
+ExtractValue(@xml, "/entry[(10<pt)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(10<=pt)]/id");
+ExtractValue(@xml, "/entry[(10<=pt)]/id")
+pt10 pt50
+select ExtractValue(@xml, "/entry[(50=pt)]/id");
+ExtractValue(@xml, "/entry[(50=pt)]/id")
+pt50
+select ExtractValue(@xml, "/entry[(50!=pt)]/id");
+ExtractValue(@xml, "/entry[(50!=pt)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(50>pt)]/id");
+ExtractValue(@xml, "/entry[(50>pt)]/id")
+pt10
+select ExtractValue(@xml, "/entry[(50>=pt)]/id");
+ExtractValue(@xml, "/entry[(50>=pt)]/id")
+pt10 pt50
+select ExtractValue(@xml, "/entry[(50<pt)]/id");
+ExtractValue(@xml, "/entry[(50<pt)]/id")
+
+select ExtractValue(@xml, "/entry[(50<=pt)]/id");
+ExtractValue(@xml, "/entry[(50<=pt)]/id")
+pt50

--- 1.17/mysql-test/t/xml.test	2006-10-23 14:18:10 +05:00
+++ 1.18/mysql-test/t/xml.test	2006-10-23 14:18:10 +05:00
@@ -376,3 +376,33 @@
 select extractValue('<_>test</_>','//*');
 # dot, dash, underscore and semicolon are good identifier middle characters
 select extractValue('<x.-_:>test</x.-_:>','//*');
+
+#
+# Bug#22823 gt and lt operators appear to be
+# reversed in ExtractValue() command
+#
+set @xml=
"<entry><id>pt10</id><pt>10</pt></entry><entry><id>pt50</id><pt>50</pt></entry>";
+select ExtractValue(@xml, "/entry[(pt=10)]/id");
+select ExtractValue(@xml, "/entry[(pt!=10)]/id");
+select ExtractValue(@xml, "/entry[(pt<10)]/id");
+select ExtractValue(@xml, "/entry[(pt<=10)]/id");
+select ExtractValue(@xml, "/entry[(pt>10)]/id");
+select ExtractValue(@xml, "/entry[(pt>=10)]/id");
+select ExtractValue(@xml, "/entry[(pt=50)]/id");
+select ExtractValue(@xml, "/entry[(pt!=50)]/id");
+select ExtractValue(@xml, "/entry[(pt<50)]/id");
+select ExtractValue(@xml, "/entry[(pt<=50)]/id");
+select ExtractValue(@xml, "/entry[(pt>50)]/id");
+select ExtractValue(@xml, "/entry[(pt>=50)]/id");
+select ExtractValue(@xml, "/entry[(10=pt)]/id");
+select ExtractValue(@xml, "/entry[(10!=pt)]/id");
+select ExtractValue(@xml, "/entry[(10>pt)]/id");
+select ExtractValue(@xml, "/entry[(10>=pt)]/id");
+select ExtractValue(@xml, "/entry[(10<pt)]/id");
+select ExtractValue(@xml, "/entry[(10<=pt)]/id");
+select ExtractValue(@xml, "/entry[(50=pt)]/id");
+select ExtractValue(@xml, "/entry[(50!=pt)]/id");
+select ExtractValue(@xml, "/entry[(50>pt)]/id");
+select ExtractValue(@xml, "/entry[(50>=pt)]/id");
+select ExtractValue(@xml, "/entry[(50<pt)]/id");
+select ExtractValue(@xml, "/entry[(50<=pt)]/id");

--- 1.20/sql/item_xmlfunc.cc	2006-10-23 14:18:10 +05:00
+++ 1.21/sql/item_xmlfunc.cc	2006-10-23 14:18:10 +05:00
@@ -532,7 +532,7 @@
   longlong val_int()
   {
     Item_func *comp= (Item_func*)args[1];
-    Item_string *fake= (Item_string*)(comp->arguments()[1]);
+    Item_string *fake= (Item_string*)(comp->arguments()[0]);
     String *res= args[0]->val_nodeset(&tmp_nodeset);
     MY_XPATH_FLT *fltbeg= (MY_XPATH_FLT*) res->ptr();
     MY_XPATH_FLT *fltend= (MY_XPATH_FLT*) (res->ptr() + res->length());
@@ -884,7 +884,7 @@
     Create a comparator function for scalar arguments,
     for the given arguments and reverse operation, e.g.
 
-    A >= B  is converted into  A < B
+    A > B  is converted into  B < A
 
   RETURN
     The newly created item.
@@ -895,10 +895,10 @@
   {
     case '=': return new Item_func_eq(a, b);
     case '!': return new Item_func_ne(a, b);
-    case MY_XPATH_LEX_GE: return new Item_func_lt(a, b);
-    case MY_XPATH_LEX_LE: return new Item_func_gt(a, b);
-    case MY_XPATH_LEX_GREATER: return new Item_func_le(a, b);
-    case MY_XPATH_LEX_LESS: return new Item_func_ge(a, b);
+    case MY_XPATH_LEX_GE: return new Item_func_le(a, b);
+    case MY_XPATH_LEX_LE: return new Item_func_ge(a, b);
+    case MY_XPATH_LEX_GREATER: return new Item_func_lt(a, b);
+    case MY_XPATH_LEX_LESS: return new Item_func_gt(a, b);
   }
   return 0;
 }
@@ -951,13 +951,13 @@
     {
       nodeset= (Item_nodeset_func*) a;
       scalar= b;
-      comp= eq_func(oper, scalar, fake);
+      comp= eq_func(oper, fake, scalar);
     }
     else
     {
       nodeset= (Item_nodeset_func*) b;
       scalar= a;
-      comp= eq_func_reverse(oper, scalar, fake);
+      comp= eq_func_reverse(oper, fake, scalar);
     }
     return new Item_nodeset_to_const_comparator(nodeset, comp, xpath->pxml);
   }
Thread
bk commit into 5.1 tree (bar:1.2310) BUG#22823bar23 Oct