You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by sa...@apache.org on 2017/03/03 08:45:04 UTC

[44/49] incubator-trafodion-site git commit: Updates for python installer documentation in provisioning guide.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion-site/blob/be8dfc15/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDR.html
----------------------------------------------------------------------
diff --git a/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDR.html b/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDR.html
new file mode 100644
index 0000000..c52419c
--- /dev/null
+++ b/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDR.html
@@ -0,0 +1,731 @@
+<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<title>tmudr: tmudr::UDR Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javaScript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head>
+<body onload='searchBox.OnSelectItem(0);'>
+<!-- Generated by Doxygen 1.6.1 -->
+<script type="text/javascript"><!--
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+--></script>
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <img id="MSearchSelect" src="search/search.png"
+             onmouseover="return searchBox.OnSearchSelectShow()"
+             onmouseout="return searchBox.OnSearchSelectHide()"
+             alt=""/>
+        <input type="text" id="MSearchField" value="Search" accesskey="S"
+             onfocus="searchBox.OnSearchFieldFocus(true)" 
+             onblur="searchBox.OnSearchFieldFocus(false)" 
+             onkeyup="searchBox.OnSearchFieldChange(event)"/>
+        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="navpath"><b>tmudr</b>::<a class="el" href="classtmudr_1_1UDR.html">UDR</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UDR Class Reference</h1><!-- doxytag: class="tmudr::UDR" -->
+<p>This class represents the code associated with a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#aaa1036a39bef55877bc953b02f9c58da">UDR</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a73ff8a47de39f0482c6a4178e3b82e36">~UDR</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">describeParamsAndColumns</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">describeDataflowAndPredicates</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">describeConstraints</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a371a0c6d1dce6857f10b171099d67fdf">describeStatistics</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#ae7bc614d12d011fc5f6d799abcc91935">describeDesiredDegreeOfParallelism</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info, <a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;plan)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a925cb57fc5adfa0c2d1ff90217a90e14">describePlanProperties</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info, <a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;plan)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a36eaba4ea82ca80b2f3c25c7bdee871f">completeDescription</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info, <a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;plan)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">processData</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info, <a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;plan)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a335761df017a0569aa0b90e942c2f056">getNextRow</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info, int tableIndex=0)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a671ad46ac7fef32fc5ce1c6971f7f807">emitRow</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#a9a0d3501ad5d27d90ca85a8791c87409">debugLoop</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDR.html#ab0ca9f90d691f298b56ec11807326394">getFeaturesSupportedByUDF</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>This class represents the code associated with a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. </p>
+<p><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writers can create a derived class and implement these methods for their specific <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. The base class also has default methods for all but the runtime call. See <a href="https://cwiki.apache.org/confluence/display/TRAFODION/Tutorial%3A+The+object-oriented+UDF+interface">https://cwiki.apache.org/confluence/display/TRAFODION/Tutorial%3A+The+object-oriented+UDF+interface</a> for examples.</p>
+<p>To use this interface, the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer must provide a function of type CreateInterfaceObjectFunc with a name that's the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> external name, and it must have "C" linkage. Example, assuming the external name of the UDF is MYUDF:</p>
+<div class="fragment"><pre class="fragment">  <span class="comment">// define a class that is derived from UDR</span>
+  <span class="keyword">class </span>MyUDFInterface : <span class="keyword">public</span> <a class="code" href="classtmudr_1_1UDR.html#aaa1036a39bef55877bc953b02f9c58da">UDR</a>
+  {
+    <span class="comment">// Override any virtual methods where the UDF author would</span>
+    <span class="comment">// like to change the default behavior. It is fine to add</span>
+    <span class="comment">// other methods and data members, just make sure to free</span>
+    <span class="comment">// up all resources in the destructor.</span>
+    ...
+  };
+  <span class="comment">// define a &quot;factory&quot; function to return an object of this class</span>
+  <span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span>
+  SQLUDR_LIBFUNC <a class="code" href="classtmudr_1_1UDR.html#aaa1036a39bef55877bc953b02f9c58da">UDR</a> * MYUDF()
+  {
+    <span class="keywordflow">return</span> <span class="keyword">new</span> MyUDFInterface;
+  }
+</pre></div><ul>
+<li>If the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">describeParamsAndColumns()</a> interface is not used, all parameters and result table columns must be declared in the CREATE TABLE MAPPING FUNCTION DDL. </li>
+<li>When using the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">describeParamsAndColumns()</a> interface, additional parameters and all output columns can be defined at compile time. </li>
+<li>A <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer can decide to override none, some or all of the virtual methods in the compiler interface. The run-time interface, <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">processData()</a>, must always be provided. </li>
+<li>See file sqludr.cpp for the default implementation of these methods. </li>
+<li>When overriding methods, the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer has the option to call the default method to do part of the work, and then to implement additional logic. </li>
+<li>Multiple UDRs could share the same subclass of <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> name is passed in <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a>, so the logic can depend on the name. </li>
+<li>A single query may invoke the same <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> more than once. A different <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> object will be passed for each such invocation. </li>
+<li>The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> object or the object of its derived class may be reused for multiple queries, so its life time can exceed that of a <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> object. </li>
+<li>Different instances of <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> (or derived class) objects will be created in the processes that compile and execute a query. </li>
+<li>Based on the previous three bullets, <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writers should not store state that relates to a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation in a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> (or derived) object. There are special classes to do that. It is ok to use the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> derived class to store resources that are shared between <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocations, such as connections to server processes etc. These need to be cleaned up by overloading the destructor. </li>
+<li>The optimizer may try different execution plans for a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation, e.g. with different partitioning and ordering of input and/or output data. These alternative plans share the same <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> object but they will use different <a class="el" href="classtmudr_1_1UDRPlanInfo.html" title="Describes the query plan used for a UDR invocation.">UDRPlanInfo</a> objects. </li>
+</ul>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="aaa1036a39bef55877bc953b02f9c58da"></a><!-- doxytag: member="tmudr::UDR::UDR" ref="aaa1036a39bef55877bc953b02f9c58da" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDR::UDR </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor.</p>
+<p>Use this in the constructor of a derived class. </p>
+
+</div>
+</div>
+<a class="anchor" id="a73ff8a47de39f0482c6a4178e3b82e36"></a><!-- doxytag: member="tmudr::UDR::~UDR" ref="a73ff8a47de39f0482c6a4178e3b82e36" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDR::~UDR </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Virtual Destructor.</p>
+<p>Override this destructor and deallocate any resources of a derived class, if necessary. Note that a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> object may be used for several <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocations, sometimes at the same time, in one or more queries. Therefore, this class is for storing resources that can be shared among multiple invocations. Note also that compile time and run time may happen in different processes, so it is not possible to carry state from compile time to run time calls for invocations with this class. See below for how to carry invocation-related information between the different phases.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a62d8e083376c816dc66d1d7447869bee">UDRInvocationInfo::setUDRWriterCompileTimeData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#a9699b7abd3e69cb9ea15bc999f424cc0">UDRPlanInfo::setUDRWriterCompileTimeData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac95f99f26ba311d31875a87c1bc75672">UDRPlanInfo::addPlanData()</a> </dd></dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a36eaba4ea82ca80b2f3c25c7bdee871f"></a><!-- doxytag: member="tmudr::UDR::completeDescription" ref="a36eaba4ea82ca80b2f3c25c7bdee871f" args="(UDRInvocationInfo &amp;info, UDRPlanInfo &amp;plan)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::completeDescription </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>plan</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Seventh and final method of the compiler interface for TMUDFs (optional).</p>
+<p>This final compile time call gives the UDF writer the opportunity to examine the chosen query plan, to pass information on to the runtime method, using <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac95f99f26ba311d31875a87c1bc75672">UDRPlanInfo::addPlanData()</a>, and to clean up any resources related to the compile phase of a particular TMUDF invocation.</p>
+<p>The default implementation does nothing.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac95f99f26ba311d31875a87c1bc75672">UDRPlanInfo::addPlanData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#a73487ea5456ec8a53d52a66813589976">UDRPlanInfo::getUDRWriterCompileTimeData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0f52f99de8bd5d268ad54b397037aaa4">UDRInvocationInfo::getUDRWriterCompileTimeData()</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plan</em>&nbsp;</td><td>Plan-related description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9a0d3501ad5d27d90ca85a8791c87409"></a><!-- doxytag: member="tmudr::UDR::debugLoop" ref="a9a0d3501ad5d27d90ca85a8791c87409" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::debugLoop </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Debugging hook for UDRs.</p>
+<p>This method is called in debug Trafodion builds when certain flags are set in the UDR_DEBUG_FLAGS CQD (CONTROL QUERY DEFAULT). See <a href="https://cwiki.apache.org/confluence/display/TRAFODION/Tutorial%3A+The+object-oriented+UDF+interface#Tutorial:Theobject-orientedUDFinterface-DebuggingUDFcode">https://cwiki.apache.org/confluence/display/TRAFODION/Tutorial%3A+The+object-oriented+UDF+interface#Tutorial:Theobject-orientedUDFinterface-DebuggingUDFcode</a> for details.</p>
+<p>The default implementation prints out the process id and then goes into an endless loop. The UDF writer can then attach a debugger, set breakpoints and force the execution out of the loop.</p>
+<p>Note that the printout of the pid may not always be displayed on a terminal, for example if the process is executing on a different node. </p>
+
+</div>
+</div>
+<a class="anchor" id="a83262ec6806c3811bf55b1704fea599d"></a><!-- doxytag: member="tmudr::UDR::describeConstraints" ref="a83262ec6806c3811bf55b1704fea599d" args="(UDRInvocationInfo &amp;info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describeConstraints </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Third method of the compiler interface (optional).</p>
+<p>Set up logical constraints on the UDF result table.</p>
+<p>When the compiler calls this method, it will have synthesized constraints on the table-valued inputs, if any. The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer can now indicate constraints on the table-valued result.</p>
+<p>The default implementation does nothing.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TableInfo.html#a5b6c9eef3fad9673888dd34103052bd9">TableInfo::getNumConstraints()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#a145117852f07eade23dc0a9eaaf22847">TableInfo::getConstraint()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#a7076d7e7f07e59a06d698c77c2bfa1d7">TableInfo::addCardinalityConstraint()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#aa87fcee592d9fb0cf1afbac9aa703e72">TableInfo::addUniquenessConstraint()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac3c17d8d9c6efd94471179a052ca7ab7">UDRInvocationInfo::propagateConstraintsFor1To1UDFs()</a> </dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abbfc60e9c860f3c02dc4262ffc1c9939"></a><!-- doxytag: member="tmudr::UDR::describeDataflowAndPredicates" ref="abbfc60e9c860f3c02dc4262ffc1c9939" args="(UDRInvocationInfo &amp;info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describeDataflowAndPredicates </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Second method of the compiler interface (optional).</p>
+<p>Eliminate unneeded columns and decide where to execute predicates.</p>
+<p>This is the second call in the compiler interface, after <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">describeParamsAndColumns()</a>. When the compiler calls this, it will have marked the UDF result columns with a usage code, indicating any output columns that are not required for this particular query. It will also have created a list of predicates that need to be evaluated.</p>
+<p>This method should do three things: </p>
+<ul>
+<li>Mark columns of the table-valued inputs as not used, based on the result column usage and internal needs of the UDF. Such input columns will later be eliminated. </li>
+<li>Mark output columns that are not used and that can be easily suppressed by the UDF as NOT_PRODUCED. Such columns will be eliminated as well. </li>
+<li>Decide where to evaluate each predicate, a) on the UDF result (default), b) inside the UDF by code written by the UDF writer, or c) in the table-valued inputs.</li>
+</ul>
+<p>The default implementation does not mark any of the table-valued input columns as NOT_USED. It also does not mark any output columns as NOT_PRODUCED. Predicate handling in the default implementation depends on the function type: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a8dcb9100d5fc6499d3f46fdbabd30d71">UDRInvocationInfo::GENERIC</a>: No predicates are pushed down, because the compiler does not know whether any of the eliminated rows might have altered the output of the UDF. One example is the "sessionize" UDF, where eliminated rows can lead to differences in session ids. </li>
+<li><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26">UDRInvocationInfo::MAPPER</a>: All predicates on pass-thru columns are pushed down to table-valued inputs. Since the UDF carries no state between the input rows it sees, eliminating any input rows will not alter any results for other rows. </li>
+<li><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408">UDRInvocationInfo::REDUCER</a>: Only predicates on the PARTITION BY columns will be pushed to table-valued inputs. These predicates may eliminate entire groups of rows (partitions), and since no state is carried between such groups that is valid. </li>
+<li><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a007c75e34f5e8f1922436f6a1b8e4ec2">UDRInvocationInfo::REDUCER_NC</a>: Same as REDUCER.</li>
+</ul>
+<p>NOTE: When eliminating columns from the table-valued inputs or the table-valued result, column numbers may change in the next call, as these columns are actually removed from the lists. If the UDF carries state between calls and if that state refers to column numbers, they will need to be updated. This is best done in this <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">describeDataflowAndPredicates()</a> call.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1ColumnInfo.html#a6bbc5eac8f191243281e44ceaced86be">ColumnInfo::getUsage()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ColumnInfo.html#a6769703f19c5edbbb8d758ac21443f89">ColumnInfo::setUsage()</a> (to mark output columns as NOT_PRODUCED) </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">UDRInvocationInfo::setFuncType()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a165ce1b6a1e8430cc9ff8bc069c52403">UDRInvocationInfo::setChildColumnUsage()</a> (to mark unused input columns) </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17aa99c78b92c21bb7f165d6a525ee45">UDRInvocationInfo::setUnusedPassthruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a08078fda7b63cea5e2f02546e04a9e1c">UDRInvocationInfo::pushPredicatesOnPassthruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a31ac324ce7cb12163be24b79eec1b416">UDRInvocationInfo::setPredicateEvaluationCode()</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ae7bc614d12d011fc5f6d799abcc91935"></a><!-- doxytag: member="tmudr::UDR::describeDesiredDegreeOfParallelism" ref="ae7bc614d12d011fc5f6d799abcc91935" args="(UDRInvocationInfo &amp;info, UDRPlanInfo &amp;plan)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describeDesiredDegreeOfParallelism </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>plan</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Fifth method of the compiler interface (optional).</p>
+<p>Describe the desired parallelism of a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>.</p>
+<p>This method can be used to specify a desired degree of parallelism, either in absolute or relative terms.</p>
+<p>The default behavior is to allow any degree of parallelism for TMUDFs of function type <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26">UDRInvocationInfo::MAPPER</a> or <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408">UDRInvocationInfo::REDUCER</a> (or REDUCER_NC) that have exactly one table-valued input. The default behavior forces serial execution in all other cases. The reason is that for a single table-valued input, there is a natural way to parallelize the function by parallelizing its input a la MapReduce. In all other cases, parallel execution requires active participation by the UDF, which is why the UDF needs to signal explicitly that it can handle such flavors of parallelism.</p>
+<p>Default implementation: </p>
+<div class="fragment"><pre class="fragment">  <span class="keywordflow">if</span> (info.getNumTableInputs() == 1 &amp;&amp;
+      (info.getFuncType() == <a class="code" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26">UDRInvocationInfo::MAPPER</a> ||
+       info.getFuncType() == <a class="code" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408">UDRInvocationInfo::REDUCER</a> ||
+       info.getFuncType() == <a class="code" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a007c75e34f5e8f1922436f6a1b8e4ec2">UDRInvocationInfo::REDUCER_NC</a>))
+    plan.setDesiredDegreeOfParallelism(<a class="code" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19ad2a2dc16a27a8570ae00f68ea6126f42" title="Optimizer decides DoP.">UDRPlanInfo::ANY_DEGREE_OF_PARALLELISM</a>);
+  <span class="keywordflow">else</span>
+    plan.setDesiredDegreeOfParallelism(1); <span class="comment">// serial execution</span>
+</pre></div><p>Note that this is NOT foolproof, and that the TMUDF might still need to validate the PARTITION BY and ORDER BY syntax used in its invocation.</p>
+<p>Note also that in order to get parallel execution, you may need to implement the <a class="el" href="classtmudr_1_1UDR.html#a371a0c6d1dce6857f10b171099d67fdf">UDR::describeStatistics()</a> interface and provide a cardinality estimate. Alternatively, you can set the PARALLEL_NUM_ESPS CQD.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2c04c1d3f7f28bd58b163d85deb02d3d">UDRPlanInfo::setDesiredDegreeOfParallelism()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">UDRInvocationInfo::setFuncType()</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plan</em>&nbsp;</td><td>Plan-related description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a795387c54b27b667ae73b668f606595c"></a><!-- doxytag: member="tmudr::UDR::describeParamsAndColumns" ref="a795387c54b27b667ae73b668f606595c" args="(UDRInvocationInfo &amp;info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describeParamsAndColumns </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>First method of the compiler interface (optional).</p>
+<p>Describe the output columns of a TMUDF, based on a description of its parameters (including parameter values that are specified as a constant) and the description of the table-valued input columns.</p>
+<p>When the compiler calls this, it will have set up the formal and actual parameter descriptions as well as an output column description containing all the output parameters defined in the CREATE FUNCTION DDL (if any).</p>
+<p>This method should do a general check of things it expects that can be validated at this time. Things to check: </p>
+<ul>
+<li>Number, types and values of actual parameters. </li>
+<li>Number of table-valued inputs and columns of these inputs. </li>
+<li>PARTITION BY and ORDER BY clause specified for input tables. </li>
+<li>Other things like user ids, etc.</li>
+</ul>
+<p>Setting the function type with the <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">UDRInvocationInfo::setFuncType()</a> method will help the compiler generate more efficient code,</p>
+<p>The method should then generate a description of the table-valued output columns, if applicable and if the columns provided at DDL time are not sufficient. The "See also" section points to methods to set these values.</p>
+<p>Columns of the table-valued output can be declard as "pass-thru" columns to make many optimizations simpler.</p>
+<p>This method must also add to or alter the formal parameter list to match the list of actual parameters.</p>
+<p>The default implementation does nothing.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab311a6d5798704f36afc52a3603eeec9">UDRInvocationInfo::par()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a6c037fb917b24c9140966100583c4ddf">UDRInvocationInfo::getNumTableInputs()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a8e8246083a145bfcf9771a915df70d2a">UDRInvocationInfo::in()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">UDRInvocationInfo::setFuncType()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae8ec687491875c1086660a237d936019">UDRInvocationInfo::addFormalParameter()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">UDRInvocationInfo::addPassThruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a597bb78ac5815850d014e1ad3d1340eb">TupleInfo::addColumn()</a> </dd>
+<dd>
+TupleInfo::addIntegerColumn() </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a9f4c7996f9eefca3ebe9823dcec89607">TupleInfo::addLongColumn()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a8952e96505708cbde4ff3f611fdaf613">TupleInfo::addCharColumn()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#ad8be3c967e7dabf8b80a8ee6366736b1">TupleInfo::addVarCharColumn()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a8aedec53dff3ec91f2b71ce30c5aa6ae">TupleInfo::addColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a5e340f907ceaa51373508ff192078980">TupleInfo::addColumnAt()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#aef3d85a827d91f938648856b7b08768b">TupleInfo::deleteColumn(int)</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#af8b0d51c40f855dd38fc7ddd94f39d11">TupleInfo::deleteColumn(const std::string &amp;)</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a925cb57fc5adfa0c2d1ff90217a90e14"></a><!-- doxytag: member="tmudr::UDR::describePlanProperties" ref="a925cb57fc5adfa0c2d1ff90217a90e14" args="(UDRInvocationInfo &amp;info, UDRPlanInfo &amp;plan)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describePlanProperties </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>plan</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Sixth method of the compiler interface (optional).</p>
+<p>The query optimizer calls this method once for every plan alternative considered for a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. It provides the required partitioning and ordering of the result. The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer can decide whether these requirements are acceptable to the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> and whether any partitioning or ordering of the table-valued inputs is required to produce the required result properties.</p>
+<p>This interface is currently not used.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plan</em>&nbsp;</td><td>Plan-related description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a371a0c6d1dce6857f10b171099d67fdf"></a><!-- doxytag: member="tmudr::UDR::describeStatistics" ref="a371a0c6d1dce6857f10b171099d67fdf" args="(UDRInvocationInfo &amp;info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::describeStatistics </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Fourth method of the compiler interface (optional).</p>
+<p>Set up statistics for the table-valued result.</p>
+<p>When the optimizer calls this method, it will have synthesized some statistics for the table-valued inputs, if any. The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer can now indicate the estimated row count for the table-valued result and estimated number of unique values for the output columns.</p>
+<p>The default implementation does nothing. If no estimated cardinality is set for the output table and no estimated number of unique values is set for output columns, the optimizer will make default assumptions. Here are some of these default assumptions: </p>
+<ul>
+<li>
+UDRs of type <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26">UDRInvocationInfo::MAPPER</a> return one output row for each row in their largest input table. </li>
+<li>
+UDRs of type <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408">UDRInvocationInfo::REDUCER</a> and REDUCER_NC return one output row for every partition in their largest partitioned input table. </li>
+<li>
+For output columns that are passthru columns, the estimated unique entries are the same as for the underlying column in the table-valued input. </li>
+<li>
+Other default cardinality and unique entry counts can be influenced with defaults (CONTROL QUERY DEFAULT) in Trafodion SQL. </li>
+</ul>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">UDRInvocationInfo::setFuncType()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ColumnInfo.html#aad773b195be34ee3fb471fcfb19d71d8">ColumnInfo::getEstimatedUniqueEntries()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ColumnInfo.html#adc6ef72793f0f293ea7370a46764080d">ColumnInfo::setEstimatedUniqueEntries()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#a9e63ae35e6b9c81665b135cc72cad148">TableInfo::getEstimatedNumRows()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#ac86e1dbb500b697715cab5bf6369c87a">TableInfo::setEstimatedNumRows()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#a556051776b5923cfea52d31fbad0488d">TableInfo::getEstimatedNumPartitions()</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a671ad46ac7fef32fc5ce1c6971f7f807"></a><!-- doxytag: member="tmudr::UDR::emitRow" ref="a671ad46ac7fef32fc5ce1c6971f7f807" args="(UDRInvocationInfo &amp;info)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::emitRow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Emit a row of the table-valued result.</p>
+<p>This method can only be called from within <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">processData()</a>.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab0ca9f90d691f298b56ec11807326394"></a><!-- doxytag: member="tmudr::UDR::getFeaturesSupportedByUDF" ref="ab0ca9f90d691f298b56ec11807326394" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDR::getFeaturesSupportedByUDF </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>For versioning, return features supported by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer.</p>
+<p>This method can be used in the future to facilitate changes in the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface. <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writers will be able to indicte through this method whether they support new features.</p>
+<p>The default implementation returns 0 (no extra features are supported).</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>A yet to be determined set of bit flags or codes for supported features. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a335761df017a0569aa0b90e942c2f056"></a><!-- doxytag: member="tmudr::UDR::getNextRow" ref="a335761df017a0569aa0b90e942c2f056" args="(UDRInvocationInfo &amp;info, int tableIndex=0)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool UDR::getNextRow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>tableIndex</em> = <code>0</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Read a row of a table-value input.</p>
+<p>This method can only be called from within <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">processData()</a>.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>tableIndex</em>&nbsp;</td><td>Indicator for which table-valued input to read data. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if another row could be read, false if it reached end of data. </dd></dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aac3ba2f5c48f11b7913d460cb22e3dc1"></a><!-- doxytag: member="tmudr::UDR::processData" ref="aac3ba2f5c48f11b7913d460cb22e3dc1" args="(UDRInvocationInfo &amp;info, UDRPlanInfo &amp;plan)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDR::processData </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>plan</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Runtime code for UDRs (required).</p>
+<p>This is the only method that is mandatory in the implementation of a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> (in addition to the factory method).</p>
+<p>This method needs to set the output column values and emit rows by calling the emitRows() method. It can read rows from table-valued inputs, using the <a class="el" href="classtmudr_1_1UDR.html#a335761df017a0569aa0b90e942c2f056">getNextRow()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html#a57ef5a6d63c758726572e0f920a59165">TupleInfo::setInt()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a206b6845bcbfa47de0843447142199c1">TupleInfo::setString()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#a671ad46ac7fef32fc5ce1c6971f7f807">emitRow()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#a335761df017a0569aa0b90e942c2f056">getNextRow()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">TupleInfo::getInt()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TupleInfo.html#a84e1379f2809a1cf6adef8dccbcba836">TupleInfo::getString()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7af8ac157fb75e4d426e6243bb8a4e1e">UDRInvocationInfo::copyPassThruData()</a></dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>info</em>&nbsp;</td><td>A description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plan</em>&nbsp;</td><td>Plan-related description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="sqludr_8h_source.html">sqludr.h</a></li>
+<li>sqludr.cpp</li>
+</ul>
+</div>
+<!--- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Enumerator</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<hr size="1"/><address style="text-align: right;"><small>Generated on 3 Mar 2017 for tmudr by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-trafodion-site/blob/be8dfc15/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html
----------------------------------------------------------------------
diff --git a/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html b/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html
new file mode 100644
index 0000000..0b2760b
--- /dev/null
+++ b/apidocs/2.1.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html
@@ -0,0 +1,231 @@
+<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<title>tmudr: tmudr::UDRException Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javaScript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head>
+<body onload='searchBox.OnSelectItem(0);'>
+<!-- Generated by Doxygen 1.6.1 -->
+<script type="text/javascript"><!--
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+--></script>
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <img id="MSearchSelect" src="search/search.png"
+             onmouseover="return searchBox.OnSearchSelectShow()"
+             onmouseout="return searchBox.OnSearchSelectHide()"
+             alt=""/>
+        <input type="text" id="MSearchField" value="Search" accesskey="S"
+             onfocus="searchBox.OnSearchFieldFocus(true)" 
+             onblur="searchBox.OnSearchFieldFocus(false)" 
+             onkeyup="searchBox.OnSearchFieldChange(event)"/>
+        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="navpath"><b>tmudr</b>::<a class="el" href="classtmudr_1_1UDRException.html">UDRException</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UDRException Class Reference</h1><!-- doxytag: class="tmudr::UDRException" -->
+<p>This is the exception to throw when an error occurs in a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRException.html#a4a0892baa3b4746b0310339a24a1219b">UDRException</a> (int sqlState, const char *printf_format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRException.html#a1d565a22c7a46717c688de64ab56f755">UDRException</a> (const char *sqlState, const char *printf_format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRException.html#ab72a1a01900f1cc7f0ac28cba5b2092d">getSQLState</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const std::string &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRException.html#aa9d80f9be4771b873ca0ef2044e63306">getMessage</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const std::string &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRException.html#a1fbcd51c04fd8253403bef5c7d5b0879">getText</a> () const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>This is the exception to throw when an error occurs in a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. </p>
+<p>The SQLState value must be a value between 38000 and 38999, since the SQL standard reserves SQLState class 38 for user-written code. SQLState values 38950 to 38999 are reserved for use by Trafodion code. Trafodion will produce SQL error code -11252 when this exception is thrown. </p>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a4a0892baa3b4746b0310339a24a1219b"></a><!-- doxytag: member="tmudr::UDRException::UDRException" ref="a4a0892baa3b4746b0310339a24a1219b" args="(int sqlState, const char *printf_format,...)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDRException::UDRException </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>sqlState</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>printf_format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&nbsp;</td>
+          <td class="paramname"> <em>...</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Constructor with an integer value for SQLSTATE</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>sqlState</em>&nbsp;</td><td>ISO/ANSI SQLSTATE value to produce for this error. According to the standard, this must be a value in the range of 38000 - 38999 (note that since we use an integer, non-numeric SQLSTATE values cannot be generated. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>printf_format</em>&nbsp;</td><td>a format string like it is used in printf, with a variable list of arguments to be substituted. Example: new <a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a>(38001, "num %d, string %s", 1, "a"); </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a1d565a22c7a46717c688de64ab56f755"></a><!-- doxytag: member="tmudr::UDRException::UDRException" ref="a1d565a22c7a46717c688de64ab56f755" args="(const char *sqlState, const char *printf_format,...)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDRException::UDRException </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>sqlState</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>printf_format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&nbsp;</td>
+          <td class="paramname"> <em>...</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Constructor with a string value for SQLSTATE</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>sqlState</em>&nbsp;</td><td>ISO/ANSI SQLSTATE value to produce for this error. According to the standard, this must be a value of the form 38xxx, with the xxx being digits or upper case letters. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>printf_format</em>&nbsp;</td><td>a format string like it is used in printf, with a variable list of arguments to be substituted. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="aa9d80f9be4771b873ca0ef2044e63306"></a><!-- doxytag: member="tmudr::UDRException::getMessage" ref="aa9d80f9be4771b873ca0ef2044e63306" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRException::getMessage </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the error message associated with this exception</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>A string, representing the error message, including any substituted text with the additional arguments in the constructor. Note that this is a reference to a data member, it lives only as long as the <a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a> object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab72a1a01900f1cc7f0ac28cba5b2092d"></a><!-- doxytag: member="tmudr::UDRException::getSQLState" ref="ab72a1a01900f1cc7f0ac28cba5b2092d" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char * UDRException::getSQLState </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the SQSTATE value for this exception</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>A string, representing the SQLSTATE. Note that this is a pointer to a data member, the buffer lives only as long as the <a class="el" href="classtmudr_1_1UDRException.html" title="This is the exception to throw when an error occurs in a UDR.">UDRException</a> object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1fbcd51c04fd8253403bef5c7d5b0879"></a><!-- doxytag: member="tmudr::UDRException::getText" ref="a1fbcd51c04fd8253403bef5c7d5b0879" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRException::getText </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the error message associated with this exception</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Same as <a class="el" href="classtmudr_1_1UDRException.html#aa9d80f9be4771b873ca0ef2044e63306">getMessage()</a>.</dd></dl>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Use <a class="el" href="classtmudr_1_1UDRException.html#aa9d80f9be4771b873ca0ef2044e63306">getMessage()</a> instead, in Java that is the standard method. </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="sqludr_8h_source.html">sqludr.h</a></li>
+<li>sqludr.cpp</li>
+</ul>
+</div>
+<!--- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Enumerator</a></div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<hr size="1"/><address style="text-align: right;"><small>Generated on 3 Mar 2017 for tmudr by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</body>
+</html>