Bug 119466
Summary: | UPGRADE: Error assigning categories in upgraded db: | ||
---|---|---|---|
Product: | [Retired] Red Hat Enterprise CMS | Reporter: | Jon Orris <jorris> |
Component: | other | Assignee: | Vadim Nasardinov <vnasardinov> |
Status: | CLOSED RAWHIDE | QA Contact: | Jon Orris <jorris> |
Severity: | medium | Docs Contact: | |
Priority: | medium | ||
Version: | nightly | CC: | mjdenham |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2004-03-30 21:08:48 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | |||
Bug Blocks: | 113496, 113597 |
Description
Jon Orris
2004-03-30 19:22:19 UTC
Query & Bind info: 2004-03-30 14:35:48,653 [004-0] INFO rdbms.RDBMSEngine - Executing query(filter(filter(left(left(this = sql {com.arsdigita.categorization.categorySubtree}, filter(categorySubtree_parents@link = all(com.arsdigita.categorization.com_arsdigita_categorization_Category:parents::com_arsdigita_categorization_Category:related::Link), exists(filter(target = this.categorySubtree.parents@link, categorySubtree_parents@link == target)))), filter(categorySubtree_parents = all(com.arsdigita.categorization.Category), exists(filter(target = this.categorySubtree.parents, categorySubtree_parents == target)))), categorySubtree_parents == categorySubtree_parents), categorySubtree_parents == "child"), categorySubtree_parents = categorySubtree_parents, categorySubtree_parents = categorySubtree_parents.id, categorySubtree_parents = categorySubtree_parents.objectType, categorySubtree_parents = categorySubtree_parents.id, categorySubtree_parents = categorySubtree_parents.objectType, categorySubtree_parents = categorySubtree_parents, categorySubtree_parents = categorySubtree_parents, categorySubtree_parents.id = categorySubtree_parents.id, categorySubtree_parents.objec8 = categorySubtree_parents.objectType, categorySubtree_parents.displ9 = categorySubtree_parents.displayName, categorySubtree_parents.defa10 = categorySubtree_parents.defaultDomainClass, this.categorySubtree.id = this.categorySubtree.id, this.categorySubtree.objectT12 = this.categorySubtree.objectType, this.categorySubtree.isAbstr13 = this.categorySubtree.isAbstract, this.categorySubtree.default14 = this.categorySubtree.defaultAncestors, this.categorySubtree.isEnabled = this.categorySubtree.isEnabled, this.categorySubtree.name = this.categorySubtree.name, this.categorySubtree.default17 = this.categorySubtree.defaultDomainClass, this.categorySubtree.descrip18 = this.categorySubtree.description, categorySubtree_parents.desc19 = categorySubtree_parents.description, categorySubtree_parents.name = categorySubtree_parents.name, categorySubtree_parents.url = categorySubtree_parents.url, categorySubtree_parents.isEn22 = categorySubtree_parents.isEnabled, categorySubtree_parents.isAb23 = categorySubtree_parents.isAbstract, categorySubtree_parents.defa24 = categorySubtree_parents.defaultAncestors) 2004-03-30 14:35:48,752 [004-0] INFO rdbms.RDBMSEngine - [142, child] 2004-03-30 14:35:48,753 [004-0] INFO rdbms.RDBMSEngine - [NUMERIC, VARCHAR] 2004-03-30 14:35:48,753 [004-0] INFO rdbms.RDBMSEngine - {} I'm 99% certain this should be fixed in change 41903, although I haven't tested it on Oracle against your specific test case. The offending identifier in the above query is "categorySubtree_parents", which is 31 characters long without the quotes. There was a logic error in the following chunk of code in Signature#getColumn(Path): int used = 0; for (int i = pathIndex; i > 0; i /= 10) { used++; } This is supposed to efficiently compute String.valueOf(pathIndex).length(). As written, this computes 0 for 0. The correct answer is 1, because it takes one character to represent the string "0". I special-cased the case of 0 and ran a quick test of the corrected implementation like so: |$ cat Main.java |public class Main { | | public static void main(String[] args) { | for (int ii=0; ii<args.length; ii++) { | System.out.println(args[ii] + ": " + | intLength(Integer.parseInt(args[ii]))); | } | } | | private static int intLength(int num) { | if ( num < 0 ) { throw new IllegalArgumentException(String.valueOf(num)); } | | if ( num == 0 ) { | return 1; | } | | int used = 0; | for (int ii = num; ii > 0; ii /= 10) { used++; } | | return used; | } |} | |$ java -cp . Main 0 1 2 3 4 5 6 7 8 9 10 11 20 21 90 91 99 100 101 110 111 |0: 1 |1: 1 |2: 1 |3: 1 |4: 1 |5: 1 |6: 1 |7: 1 |8: 1 |9: 1 |10: 2 |11: 2 |20: 2 |21: 2 |90: 2 |91: 2 |99: 2 |100: 3 |101: 3 |110: 3 |111: 3 marking QA_READY Fixed @41907 *** Bug 122946 has been marked as a duplicate of this bug. *** |