I need to be able to determine if an arbitrary node is or is not a database node.

 

I implemented this function:

declare function util:isDatabaseNode($node as node()) as xs:boolean {

  let $isDbNode as xs:boolean :=

    try {

      let $nodeId as xs:integer? := db:node-id($node)

      (: let $msg := prof:dump(``[[DEBUG]   relpath:isDatabaseNode(): nodeId: "`{$nodeId}`"]``) :)

      return exists($nodeId)

    } catch * {

      (: let $msg := prof:dump(``[[DEBUG]   relpath:isDatabaseNode(): Got exception `{$err:code}` - `{$err:description}`]``) :)

      (: return :) false()

    }

  let $msg := prof:dump(``[[DEBUG]   relpath:isDatabaseNode(): Returning `{$isDbNode}``]``)

  return $isDbNode

};

 

With the prof:dump() calls commented out as shown here, it always returns true, even when it returned false.

 

If I comment in the prof:dumps then I get the expected correct false result.

 

This must be the result some optimization at compile time but I haven’t been able to find a construction of this function that works without the debug messages.

 

Is there a better way to determine if a node is a database node?

 

This is with 10.6.

 

Cheers,

 

E.

_____________________________________________

Eliot Kimber

Sr Staff Content Engineer

O: 512 554 9368

M: 512 554 9368

servicenow.com

LinkedIn | Twitter | YouTube | Facebook