blob: c02db1029355f1d94018a0b1be9ce306ac99bf02 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.7.0_251) on Sat May 02 18:54:05 PDT 2020 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>UDR (trafodion-sql 2.4.0 API)</title>
<meta name="date" content="2020-05-02">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="UDR (trafodion-sql 2.4.0 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/UDR.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/trafodion/sql/udr/TypeInfo.SQLTypeSubClassCode.html" title="enum in org.trafodion.sql.udr"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/trafodion/sql/udr/UDR.QueueStateInfo.html" title="class in org.trafodion.sql.udr"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/trafodion/sql/udr/UDR.html" target="_top">Frames</a></li>
<li><a href="UDR.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.trafodion.sql.udr</div>
<h2 title="Class UDR" class="title">Class UDR</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.trafodion.sql.udr.UDR</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="strong">UDR</span>
extends <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">This class represents the code associated with a UDR.
<p>
UDR writers can create a derived class and implement these methods
for their specific UDR. The base class also has default methods
for all but the runtime call <a href="../../../../org/trafodion/sql/udr/UDR.html#processData(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)"><code>processData(UDRInvocationInfo, UDRPlanInfo)</code></a>. See
https://wiki.trafodion.org/wiki/index.php/Tutorial:_The_object-oriented_UDF_interface
for examples.
<p>
A UDR writer can decide to override none, some or all of the virtual
methods that comprise the complier interaction. The run-time interaction
<a href="../../../../org/trafodion/sql/udr/UDR.html#processData(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)"><code>processData(UDRInvocationInfo, UDRPlanInfo)</code></a>, must always be provided.
<p>
When overriding methods, the UDR writer has the option to call the default
method to do part of the work, and then to implement additional logic.
<p>
Multiple UDRs could share the same subclass of UDR. The UDR name is passed
in UDRInvocationInfo, so the logic can depend on the name.
<p>
A single query may invoke the same UDR more than once. A different
UDRInvocationInfo object will be passed for each such invocation.
<p>
The UDR object or the object of its derived class may be reused for
multiple queries, so its life time can exceed that of a UDRInvocation
object.
<p>
Different instances of UDR (or derived class)objects will be created
in the processes that compile and execute a query.
<p>
Based on the previous three bullets, UDR writers should not store state
that relates to a UDR invocation in a UDR (or derived) object. There are
special classes to do that. It is ok to use the UDR derived class to store
resources that are shared between UDR invocations, such as connections to
server processes etc. These need to be cleaned up in <a href="../../../../org/trafodion/sql/udr/UDR.html#close()"><code>close()</code></a>.
<p>
The optimizer may try different execution plans for a UDR invocation, e.g.
with different partitioning and ordering of input and/or output data. These
alternative plans share the same UDRInvocationInfo object but they will use
different UDRPlanInfo objects.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested_class_summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.QueueStateInfo.html" title="class in org.trafodion.sql.udr">UDR.QueueStateInfo</a></strong></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#SQLUDR_Q_CANCEL">SQLUDR_Q_CANCEL</a></strong></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#SQLUDR_Q_EOD">SQLUDR_Q_EOD</a></strong></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#SQLUDR_Q_MORE">SQLUDR_Q_MORE</a></strong></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#UDR()">UDR</a></strong>()</code>
<div class="block">Default constructor, to be used by derived classes</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#close()">close</a></strong>()</code>
<div class="block">Currently not used.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#completeDescription(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)">completeDescription</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)</code>
<div class="block">Final call of the compiler interaction for TMUDFs.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#debugLoop()">debugLoop</a></strong>()</code>
<div class="block">Debugging hook for UDRs.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describeConstraints(org.trafodion.sql.udr.UDRInvocationInfo)">describeConstraints</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describeDataflowAndPredicates(org.trafodion.sql.udr.UDRInvocationInfo)">describeDataflowAndPredicates</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>
<div class="block">Eliminate unneeded columns and decide where to execute predicates.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describeDesiredDegreeOfParallelism(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)">describeDesiredDegreeOfParallelism</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)</code>
<div class="block">Describe the desired parallelism of a UDR.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describeParamsAndColumns(org.trafodion.sql.udr.UDRInvocationInfo)">describeParamsAndColumns</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>
<div class="block">First method called during compilation of a TMUDF invocation.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describePlanProperties(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)">describePlanProperties</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)</code>
<div class="block">Sixth method of the compiler interface (optional).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)">describeStatistics</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>
<div class="block">Fourth method of the compiler interface (optional).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#emitRow(org.trafodion.sql.udr.UDRInvocationInfo)">emitRow</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>
<div class="block">Emit a row of a table-valued result.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#getCurrentVersion()">getCurrentVersion</a></strong>()</code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#getFeaturesSupportedByUDF()">getFeaturesSupportedByUDF</a></strong>()</code>
<div class="block">For versioning, return features supported by the UDR writer.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#getNextRow(org.trafodion.sql.udr.UDRInvocationInfo)">getNextRow</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)</code>
<div class="block">Read a row of the first table-value input.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>abstract void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#processData(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.UDRPlanInfo)">processData</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)</code>
<div class="block">Runtime code for UDRs.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/trafodion/sql/udr/UDR.html#traceRow(org.trafodion.sql.udr.UDRInvocationInfo,%20org.trafodion.sql.udr.TupleInfo,%20int,%20java.lang.String)">traceRow</a></strong>(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html" title="class in org.trafodion.sql.udr">TupleInfo</a>&nbsp;ti,
int&nbsp;tableIndex,
<a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;formattedMsg)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="SQLUDR_Q_MORE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SQLUDR_Q_MORE</h4>
<pre>public final&nbsp;int SQLUDR_Q_MORE</pre>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../constant-values.html#org.trafodion.sql.udr.UDR.SQLUDR_Q_MORE">Constant Field Values</a></dd></dl>
</li>
</ul>
<a name="SQLUDR_Q_EOD">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SQLUDR_Q_EOD</h4>
<pre>public final&nbsp;int SQLUDR_Q_EOD</pre>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../constant-values.html#org.trafodion.sql.udr.UDR.SQLUDR_Q_EOD">Constant Field Values</a></dd></dl>
</li>
</ul>
<a name="SQLUDR_Q_CANCEL">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SQLUDR_Q_CANCEL</h4>
<pre>public final&nbsp;int SQLUDR_Q_CANCEL</pre>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../constant-values.html#org.trafodion.sql.udr.UDR.SQLUDR_Q_CANCEL">Constant Field Values</a></dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="UDR()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>UDR</h4>
<pre>public&nbsp;UDR()</pre>
<div class="block">Default constructor, to be used by derived classes</div>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="close()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre>public&nbsp;void&nbsp;close()</pre>
<div class="block">Currently not used.
<p>This might be used in the future as a final call, to allow
the UDR to deallocate any resources it holds, like connections
to other databases. Right now, it is advisable to deallocate
any resources that could cause a leak before exiting the
processData() method.</div>
</li>
</ul>
<a name="describeParamsAndColumns(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeParamsAndColumns</h4>
<pre>public&nbsp;void&nbsp;describeParamsAndColumns(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">First method called during compilation of a TMUDF invocation.
<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>
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>
This method should do a general check of things it expects that can be
validated at this time such as input table columns. It 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>
Columns of the table-valued output can be declard as "pass-thru"
columns to make many optimizations simpler.
<p>
This method must also add or alter the formal parameter list
to match the list of actual parameters.
<p>
The default implementation does nothing. If this method is not used, all
parameters and result table columns must be declared in the
CREATE TABLE MAPPING FUNCTION DDL.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#addFormalParameter(org.trafodion.sql.udr.ColumnInfo)"><code>UDRInvocationInfo.addFormalParameter(ColumnInfo)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)"><code>UDRInvocationInfo.setFuncType(FuncType)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#addPassThruColumns()"><code>UDRInvocationInfo.addPassThruColumns()</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addColumn(org.trafodion.sql.udr.ColumnInfo)"><code>TupleInfo.addColumn(ColumnInfo)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addIntColumn(java.lang.String,%20boolean)"><code>TupleInfo.addIntColumn(String, boolean)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addLongColumn(java.lang.String,%20boolean)"><code>TupleInfo.addLongColumn(String, boolean)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addCharColumn(java.lang.String,%20int,%20boolean,%20org.trafodion.sql.udr.TypeInfo.SQLCharsetCode,%20org.trafodion.sql.udr.TypeInfo.SQLCollationCode)"><code>TupleInfo.addCharColumn(String, int, boolean, TypeInfo.SQLCharsetCode, TypeInfo.SQLCollationCode)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addVarCharColumn(java.lang.String,%20int,%20boolean,%20org.trafodion.sql.udr.TypeInfo.SQLCharsetCode,%20org.trafodion.sql.udr.TypeInfo.SQLCollationCode)"><code>TupleInfo.addVarCharColumn(String, int, boolean, TypeInfo.SQLCharsetCode, TypeInfo.SQLCollationCode)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addColumns(java.util.Vector)"><code>TupleInfo.addColumns(Vector)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#addColumnAt(org.trafodion.sql.udr.ColumnInfo,%20int)"><code>TupleInfo.addColumnAt(ColumnInfo, int)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#deleteColumn(int)"><code>TupleInfo.deleteColumn(int)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html#deleteColumn(java.lang.String)"><code>TupleInfo.deleteColumn(String)</code></a></dd></dl>
</li>
</ul>
<a name="describeDataflowAndPredicates(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeDataflowAndPredicates</h4>
<pre>public&nbsp;void&nbsp;describeDataflowAndPredicates(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Eliminate unneeded columns and decide where to execute predicates.
<p>
This is the second call in the compiler interaction, after
describeParamsAndColumns(). 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>
This method can mark any of the columns of the table-valued inputs as not
used, based on the result column usage and internal needs of the UDF. It can
also decide where to evaluate each predicate, a) on the UDF result,
b) inside the UDF and c) in the table-valued inputs.
<p>
The default implementation does not mark any of the table-valued input
columns as unused. Predicate handling in the default implementation
depends on the function type:
<ul>
<li>
GENERIC: 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>
MAPPER: 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 results for other
rows.
</li>
<li>
REDUCER: 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>
</ul>
<p></div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/trafodion/sql/udr/ColumnInfo.html#getUsage()"><code>ColumnInfo.getUsage()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)"><code>UDRInvocationInfo.setFuncType(FuncType)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setChildColumnUsage(int,%20int,%20org.trafodion.sql.udr.ColumnInfo.ColumnUseCode)"><code>UDRInvocationInfo.setChildColumnUsage(int, int, ColumnInfo.ColumnUseCode)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setUnusedPassthruColumns()"><code>UDRInvocationInfo.setUnusedPassthruColumns()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#pushPredicatesOnPassthruColumns()"><code>UDRInvocationInfo.pushPredicatesOnPassthruColumns()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setPredicateEvaluationCode(int,%20org.trafodion.sql.udr.PredicateInfo.EvaluationCode)"><code>UDRInvocationInfo.setPredicateEvaluationCode(int, PredicateInfo.EvaluationCode)</code></a></dd></dl>
</li>
</ul>
<a name="describeConstraints(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeConstraints</h4>
<pre>public&nbsp;void&nbsp;describeConstraints(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd></dl>
</li>
</ul>
<a name="describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeStatistics</h4>
<pre>public&nbsp;void&nbsp;describeStatistics(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Fourth method of the compiler interface (optional).
<p>Set up statistics for the table-valued result.
<p>When the optimizer calls this method, it will have synthesized
some statistics for the table-valued inputs, if any. The UDR
writer can now indicate the estimated row count for the table-valued
result and estimated number of unique values for the output columns.
<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:
<ul>
<li>UDRs of type UDRInvocationInfo.MAPPER return one output row for
each row in their largest input table.
<li>UDRs of type UDRInvocationInfo.REDUCER and REDUCER_NC return one
output row for every partition in their largest partitioned input
table.
<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>Other default cardinality and unique entry counts can be influenced
with defaults (CONTROL QUERY DEFAULT) in Trafodion SQL.
</ul></div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code></dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)"><code>UDRInvocationInfo.setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)</code></a>,
<a href="../../../../org/trafodion/sql/udr/ColumnInfo.html#getEstimatedUniqueEntries()"><code>ColumnInfo.getEstimatedUniqueEntries()</code></a>,
<a href="../../../../org/trafodion/sql/udr/ColumnInfo.html#setEstimatedUniqueEntries(long)"><code>ColumnInfo.setEstimatedUniqueEntries(long)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TableInfo.html#getEstimatedNumRows()"><code>TableInfo.getEstimatedNumRows()</code></a>,
<a href="../../../../org/trafodion/sql/udr/TableInfo.html#setEstimatedNumRows(long)"><code>TableInfo.setEstimatedNumRows(long)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TableInfo.html#getEstimatedNumPartitions()"><code>TableInfo.getEstimatedNumPartitions()</code></a></dd></dl>
</li>
</ul>
<a name="describeDesiredDegreeOfParallelism(org.trafodion.sql.udr.UDRInvocationInfo, org.trafodion.sql.udr.UDRPlanInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeDesiredDegreeOfParallelism</h4>
<pre>public&nbsp;void&nbsp;describeDesiredDegreeOfParallelism(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Describe the desired parallelism of a UDR.
<p>
This method can be used to specify a desired degree of
parallelism, either in absolute or relative terms.
<p>
The default behavior is to allow any degree of parallelism for
TMUDFs of function type UDRInvocationInfo.MAPPER or
UDRInvocationInfo.REDUCER (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.
Default implementation:
<pre>
if (info.getNumTableInputs() == 1 &&
(info.getFuncType() == UDRInvocationInfo.FuncType.MAPPER ||
info.getFuncType() == UDRInvocationInfo.FuncType.REDUCER ||
info.getFuncType() == UDRInvocationInfo.FuncType.REDUCER_NC))
plan.setDesiredDegreeOfParallelism(UDRPlanInfo.ANY_DEGREE_OF_PARALLELISM);
else
plan.setDesiredDegreeOfParallelism(1); // serial execution
</pre>
<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> Note also that in order to get parallel execution, you may need to
implement the <a href="../../../../org/trafodion/sql/udr/UDR.html#describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)"><code>describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)</code></a> interface and provide a
cardinality estimate. Alternatively, you can set the
PARALLEL_NUM_ESPS CQD.
<p></div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd><dd><code>plan</code> - Plan-related description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html#getDesiredDegreeOfParallelism()"><code>UDRPlanInfo.getDesiredDegreeOfParallelism()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html#setDesiredDegreeOfParallelism(int)"><code>UDRPlanInfo.setDesiredDegreeOfParallelism(int)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#getNumParallelInstances()"><code>UDRInvocationInfo.getNumParallelInstances()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)"><code>UDRInvocationInfo.setFuncType(org.trafodion.sql.udr.UDRInvocationInfo.FuncType)</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDR.html#describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)"><code>describeStatistics(org.trafodion.sql.udr.UDRInvocationInfo)</code></a>,
<a href="../../../../org/trafodion/sql/udr/TableInfo.html#setEstimatedNumRows(long)"><code>TableInfo.setEstimatedNumRows(long)</code></a></dd></dl>
</li>
</ul>
<a name="describePlanProperties(org.trafodion.sql.udr.UDRInvocationInfo, org.trafodion.sql.udr.UDRPlanInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describePlanProperties</h4>
<pre>public&nbsp;void&nbsp;describePlanProperties(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Sixth method of the compiler interface (optional).
The query optimizer calls this method once for every plan alternative
considered for a UDR invocation. It provides the required partitioning
and ordering of the result. The UDR writer can decide whether these
requirements are acceptable to the UDR and whether any partitioning
or ordering of the table-valued inputs is required to produce the required
result properties.
<p>This interface is currently not used.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd><dd><code>plan</code> - Plan-related description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code></dd></dl>
</li>
</ul>
<a name="completeDescription(org.trafodion.sql.udr.UDRInvocationInfo, org.trafodion.sql.udr.UDRPlanInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>completeDescription</h4>
<pre>public&nbsp;void&nbsp;completeDescription(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Final call of the compiler interaction for TMUDFs.
<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 href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html#addPlanData(byte[])"><code>addPlanData</code></a>, and to
clean up any resources related to the compile phase of a particular TMUDF
invocation.
<p>
The default implementation does nothing.
<p></div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd><dd><code>plan</code> - Plan-related description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html#addPlanData(byte[])"><code>UDRPlanInfo.addPlanData(byte[])</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html#getUDRWriterCompileTimeData()"><code>UDRPlanInfo.getUDRWriterCompileTimeData()</code></a>,
<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html#getUDRWriterCompileTimeData()"><code>UDRInvocationInfo.getUDRWriterCompileTimeData()</code></a></dd></dl>
</li>
</ul>
<a name="processData(org.trafodion.sql.udr.UDRInvocationInfo, org.trafodion.sql.udr.UDRPlanInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>processData</h4>
<pre>public abstract&nbsp;void&nbsp;processData(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/UDRPlanInfo.html" title="class in org.trafodion.sql.udr">UDRPlanInfo</a>&nbsp;plan)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Runtime code for UDRs.
<p>
This method must be implemented in derived class.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd><dd><code>plan</code> - Plan-related description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd></dl>
</li>
</ul>
<a name="getNextRow(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNextRow</h4>
<pre>public final&nbsp;boolean&nbsp;getNextRow(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Read a row of the first table-value input.
<p>
This method can only be called from within processData().</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Returns:</span></dt><dd>true if another row could be read, false if it reached end of data.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd></dl>
</li>
</ul>
<a name="emitRow(org.trafodion.sql.udr.UDRInvocationInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>emitRow</h4>
<pre>public final&nbsp;void&nbsp;emitRow(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<div class="block">Emit a row of a table-valued result.
<p>
This method can only be called from within UDR#processData(UDRInvocationInfo, UDRPlanInfo).</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>info</code> - A description of the UDR invocation.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code> - If an exception occured in the UDR</dd></dl>
</li>
</ul>
<a name="debugLoop()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>debugLoop</h4>
<pre>public final&nbsp;void&nbsp;debugLoop()</pre>
<div class="block">Debugging hook for UDRs.
This method is called in debug Trafodion builds when certain
flags are set in the UDR_DEBUG_FLAGS CQD (CONTROL QUERY DEFAULT).
See https://wiki.trafodion.org/wiki/index.php/Tutorial:_The_object-oriented_UDF_interface#Debugging_UDF_code
for details.
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.
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.</div>
</li>
</ul>
<a name="traceRow(org.trafodion.sql.udr.UDRInvocationInfo, org.trafodion.sql.udr.TupleInfo, int, java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>traceRow</h4>
<pre>public&nbsp;void&nbsp;traceRow(<a href="../../../../org/trafodion/sql/udr/UDRInvocationInfo.html" title="class in org.trafodion.sql.udr">UDRInvocationInfo</a>&nbsp;info,
<a href="../../../../org/trafodion/sql/udr/TupleInfo.html" title="class in org.trafodion.sql.udr">TupleInfo</a>&nbsp;ti,
int&nbsp;tableIndex,
<a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;formattedMsg)
throws <a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></pre>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/trafodion/sql/udr/UDRException.html" title="class in org.trafodion.sql.udr">UDRException</a></code></dd></dl>
</li>
</ul>
<a name="getCurrentVersion()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentVersion</h4>
<pre>public final&nbsp;int&nbsp;getCurrentVersion()</pre>
</li>
</ul>
<a name="getFeaturesSupportedByUDF()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getFeaturesSupportedByUDF</h4>
<pre>public&nbsp;int&nbsp;getFeaturesSupportedByUDF()</pre>
<div class="block">For versioning, return features supported by the UDR writer.
<p>
This method can be used in the future to facilitate changes in
the UDR interface. UDR writers will be able to indicte through this
method whether they support new features.
<p>
The default implementation returns 0 (no extra features are supported).
<p></div>
<dl><dt><span class="strong">Returns:</span></dt><dd>A yet to be determined set of bit flags or codes for supported features.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/UDR.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/trafodion/sql/udr/TypeInfo.SQLTypeSubClassCode.html" title="enum in org.trafodion.sql.udr"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/trafodion/sql/udr/UDR.QueueStateInfo.html" title="class in org.trafodion.sql.udr"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/trafodion/sql/udr/UDR.html" target="_top">Frames</a></li>
<li><a href="UDR.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2020. All rights reserved.</small></p>
</body>
</html>