Hi,
I am getting performance issue while using my own xquery library. I have written an xquery module which contains a single function which return all the categories belong to a set of products as given below.
Also there is one constrain that i cannot pass all the category to the getCategory() function as argument. I have to take only products as input. I tried to take /products/p:category directly instead of $lib:category variable. but it is showing root not found. So i have to defined it as global variable.
=====XQUERY MODULE====product_library.xq
module namespace lib = "product_library"; declare namespace p="a:b:c"; declare variable $lib:category := /products/p:category;
declare function lib:getCategory($products){ let $catRefs := distinct-values($products/@catid) return $lib:category[@id = $catRefs] };
Then i am including this library in another file, where i am invoking getCategory() function of the module. My code for that is given below.
======Client Code ====== product_client.xq
import module 'product_library' at 'file:///C:/Users/ankumar/Desktop/product_library.xq';
declare namespace lib ="product_library"; declare namespace p="a:b:c";
let $products := /products/*[@catid] return count(lib:getCategory($products))
Executing the above code is taking too long. So, I stopped that and write the same logic of getCategory() function of module in the same Client file as given below.
=====Changed Client Code==========
import module 'product_library' at 'file:///C:/Users/ankumar/Desktop/product_library.xq'; declare namespace lib ="product_library"; declare namespace p="a:b:c";
let $products := /products/*[@catid]
(: return count(lib:getCategory($products)) :)
let $catRefs := distinct-values($products/@catid) return count(/products/p:category[@id = $catRefs])
It is executing very fast, and giving me the desired result with a second.
I don't know why it is happening. My whole module is written in that way only. If you have any idea, why it is happening and how can i make this efficient then share with me.
I am attaching my module file, client file,the xml instance file and the query info for with module and without module file with the mail.
Is there anything to do with query optimization ?.
large.xml https://docs.google.com/file/d/0B_pB7l14skhVMkxzVjZpRWJ3blU/edit?usp=drive_web