diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:47 +0000 |
commit | 36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch) | |
tree | b3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch | |
parent | 4e31070265257dc67d120c27e0f75c2344fdfa9a (diff) | |
parent | abf060725d7614bd3b9f96764262dfbc2f9c2199 (diff) | |
download | nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2 nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip |
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch b/nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch new file mode 100644 index 000000000000..630dc972e188 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/dbxml/incorrect-optimization.patch @@ -0,0 +1,34 @@ +Patch provided by Lauren Foutz. See: +https://community.oracle.com/thread/4093422 + +--- dbxml-6.1.4-orig/dbxml/src/dbxml/query/ParentOfChildJoinQP.cpp ++++ dbxml-6.1.4/dbxml/src/dbxml/query/ParentOfChildJoinQP.cpp +@@ -139,28 +139,16 @@ bool ParentOfChildIterator::doJoin(Dynam + + // Invarient 4: When ancestorStack_ is empty we can output the + // buffered results_, since any more results will come after them in + // document order. + + while(true) { + context->testInterrupt(); + +- /* +- * If current parent's node level already be larger than +- * childen's, abandon current parent and move to next one. +- */ +- if (parents_ != NULL && +- parents_->getNodeLevel() > children_->getNodeLevel()) { +- if(!parents_->next(context)) { +- delete parents_; +- parents_ = 0; +- } +- } +- + int cmp = parents_ == 0 ? -1 : isDescendantOf(children_, parents_, /*orSelf*/false); + if(cmp < 0) { + if(!ancestorStack_.empty()) { + // We've found the closest ancestor - is it a parent? + if(ancestorStack_.back()->getNodeLevel() == (children_->getNodeLevel() - 1)) { + // Maintain invarient 3 + if(results_.empty() || NodeInfo::compare(results_.back(), ancestorStack_.back()) < 0) + results_.push_back(ancestorStack_.back()); |