You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by se...@apache.org on 2020/05/03 01:57:23 UTC

[trafodion-site] branch asf-site updated: Added documents of Apache Trafodion Release 2.4.0

This is an automated email from the ASF dual-hosted git repository.

selva pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/trafodion-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 0b10b16  Added documents of Apache Trafodion Release 2.4.0
0b10b16 is described below

commit 0b10b16ffd2ebd45834251f330db0641350722dd
Author: selvaganesang <se...@apache.org>
AuthorDate: Sat May 2 18:56:07 2020 -0700

    Added documents of Apache Trafodion Release 2.4.0
---
 apidocs/2.4.0/tmudr_doxygen/html/annotated.html    |   87 +
 apidocs/2.4.0/tmudr_doxygen/html/classes.html      |   75 +
 .../classtmudr_1_1CardinalityConstraintInfo.gif    |  Bin 0 -> 889 bytes
 .../classtmudr_1_1CardinalityConstraintInfo.html   |  179 ++
 .../html/classtmudr_1_1ColumnInfo.html             |  455 +++++
 .../html/classtmudr_1_1ComparisonPredicateInfo.gif |  Bin 0 -> 901 bytes
 .../classtmudr_1_1ComparisonPredicateInfo.html     |  164 ++
 .../html/classtmudr_1_1ConstraintInfo.gif          |  Bin 0 -> 1406 bytes
 .../html/classtmudr_1_1ConstraintInfo.html         |  146 ++
 .../html/classtmudr_1_1OrderInfo.html              |  318 +++
 .../html/classtmudr_1_1ParameterListInfo.gif       |  Bin 0 -> 769 bytes
 .../html/classtmudr_1_1ParameterListInfo.html      |   94 +
 .../html/classtmudr_1_1PartitionInfo.html          |  296 +++
 .../html/classtmudr_1_1PredicateInfo.gif           |  Bin 0 -> 907 bytes
 .../html/classtmudr_1_1PredicateInfo.html          |  268 +++
 .../html/classtmudr_1_1ProvenanceInfo.html         |  214 ++
 .../tmudr_doxygen/html/classtmudr_1_1TableInfo.gif |  Bin 0 -> 646 bytes
 .../html/classtmudr_1_1TableInfo.html              |  423 ++++
 .../tmudr_doxygen/html/classtmudr_1_1TupleInfo.gif |  Bin 0 -> 1168 bytes
 .../html/classtmudr_1_1TupleInfo.html              | 1898 ++++++++++++++++++
 .../tmudr_doxygen/html/classtmudr_1_1TypeInfo.html |  767 +++++++
 .../tmudr_doxygen/html/classtmudr_1_1UDR.html      |  731 +++++++
 .../html/classtmudr_1_1UDRException.html           |  231 +++
 .../html/classtmudr_1_1UDRInvocationInfo.html      | 1366 +++++++++++++
 .../html/classtmudr_1_1UDRPlanInfo.html            |  431 ++++
 .../classtmudr_1_1UDRWriterCompileTimeData.html    |  148 ++
 .../html/classtmudr_1_1UniqueConstraintInfo.gif    |  Bin 0 -> 840 bytes
 .../html/classtmudr_1_1UniqueConstraintInfo.html   |  196 ++
 apidocs/2.4.0/tmudr_doxygen/html/deprecated.html   |   67 +
 apidocs/2.4.0/tmudr_doxygen/html/doxygen.css       |  498 +++++
 apidocs/2.4.0/tmudr_doxygen/html/doxygen.png       |  Bin 0 -> 1281 bytes
 apidocs/2.4.0/tmudr_doxygen/html/files.html        |   68 +
 apidocs/2.4.0/tmudr_doxygen/html/functions.html    |  164 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x62.html   |  117 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x63.html   |  151 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x64.html   |  171 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x65.html   |  126 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x66.html   |  111 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x67.html   |  337 ++++
 .../2.4.0/tmudr_doxygen/html/functions_0x68.html   |  108 +
 .../2.4.0/tmudr_doxygen/html/functions_0x69.html   |  145 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x6c.html   |  120 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x6d.html   |  111 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x6e.html   |  129 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x6f.html   |  114 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x70.html   |  148 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x72.html   |  117 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x73.html   |  224 +++
 .../2.4.0/tmudr_doxygen/html/functions_0x74.html   |  129 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x75.html   |  142 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x76.html   |  114 ++
 .../2.4.0/tmudr_doxygen/html/functions_0x77.html   |  108 +
 .../2.4.0/tmudr_doxygen/html/functions_0x79.html   |  108 +
 .../2.4.0/tmudr_doxygen/html/functions_0x7e.html   |  111 ++
 .../2.4.0/tmudr_doxygen/html/functions_enum.html   |  137 ++
 .../2.4.0/tmudr_doxygen/html/functions_eval.html   |  442 +++++
 .../2.4.0/tmudr_doxygen/html/functions_func.html   |  617 ++++++
 apidocs/2.4.0/tmudr_doxygen/html/hierarchy.html    |   93 +
 apidocs/2.4.0/tmudr_doxygen/html/index.html        |   63 +
 apidocs/2.4.0/tmudr_doxygen/html/installdox        |  117 ++
 apidocs/2.4.0/tmudr_doxygen/html/pages.html        |   64 +
 .../2.4.0/tmudr_doxygen/html/search/all_61.html    |  140 ++
 .../2.4.0/tmudr_doxygen/html/search/all_62.html    |   44 +
 .../2.4.0/tmudr_doxygen/html/search/all_63.html    |  140 ++
 .../2.4.0/tmudr_doxygen/html/search/all_64.html    |  155 ++
 .../2.4.0/tmudr_doxygen/html/search/all_65.html    |   62 +
 .../2.4.0/tmudr_doxygen/html/search/all_66.html    |   32 +
 .../2.4.0/tmudr_doxygen/html/search/all_67.html    |  511 +++++
 .../2.4.0/tmudr_doxygen/html/search/all_68.html    |   26 +
 .../2.4.0/tmudr_doxygen/html/search/all_69.html    |   98 +
 .../2.4.0/tmudr_doxygen/html/search/all_6c.html    |   50 +
 .../2.4.0/tmudr_doxygen/html/search/all_6d.html    |   32 +
 .../2.4.0/tmudr_doxygen/html/search/all_6e.html    |   68 +
 .../2.4.0/tmudr_doxygen/html/search/all_6f.html    |   47 +
 .../2.4.0/tmudr_doxygen/html/search/all_70.html    |  131 ++
 .../2.4.0/tmudr_doxygen/html/search/all_72.html    |   44 +
 .../2.4.0/tmudr_doxygen/html/search/all_73.html    |  264 +++
 .../2.4.0/tmudr_doxygen/html/search/all_74.html    |   89 +
 .../2.4.0/tmudr_doxygen/html/search/all_75.html    |  134 ++
 .../2.4.0/tmudr_doxygen/html/search/all_76.html    |   38 +
 .../2.4.0/tmudr_doxygen/html/search/all_77.html    |   26 +
 .../2.4.0/tmudr_doxygen/html/search/all_79.html    |   26 +
 .../2.4.0/tmudr_doxygen/html/search/all_7e.html    |   32 +
 .../tmudr_doxygen/html/search/classes_63.html      |   44 +
 .../tmudr_doxygen/html/search/classes_6f.html      |   26 +
 .../tmudr_doxygen/html/search/classes_70.html      |   44 +
 .../tmudr_doxygen/html/search/classes_74.html      |   38 +
 .../tmudr_doxygen/html/search/classes_75.html      |   56 +
 apidocs/2.4.0/tmudr_doxygen/html/search/close.png  |  Bin 0 -> 273 bytes
 .../2.4.0/tmudr_doxygen/html/search/enums_63.html  |   38 +
 .../2.4.0/tmudr_doxygen/html/search/enums_64.html  |   26 +
 .../2.4.0/tmudr_doxygen/html/search/enums_65.html  |   26 +
 .../2.4.0/tmudr_doxygen/html/search/enums_66.html  |   26 +
 .../2.4.0/tmudr_doxygen/html/search/enums_69.html  |   26 +
 .../2.4.0/tmudr_doxygen/html/search/enums_6f.html  |   26 +
 .../2.4.0/tmudr_doxygen/html/search/enums_70.html  |   32 +
 .../2.4.0/tmudr_doxygen/html/search/enums_73.html  |   80 +
 .../tmudr_doxygen/html/search/enumvalues_61.html   |   44 +
 .../tmudr_doxygen/html/search/enumvalues_62.html   |   44 +
 .../tmudr_doxygen/html/search/enumvalues_63.html   |   62 +
 .../tmudr_doxygen/html/search/enumvalues_64.html   |   98 +
 .../tmudr_doxygen/html/search/enumvalues_65.html   |   50 +
 .../tmudr_doxygen/html/search/enumvalues_66.html   |   26 +
 .../tmudr_doxygen/html/search/enumvalues_67.html   |   38 +
 .../tmudr_doxygen/html/search/enumvalues_69.html   |   50 +
 .../tmudr_doxygen/html/search/enumvalues_6c.html   |   50 +
 .../tmudr_doxygen/html/search/enumvalues_6d.html   |   32 +
 .../tmudr_doxygen/html/search/enumvalues_6e.html   |   68 +
 .../tmudr_doxygen/html/search/enumvalues_6f.html   |   26 +
 .../tmudr_doxygen/html/search/enumvalues_70.html   |   44 +
 .../tmudr_doxygen/html/search/enumvalues_72.html   |   44 +
 .../tmudr_doxygen/html/search/enumvalues_73.html   |   44 +
 .../tmudr_doxygen/html/search/enumvalues_74.html   |   62 +
 .../tmudr_doxygen/html/search/enumvalues_75.html   |   71 +
 .../tmudr_doxygen/html/search/enumvalues_76.html   |   38 +
 .../tmudr_doxygen/html/search/enumvalues_79.html   |   26 +
 .../tmudr_doxygen/html/search/functions_61.html    |  116 ++
 .../tmudr_doxygen/html/search/functions_63.html    |   56 +
 .../tmudr_doxygen/html/search/functions_64.html    |   71 +
 .../tmudr_doxygen/html/search/functions_65.html    |   26 +
 .../tmudr_doxygen/html/search/functions_67.html    |  493 +++++
 .../tmudr_doxygen/html/search/functions_68.html    |   26 +
 .../tmudr_doxygen/html/search/functions_69.html    |   65 +
 .../tmudr_doxygen/html/search/functions_6f.html    |   29 +
 .../tmudr_doxygen/html/search/functions_70.html    |   71 +
 .../tmudr_doxygen/html/search/functions_73.html    |  180 ++
 .../tmudr_doxygen/html/search/functions_74.html    |   29 +
 .../tmudr_doxygen/html/search/functions_75.html    |   47 +
 .../tmudr_doxygen/html/search/functions_77.html    |   26 +
 .../tmudr_doxygen/html/search/functions_7e.html    |   32 +
 .../2.4.0/tmudr_doxygen/html/search/nomatches.html |   12 +
 apidocs/2.4.0/tmudr_doxygen/html/search/search.css |  198 ++
 apidocs/2.4.0/tmudr_doxygen/html/search/search.js  |  734 +++++++
 apidocs/2.4.0/tmudr_doxygen/html/search/search.png |  Bin 0 -> 527 bytes
 .../2.4.0/tmudr_doxygen/html/sqludr_8h_source.html | 1706 ++++++++++++++++
 apidocs/2.4.0/tmudr_doxygen/html/tab_b.gif         |  Bin 0 -> 35 bytes
 apidocs/2.4.0/tmudr_doxygen/html/tab_l.gif         |  Bin 0 -> 706 bytes
 apidocs/2.4.0/tmudr_doxygen/html/tab_r.gif         |  Bin 0 -> 2585 bytes
 apidocs/2.4.0/tmudr_doxygen/html/tabs.css          |  105 +
 .../tmudr_javadoc/apidocs/allclasses-frame.html    |   77 +
 .../tmudr_javadoc/apidocs/allclasses-noframe.html  |   77 +
 .../tmudr_javadoc/apidocs/constant-values.html     |  531 +++++
 .../tmudr_javadoc/apidocs/deprecated-list.html     |  145 ++
 apidocs/2.4.0/tmudr_javadoc/apidocs/help-doc.html  |  226 +++
 apidocs/2.4.0/tmudr_javadoc/apidocs/index-all.html | 2093 ++++++++++++++++++++
 apidocs/2.4.0/tmudr_javadoc/apidocs/index.html     |   76 +
 .../apidocs/org/trafodion/sql/HBaseClient.html     | 1680 ++++++++++++++++
 .../apidocs/org/trafodion/sql/HBulkLoadClient.html |  484 +++++
 .../apidocs/org/trafodion/sql/HDFSClient.html      |  551 ++++++
 .../apidocs/org/trafodion/sql/HTableClient.html    |  782 ++++++++
 .../apidocs/org/trafodion/sql/HdfsScan.html        |  369 ++++
 .../apidocs/org/trafodion/sql/HiveClient.html      |  700 +++++++
 .../sql/OrcFileReader.OrcRowReturnSQL.html         |  238 +++
 .../apidocs/org/trafodion/sql/OrcFileReader.html   |  473 +++++
 .../org/trafodion/sql/SequenceFileReader.html      |  417 ++++
 .../org/trafodion/sql/SequenceFileWriter.html      |  281 +++
 .../org/trafodion/sql/TrafConfiguration.html       |  333 ++++
 .../apidocs/org/trafodion/sql/TrafRegionStats.html |  375 ++++
 .../org/trafodion/sql/class-use/HBaseClient.html   |  121 ++
 .../trafodion/sql/class-use/HBulkLoadClient.html   |  174 ++
 .../org/trafodion/sql/class-use/HDFSClient.html    |  121 ++
 .../org/trafodion/sql/class-use/HTableClient.html  |  176 ++
 .../org/trafodion/sql/class-use/HdfsScan.html      |  121 ++
 .../org/trafodion/sql/class-use/HiveClient.html    |  121 ++
 .../class-use/OrcFileReader.OrcRowReturnSQL.html   |  161 ++
 .../org/trafodion/sql/class-use/OrcFileReader.html |  121 ++
 .../sql/class-use/SequenceFileReader.html          |  121 ++
 .../sql/class-use/SequenceFileWriter.html          |  121 ++
 .../trafodion/sql/class-use/TrafConfiguration.html |  121 ++
 .../trafodion/sql/class-use/TrafRegionStats.html   |  121 ++
 .../apidocs/org/trafodion/sql/package-frame.html   |   30 +
 .../apidocs/org/trafodion/sql/package-summary.html |  181 ++
 .../apidocs/org/trafodion/sql/package-tree.html    |  145 ++
 .../apidocs/org/trafodion/sql/package-use.html     |  160 ++
 .../sql/udr/CardinalityConstraintInfo.html         |  431 ++++
 .../sql/udr/ColumnInfo.ColumnUseCode.html          |  366 ++++
 .../apidocs/org/trafodion/sql/udr/ColumnInfo.html  |  560 ++++++
 .../trafodion/sql/udr/ComparisonPredicateInfo.html |  331 ++++
 .../sql/udr/ConstraintInfo.ConstraintTypeCode.html |  349 ++++
 .../org/trafodion/sql/udr/ConstraintInfo.html      |  268 +++
 .../org/trafodion/sql/udr/LmCharsetCoder.html      |  299 +++
 .../org/trafodion/sql/udr/LmClassLoader.html       |  298 +++
 .../apidocs/org/trafodion/sql/udr/LmT2Driver.html  |  509 +++++
 .../sql/udr/LmUDRObjMethodInvoke.ReturnInfo.html   |  198 ++
 .../trafodion/sql/udr/LmUDRObjMethodInvoke.html    |  309 +++
 .../apidocs/org/trafodion/sql/udr/LmUtility.html   |  745 +++++++
 .../trafodion/sql/udr/OrderInfo.OrderTypeCode.html |  370 ++++
 .../apidocs/org/trafodion/sql/udr/OrderInfo.html   |  445 +++++
 .../org/trafodion/sql/udr/ParameterListInfo.html   |  216 ++
 .../sql/udr/PartitionInfo.PartitionTypeCode.html   |  402 ++++
 .../org/trafodion/sql/udr/PartitionInfo.html       |  401 ++++
 .../sql/udr/PredicateInfo.EvaluationCode.html      |  396 ++++
 .../sql/udr/PredicateInfo.PredOperator.html        |  454 +++++
 .../org/trafodion/sql/udr/PredicateInfo.html       |  309 +++
 .../org/trafodion/sql/udr/ProvenanceInfo.html      |  372 ++++
 .../trafodion/sql/udr/TMUDRSerializableObject.html |  198 ++
 .../apidocs/org/trafodion/sql/udr/TableInfo.html   |  544 +++++
 .../apidocs/org/trafodion/sql/udr/TupleInfo.html   | 1345 +++++++++++++
 .../trafodion/sql/udr/TypeInfo.SQLCharsetCode.html |  363 ++++
 .../sql/udr/TypeInfo.SQLCollationCode.html         |  336 ++++
 .../sql/udr/TypeInfo.SQLIntervalCode.html          |  487 +++++
 .../sql/udr/TypeInfo.SQLTypeClassCode.html         |  411 ++++
 .../trafodion/sql/udr/TypeInfo.SQLTypeCode.html    |  648 ++++++
 .../sql/udr/TypeInfo.SQLTypeSubClassCode.html      |  486 +++++
 .../apidocs/org/trafodion/sql/udr/TypeInfo.html    |  883 +++++++++
 .../org/trafodion/sql/udr/UDR.QueueStateInfo.html  |  240 +++
 .../apidocs/org/trafodion/sql/udr/UDR.html         |  860 ++++++++
 .../org/trafodion/sql/udr/UDRException.html        |  357 ++++
 .../sql/udr/UDRInvocationInfo.CallPhase.html       |  444 +++++
 .../sql/udr/UDRInvocationInfo.DebugFlags.html      |  430 ++++
 .../sql/udr/UDRInvocationInfo.FuncType.html        |  402 ++++
 .../sql/udr/UDRInvocationInfo.IsolationType.html   |  363 ++++
 .../sql/udr/UDRInvocationInfo.SQLAccessType.html   |  374 ++++
 .../sql/udr/UDRInvocationInfo.SQLRightsType.html   |  356 ++++
 .../udr/UDRInvocationInfo.SQLTransactionType.html  |  354 ++++
 .../org/trafodion/sql/udr/UDRInvocationInfo.html   | 1266 ++++++++++++
 .../UDRPlanInfo.SpecialDegreeOfParallelism.html    |  385 ++++
 .../apidocs/org/trafodion/sql/udr/UDRPlanInfo.html |  472 +++++
 .../sql/udr/UDRWriterCompileTimeData.html          |  276 +++
 .../trafodion/sql/udr/UniqueConstraintInfo.html    |  441 +++++
 .../udr/class-use/CardinalityConstraintInfo.html   |  176 ++
 .../udr/class-use/ColumnInfo.ColumnUseCode.html    |  199 ++
 .../trafodion/sql/udr/class-use/ColumnInfo.html    |  225 +++
 .../sql/udr/class-use/ComparisonPredicateInfo.html |  163 ++
 .../ConstraintInfo.ConstraintTypeCode.html         |  180 ++
 .../sql/udr/class-use/ConstraintInfo.html          |  184 ++
 .../sql/udr/class-use/LmCharsetCoder.html          |  121 ++
 .../trafodion/sql/udr/class-use/LmClassLoader.html |  164 ++
 .../trafodion/sql/udr/class-use/LmT2Driver.html    |  121 ++
 .../class-use/LmUDRObjMethodInvoke.ReturnInfo.html |  165 ++
 .../sql/udr/class-use/LmUDRObjMethodInvoke.html    |  121 ++
 .../org/trafodion/sql/udr/class-use/LmUtility.html |  121 ++
 .../sql/udr/class-use/OrderInfo.OrderTypeCode.html |  204 ++
 .../org/trafodion/sql/udr/class-use/OrderInfo.html |  192 ++
 .../sql/udr/class-use/ParameterListInfo.html       |  169 ++
 .../class-use/PartitionInfo.PartitionTypeCode.html |  195 ++
 .../trafodion/sql/udr/class-use/PartitionInfo.html |  192 ++
 .../class-use/PredicateInfo.EvaluationCode.html    |  196 ++
 .../udr/class-use/PredicateInfo.PredOperator.html  |  180 ++
 .../trafodion/sql/udr/class-use/PredicateInfo.html |  182 ++
 .../sql/udr/class-use/ProvenanceInfo.html          |  191 ++
 .../sql/udr/class-use/TMUDRSerializableObject.html |  236 +++
 .../org/trafodion/sql/udr/class-use/TableInfo.html |  192 ++
 .../org/trafodion/sql/udr/class-use/TupleInfo.html |  185 ++
 .../sql/udr/class-use/TypeInfo.SQLCharsetCode.html |  265 +++
 .../udr/class-use/TypeInfo.SQLCollationCode.html   |  235 +++
 .../udr/class-use/TypeInfo.SQLIntervalCode.html    |  227 +++
 .../udr/class-use/TypeInfo.SQLTypeClassCode.html   |  182 ++
 .../sql/udr/class-use/TypeInfo.SQLTypeCode.html    |  262 +++
 .../class-use/TypeInfo.SQLTypeSubClassCode.html    |  176 ++
 .../org/trafodion/sql/udr/class-use/TypeInfo.html  |  203 ++
 .../sql/udr/class-use/UDR.QueueStateInfo.html      |  121 ++
 .../org/trafodion/sql/udr/class-use/UDR.html       |  121 ++
 .../trafodion/sql/udr/class-use/UDRException.html  |  890 +++++++++
 .../udr/class-use/UDRInvocationInfo.CallPhase.html |  180 ++
 .../class-use/UDRInvocationInfo.DebugFlags.html    |  170 ++
 .../udr/class-use/UDRInvocationInfo.FuncType.html  |  195 ++
 .../class-use/UDRInvocationInfo.IsolationType.html |  174 ++
 .../class-use/UDRInvocationInfo.SQLAccessType.html |  174 ++
 .../class-use/UDRInvocationInfo.SQLRightsType.html |  174 ++
 .../UDRInvocationInfo.SQLTransactionType.html      |  174 ++
 .../sql/udr/class-use/UDRInvocationInfo.html       |  226 +++
 .../UDRPlanInfo.SpecialDegreeOfParallelism.html    |  170 ++
 .../trafodion/sql/udr/class-use/UDRPlanInfo.html   |  185 ++
 .../udr/class-use/UDRWriterCompileTimeData.html    |  190 ++
 .../sql/udr/class-use/UniqueConstraintInfo.html    |  174 ++
 .../org/trafodion/sql/udr/package-frame.html       |   71 +
 .../org/trafodion/sql/udr/package-summary.html     |  437 ++++
 .../org/trafodion/sql/udr/package-tree.html        |  214 ++
 .../apidocs/org/trafodion/sql/udr/package-use.html |  357 ++++
 .../trafodion/sql/udr/predef/package-frame.html    |   14 +
 .../trafodion/sql/udr/predef/package-summary.html  |  120 ++
 .../org/trafodion/sql/udr/predef/package-tree.html |  124 ++
 .../org/trafodion/sql/udr/predef/package-use.html  |  121 ++
 .../org/trafodion/sql/ustat/ChgAutoList.html       |  284 +++
 .../apidocs/org/trafodion/sql/ustat/UstatUtil.html |  364 ++++
 .../trafodion/sql/ustat/class-use/ChgAutoList.html |  121 ++
 .../trafodion/sql/ustat/class-use/UstatUtil.html   |  121 ++
 .../org/trafodion/sql/ustat/package-frame.html     |   21 +
 .../org/trafodion/sql/ustat/package-summary.html   |  143 ++
 .../org/trafodion/sql/ustat/package-tree.html      |  139 ++
 .../org/trafodion/sql/ustat/package-use.html       |  121 ++
 .../tmudr_javadoc/apidocs/overview-frame.html      |   24 +
 .../tmudr_javadoc/apidocs/overview-summary.html    |  147 ++
 .../2.4.0/tmudr_javadoc/apidocs/overview-tree.html |  235 +++
 apidocs/2.4.0/tmudr_javadoc/apidocs/package-list   |    4 +
 .../tmudr_javadoc/apidocs/resources/background.gif |  Bin 0 -> 2313 bytes
 .../2.4.0/tmudr_javadoc/apidocs/resources/tab.gif  |  Bin 0 -> 291 bytes
 .../tmudr_javadoc/apidocs/resources/titlebar.gif   |  Bin 0 -> 10701 bytes
 .../apidocs/resources/titlebar_end.gif             |  Bin 0 -> 849 bytes
 .../tmudr_javadoc/apidocs/serialized-form.html     |  151 ++
 apidocs/2.4.0/tmudr_javadoc/apidocs/stylesheet.css |  474 +++++
 292 files changed, 67076 insertions(+)

diff --git a/apidocs/2.4.0/tmudr_doxygen/html/annotated.html b/apidocs/2.4.0/tmudr_doxygen/html/annotated.html
new file mode 100644
index 0000000..f19b625
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/annotated.html
@@ -0,0 +1,87 @@
+<!-- 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: Data Structures</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 class="current"><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>
+<div class="contents">
+<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html">tmudr::CardinalityConstraintInfo</a></td><td class="indexvalue">A cardinality constraint </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1ColumnInfo.html">tmudr::ColumnInfo</a></td><td class="indexvalue">Describes a column in an input or output table or a parameter </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html">tmudr::ComparisonPredicateInfo</a></td><td class="indexvalue">A comparison predicate to be evaluated on a table </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1ConstraintInfo.html">tmudr::ConstraintInfo</a></td><td class="indexvalue">A constraint on a table-valued input or output table </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1OrderInfo.html">tmudr::OrderInfo</a></td><td class="indexvalue">Ordering of a table by some ascending or descending columns </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1ParameterListInfo.html">tmudr::ParameterListInfo</a></td><td class="indexvalue">Describes the parameters of a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1PartitionInfo.html">tmudr::PartitionInfo</a></td><td class="indexvalue">Partitioning key of an input table or result table </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1PredicateInfo.html">tmudr::PredicateInfo</a></td><td class="indexvalue">A predicate to be evaluated on a table </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1ProvenanceInfo.html">tmudr::ProvenanceInfo</a></td><td class="indexvalue">Describes where an output column is coming from </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1TableInfo.html">tmudr::TableInfo</a></td><td class="indexvalue">Describes a table-valued input or a table-valued output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1TupleInfo.html">tmudr::TupleInfo</a></td><td class="indexvalue">Common base class for parameter lists and row layouts </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1TypeInfo.html">tmudr::TypeInfo</a></td><td class="indexvalue">Data types in the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1UDR.html">tmudr::UDR</a></td><td class="indexvalue">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> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1UDRException.html">tmudr::UDRException</a></td><td class="indexvalue">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> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">tmudr::UDRInvocationInfo</a></td><td class="indexvalue">Describes an invocation of a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1UDRPlanInfo.html">tmudr::UDRPlanInfo</a></td><td class="indexvalue">Describes the query plan used for a <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 class="indexkey"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">tmudr::UDRWriterCompileTimeData</a></td><td class="indexvalue">Compile time data owned by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer </td></tr>
+  <tr><td class="indexkey"><a class="el" href="classtmudr_1_1UniqueConstraintInfo.html">tmudr::UniqueConstraintInfo</a></td><td class="indexvalue">A uniqueness constraint </td></tr>
+</table>
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classes.html b/apidocs/2.4.0/tmudr_doxygen/html/classes.html
new file mode 100644
index 0000000..8952629
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classes.html
@@ -0,0 +1,75 @@
+<!-- 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: Alphabetical List</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>
+<div class="contents">
+<h1>Data Structure Index</h1><div class="qindex"><a class="qindex" href="#letter_C">C</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_O">O</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_P">P</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_T">T</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_U">U</a></div>
+<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;C&nbsp;&nbsp;</div></td></tr></table>
+</td><td><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;O&nbsp;&nbsp;</div></td></tr></table>
+</td><td><a class="el" href="classtmudr_1_1PredicateInfo.html">PredicateInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classtmudr_1_1UDRInvocationInfo.html">UDRInvocationInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html">CardinalityConstraintInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classtmu [...]
+</td><td><a class="el" href="classtmudr_1_1UDRPlanInfo.html">UDRPlanInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;P&nbsp;&nbsp;</div></td></tr></table>
+</td><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;T&nbsp;&nbsp;</div></td></tr></table>
+</td><td><a class="el" href="classtmudr_1_1UDR.html">UDR</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> (tmudr)&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html">ComparisonPredicateInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classtmudr_1_1ParameterListInfo.html">ParameterListInfo</a> (tmudr)&nbsp;&nbsp;&nbsp;</td><td><a class="el" href=" [...]
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.gif
new file mode 100644
index 0000000..1c127d2
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.html
new file mode 100644
index 0000000..eac8243
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1CardinalityConstraintInfo.html
@@ -0,0 +1,179 @@
+<!-- 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::CardinalityConstraintInfo 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_1CardinalityConstraintInfo.html">CardinalityConstraintInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::CardinalityConstraintInfo Class Reference</h1><!-- doxytag: class="tmudr::CardinalityConstraintInfo" --><!-- doxytag: inherits="tmudr::ConstraintInfo" -->
+<p>A cardinality constraint.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::CardinalityConstraintInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1CardinalityConstraintInfo.gif" usemap="#tmudr::CardinalityConstraintInfo_map" alt=""/>
+  <map id="tmudr::CardinalityConstraintInfo_map" name="tmudr::CardinalityConstraintInfo_map">
+<area href="classtmudr_1_1ConstraintInfo.html" alt="tmudr::ConstraintInfo" shape="rect" coords="0,0,188,24"/>
+</map>
+ </div>
+</div>
+<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_1CardinalityConstraintInfo.html#aa25bef11164f258550666409889986aa">CardinalityConstraintInfo</a> (long minNumRows=0, long maxNumRows=-1)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html#a56857ab936894a5e38302e1ab52c4373">getMinNumRows</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html#a00601c3f04c4bf11efb94f8d2425af10">getMaxNumRows</a> () const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>A cardinality constraint. </p>
+<p>Upper and/or lower bounds for the cardinality of a table. Note that unlike cardinality estimates, this is a hard constraint that must be followed by the table, otherwise incorrect results and errors may occur. </p>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="aa25bef11164f258550666409889986aa"></a><!-- doxytag: member="tmudr::CardinalityConstraintInfo::CardinalityConstraintInfo" ref="aa25bef11164f258550666409889986aa" args="(long minNumRows=0, long maxNumRows=&#45;1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CardinalityConstraintInfo::CardinalityConstraintInfo </td>
+          <td>(</td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>minNumRows</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>maxNumRows</em> = <code>-1</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Construct a new cardinality constraint.</p>
+<p>A cardinality constraint allows to specify a lower and/or an upper limit for the number of rows in a table.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>minNumRows</em>&nbsp;</td><td>The minimum number of rows in the table, 0 or a positive number. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>maxNumRows</em>&nbsp;</td><td>The maximum number of rows in the table, or -1 if there is no upper bound. If it is not -1, maxNumRows must be greater or equal minNumRows. </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/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a00601c3f04c4bf11efb94f8d2425af10"></a><!-- doxytag: member="tmudr::CardinalityConstraintInfo::getMaxNumRows" ref="a00601c3f04c4bf11efb94f8d2425af10" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long CardinalityConstraintInfo::getMaxNumRows </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return the maximum number of rows in a table.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Maximum number of rows or -1 if there is no upper bound. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a56857ab936894a5e38302e1ab52c4373"></a><!-- doxytag: member="tmudr::CardinalityConstraintInfo::getMinNumRows" ref="a56857ab936894a5e38302e1ab52c4373" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long CardinalityConstraintInfo::getMinNumRows </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return the minimum number of rows in a table.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Minimum number of rows (0 or a positive number). </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ColumnInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ColumnInfo.html
new file mode 100644
index 0000000..0193dd7
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ColumnInfo.html
@@ -0,0 +1,455 @@
+<!-- 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::ColumnInfo 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_1ColumnInfo.html">ColumnInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::ColumnInfo Class Reference</h1><!-- doxytag: class="tmudr::ColumnInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>Describes a column in an input or output table or a parameter.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+
+<p>Inherits tmudr::TMUDRSerializableObject.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnUseCode</a> { <a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4af932bad37d6a82ef028b8d259a5f0093">UNKNOWN</a>, 
+<a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4a6a27f51d940992abb9864cdf20bbb700">USED</a>, 
+<a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4ac936626753ec183cf722c48004a8faa9">NOT_USED</a>, 
+<a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4af61516911abc37e459106df016cf7653">NOT_PRODUCED</a>
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Info on whether a table-valued input or output column is used. </p>
+ <a href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">More...</a><br/></td></tr>
+<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_1ColumnInfo.html#a12b2dd59f7b6c13008291c3ef03ba7f4">ColumnInfo</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#aadabdd4abc75c72824055d63dbf6a4c4">ColumnInfo</a> (const char *name, const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;type)</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_1ColumnInfo.html#ada100933d6c988677ed46b925fe0670b">getColName</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a26bbd74a3e645ea2202bb0bf82ae04ed">getType</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#aad773b195be34ee3fb471fcfb19d71d8">getEstimatedUniqueEntries</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnUseCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a6bbc5eac8f191243281e44ceaced86be">getUsage</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ProvenanceInfo.html">ProvenanceInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#abd56e48603e02a2b65f383921a2c44a1">getProvenance</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#abb967aeb5787c79e5407d3c721e63b81">getType</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a4c221aafe4e3733dceee16437ec34749">setColName</a> (const char *name)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a77d0bd16eee7845a734a8637c8fe7e16">setType</a> (<a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#adc6ef72793f0f293ea7370a46764080d">setEstimatedUniqueEntries</a> (long uniqueEntries)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a6769703f19c5edbbb8d758ac21443f89">setUsage</a> (<a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnUseCode</a> usage)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ColumnInfo.html#a361ed635eeb56e2262a41aded487ccf7">setProvenance</a> (const <a class="el" href="classtmudr_1_1ProvenanceInfo.html">ProvenanceInfo</a> &amp;provenance)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes a column in an input or output table or a parameter. </p>
+<p>This describes a column or parameter value that is passed through the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface, either as a value read from an input table, a value produced in an output table or a parameter. </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="acd91858abc45772d55f3310d789271b4"></a><!-- doxytag: member="tmudr::ColumnInfo::ColumnUseCode" ref="acd91858abc45772d55f3310d789271b4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">tmudr::ColumnInfo::ColumnUseCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Info on whether a table-valued input or output column is used. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="acd91858abc45772d55f3310d789271b4af932bad37d6a82ef028b8d259a5f0093"></a><!-- doxytag: member="UNKNOWN" ref="acd91858abc45772d55f3310d789271b4af932bad37d6a82ef028b8d259a5f0093" args="" -->UNKNOWN</em>&nbsp;</td><td>
+<p>Column usage is not yet determined. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="acd91858abc45772d55f3310d789271b4a6a27f51d940992abb9864cdf20bbb700"></a><!-- doxytag: member="USED" ref="acd91858abc45772d55f3310d789271b4a6a27f51d940992abb9864cdf20bbb700" args="" -->USED</em>&nbsp;</td><td>
+<p>For an input, it’s needed by the UDF, for an output it’s needed by the SQL Engine </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="acd91858abc45772d55f3310d789271b4ac936626753ec183cf722c48004a8faa9"></a><!-- doxytag: member="NOT_USED" ref="acd91858abc45772d55f3310d789271b4ac936626753ec183cf722c48004a8faa9" args="" -->NOT_USED</em>&nbsp;</td><td>
+<p>Input or output is not needed. Input will be removed after the describeDataflowAndPredicates() call. Output will be retained to avoid errors at runtime when the UDF tries to set this column value. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="acd91858abc45772d55f3310d789271b4af61516911abc37e459106df016cf7653"></a><!-- doxytag: member="NOT_PRODUCED" ref="acd91858abc45772d55f3310d789271b4af61516911abc37e459106df016cf7653" args="" -->NOT_PRODUCED</em>&nbsp;</td><td>
+<p>Output is not needed and will be removed after the describeDataflowAndPredicates() call. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a12b2dd59f7b6c13008291c3ef03ba7f4"></a><!-- doxytag: member="tmudr::ColumnInfo::ColumnInfo" ref="a12b2dd59f7b6c13008291c3ef03ba7f4" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ColumnInfo::ColumnInfo </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor </p>
+
+</div>
+</div>
+<a class="anchor" id="aadabdd4abc75c72824055d63dbf6a4c4"></a><!-- doxytag: member="tmudr::ColumnInfo::ColumnInfo" ref="aadabdd4abc75c72824055d63dbf6a4c4" args="(const char *name, const TypeInfo &amp;type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ColumnInfo::ColumnInfo </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>type</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, specifying a name and a type</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>Type of the column to add. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ada100933d6c988677ed46b925fe0670b"></a><!-- doxytag: member="tmudr::ColumnInfo::getColName" ref="ada100933d6c988677ed46b925fe0670b" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; ColumnInfo::getColName </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the name of the column.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Name of the column in UTF-8. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aad773b195be34ee3fb471fcfb19d71d8"></a><!-- doxytag: member="tmudr::ColumnInfo::getEstimatedUniqueEntries" ref="aad773b195be34ee3fb471fcfb19d71d8" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long ColumnInfo::getEstimatedUniqueEntries </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the estimated number of unique entries.</p>
+<p>This returns an estimate for the number of unique values for this column in the table. For example, a column containing the names of US states would have approximately 50 distinct values, assuming that most or all states are represented. This estimate can be provided by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer, through the setUniqueEntries() method, or in some cases it can also be provided by the Trafo [...]
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1ColumnInfo.html#adc6ef72793f0f293ea7370a46764080d">ColumnInfo::setEstimatedUniqueEntries()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Estimated number of unique entries or -1 if there is no estimate. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abd56e48603e02a2b65f383921a2c44a1"></a><!-- doxytag: member="tmudr::ColumnInfo::getProvenance" ref="abd56e48603e02a2b65f383921a2c44a1" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ProvenanceInfo.html">ProvenanceInfo</a> &amp; ColumnInfo::getProvenance </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get provenance info for an output column.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Provenance of the column. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abb967aeb5787c79e5407d3c721e63b81"></a><!-- doxytag: member="tmudr::ColumnInfo::getType" ref="abb967aeb5787c79e5407d3c721e63b81" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp; ColumnInfo::getType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Non-const method to get the type.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Non-const type of the column. Note that the types of parameters and output columns can only be changed from the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> call. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a26bbd74a3e645ea2202bb0bf82ae04ed"></a><!-- doxytag: member="tmudr::ColumnInfo::getType" ref="a26bbd74a3e645ea2202bb0bf82ae04ed" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp; ColumnInfo::getType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the type of the column.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Type of the column. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6bbc5eac8f191243281e44ceaced86be"></a><!-- doxytag: member="tmudr::ColumnInfo::getUsage" ref="a6bbc5eac8f191243281e44ceaced86be" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnInfo::ColumnUseCode</a> ColumnInfo::getUsage </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the usage of an input or output column.</p>
+<p>This usage may be set in the <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> method, set automatically by Trafodion for certain situations with passthru columns, or left at the default of USED.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Usage enum value for the column. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4c221aafe4e3733dceee16437ec34749"></a><!-- doxytag: member="tmudr::ColumnInfo::setColName" ref="a4c221aafe4e3733dceee16437ec34749" args="(const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ColumnInfo::setColName </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the name of the column.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column (in UTF-8). There is a length limit of 256 bytes for the column name. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="adc6ef72793f0f293ea7370a46764080d"></a><!-- doxytag: member="tmudr::ColumnInfo::setEstimatedUniqueEntries" ref="adc6ef72793f0f293ea7370a46764080d" args="(long uniqueEntries)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ColumnInfo::setEstimatedUniqueEntries </td>
+          <td>(</td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>uniqueEntries</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Provide an estimate for the number of unique values of a column.</p>
+<p>Only use this method from within the following methods: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">UDR::describeConstraints()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a371a0c6d1dce6857f10b171099d67fdf">UDR::describeStatistics()</a></li>
+</ul>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1ColumnInfo.html#aad773b195be34ee3fb471fcfb19d71d8">ColumnInfo::getEstimatedUniqueEntries()</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>uniqueEntries</em>&nbsp;</td><td>Estimate of the number of unique entries or -1 if there is no estimate. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a361ed635eeb56e2262a41aded487ccf7"></a><!-- doxytag: member="tmudr::ColumnInfo::setProvenance" ref="a361ed635eeb56e2262a41aded487ccf7" args="(const ProvenanceInfo &amp;provenance)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ColumnInfo::setProvenance </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1ProvenanceInfo.html">ProvenanceInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>provenance</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the provenance of an output column.</p>
+<p>This defines a relationship between an output column and a column of a table-valued input from which the output value is copied. Such columns are called pass-thru columns. See class <a class="el" href="classtmudr_1_1ProvenanceInfo.html" title="Describes where an output column is coming from.">ProvenanceInfo</a> for more information.</p>
+<p>Only use this method from within the following method: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>provenance</em>&nbsp;</td><td>The provenance information. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a77d0bd16eee7845a734a8637c8fe7e16"></a><!-- doxytag: member="tmudr::ColumnInfo::setType" ref="a77d0bd16eee7845a734a8637c8fe7e16" args="(TypeInfo &amp;type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ColumnInfo::setType </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>type</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the type of the column.</p>
+<p>This is done by constructing a <a class="el" href="classtmudr_1_1TypeInfo.html" title="Data types in the UDR interface.">TypeInfo</a> object and passing it to this method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>Type of the column. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a6769703f19c5edbbb8d758ac21443f89"></a><!-- doxytag: member="tmudr::ColumnInfo::setUsage" ref="a6769703f19c5edbbb8d758ac21443f89" args="(ColumnUseCode usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ColumnInfo::setUsage </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnUseCode</a>&nbsp;</td>
+          <td class="paramname"> <em>usage</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the usage of the column.</p>
+<p>See the ColumnInfo::COLUMN_USE enum for different options.</p>
+<p>Only use this method from within the following method: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>usage</em>&nbsp;</td><td>Usage enum value of the column. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.gif
new file mode 100644
index 0000000..0eaeb61
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.html
new file mode 100644
index 0000000..6340773
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ComparisonPredicateInfo.html
@@ -0,0 +1,164 @@
+<!-- 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::ComparisonPredicateInfo 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_1ComparisonPredicateInfo.html">ComparisonPredicateInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::ComparisonPredicateInfo Class Reference</h1><!-- doxytag: class="tmudr::ComparisonPredicateInfo" --><!-- doxytag: inherits="tmudr::PredicateInfo" -->
+<p>A comparison predicate to be evaluated on a table.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::ComparisonPredicateInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1ComparisonPredicateInfo.gif" usemap="#tmudr::ComparisonPredicateInfo_map" alt=""/>
+  <map id="tmudr::ComparisonPredicateInfo_map" name="tmudr::ComparisonPredicateInfo_map">
+<area href="classtmudr_1_1PredicateInfo.html" alt="tmudr::PredicateInfo" shape="rect" coords="0,0,191,24"/>
+</map>
+ </div>
+</div>
+<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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html#ac25f0e26029a86b884c719d571ec8b1e">getColumnNumber</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html#a79b249f4d7719b7fb2348c50b5dd3f33">hasAConstantValue</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">std::string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html#a4f49fa3520e789ba5f14e722ba1caec7">getConstValue</a> () const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>A comparison predicate to be evaluated on a table. </p>
+<p>A predicate that compares a column value to a constant or another value that evaluates to a constant at runtime, like an SQL query parameter. </p>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ac25f0e26029a86b884c719d571ec8b1e"></a><!-- doxytag: member="tmudr::ComparisonPredicateInfo::getColumnNumber" ref="ac25f0e26029a86b884c719d571ec8b1e" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ComparisonPredicateInfo::getColumnNumber </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the column number of the column in this comparison predicate.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column number. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4f49fa3520e789ba5f14e722ba1caec7"></a><!-- doxytag: member="tmudr::ComparisonPredicateInfo::getConstValue" ref="a4f49fa3520e789ba5f14e722ba1caec7" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string ComparisonPredicateInfo::getConstValue </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return the value, as a string, of the constant in this predicate.</p>
+<p>This returns the value, using SQL syntax, of the constant involved in the comparison predicate. It throws an exception if method <a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html#a79b249f4d7719b7fb2348c50b5dd3f33">hasAConstantValue()</a> would return false.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html#a79b249f4d7719b7fb2348c50b5dd3f33">hasAConstantValue()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Value of the constant in this comparison predicate. </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="a79b249f4d7719b7fb2348c50b5dd3f33"></a><!-- doxytag: member="tmudr::ComparisonPredicateInfo::hasAConstantValue" ref="a79b249f4d7719b7fb2348c50b5dd3f33" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool ComparisonPredicateInfo::hasAConstantValue </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return whether this comparison value involves a constant.</p>
+<p>The method returns whether the comparison predicate is of the form "column" "op" "constant". If it returns false, the predicate compares the column with a parameter or some other value not available to the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. Predicates that do not involve a constant cannot be evaluated in the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a [...]
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if the comparison is with a constant, false otherwise </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.gif
new file mode 100644
index 0000000..ad556ad
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.html
new file mode 100644
index 0000000..204e281
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ConstraintInfo.html
@@ -0,0 +1,146 @@
+<!-- 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::ConstraintInfo 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_1ConstraintInfo.html">ConstraintInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::ConstraintInfo Class Reference</h1><!-- doxytag: class="tmudr::ConstraintInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>A constraint on a table-valued input or output table.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::ConstraintInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1ConstraintInfo.gif" usemap="#tmudr::ConstraintInfo_map" alt=""/>
+  <map id="tmudr::ConstraintInfo_map" name="tmudr::ConstraintInfo_map">
+<area href="classtmudr_1_1CardinalityConstraintInfo.html" alt="tmudr::CardinalityConstraintInfo" shape="rect" coords="0,56,188,80"/>
+<area href="classtmudr_1_1UniqueConstraintInfo.html" alt="tmudr::UniqueConstraintInfo" shape="rect" coords="198,56,386,80"/>
+</map>
+ </div>
+</div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029">ConstraintTypeCode</a> { <a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029afb46759b2d515c81e6e10a7a687432e4">CARDINALITY</a>, 
+<a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029a17d366cd7f84a5f9a69a6419309006f9">UNIQUE</a>
+ }</td></tr>
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029">ConstraintTypeCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ConstraintInfo.html#a334f7ca84835a0cb158a83e0d033b177">getType</a> () const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>A constraint on a table-valued input or output table. </p>
+<p>This could be a uniqueness constraint, a cardinality constraint or some other constraint </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="a10e620641613b68ca5a9c063f3ed5029"></a><!-- doxytag: member="tmudr::ConstraintInfo::ConstraintTypeCode" ref="a10e620641613b68ca5a9c063f3ed5029" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029">tmudr::ConstraintInfo::ConstraintTypeCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Type of a constraint </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a10e620641613b68ca5a9c063f3ed5029afb46759b2d515c81e6e10a7a687432e4"></a><!-- doxytag: member="CARDINALITY" ref="a10e620641613b68ca5a9c063f3ed5029afb46759b2d515c81e6e10a7a687432e4" args="" -->CARDINALITY</em>&nbsp;</td><td>
+<p>Cardinality constraint. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a10e620641613b68ca5a9c063f3ed5029a17d366cd7f84a5f9a69a6419309006f9"></a><!-- doxytag: member="UNIQUE" ref="a10e620641613b68ca5a9c063f3ed5029a17d366cd7f84a5f9a69a6419309006f9" args="" -->UNIQUE</em>&nbsp;</td><td>
+<p>Uniqueness constraint. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a334f7ca84835a0cb158a83e0d033b177"></a><!-- doxytag: member="tmudr::ConstraintInfo::getType" ref="a334f7ca84835a0cb158a83e0d033b177" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029">ConstraintInfo::ConstraintTypeCode</a> ConstraintInfo::getType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the type of the constraint.</p>
+<p>This allows safe casting to derived classes, based on the type.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Type of the constraint. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1OrderInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1OrderInfo.html
new file mode 100644
index 0000000..69307e1
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1OrderInfo.html
@@ -0,0 +1,318 @@
+<!-- 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::OrderInfo 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_1OrderInfo.html">OrderInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::OrderInfo Class Reference</h1><!-- doxytag: class="tmudr::OrderInfo" -->
+<p>Ordering of a table by some ascending or descending columns.  
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a> { <a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664ca6d13be11b628da60b716cbe1defdefcc">NO_ORDER</a>, 
+<a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664ca9f5d23e242952104222576f9ab331ad4">ASCENDING</a>, 
+<a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664ca4b7811d9e06b5befccfb56ef27fee64b">DESCENDING</a>
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Ascending/descending order of columns. </p>
+ <a href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#a98f1be7578ab034d00919d3f8b5ac037">getNumEntries</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#ad2ce0a427824990fb577c99465307667">getColumnNum</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#acffea7ba665daca1bf67b15ca62c7a18">getOrderType</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#a5b74383fb58f2003fcbab8daaf69194a">addEntry</a> (int colNum, <a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a> orderType=ASCENDING)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#a672fd00b856f225c189de7adce65cf30">addEntryAt</a> (int pos, int colNum, <a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a> orderType=ASCENDING)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1OrderInfo.html#aceceec297c0709e19003dec60f149305">clear</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Ordering of a table by some ascending or descending columns. </p>
+<p>A list of columns, represented by column numbers, with an ascending/descending indicator for each column. </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="a6dc71ab80df38d3c3fe0d060ac03664c"></a><!-- doxytag: member="tmudr::OrderInfo::OrderTypeCode" ref="a6dc71ab80df38d3c3fe0d060ac03664c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">tmudr::OrderInfo::OrderTypeCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Ascending/descending order of columns. </p>
+<p>For outputs, the ordering of values from the first row out to the last. Note that this ordering applies within a parallel instance of the UDF at runtime, but it does not guarantee a total order. For example, two parallel instances may get these ordered values: instance 0 gets 1,3,5,7 instance 1 gets 2,4,6,8 </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a6dc71ab80df38d3c3fe0d060ac03664ca6d13be11b628da60b716cbe1defdefcc"></a><!-- doxytag: member="NO_ORDER" ref="a6dc71ab80df38d3c3fe0d060ac03664ca6d13be11b628da60b716cbe1defdefcc" args="" -->NO_ORDER</em>&nbsp;</td><td>
+<p>Unspecified order. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a6dc71ab80df38d3c3fe0d060ac03664ca9f5d23e242952104222576f9ab331ad4"></a><!-- doxytag: member="ASCENDING" ref="a6dc71ab80df38d3c3fe0d060ac03664ca9f5d23e242952104222576f9ab331ad4" args="" -->ASCENDING</em>&nbsp;</td><td>
+<p>Ascending order. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a6dc71ab80df38d3c3fe0d060ac03664ca4b7811d9e06b5befccfb56ef27fee64b"></a><!-- doxytag: member="DESCENDING" ref="a6dc71ab80df38d3c3fe0d060ac03664ca4b7811d9e06b5befccfb56ef27fee64b" args="" -->DESCENDING</em>&nbsp;</td><td>
+<p>Descending order. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a5b74383fb58f2003fcbab8daaf69194a"></a><!-- doxytag: member="tmudr::OrderInfo::addEntry" ref="a5b74383fb58f2003fcbab8daaf69194a" args="(int colNum, OrderTypeCode orderType=ASCENDING)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void OrderInfo::addEntry </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a>&nbsp;</td>
+          <td class="paramname"> <em>orderType</em> = <code>ASCENDING</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Append an entry to the ordering.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number to append to the ordering. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>orderType</em>&nbsp;</td><td>Order type (ascending or descending) to use. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a672fd00b856f225c189de7adce65cf30"></a><!-- doxytag: member="tmudr::OrderInfo::addEntryAt" ref="a672fd00b856f225c189de7adce65cf30" args="(int pos, int colNum, OrderTypeCode orderType=ASCENDING)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void OrderInfo::addEntryAt </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>pos</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderTypeCode</a>&nbsp;</td>
+          <td class="paramname"> <em>orderType</em> = <code>ASCENDING</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Insert an entry at any position of the ordering.</p>
+<p>A quick example to illustrate this: Let's say we have a table with columns (a,b,c). Their column numbers are 0, 1, and 2. We produce an ordering (C ASCENDING):</p>
+<div class="fragment"><pre class="fragment"> OrderInfo myorder;
+  
+  myorder.addEntryAt(0, 2); 
+</pre></div><p>Next, we want to make this into (B DESCENDING, C ASCENDING):</p>
+<div class="fragment"><pre class="fragment"> myorder.addEntryAt(0, 1, <a class="code" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664ca4b7811d9e06b5befccfb56ef27fee64b" title="Descending order.">DESCENDING</a>); 
+</pre></div><dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pos</em>&nbsp;</td><td>Position (0-based) at which we want to insert. The new entry will be position "pos" after the insertion, any existing entries will be moved up. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Number of the column by which we want to order </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>orderType</em>&nbsp;</td><td>Order type (ascending or descending) to use </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="aceceec297c0709e19003dec60f149305"></a><!-- doxytag: member="tmudr::OrderInfo::clear" ref="aceceec297c0709e19003dec60f149305" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void OrderInfo::clear </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Clear the contents of the object </p>
+
+</div>
+</div>
+<a class="anchor" id="ad2ce0a427824990fb577c99465307667"></a><!-- doxytag: member="tmudr::OrderInfo::getColumnNum" ref="ad2ce0a427824990fb577c99465307667" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int OrderInfo::getColumnNum </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the column number of an entry of the ordering.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>i</em>&nbsp;</td><td>the position (0-based) of the ordering, 0 meaning the leading position. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>The column number of the n-th entry of the ordering (both are 0-based). </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="a98f1be7578ab034d00919d3f8b5ac037"></a><!-- doxytag: member="tmudr::OrderInfo::getNumEntries" ref="a98f1be7578ab034d00919d3f8b5ac037" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int OrderInfo::getNumEntries </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of entries (columns) in the ordering.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of entries/columns that make up the ordering. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acffea7ba665daca1bf67b15ca62c7a18"></a><!-- doxytag: member="tmudr::OrderInfo::getOrderType" ref="acffea7ba665daca1bf67b15ca62c7a18" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664c">OrderInfo::OrderTypeCode</a> OrderInfo::getOrderType </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the order type of an entry of the ordering.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>i</em>&nbsp;</td><td>the position (0-based) of the ordering, 0 meaning the leading position. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>The order type of the n-th entry of the ordering (0-based). </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.gif
new file mode 100644
index 0000000..a2426a2
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.html
new file mode 100644
index 0000000..0c89c7e
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ParameterListInfo.html
@@ -0,0 +1,94 @@
+<!-- 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::ParameterListInfo 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_1ParameterListInfo.html">ParameterListInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::ParameterListInfo Class Reference</h1><!-- doxytag: class="tmudr::ParameterListInfo" --><!-- doxytag: inherits="tmudr::TupleInfo" -->
+<p>Describes the parameters of 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>
+<div class="dynheader">
+Inheritance diagram for tmudr::ParameterListInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1ParameterListInfo.gif" usemap="#tmudr::ParameterListInfo_map" alt=""/>
+  <map id="tmudr::ParameterListInfo_map" name="tmudr::ParameterListInfo_map">
+<area href="classtmudr_1_1TupleInfo.html" alt="tmudr::TupleInfo" shape="rect" coords="0,0,147,24"/>
+</map>
+ </div>
+</div>
+<table border="0" cellpadding="0" cellspacing="0">
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes the parameters 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 currently has no methods relevant to the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer, but the base class, <a class="el" href="classtmudr_1_1TupleInfo.html" title="Common base class for parameter lists and row layouts.">TupleInfo</a>, has a variety of methods.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html" title="Common base class for parameter lists and row layouts.">TupleInfo</a> </dd></dl>
+<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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PartitionInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PartitionInfo.html
new file mode 100644
index 0000000..6aa6238
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PartitionInfo.html
@@ -0,0 +1,296 @@
+<!-- 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::PartitionInfo 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_1PartitionInfo.html">PartitionInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::PartitionInfo Class Reference</h1><!-- doxytag: class="tmudr::PartitionInfo" -->
+<p>Partitioning key of an input table or result table.  
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">PartitionTypeCode</a> { <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47a8a99eef243aad98789ee3baf4cb19256">UNKNOWN</a>, 
+<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47a30b6fa8e98526ba1e69dc2bf79cbcb67">ANY</a>, 
+<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47ac2f6cb09339e246ac6cab9c134303936">SERIAL</a>, 
+<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47ae906e2c99d706593c99cbfbe4a611714">PARTITION</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47a5538c1623f9dcbaa55d17eb64d3050c4">REPLICATE</a>
+<br/>
+ }</td></tr>
+<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_1PartitionInfo.html#ae1411139831696fa77091527bd84aaed">PartitionInfo</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">PartitionTypeCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a6ecd4b61fd57efd8266b27015bb7aef6">getType</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a429004207edd57047104326d88d81e99">getNumEntries</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a41154eead77fd72a178778feaa560424">getColumnNum</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a26c772d4aa4e4531bf4bd702f80e3d96">setType</a> (<a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">PartitionTypeCode</a> type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#aa6f04c586f8f76c9213507c4c76d9500">addEntry</a> (int colNum)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PartitionInfo.html#a27f3f1be7211f858211aad76e0f13604">clear</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Partitioning key of an input table or result table. </p>
+<p>Describes the partitioning key of a table-valued input or result. When executing a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> in parallel, if a table is partitioned on some columns, e.g. (a,b), this means that a rows with particular values for (a,b), e.g. (10, 20) will all go to the same parallel instance and will be seen as a contiguous group. This is similar to the key of a reducer in MapReduce, except that in th [...]
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47"></a><!-- doxytag: member="tmudr::PartitionInfo::PartitionTypeCode" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">tmudr::PartitionInfo::PartitionTypeCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Type of partitioning </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47a8a99eef243aad98789ee3baf4cb19256"></a><!-- doxytag: member="UNKNOWN" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47a8a99eef243aad98789ee3baf4cb19256" args="" -->UNKNOWN</em>&nbsp;</td><td>
+<p>Partitioning type not yet determined. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47a30b6fa8e98526ba1e69dc2bf79cbcb67"></a><!-- doxytag: member="ANY" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47a30b6fa8e98526ba1e69dc2bf79cbcb67" args="" -->ANY</em>&nbsp;</td><td>
+<p>No limitations on parallel execution, typical for mappers, any row can be evaluated by any parallel instance of the UDF. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47ac2f6cb09339e246ac6cab9c134303936"></a><!-- doxytag: member="SERIAL" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47ac2f6cb09339e246ac6cab9c134303936" args="" -->SERIAL</em>&nbsp;</td><td>
+<p>No partitioning is allowed, execute serially in a single instance. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47ae906e2c99d706593c99cbfbe4a611714"></a><!-- doxytag: member="PARTITION" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47ae906e2c99d706593c99cbfbe4a611714" args="" -->PARTITION</em>&nbsp;</td><td>
+<p>Allow parallelism with partitioning key, if specified, serial execution otherwise. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a00d9199b7b9ded5c9f6c2d2aadf16e47a5538c1623f9dcbaa55d17eb64d3050c4"></a><!-- doxytag: member="REPLICATE" ref="a00d9199b7b9ded5c9f6c2d2aadf16e47a5538c1623f9dcbaa55d17eb64d3050c4" args="" -->REPLICATE</em>&nbsp;</td><td>
+<p>Replicate the data to each parallel instance. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="ae1411139831696fa77091527bd84aaed"></a><!-- doxytag: member="tmudr::PartitionInfo::PartitionInfo" ref="ae1411139831696fa77091527bd84aaed" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">PartitionInfo::PartitionInfo </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 constructor to generate an object to be passed to <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac2e13c982996e5e32f67cd157efce2fd">UDRInvocationInfo::setChildPartitioning()</a>. </p>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="aa6f04c586f8f76c9213507c4c76d9500"></a><!-- doxytag: member="tmudr::PartitionInfo::addEntry" ref="aa6f04c586f8f76c9213507c4c76d9500" args="(int colNum)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PartitionInfo::addEntry </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a new column to the list of partitioning columns</p>
+<p>Add a new column to the list of column numbers that form the partitioning key. Use this only if the type of the partitioning is set to PARTITION.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Number of the column (ordinal, 0-based) of the associated table. </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="a27f3f1be7211f858211aad76e0f13604"></a><!-- doxytag: member="tmudr::PartitionInfo::clear" ref="a27f3f1be7211f858211aad76e0f13604" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PartitionInfo::clear </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Clear the contents of the object </p>
+
+</div>
+</div>
+<a class="anchor" id="a41154eead77fd72a178778feaa560424"></a><!-- doxytag: member="tmudr::PartitionInfo::getColumnNum" ref="a41154eead77fd72a178778feaa560424" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PartitionInfo::getColumnNum </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number/ordinal of the ith partitioning column.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number/ordinal (0-based) of the ith partitioning column in the list of partitioning columns. </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="a429004207edd57047104326d88d81e99"></a><!-- doxytag: member="tmudr::PartitionInfo::getNumEntries" ref="a429004207edd57047104326d88d81e99" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PartitionInfo::getNumEntries </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of columns that form the partitioning key</p>
+<p>Returns the number of columns in the list of partitioning keys or zero if there are no such columns.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of partitioning key columns (could be zero) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6ecd4b61fd57efd8266b27015bb7aef6"></a><!-- doxytag: member="tmudr::PartitionInfo::getType" ref="a6ecd4b61fd57efd8266b27015bb7aef6" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">PartitionInfo::PartitionTypeCode</a> PartitionInfo::getType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the partitioning type.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Partition type enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a26c772d4aa4e4531bf4bd702f80e3d96"></a><!-- doxytag: member="tmudr::PartitionInfo::setType" ref="a26c772d4aa4e4531bf4bd702f80e3d96" args="(PartitionTypeCode type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PartitionInfo::setType </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47">PartitionTypeCode</a>&nbsp;</td>
+          <td class="paramname"> <em>type</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the partitioning type.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>Partition type enum. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.gif
new file mode 100644
index 0000000..c8c90bb
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.html
new file mode 100644
index 0000000..ec82c29
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1PredicateInfo.html
@@ -0,0 +1,268 @@
+<!-- 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::PredicateInfo 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_1PredicateInfo.html">PredicateInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::PredicateInfo Class Reference</h1><!-- doxytag: class="tmudr::PredicateInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>A predicate to be evaluated on a table.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::PredicateInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1PredicateInfo.gif" usemap="#tmudr::PredicateInfo_map" alt=""/>
+  <map id="tmudr::PredicateInfo_map" name="tmudr::PredicateInfo_map">
+<area href="classtmudr_1_1ComparisonPredicateInfo.html" alt="tmudr::ComparisonPredicateInfo" shape="rect" coords="0,56,191,80"/>
+</map>
+ </div>
+</div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">EvaluationCode</a> { <a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232a9a9d393cf0eee2d3f06d72ff09922ed5">UNKNOWN_EVAL</a> =  0, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232aaa9bf12167c7575208c449d059c957b2">EVALUATE_ON_RESULT</a> =  0x1, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232a166c3ebfedcb9c566daf6a114da8c15f">EVALUATE_IN_UDF</a> =  0x2, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232ac9e7ffa3c75fe7571cf22a1d8c33301b">EVALUATE_IN_CHILD</a> =  0x4
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Info on whether a table-valued input or output column is used. </p>
+ <a href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5">PredOperator</a> { <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5acc2e2fe0b00dd8f64160e946a68db97b">UNKNOWN_OP</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5aa74af3680d17b0a31a5aeb71132e22a8">EQUAL</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5a50262f568344c15cc0d3ac289e91523f">NOT_EQUAL</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5aef604ed2edbce4fe1605c93f8f1cf8b4">LESS</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5ab1330d4ccc7637cb80d672e28cff95a6">LESS_EQUAL</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5a7c978537b911c81d78f3db4a91a012c7">GREATER</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5a5efc4c3d6b386d347ae3af5946e240e9">GREATER_EQUAL</a>, 
+<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5a93914d26fbbf66d58952c891a94ccf59">IN</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5ad3393b6e03346f32766ddcad5de5eed9">NOT_IN</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">EvaluationCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PredicateInfo.html#aa2ef2035fddfe7375d8fecaae94528c9">getEvaluationCode</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5">PredOperator</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PredicateInfo.html#aaaae2bb25f6c7e95cf74666649e615b2">getOperator</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1PredicateInfo.html#aff4280afceebaa23faf6804748d1c719">isAComparisonPredicate</a> () const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>A predicate to be evaluated on a table. </p>
+<p>These could be different kinds of predicates, like an equals predicate, a non-equals predicate or more complex cases. </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="aa2a53f51db2e8e56cf79fe8c28e54232"></a><!-- doxytag: member="tmudr::PredicateInfo::EvaluationCode" ref="aa2a53f51db2e8e56cf79fe8c28e54232" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">tmudr::PredicateInfo::EvaluationCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Info on whether a table-valued input or output column is used. </p>
+<p>Note that these are not necessarily exclusive, a predicate might be evaluated in multiple places, although that should not be common and is not yet allowed. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="aa2a53f51db2e8e56cf79fe8c28e54232a9a9d393cf0eee2d3f06d72ff09922ed5"></a><!-- doxytag: member="UNKNOWN_EVAL" ref="aa2a53f51db2e8e56cf79fe8c28e54232a9a9d393cf0eee2d3f06d72ff09922ed5" args="" -->UNKNOWN_EVAL</em>&nbsp;</td><td>
+<p>Not yet determined where predicate is evaluated. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa2a53f51db2e8e56cf79fe8c28e54232aaa9bf12167c7575208c449d059c957b2"></a><!-- doxytag: member="EVALUATE_ON_RESULT" ref="aa2a53f51db2e8e56cf79fe8c28e54232aaa9bf12167c7575208c449d059c957b2" args="" -->EVALUATE_ON_RESULT</em>&nbsp;</td><td>
+<p>Predicate is evaluated on the UDF result, in Trafodion code. This is the default. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa2a53f51db2e8e56cf79fe8c28e54232a166c3ebfedcb9c566daf6a114da8c15f"></a><!-- doxytag: member="EVALUATE_IN_UDF" ref="aa2a53f51db2e8e56cf79fe8c28e54232a166c3ebfedcb9c566daf6a114da8c15f" args="" -->EVALUATE_IN_UDF</em>&nbsp;</td><td>
+<p>Predicate is evaluated inside the code provided by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa2a53f51db2e8e56cf79fe8c28e54232ac9e7ffa3c75fe7571cf22a1d8c33301b"></a><!-- doxytag: member="EVALUATE_IN_CHILD" ref="aa2a53f51db2e8e56cf79fe8c28e54232ac9e7ffa3c75fe7571cf22a1d8c33301b" args="" -->EVALUATE_IN_CHILD</em>&nbsp;</td><td>
+<p>Predicate should be evaluated in a table-valued input before the data reaches the UDF. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5"></a><!-- doxytag: member="tmudr::PredicateInfo::PredOperator" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5">tmudr::PredicateInfo::PredOperator</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Operator of a relational (comparison) predicate </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5acc2e2fe0b00dd8f64160e946a68db97b"></a><!-- doxytag: member="UNKNOWN_OP" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5acc2e2fe0b00dd8f64160e946a68db97b" args="" -->UNKNOWN_OP</em>&nbsp;</td><td>
+<p>Operator not yet determined. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5aa74af3680d17b0a31a5aeb71132e22a8"></a><!-- doxytag: member="EQUAL" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5aa74af3680d17b0a31a5aeb71132e22a8" args="" -->EQUAL</em>&nbsp;</td><td>
+<p>Equals predicate (col = val). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5a50262f568344c15cc0d3ac289e91523f"></a><!-- doxytag: member="NOT_EQUAL" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5a50262f568344c15cc0d3ac289e91523f" args="" -->NOT_EQUAL</em>&nbsp;</td><td>
+<p>Not equals predicate (col &lt;&gt; val). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5aef604ed2edbce4fe1605c93f8f1cf8b4"></a><!-- doxytag: member="LESS" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5aef604ed2edbce4fe1605c93f8f1cf8b4" args="" -->LESS</em>&nbsp;</td><td>
+<p>Less than predicate (col &lt;). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5ab1330d4ccc7637cb80d672e28cff95a6"></a><!-- doxytag: member="LESS_EQUAL" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5ab1330d4ccc7637cb80d672e28cff95a6" args="" -->LESS_EQUAL</em>&nbsp;</td><td>
+<p>Less or equals predicate (col &lt;=). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5a7c978537b911c81d78f3db4a91a012c7"></a><!-- doxytag: member="GREATER" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5a7c978537b911c81d78f3db4a91a012c7" args="" -->GREATER</em>&nbsp;</td><td>
+<p>Greater predicate (col &gt;). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5a5efc4c3d6b386d347ae3af5946e240e9"></a><!-- doxytag: member="GREATER_EQUAL" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5a5efc4c3d6b386d347ae3af5946e240e9" args="" -->GREATER_EQUAL</em>&nbsp;</td><td>
+<p>Greater or equals predicate (col &gt;=). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5a93914d26fbbf66d58952c891a94ccf59"></a><!-- doxytag: member="IN" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5a93914d26fbbf66d58952c891a94ccf59" args="" -->IN</em>&nbsp;</td><td>
+<p>IN predicate (col IN). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab22c05aab4b2ec61421fc2d9efa9f2b5ad3393b6e03346f32766ddcad5de5eed9"></a><!-- doxytag: member="NOT_IN" ref="ab22c05aab4b2ec61421fc2d9efa9f2b5ad3393b6e03346f32766ddcad5de5eed9" args="" -->NOT_IN</em>&nbsp;</td><td>
+<p>NOT IN predicate (col NOT IN). </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="aa2ef2035fddfe7375d8fecaae94528c9"></a><!-- doxytag: member="tmudr::PredicateInfo::getEvaluationCode" ref="aa2ef2035fddfe7375d8fecaae94528c9" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">PredicateInfo::EvaluationCode</a> PredicateInfo::getEvaluationCode </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get evaluation code for a predicate.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Evaluation code. </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="aaaae2bb25f6c7e95cf74666649e615b2"></a><!-- doxytag: member="tmudr::PredicateInfo::getOperator" ref="aaaae2bb25f6c7e95cf74666649e615b2" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1PredicateInfo.html#ab22c05aab4b2ec61421fc2d9efa9f2b5">PredicateInfo::PredOperator</a> PredicateInfo::getOperator </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get operator code for a predicate.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Operator code. </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="aff4280afceebaa23faf6804748d1c719"></a><!-- doxytag: member="tmudr::PredicateInfo::isAComparisonPredicate" ref="aff4280afceebaa23faf6804748d1c719" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool PredicateInfo::isAComparisonPredicate </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether this predicate is a comparison predicate.</p>
+<p>Use this method to determine whether it is safe to cast the object to class <a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html" title="A comparison predicate to be evaluated on a table.">ComparisonPredicateInfo</a>.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if predcate i is a comparison predicate, false otherwise. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ProvenanceInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ProvenanceInfo.html
new file mode 100644
index 0000000..582b46e
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1ProvenanceInfo.html
@@ -0,0 +1,214 @@
+<!-- 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::ProvenanceInfo 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_1ProvenanceInfo.html">ProvenanceInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::ProvenanceInfo Class Reference</h1><!-- doxytag: class="tmudr::ProvenanceInfo" -->
+<p>Describes where an output column is coming from.  
+<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_1ProvenanceInfo.html#ad6be4c301a7f3b9a34d2c0863fa3d337">ProvenanceInfo</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ProvenanceInfo.html#afe9e921ca4bbbe70f2ad1cdbc27618b5">ProvenanceInfo</a> (int inputTableNum, int inputColNum)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ProvenanceInfo.html#adfad1a87e41077dc3dd62ca4e073b3ef">getInputTableNum</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ProvenanceInfo.html#a2c10c9b580e812db85cf7c74a35f63c2">getInputColumnNum</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1ProvenanceInfo.html#ad8d8d8c7b33c849000f0fd33e9d6c797">isFromInputTable</a> (int inputTableNum=-1) const </td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes where an output column is coming from. </p>
+<p>Points to input table and input column number that is the source of a column. This must only be used if the result column always has the exact same value as the current value of the corresponding input column.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1ColumnInfo.html#abd56e48603e02a2b65f383921a2c44a1">ColumnInfo::getProvenance()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ColumnInfo.html#a361ed635eeb56e2262a41aded487ccf7">ColumnInfo::setProvenance()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">UDRInvocationInfo::addPassThruColumns()</a> </dd></dl>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="ad6be4c301a7f3b9a34d2c0863fa3d337"></a><!-- doxytag: member="tmudr::ProvenanceInfo::ProvenanceInfo" ref="ad6be4c301a7f3b9a34d2c0863fa3d337" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ProvenanceInfo::ProvenanceInfo </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor, generates unspecified provenance. </p>
+
+</div>
+</div>
+<a class="anchor" id="afe9e921ca4bbbe70f2ad1cdbc27618b5"></a><!-- doxytag: member="tmudr::ProvenanceInfo::ProvenanceInfo" ref="afe9e921ca4bbbe70f2ad1cdbc27618b5" args="(int inputTableNum, int inputColNum)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ProvenanceInfo::ProvenanceInfo </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputColNum</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 to link an output column to a specific input column</p>
+<p>This constructor can be used to produce a "passthru column". An easier way to do this is the <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">UDRInvocationInfo::addPassThruColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>inputTableNum</em>&nbsp;</td><td>Input table number (0 for a TMUDF with a single table-valued input, the most common case). </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>inputColNum</em>&nbsp;</td><td>Column number in intput table "inputTableNum" that is the source of the output column to be produced. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a2c10c9b580e812db85cf7c74a35f63c2"></a><!-- doxytag: member="tmudr::ProvenanceInfo::getInputColumnNum" ref="a2c10c9b580e812db85cf7c74a35f63c2" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ProvenanceInfo::getInputColumnNum </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the input column number.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Input column number. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adfad1a87e41077dc3dd62ca4e073b3ef"></a><!-- doxytag: member="tmudr::ProvenanceInfo::getInputTableNum" ref="adfad1a87e41077dc3dd62ca4e073b3ef" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int ProvenanceInfo::getInputTableNum </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the input table number.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Input table number. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad8d8d8c7b33c849000f0fd33e9d6c797"></a><!-- doxytag: member="tmudr::ProvenanceInfo::isFromInputTable" ref="ad8d8d8c7b33c849000f0fd33e9d6c797" args="(int inputTableNum=&#45;1) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool ProvenanceInfo::isFromInputTable </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em> = <code>-1</code></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Test whether the column comes from any or from a specific table-valued input.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>inputTableNum</em>&nbsp;</td><td>-1 to test for any table-valued input, or a specific input table number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if the provenance indicates a column that comes from the specified input table(s), false otherwise </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.gif
new file mode 100644
index 0000000..820bd26
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.html
new file mode 100644
index 0000000..699ee12
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TableInfo.html
@@ -0,0 +1,423 @@
+<!-- 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::TableInfo 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_1TableInfo.html">TableInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::TableInfo Class Reference</h1><!-- doxytag: class="tmudr::TableInfo" --><!-- doxytag: inherits="tmudr::TupleInfo" -->
+<p>Describes a table-valued input or a table-valued output.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::TableInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1TableInfo.gif" usemap="#tmudr::TableInfo_map" alt=""/>
+  <map id="tmudr::TableInfo_map" name="tmudr::TableInfo_map">
+<area href="classtmudr_1_1TupleInfo.html" alt="tmudr::TupleInfo" shape="rect" coords="0,0,101,24"/>
+</map>
+ </div>
+</div>
+<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">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a9e63ae35e6b9c81665b135cc72cad148">getEstimatedNumRows</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a556051776b5923cfea52d31fbad0488d">getEstimatedNumPartitions</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1PartitionInfo.html">PartitionInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a038b9d3edbcedeca862387e8b2016834">getQueryPartitioning</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1OrderInfo.html">OrderInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a32fdcae378a69382c5f6eb9d8cfebc11">getQueryOrdering</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#af97dc6286cfc8bcd35aad040c701bfa6">isStream</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a5b6c9eef3fad9673888dd34103052bd9">getNumConstraints</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ConstraintInfo.html">ConstraintInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a145117852f07eade23dc0a9eaaf22847">getConstraint</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#ac86e1dbb500b697715cab5bf6369c87a">setEstimatedNumRows</a> (long rows)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a7076d7e7f07e59a06d698c77c2bfa1d7">addCardinalityConstraint</a> (const <a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html">CardinalityConstraintInfo</a> &amp;constraint)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#aa87fcee592d9fb0cf1afbac9aa703e72">addUniquenessConstraint</a> (const <a class="el" href="classtmudr_1_1UniqueConstraintInfo.html">UniqueConstraintInfo</a> &amp;constraint)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#ab501279c19b806fc7ee6e6a22d825fc4">setIsStream</a> (bool stream)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TableInfo.html#a9d48ebe9458e65672fee592c1e73be5f">print</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes a table-valued input or a table-valued output. </p>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a7076d7e7f07e59a06d698c77c2bfa1d7"></a><!-- doxytag: member="tmudr::TableInfo::addCardinalityConstraint" ref="a7076d7e7f07e59a06d698c77c2bfa1d7" args="(const CardinalityConstraintInfo &amp;constraint)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TableInfo::addCardinalityConstraint </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html">CardinalityConstraintInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>constraint</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a cardinality constraint to the UDF table-valued output.</p>
+<p>Only use this method from within the following methods: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">UDR::describeConstraints()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>constraint</em>&nbsp;</td><td>New constraint to add. The object needs to be deallocated by the caller after this call returns. </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="aa87fcee592d9fb0cf1afbac9aa703e72"></a><!-- doxytag: member="tmudr::TableInfo::addUniquenessConstraint" ref="aa87fcee592d9fb0cf1afbac9aa703e72" args="(const UniqueConstraintInfo &amp;constraint)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TableInfo::addUniquenessConstraint </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1UniqueConstraintInfo.html">UniqueConstraintInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>constraint</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a uniqueness constraint to the UDF table-valued output.</p>
+<p>Only use this method from within the following methods: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">UDR::describeConstraints()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>constraint</em>&nbsp;</td><td>New uniqueness constraint to add. The object needs to be deallocated by the caller after this call returns. </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="a145117852f07eade23dc0a9eaaf22847"></a><!-- doxytag: member="tmudr::TableInfo::getConstraint" ref="a145117852f07eade23dc0a9eaaf22847" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ConstraintInfo.html">ConstraintInfo</a> &amp; TableInfo::getConstraint </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a constraint by index/ordinal number.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>i</em>&nbsp;</td><td>index/ordinal (0-based) of the constraint. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Constraint for a given index/ordinal. </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="a556051776b5923cfea52d31fbad0488d"></a><!-- doxytag: member="tmudr::TableInfo::getEstimatedNumPartitions" ref="a556051776b5923cfea52d31fbad0488d" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long TableInfo::getEstimatedNumPartitions </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>For tables with a PARTITION BY, get estimated number of partitions.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TableInfo.html#a9e63ae35e6b9c81665b135cc72cad148">getEstimatedNumRows()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#ac86e1dbb500b697715cab5bf6369c87a">setEstimatedNumRows()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Estimated number of partitions or -1 if there is no estimate or no PARTITION BY. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9e63ae35e6b9c81665b135cc72cad148"></a><!-- doxytag: member="tmudr::TableInfo::getEstimatedNumRows" ref="a9e63ae35e6b9c81665b135cc72cad148" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long TableInfo::getEstimatedNumRows </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the estimated number of rows of this table.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TableInfo.html#ac86e1dbb500b697715cab5bf6369c87a">setEstimatedNumRows()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1TableInfo.html#a556051776b5923cfea52d31fbad0488d">getEstimatedNumPartitions()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Estimated number of rows or -1 if there is no estimate. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5b6c9eef3fad9673888dd34103052bd9"></a><!-- doxytag: member="tmudr::TableInfo::getNumConstraints" ref="a5b6c9eef3fad9673888dd34103052bd9" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TableInfo::getNumConstraints </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of constraints defined on this table.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of constraints defined on this table. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a32fdcae378a69382c5f6eb9d8cfebc11"></a><!-- doxytag: member="tmudr::TableInfo::getQueryOrdering" ref="a32fdcae378a69382c5f6eb9d8cfebc11" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1OrderInfo.html">OrderInfo</a> &amp; TableInfo::getQueryOrdering </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the ORDER BY clause for this input table.</p>
+<p>This returns either the ORDER BY clause specified in the SQL query, or the updated ordering information, set by <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a9cf945532b68164df02ed59e56993dec">UDRInvocationInfo::setChildOrdering()</a>, called during <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a>.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Ordering clause for this input table. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a038b9d3edbcedeca862387e8b2016834"></a><!-- doxytag: member="tmudr::TableInfo::getQueryPartitioning" ref="a038b9d3edbcedeca862387e8b2016834" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1PartitionInfo.html">PartitionInfo</a> &amp; TableInfo::getQueryPartitioning </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the PARTITION BY clause for this input table.</p>
+<p>This returns either the PARTITION BY clause specified in the SQL query, or the updated partitioning information, set by <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac2e13c982996e5e32f67cd157efce2fd">UDRInvocationInfo::setChildPartitioning()</a>, called during <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a>.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Partitioning clause for this input table. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af97dc6286cfc8bcd35aad040c701bfa6"></a><!-- doxytag: member="tmudr::TableInfo::isStream" ref="af97dc6286cfc8bcd35aad040c701bfa6" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TableInfo::isStream </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Returns whether the UDF result is treated as a continuous stream.</p>
+<p>Note: This is currently not supported. The method always returns false for now.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if the UDF result is a stream, false otherwise. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9d48ebe9458e65672fee592c1e73be5f"></a><!-- doxytag: member="tmudr::TableInfo::print" ref="a9d48ebe9458e65672fee592c1e73be5f" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TableInfo::print </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Print the object, for use in debugging.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#a9a0d3501ad5d27d90ca85a8791c87409">UDR::debugLoop()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" title="128">UDRInvocationInfo::PRINT_INVOCATION_INFO_AT_RUN_TIME</a> </dd></dl>
+
+<p>Reimplemented from <a class="el" href="classtmudr_1_1TupleInfo.html#aa5309f0edb4901f0e07f0e8010ca63d6">tmudr::TupleInfo</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac86e1dbb500b697715cab5bf6369c87a"></a><!-- doxytag: member="tmudr::TableInfo::setEstimatedNumRows" ref="ac86e1dbb500b697715cab5bf6369c87a" args="(long rows)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TableInfo::setEstimatedNumRows </td>
+          <td>(</td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>rows</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the estimated number of rows for a UDF table-valued result.</p>
+<p>Setting this value can help the Trafodion optimizer generate a better plan for queries containing table-valued UDFs. Note that this is only an estimate, a strict correspondence to the actual number of rows returned at runtime is not required.</p>
+<p>Only use this method from within the following methods: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">UDR::describeConstraints()</a> </li>
+<li><a class="el" href="classtmudr_1_1UDR.html#a371a0c6d1dce6857f10b171099d67fdf">UDR::describeStatistics()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rows</em>&nbsp;</td><td>Estimated number of rows for this table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab501279c19b806fc7ee6e6a22d825fc4"></a><!-- doxytag: member="tmudr::TableInfo::setIsStream" ref="ab501279c19b806fc7ee6e6a22d825fc4" args="(bool stream)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TableInfo::setIsStream </td>
+          <td>(</td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>stream</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set whether a table should be treated as a stream.</p>
+<p>This method is not yet supported.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>stream</em>&nbsp;</td><td>true if the table is a stream, false otherwise. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.gif
new file mode 100644
index 0000000..5ca59bd
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.html
new file mode 100644
index 0000000..72b1de1
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TupleInfo.html
@@ -0,0 +1,1898 @@
+<!-- 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::TupleInfo 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_1TupleInfo.html">TupleInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::TupleInfo Class Reference</h1><!-- doxytag: class="tmudr::TupleInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>Common base class for parameter lists and row layouts.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::TupleInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1TupleInfo.gif" usemap="#tmudr::TupleInfo_map" alt=""/>
+  <map id="tmudr::TupleInfo_map" name="tmudr::TupleInfo_map">
+<area href="classtmudr_1_1ParameterListInfo.html" alt="tmudr::ParameterListInfo" shape="rect" coords="0,56,147,80"/>
+<area href="classtmudr_1_1TableInfo.html" alt="tmudr::TableInfo" shape="rect" coords="157,56,304,80"/>
+</map>
+ </div>
+</div>
+<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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a9414181fd102b20706eabf561f0d6dd3">getNumColumns</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a364c0f7153519e21e5d10ea8f54f6e25">getColNum</a> (const char *colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#af702ba5fd84731694221e478c740e14a">getColNum</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a460d01d871fe2be13ee90e9c5ce9f930">getColumn</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a1687dc30e4a9db80f6fdb95cacdf350b">getColumn</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a21b3421c855b85a3a9186a8c37d5637b">getType</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">TypeInfo::SQLTypeClassCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a3b0d60692c6fa1e2b768908ae95095e9">getSQLTypeClass</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">getInt</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a7d3bf0cfef4386809c3b27d8c87302a2">getInt</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a11fd53d410ffee07bb2bbde927913e47">getLong</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a007ae4ad517e42418191614456042691">getLong</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a49614778f7d1988a262bab185a4f0ce2">getDouble</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a2296e6f2acf21b3bec769f98fee8513e">getDouble</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">std::string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a84e1379f2809a1cf6adef8dccbcba836">getString</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">std::string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a06171cd4681221471257a05f88e0cb01">getString</a> (const std::string &amp;colName) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ab3391ad53c5abadb13dac6249be9d7bc">getBoolean</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ae666607b97e3b27336dcf1748f9d5ed9">getBoolean</a> (const std::string &amp;colName) const </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_1TupleInfo.html#ab7ed8aa0f36a9dd2a5570128f5eb12a1">getRaw</a> (int colNum, int &amp;byteLen) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">time_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a53ea8b479aa67e9d1b19aad2ea16411d">getTime</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#adae91c6ed0e61babc2fe71fcb53091fa">isAvailable</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ac6a3327145169b0ce9bb3637d665170f">getDelimitedRow</a> (std::string &amp;row, char delim='|', bool quote=false, char quoteSymbol= '&quot;', int firstColumn = 0, int lastColumn = -1) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a57ef5a6d63c758726572e0f920a59165">setInt</a> (int colNum, int val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a197fb1a81a24e8f296e66afb4fdc7fd4">setLong</a> (int colNum, long val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a53aa76fd23f08d77a259e71041cb0593">setDouble</a> (int colNum, double val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a206b6845bcbfa47de0843447142199c1">setString</a> (int colNum, const char *val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a38539f3b5afee046643392d2b44c1c3e">setString</a> (int colNum, const char *val, int stringLen) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#af3f5ca05624d489c4fa408c6797ba91b">setString</a> (int colNum, const std::string &amp;val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a1b988ee0269c747eadea2857dc644efd">setTime</a> (int colNum, time_t val) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a017468a30a494b09e206299db69394e6">setBoolean</a> (int colNum, bool val) const </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_1TupleInfo.html#a374da12aaec8a620afedf7eb5f0e19f3">setFromDelimitedRow</a> (const char *row, char delim='|', bool quote=false, char quoteSymbol= '&quot;', int firstColumnToSet = 0, int lastColumnToSet = -1, int numDelimColsToSkip = 0) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a4bca6c587b8995e0e6d074e086d998a7">setNull</a> (int colNum) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#aaf49e5e83a73c3f34375b837dadbdb31">getColumn</a> (int colNum)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a2fb6559fd02ba70881c88e6b2bf5518c">getColumn</a> (const std::string &amp;colName)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a597bb78ac5815850d014e1ad3d1340eb">addColumn</a> (const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;column)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ac45f91bb0400a5030e087bdb2ce3acf1">addIntColumn</a> (const char *colName, bool isNullable=false)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a9f4c7996f9eefca3ebe9823dcec89607">addLongColumn</a> (const char *colName, bool isNullable=false)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ae3a882a83201d49b0933b6d189e54c1d">addDoubleColumn</a> (const char *colName, bool isNullable=false)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a8952e96505708cbde4ff3f611fdaf613">addCharColumn</a> (const char *colName, int length, bool isNullable=false, <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">TypeInfo::SQLCharsetCode</a> charset=TypeInfo::CHARSET_UTF8, <a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033 [...]
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#ad8be3c967e7dabf8b80a8ee6366736b1">addVarCharColumn</a> (const char *colName, int length, bool isNullable=false, <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">TypeInfo::SQLCharsetCode</a> charset=TypeInfo::CHARSET_UTF8, <a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf [...]
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a8aedec53dff3ec91f2b71ce30c5aa6ae">addColumns</a> (const std::vector&lt; <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> * &gt; &amp;columns)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a5e340f907ceaa51373508ff192078980">addColumnAt</a> (const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;column, int position)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#aef3d85a827d91f938648856b7b08768b">deleteColumn</a> (int i)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#af8b0d51c40f855dd38fc7ddd94f39d11">deleteColumn</a> (const std::string &amp;name)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#a7befa22db4c7ae677da681dc13d3ef99">getRecordLength</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TupleInfo.html#aa5309f0edb4901f0e07f0e8010ca63d6">print</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Common base class for parameter lists and row layouts. </p>
+<p>Describes a list of scalars, which could be columns of a table or a parameter list </p>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a8952e96505708cbde4ff3f611fdaf613"></a><!-- doxytag: member="tmudr::TupleInfo::addCharColumn" ref="a8952e96505708cbde4ff3f611fdaf613" args="(const char *colName, int length, bool isNullable=false, TypeInfo::SQLCharsetCode charset=TypeInfo::CHARSET_UTF8, TypeInfo::SQLCollationCode collation=TypeInfo::SYSTEM_COLLATION)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addCharColumn </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>isNullable</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">TypeInfo::SQLCharsetCode</a>&nbsp;</td>
+          <td class="paramname"> <em>charset</em> = <code>TypeInfo::CHARSET_UTF8</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">TypeInfo::SQLCollationCode</a>&nbsp;</td>
+          <td class="paramname"> <em>collation</em> = <code>TypeInfo::SYSTEM_COLLATION</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a fixed character output column.</p>
+<p>The new column is added at the end.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>length</em>&nbsp;</td><td>Length of the new character column. For single-byte and variable byte character sets, the length is specified in bytes. For UTF-8, this is equivalent to CHAR(length BYTES) in SQL. For UCS2, the length is in UCS2 16-bit characters. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>isNullable</em>&nbsp;</td><td>true if the added column should be nullable, false if the added column should have the NOT NULL constraint. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>charset</em>&nbsp;</td><td>Character set of the new column. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>collation</em>&nbsp;</td><td>Collation of the new column. </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="a597bb78ac5815850d014e1ad3d1340eb"></a><!-- doxytag: member="tmudr::TupleInfo::addColumn" ref="a597bb78ac5815850d014e1ad3d1340eb" args="(const ColumnInfo &amp;column)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addColumn </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>column</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a new column.</p>
+<p>Only use this method from within the following method: </p>
+<ul>
+<li><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a></li>
+</ul>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>column</em>&nbsp;</td><td>Info of the new column to add. </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="a5e340f907ceaa51373508ff192078980"></a><!-- doxytag: member="tmudr::TupleInfo::addColumnAt" ref="a5e340f907ceaa51373508ff192078980" args="(const ColumnInfo &amp;column, int position)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addColumnAt </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>position</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a new column at a specified position.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>column</em>&nbsp;</td><td><a class="el" href="classtmudr_1_1ColumnInfo.html" title="Describes a column in an input or output table or a parameter.">ColumnInfo</a> object describing the new column. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>position</em>&nbsp;</td><td>Position/ordinal number of the new column. All existing columns with ordinal numbers greater or equal to position will be shifted by one. </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="a8aedec53dff3ec91f2b71ce30c5aa6ae"></a><!-- doxytag: member="tmudr::TupleInfo::addColumns" ref="a8aedec53dff3ec91f2b71ce30c5aa6ae" args="(const std::vector&lt; ColumnInfo * &gt; &amp;columns)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addColumns </td>
+          <td>(</td>
+          <td class="paramtype">const std::vector&lt; <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> * &gt; &amp;&nbsp;</td>
+          <td class="paramname"> <em>columns</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add multiple columns to the table-valued output.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>columns</em>&nbsp;</td><td>Vector of <a class="el" href="classtmudr_1_1ColumnInfo.html" title="Describes a column in an input or output table or a parameter.">ColumnInfo</a> objects describing the columns to add. </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="ae3a882a83201d49b0933b6d189e54c1d"></a><!-- doxytag: member="tmudr::TupleInfo::addDoubleColumn" ref="ae3a882a83201d49b0933b6d189e54c1d" args="(const char *colName, bool isNullable=false)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addDoubleColumn </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>isNullable</em> = <code>false</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a double output column.</p>
+<p>The new column is added at the end.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>isNullable</em>&nbsp;</td><td>true if the added column should be nullable, false if the added column should have the NOT NULL constraint. </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="ac45f91bb0400a5030e087bdb2ce3acf1"></a><!-- doxytag: member="tmudr::TupleInfo::addIntColumn" ref="ac45f91bb0400a5030e087bdb2ce3acf1" args="(const char *colName, bool isNullable=false)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addIntColumn </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>isNullable</em> = <code>false</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add an integer output column.</p>
+<p>The new column is added at the end.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>isNullable</em>&nbsp;</td><td>true if the added column should be nullable, false if the added column should have the NOT NULL constraint. </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="a9f4c7996f9eefca3ebe9823dcec89607"></a><!-- doxytag: member="tmudr::TupleInfo::addLongColumn" ref="a9f4c7996f9eefca3ebe9823dcec89607" args="(const char *colName, bool isNullable=false)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addLongColumn </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>isNullable</em> = <code>false</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a long output column.</p>
+<p>The new column is added at the end.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>isNullable</em>&nbsp;</td><td>true if the added column should be nullable, false if the added column should have the NOT NULL constraint. </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="ad8be3c967e7dabf8b80a8ee6366736b1"></a><!-- doxytag: member="tmudr::TupleInfo::addVarCharColumn" ref="ad8be3c967e7dabf8b80a8ee6366736b1" args="(const char *colName, int length, bool isNullable=false, TypeInfo::SQLCharsetCode charset=TypeInfo::CHARSET_UTF8, TypeInfo::SQLCollationCode collation=TypeInfo::SYSTEM_COLLATION)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::addVarCharColumn </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>isNullable</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">TypeInfo::SQLCharsetCode</a>&nbsp;</td>
+          <td class="paramname"> <em>charset</em> = <code>TypeInfo::CHARSET_UTF8</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">TypeInfo::SQLCollationCode</a>&nbsp;</td>
+          <td class="paramname"> <em>collation</em> = <code>TypeInfo::SYSTEM_COLLATION</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a VARCHAR output column.</p>
+<p>The new column is added at the end.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of the column to add. Use UPPER CASE letters, digits and underscore, otherwise you will need to use delimited column names with matching case in Trafodion. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>length</em>&nbsp;</td><td>Length of the new character column. For single-byte and variable byte character sets, the length is specified in bytes. For UTF-8, this is equivalent to CHAR(length BYTES). For UCS2, the length is in UCS2 16-bit characters. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>isNullable</em>&nbsp;</td><td>true if the added column should be nullable, false if the added column should have the NOT NULL constraint. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>charset</em>&nbsp;</td><td>Character set of the new column. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>collation</em>&nbsp;</td><td>Collation of the new column. </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="af8b0d51c40f855dd38fc7ddd94f39d11"></a><!-- doxytag: member="tmudr::TupleInfo::deleteColumn" ref="af8b0d51c40f855dd38fc7ddd94f39d11" args="(const std::string &amp;name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::deleteColumn </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>name</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Delete a column with a specified column name.</p>
+<p>The first column that matches the specified column name will be deleted.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>Name of the column to be deleted. </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="aef3d85a827d91f938648856b7b08768b"></a><!-- doxytag: member="tmudr::TupleInfo::deleteColumn" ref="aef3d85a827d91f938648856b7b08768b" args="(int i)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::deleteColumn </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Delete a column of the table-valued output.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>i</em>&nbsp;</td><td>Position/ordinal (0-based) of column to be deleted. </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="ae666607b97e3b27336dcf1748f9d5ed9"></a><!-- doxytag: member="tmudr::TupleInfo::getBoolean" ref="ae666607b97e3b27336dcf1748f9d5ed9" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TupleInfo::getBoolean </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a boolean value of a column or parameter identified by name.</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It cannot be used for actual parameters that are available at compile time, use getString(int colNum) instead, since actual parameters are not named.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>bool value. If the value was a NULL value, false is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="ab3391ad53c5abadb13dac6249be9d7bc"></a><!-- doxytag: member="tmudr::TupleInfo::getBoolean" ref="ab3391ad53c5abadb13dac6249be9d7bc" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TupleInfo::getBoolean </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a boolean value of a column or parameter</p>
+<p>This method is modeled after the JDBC interface. It can be used on boolean, numeric and character columns. Numeric columns need to have a value of 0 (false) or 1 (true), character columns need to have a value of "0" (false) or "1" (true).</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Boolean value. If the value was a NULL value, false is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="af702ba5fd84731694221e478c740e14a"></a><!-- doxytag: member="tmudr::TupleInfo::getColNum" ref="af702ba5fd84731694221e478c740e14a" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getColNum </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Look up a column/parameter number by name.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column/parameter number. </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="a364c0f7153519e21e5d10ea8f54f6e25"></a><!-- doxytag: member="tmudr::TupleInfo::getColNum" ref="a364c0f7153519e21e5d10ea8f54f6e25" args="(const char *colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getColNum </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Look up a column/parameter number by name.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column/parameter number. </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="a2fb6559fd02ba70881c88e6b2bf5518c"></a><!-- doxytag: member="tmudr::TupleInfo::getColumn" ref="a2fb6559fd02ba70881c88e6b2bf5518c" args="(const std::string &amp;colName)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp; TupleInfo::getColumn </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the non-const column info for a column identified by its name.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column info. </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="aaf49e5e83a73c3f34375b837dadbdb31"></a><!-- doxytag: member="tmudr::TupleInfo::getColumn" ref="aaf49e5e83a73c3f34375b837dadbdb31" args="(int colNum)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp; TupleInfo::getColumn </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the non-const column info for a column identified by its ordinal.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column info. </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="a1687dc30e4a9db80f6fdb95cacdf350b"></a><!-- doxytag: member="tmudr::TupleInfo::getColumn" ref="a1687dc30e4a9db80f6fdb95cacdf350b" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp; TupleInfo::getColumn </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the column info for a column identified by its name.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column info. </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="a460d01d871fe2be13ee90e9c5ce9f930"></a><!-- doxytag: member="tmudr::TupleInfo::getColumn" ref="a460d01d871fe2be13ee90e9c5ce9f930" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp; TupleInfo::getColumn </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the column info for a column identified by its ordinal.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column info. </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="ac6a3327145169b0ce9bb3637d665170f"></a><!-- doxytag: member="tmudr::TupleInfo::getDelimitedRow" ref="ac6a3327145169b0ce9bb3637d665170f" args="(std::string &amp;row, char delim='|', bool quote=false, char quoteSymbol= '&quot;', int firstColumn = 0, int lastColumn = &#45;1) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::getDelimitedRow </td>
+          <td>(</td>
+          <td class="paramtype">std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char&nbsp;</td>
+          <td class="paramname"> <em>delim</em> = <code>'|'</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>quote</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char&nbsp;</td>
+          <td class="paramname"> <em>quoteSymbol</em> = <code>'&quot;'</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>firstColumn</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>lastColumn</em> = <code>-1</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get columns of a row as a delimited string.</p>
+<p>This method is useful to interface with tools that take a delimited record format. It is also useful for printing rows (see <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea5ee57a5f93619e910047e53cf5d1c9f0" title="16">UDRInvocationInfo::TRACE_ROWS</a>).</p>
+<p>Only use this method at runtime.</p>
+<p>Note: This method may return a string that contains multiple character sets, if columns with different character sets are involved. Using this method with UCS-2 columns is not recommended.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>row</em>&nbsp;</td><td>String reference in which the result delimited row will be returned. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>delim</em>&nbsp;</td><td>US ASCII field delimiter to use. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>quote</em>&nbsp;</td><td>Whether to quote character field values that contain the delimiter symbol or a quote symbol. Quote symbols will be duplicated to escape them. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>quoteSymbol</em>&nbsp;</td><td>US ASCII quote character to use, if quote is true. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>firstColumn</em>&nbsp;</td><td>First column to read. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>lastColumn</em>&nbsp;</td><td>Last column to read (inclusive) or -1 to read until the last column in the row. </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="a2296e6f2acf21b3bec769f98fee8513e"></a><!-- doxytag: member="tmudr::TupleInfo::getDouble" ref="a2296e6f2acf21b3bec769f98fee8513e" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double TupleInfo::getDouble </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get double value of a column/parameter identified by name.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html#a49614778f7d1988a262bab185a4f0ce2">TupleInfo::getDouble(int colNum) const</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>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>double value. </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="a49614778f7d1988a262bab185a4f0ce2"></a><!-- doxytag: member="tmudr::TupleInfo::getDouble" ref="a49614778f7d1988a262bab185a4f0ce2" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double TupleInfo::getDouble </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a double value of a column or parameter</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>double value. </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="a7d3bf0cfef4386809c3b27d8c87302a2"></a><!-- doxytag: member="tmudr::TupleInfo::getInt" ref="a7d3bf0cfef4386809c3b27d8c87302a2" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getInt </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get an integer value for a column identified by name.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">TupleInfo::getInt(int) const</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>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Integer value. If the value was a NULL value, then 0 is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="afb5f2131ce96a7cfb541d1147b025e76"></a><!-- doxytag: member="tmudr::TupleInfo::getInt" ref="afb5f2131ce96a7cfb541d1147b025e76" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getInt </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get an integer value of a column or parameter</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Integer value. If the value was a NULL value, then 0 is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="a007ae4ad517e42418191614456042691"></a><!-- doxytag: member="tmudr::TupleInfo::getLong" ref="a007ae4ad517e42418191614456042691" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long TupleInfo::getLong </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a long value for a column identified by name.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html#a11fd53d410ffee07bb2bbde927913e47">TupleInfo::getLong(int) const</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>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>long value. </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="a11fd53d410ffee07bb2bbde927913e47"></a><!-- doxytag: member="tmudr::TupleInfo::getLong" ref="a11fd53d410ffee07bb2bbde927913e47" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long TupleInfo::getLong </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a long value of a column or parameter</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>long value. If the value was a NULL value, then 0 is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="a9414181fd102b20706eabf561f0d6dd3"></a><!-- doxytag: member="tmudr::TupleInfo::getNumColumns" ref="a9414181fd102b20706eabf561f0d6dd3" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getNumColumns </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of columns or parameters.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of columns/parameters. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab7ed8aa0f36a9dd2a5570128f5eb12a1"></a><!-- doxytag: member="tmudr::TupleInfo::getRaw" ref="ab7ed8aa0f36a9dd2a5570128f5eb12a1" args="(int colNum, int &amp;byteLen) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char * TupleInfo::getRaw </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int &amp;&nbsp;</td>
+          <td class="paramname"> <em>byteLen</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a pointer to the raw data value of a column.</p>
+<p>Using this method requires knowledge of the data layout for the different types used in UDRs. This method can be useful for performance optimizations, when converting longer string values to std::string is undesirable. Note that the pointer to the raw value is valid only until a new row is read or the existing row is emitted.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>byteLen</em>&nbsp;</td><td>Length, in bytes, of the value returned. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to the raw column value in the row buffer. </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="a7befa22db4c7ae677da681dc13d3ef99"></a><!-- doxytag: member="tmudr::TupleInfo::getRecordLength" ref="a7befa22db4c7ae677da681dc13d3ef99" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TupleInfo::getRecordLength </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the record length of a row.</p>
+<p>This method returns the approximate record length of the tuple at compile time and the actual (non-compressed) record length at runtime. This might be useful for cost estimation, otherwise it can be ignored by UDF writers.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Record length in bytes. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3b0d60692c6fa1e2b768908ae95095e9"></a><!-- doxytag: member="tmudr::TupleInfo::getSQLTypeClass" ref="a3b0d60692c6fa1e2b768908ae95095e9" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">TypeInfo::SQLTypeClassCode</a> TupleInfo::getSQLTypeClass </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the SQL type class.</p>
+<p>Determine whether this is a numeric character, datetime or interval type. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>SQL type class enum. </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="a06171cd4681221471257a05f88e0cb01"></a><!-- doxytag: member="tmudr::TupleInfo::getString" ref="a06171cd4681221471257a05f88e0cb01" args="(const std::string &amp;colName) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string TupleInfo::getString </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>colName</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a string value of a column or parameter identified by name.</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It cannot be used for actual parameters that are available at compile time, use getString(int colNum) instead, since actual parameters are not named.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colName</em>&nbsp;</td><td>Name of an existing column. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>String value. If the value was a NULL value, an empty string is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="a84e1379f2809a1cf6adef8dccbcba836"></a><!-- doxytag: member="tmudr::TupleInfo::getString" ref="a84e1379f2809a1cf6adef8dccbcba836" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string TupleInfo::getString </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a string value of a column or parameter</p>
+<p>This method is modeled after the JDBC interface.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>String value. If the value was a NULL value, an empty string is returned. The <a class="el" href="classtmudr_1_1TupleInfo.html#a8aaa05953f4d2b349923224443a7c1d7">wasNull()</a> method can be used to determine whether a NULL value was returned. </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="a53ea8b479aa67e9d1b19aad2ea16411d"></a><!-- doxytag: member="tmudr::TupleInfo::getTime" ref="a53ea8b479aa67e9d1b19aad2ea16411d" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">time_t TupleInfo::getTime </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a datetime or interval column value as time_t</p>
+<p>This method can be used to convert column values with a datetime type or a day-second interval type to the POSIX type time_t. Note that this may result in the loss of fractional seconds.</p>
+<p>Use this method at runtime. It can also be used for actual parameters that are available at compile time.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </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="a21b3421c855b85a3a9186a8c37d5637b"></a><!-- doxytag: member="tmudr::TupleInfo::getType" ref="a21b3421c855b85a3a9186a8c37d5637b" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp; TupleInfo::getType </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the type of a column.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Type of the column. </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="adae91c6ed0e61babc2fe71fcb53091fa"></a><!-- doxytag: member="tmudr::TupleInfo::isAvailable" ref="adae91c6ed0e61babc2fe71fcb53091fa" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TupleInfo::isAvailable </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether a parameter is available at compile-time.</p>
+<p>Use this method to check in the compiler interfaces whether an actual parameter is a constant value that can be read at compile time. If this method returns true, the value can be accessed with the <a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">getInt()</a>, <a class="el" href="classtmudr_1_1TupleInfo.html#a84e1379f2809a1cf6adef8dccbcba836">getString()</a> etc. methods.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Column number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if the parameter value is available. </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="aa5309f0edb4901f0e07f0e8010ca63d6"></a><!-- doxytag: member="tmudr::TupleInfo::print" ref="aa5309f0edb4901f0e07f0e8010ca63d6" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::print </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Print the object, for use in debugging.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#a9a0d3501ad5d27d90ca85a8791c87409">UDR::debugLoop()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" title="128">UDRInvocationInfo::PRINT_INVOCATION_INFO_AT_RUN_TIME</a> </dd></dl>
+
+<p>Reimplemented in <a class="el" href="classtmudr_1_1TableInfo.html#a9d48ebe9458e65672fee592c1e73be5f">tmudr::TableInfo</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a017468a30a494b09e206299db69394e6"></a><!-- doxytag: member="tmudr::TupleInfo::setBoolean" ref="a017468a30a494b09e206299db69394e6" args="(int colNum, bool val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setBoolean </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set a column to a value specified as bool</p>
+<p>This will set boolean, numeric and character columns. Numeric values will be 0 for false, 1 for true. String values will be "0" for false, "1" for true.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new boolean value for the column to set. </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="a53aa76fd23f08d77a259e71041cb0593"></a><!-- doxytag: member="tmudr::TupleInfo::setDouble" ref="a53aa76fd23f08d77a259e71041cb0593" args="(int colNum, double val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setDouble </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified double value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new double value for the column to set. </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="a374da12aaec8a620afedf7eb5f0e19f3"></a><!-- doxytag: member="tmudr::TupleInfo::setFromDelimitedRow" ref="a374da12aaec8a620afedf7eb5f0e19f3" args="(const char *row, char delim='|', bool quote=false, char quoteSymbol= '&quot;', int firstColumnToSet = 0, int lastColumnToSet = &#45;1, int numDelimColsToSkip = 0) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char * TupleInfo::setFromDelimitedRow </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char&nbsp;</td>
+          <td class="paramname"> <em>delim</em> = <code>'|'</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>quote</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char&nbsp;</td>
+          <td class="paramname"> <em>quoteSymbol</em> = <code>'&quot;'</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>firstColumnToSet</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>lastColumnToSet</em> = <code>-1</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>numDelimColsToSkip</em> = <code>0</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the result row from a string with delimited field values.</p>
+<p>This method can be used to read delimited text files and conveniently produce a result table from them. For example, if the following string is passed in as row: </p>
+<div class="fragment"><pre class="fragment"> skip1|<span class="stringliteral">&apos;skip|2&apos;</span>|3|<span class="stringliteral">&apos;delim|and&apos;</span><span class="stringliteral">&apos;Quote&apos;</span>|5 
+</pre></div><p> This call: </p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="classtmudr_1_1TupleInfo.html#a374da12aaec8a620afedf7eb5f0e19f3">setFromDelimitedRow</a>(
+      row,  <span class="comment">// row</span>
+      <span class="charliteral">&apos;|&apos;</span>,  <span class="comment">// delim</span>
+      <span class="keyword">true</span>, <span class="comment">// quote</span>
+      <span class="charliteral">&apos;\&apos;&apos;</span>, <span class="comment">// quoteSymbol (single quote)</span>
+      10,   <span class="comment">// firstColumnToSet</span>
+      11,   <span class="comment">// lastColumnToSet</span>
+      2);   <span class="comment">// numDelimColsToSkip </span>
+</pre></div><p> would set output column 10 to 3 and output column 11 to delim|and'Quote.</p>
+<p>Note: The delimited row may need to contain strings of multiple character sets. Using this method with UCS2 columns is not recommended, since that might require special handling.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TupleInfo.html#ac6a3327145169b0ce9bb3637d665170f">getDelimitedRow()</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>row</em>&nbsp;</td><td>A string with delimited field values to read. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>delim</em>&nbsp;</td><td>Delimiter between field values. Use a US ASCII symbol as the delimiter. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>quote</em>&nbsp;</td><td>true if the method should assume that text fields use quotes to quote special symbols like delimiters that are embedded within fields, and that quote symbols embedded in text fields will be doubled. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>quoteSymbol</em>&nbsp;</td><td>US ASCII Quote symbol used to quote text. Meaningful only if quote is set to true. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>firstColumnToSet</em>&nbsp;</td><td>First column in the output table to be set from the delimited row (0-based). </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>lastColumnToSet</em>&nbsp;</td><td>Last column in the output table to be set (inclusive) or -1 to indicate to set all remaining columns of the table. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>numDelimColsToSkip</em>&nbsp;</td><td>Number of fields to skip in the delimited row before using the values to set output columns. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to the first character after the text that has been consumed by this method. </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="a57ef5a6d63c758726572e0f920a59165"></a><!-- doxytag: member="tmudr::TupleInfo::setInt" ref="a57ef5a6d63c758726572e0f920a59165" args="(int colNum, int val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setInt </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified integer value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new integer value for the column to set. </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="a197fb1a81a24e8f296e66afb4fdc7fd4"></a><!-- doxytag: member="tmudr::TupleInfo::setLong" ref="a197fb1a81a24e8f296e66afb4fdc7fd4" args="(int colNum, long val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setLong </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified long value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new long value for the column to set. </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="a4bca6c587b8995e0e6d074e086d998a7"></a><!-- doxytag: member="tmudr::TupleInfo::setNull" ref="a4bca6c587b8995e0e6d074e086d998a7" args="(int colNum) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setNull </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a NULL value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set to NULL. </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="af3f5ca05624d489c4fa408c6797ba91b"></a><!-- doxytag: member="tmudr::TupleInfo::setString" ref="af3f5ca05624d489c4fa408c6797ba91b" args="(int colNum, const std::string &amp;val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setString </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified string value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new string value for the column to set. </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="a38539f3b5afee046643392d2b44c1c3e"></a><!-- doxytag: member="tmudr::TupleInfo::setString" ref="a38539f3b5afee046643392d2b44c1c3e" args="(int colNum, const char *val, int stringLen) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setString </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>stringLen</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified string value.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new string value for the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>stringLen</em>&nbsp;</td><td>Length (in bytes) of the string value provided. The string may contain embedded NUL bytes. </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="a206b6845bcbfa47de0843447142199c1"></a><!-- doxytag: member="tmudr::TupleInfo::setString" ref="a206b6845bcbfa47de0843447142199c1" args="(int colNum, const char *val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setString </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set an output column to a specified string value.</p>
+<p>Use this method at runtime. The length of the string is determined by calling strlen().</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new string value for the column to set. The length of the string is determined by calling strlen. </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="a1b988ee0269c747eadea2857dc644efd"></a><!-- doxytag: member="tmudr::TupleInfo::setTime" ref="a1b988ee0269c747eadea2857dc644efd" args="(int colNum, time_t val) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TupleInfo::setTime </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>colNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">time_t&nbsp;</td>
+          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set a datetime or interval output column to a value specified as time_t</p>
+<p>This method cannot be used with year-month intervals or data types that are not datetime or interval types. It is not possible to set fractional seconds with this method.</p>
+<p>Use this method at runtime.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>colNum</em>&nbsp;</td><td>Index/ordinal of the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>The new time_t value for the column to set. </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="a8aaa05953f4d2b349923224443a7c1d7"></a><!-- doxytag: member="tmudr::TupleInfo::wasNull" ref="a8aaa05953f4d2b349923224443a7c1d7" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TupleInfo::wasNull </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether the last value returned from a <a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">getInt()</a> etc. method was NULL.</p>
+<p>This method is modeled after the JDBC interface.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if the last value returned from a <a class="el" href="classtmudr_1_1TupleInfo.html#afb5f2131ce96a7cfb541d1147b025e76">getInt()</a>, <a class="el" href="classtmudr_1_1TupleInfo.html#a84e1379f2809a1cf6adef8dccbcba836">getString()</a> etc. method was a NULL value, false otherwise. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TypeInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TypeInfo.html
new file mode 100644
index 0000000..e886e34
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1TypeInfo.html
@@ -0,0 +1,767 @@
+<!-- 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::TypeInfo 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_1TypeInfo.html">TypeInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::TypeInfo Class Reference</h1><!-- doxytag: class="tmudr::TypeInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>Data types in the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+
+<p>Inherits tmudr::TMUDRSerializableObject.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">SQLTypeCode</a> { , <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a0ade21138ec1a4813824121364bcd19f">SMALLINT</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a24a7fca3d700f356f83e3059accace84">INT</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266ac361fb49744ec7e4fdf18b7111c1b5df">LARGEINT</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266ade9538db5db4f27c09def5bb81e47af4">NUMERIC</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a336d6300f5f819dd63b603ee17736313">DECIMAL_LSE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266aca91a8c023fc074aa7afba2fde0acaf0">SMALLINT_UNSIGNED</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266ae58915dee0f1849c71bd21e9e6cf8666">INT_UNSIGNED</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a2ac9a1a11876fe9bbdb813e55cc74577">NUMERIC_UNSIGNED</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266aea52590bc64eb520c50b81889e0c6a44">DECIMAL_UNSIGNED</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a62961a64ad659ce3817481ab753bb60e">REAL</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a564cd31cdc534c68294bb6b37a25207f">DOUBLE_PRECISION</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a59e8ffc02bd57394fb38c39a338b9af5">CHAR</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266aacb75ea700bb91e90d9e655b41749a53">VARCHAR</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a44380d03ef2b795de30c85047828af08">DATE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a36803a96faf38ec105228df9b91fc221">TIME</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266ad8e388312a66654cc86af2ece2564394">TIMESTAMP</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a5b8bcc1ecfefa939e06e1b431f5a2564">INTERVAL</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a0f315e31b36d6bf06c6d361352606870">BLOB</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266acb20fc9eb1050fb670402263e8129437">CLOB</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a5522121626259cd01df63953b6499f1f">TINYINT</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a79c2f5c46711ae898e1ce8fe661a7055">TINYINT_UNSIGNED</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a93e39bc9f828394f04f4dea0ba9f56cd">BOOLEAN</a>
+<br/>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">SQLTypeClassCode</a> { <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6ac1ddf5a35e4973c871c59882a1748ed0">CHARACTER_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6a74bae30f356f7d74578afce48bfb8b0a">NUMERIC_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6a1926333fc5b6213b2550f11c505a6ff8">DATETIME_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6a8e593620895104b04699b510b03a3410">INTERVAL_TYPE</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6a95c60040762e832c593c5cd70612dabf">LOB_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6aa5ade31c984878b78f9a5dba6862d6c9">BOOLEAN_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6ab5a97b37256b6b9a1a9bcdc87cf8604b">UNDEFINED_TYPE_CLASS</a>
+<br/>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312">SQLTypeSubClassCode</a> { <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312aec1f8938badce43ef7b7d916564c2e73">FIXED_CHAR_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a95cff35312ae45825b4c11cde067bfbd">VAR_CHAR_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a6220516814a84a54ec18897b5033f78a">EXACT_NUMERIC_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a883f57f4046fb514e407ee2bfae4c150">APPROXIMATE_NUMERIC_TYPE</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a1783dfb6ca7d790d9dd81e79ce31c51a">DATE_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a2d9393a033a243a8da1351bd7bb516bf">TIME_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a8f245e8fed318c82158be45bab8eab79">TIMESTAMP_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312aea59eb6057ee0249ddb7c9ea02db5c22">YEAR_MONTH_INTERVAL_TYPE</a>, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a40834e400cd23e40d1301cf793cd0efe">DAY_SECOND_INTERVAL_TYPE</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a29452fb1a30719c6b4da88baf7a19f3f">LOB_SUB_CLASS</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312ace4ee59929901bdbe32083660ecc3998">BOOLEAN_SUB_CLASS</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a779d60e795dc59c3267c0805a02f1a06">UNDEFINED_TYPE_SUB_CLASS</a>
+<br/>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">SQLCharsetCode</a> { , <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619da89d942ed0ec37f58306ecffc8bc27f50">CHARSET_ISO88591</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619dabc8b5a700e0bfd85293e6e9f6f7f95bb">CHARSET_UTF8</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619da224994fe269e15342cc627cd3eeaf57f">CHARSET_UCS2</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">SQLCollationCode</a> { <a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568abe6f0fa45c98745423d99f63e03a1bfa">UNDEFINED_COLLATION</a>, 
+<a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568afaf17174e4d03374f3953af1455ede55">SYSTEM_COLLATION</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a7abbf6085f46df317c9af55c360d5693">SQLIntervalCode</a> </td></tr>
+<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_1TypeInfo.html#aa8530a671d0e202da5766878865c6b92">TypeInfo</a> (const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a6f2af20efd3971a50dc3b9e43692cb1f">TypeInfo</a> (<a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">SQLTypeCode</a> sqltype=UNDEFINED_SQL_TYPE, int length=0, bool nullable=false, int scale=0, <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">SQLCharsetCode</a> charset=CHA [...]
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">SQLTypeCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a15f362c0467ea724f5a131abf616b4e3">getSQLType</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">SQLTypeClassCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#abbeae3703448b022500bc51d03464ee8">getSQLTypeClass</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312">SQLTypeSubClassCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a2d4c5cb598281937eab0e29d86f63a4f">getSQLTypeSubClass</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#adb5577ca283d68a58de55ade4eee2af9">getIsNullable</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#abc3cf966f53a123d28cb7592da8ea1c4">getScale</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">SQLCharsetCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#ae14b0a07899ffb784c74eebf601eb0af">getCharset</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#a7abbf6085f46df317c9af55c360d5693">SQLIntervalCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a5c1892b468507c422ceda6b60bdb0766">getIntervalCode</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a65b9039901423957438d611fec875ecb">getPrecision</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">SQLCollationCode</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a07a9a08aced1ba15872605bc9774eb61">getCollation</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#ae610f032b3f1db4a97562b609a9119d8">getByteLength</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#a4b52f733a78e59a2ea37b6e306b6fc56">getMaxCharLength</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1TypeInfo.html#ab370d3a8e693a893080c105a11d0a500">setNullable</a> (bool nullable)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Data types in the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface. </p>
+<p>Describes an SQL data type and the corresponding C/C++ type, used for scalar parameters, columns of input rows and columns of result rows. </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="a66c9cc313ff649857e47285a80af619d"></a><!-- doxytag: member="tmudr::TypeInfo::SQLCharsetCode" ref="a66c9cc313ff649857e47285a80af619d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">tmudr::TypeInfo::SQLCharsetCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Character sets </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a66c9cc313ff649857e47285a80af619da89d942ed0ec37f58306ecffc8bc27f50"></a><!-- doxytag: member="CHARSET_ISO88591" ref="a66c9cc313ff649857e47285a80af619da89d942ed0ec37f58306ecffc8bc27f50" args="" -->CHARSET_ISO88591</em>&nbsp;</td><td>
+<p>ISO 8859-1, single byte western European characters. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a66c9cc313ff649857e47285a80af619dabc8b5a700e0bfd85293e6e9f6f7f95bb"></a><!-- doxytag: member="CHARSET_UTF8" ref="a66c9cc313ff649857e47285a80af619dabc8b5a700e0bfd85293e6e9f6f7f95bb" args="" -->CHARSET_UTF8</em>&nbsp;</td><td>
+<p>UTF-8, 1-4 byte Unicode encoding, length is in bytes. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a66c9cc313ff649857e47285a80af619da224994fe269e15342cc627cd3eeaf57f"></a><!-- doxytag: member="CHARSET_UCS2" ref="a66c9cc313ff649857e47285a80af619da224994fe269e15342cc627cd3eeaf57f" args="" -->CHARSET_UCS2</em>&nbsp;</td><td>
+<p>UCS-2, 16 bit Unicode encoding, tolerates UTF-16. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab0390570f1a369a2ad216999bf033568"></a><!-- doxytag: member="tmudr::TypeInfo::SQLCollationCode" ref="ab0390570f1a369a2ad216999bf033568" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">tmudr::TypeInfo::SQLCollationCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Collations </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ab0390570f1a369a2ad216999bf033568abe6f0fa45c98745423d99f63e03a1bfa"></a><!-- doxytag: member="UNDEFINED_COLLATION" ref="ab0390570f1a369a2ad216999bf033568abe6f0fa45c98745423d99f63e03a1bfa" args="" -->UNDEFINED_COLLATION</em>&nbsp;</td><td>
+<p>undefined value </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab0390570f1a369a2ad216999bf033568afaf17174e4d03374f3953af1455ede55"></a><!-- doxytag: member="SYSTEM_COLLATION" ref="ab0390570f1a369a2ad216999bf033568afaf17174e4d03374f3953af1455ede55" args="" -->SYSTEM_COLLATION</em>&nbsp;</td><td>
+<p>System collation, which is a binary collation, except that it ignores trailing blanks </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a7abbf6085f46df317c9af55c360d5693"></a><!-- doxytag: member="tmudr::TypeInfo::SQLIntervalCode" ref="a7abbf6085f46df317c9af55c360d5693" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#a7abbf6085f46df317c9af55c360d5693">tmudr::TypeInfo::SQLIntervalCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Start and end fields of interval columns </p>
+
+</div>
+</div>
+<a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6"></a><!-- doxytag: member="tmudr::TypeInfo::SQLTypeClassCode" ref="a9804443638ca97a8e5dbfeebe0d08ca6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">tmudr::TypeInfo::SQLTypeClassCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Classes of types defined in the SQL standard </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6ac1ddf5a35e4973c871c59882a1748ed0"></a><!-- doxytag: member="CHARACTER_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6ac1ddf5a35e4973c871c59882a1748ed0" args="" -->CHARACTER_TYPE</em>&nbsp;</td><td>
+<p>char and varchar types </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6a74bae30f356f7d74578afce48bfb8b0a"></a><!-- doxytag: member="NUMERIC_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6a74bae30f356f7d74578afce48bfb8b0a" args="" -->NUMERIC_TYPE</em>&nbsp;</td><td>
+<p>exact and approximate numerics </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6a1926333fc5b6213b2550f11c505a6ff8"></a><!-- doxytag: member="DATETIME_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6a1926333fc5b6213b2550f11c505a6ff8" args="" -->DATETIME_TYPE</em>&nbsp;</td><td>
+<p>date/time/timestamp </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6a8e593620895104b04699b510b03a3410"></a><!-- doxytag: member="INTERVAL_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6a8e593620895104b04699b510b03a3410" args="" -->INTERVAL_TYPE</em>&nbsp;</td><td>
+<p>day/month or hour/second intervals </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6a95c60040762e832c593c5cd70612dabf"></a><!-- doxytag: member="LOB_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6a95c60040762e832c593c5cd70612dabf" args="" -->LOB_TYPE</em>&nbsp;</td><td>
+<p>BLOBs and CLOBs. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6aa5ade31c984878b78f9a5dba6862d6c9"></a><!-- doxytag: member="BOOLEAN_TYPE" ref="a9804443638ca97a8e5dbfeebe0d08ca6aa5ade31c984878b78f9a5dba6862d6c9" args="" -->BOOLEAN_TYPE</em>&nbsp;</td><td>
+<p>Boolean. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9804443638ca97a8e5dbfeebe0d08ca6ab5a97b37256b6b9a1a9bcdc87cf8604b"></a><!-- doxytag: member="UNDEFINED_TYPE_CLASS" ref="a9804443638ca97a8e5dbfeebe0d08ca6ab5a97b37256b6b9a1a9bcdc87cf8604b" args="" -->UNDEFINED_TYPE_CLASS</em>&nbsp;</td><td>
+<p>undefined value </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266"></a><!-- doxytag: member="tmudr::TypeInfo::SQLTypeCode" ref="ab696846dc0cbf6f8636bf5a8bcf6d266" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">tmudr::TypeInfo::SQLTypeCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>SQL data types </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a0ade21138ec1a4813824121364bcd19f"></a><!-- doxytag: member="SMALLINT" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a0ade21138ec1a4813824121364bcd19f" args="" -->SMALLINT</em>&nbsp;</td><td>
+<p>16 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a24a7fca3d700f356f83e3059accace84"></a><!-- doxytag: member="INT" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a24a7fca3d700f356f83e3059accace84" args="" -->INT</em>&nbsp;</td><td>
+<p>32 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266ac361fb49744ec7e4fdf18b7111c1b5df"></a><!-- doxytag: member="LARGEINT" ref="ab696846dc0cbf6f8636bf5a8bcf6d266ac361fb49744ec7e4fdf18b7111c1b5df" args="" -->LARGEINT</em>&nbsp;</td><td>
+<p>64 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266ade9538db5db4f27c09def5bb81e47af4"></a><!-- doxytag: member="NUMERIC" ref="ab696846dc0cbf6f8636bf5a8bcf6d266ade9538db5db4f27c09def5bb81e47af4" args="" -->NUMERIC</em>&nbsp;</td><td>
+<p>Numeric with decimal precision. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a336d6300f5f819dd63b603ee17736313"></a><!-- doxytag: member="DECIMAL_LSE" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a336d6300f5f819dd63b603ee17736313" args="" -->DECIMAL_LSE</em>&nbsp;</td><td>
+<p>Decimal, leading sign embedded. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266aca91a8c023fc074aa7afba2fde0acaf0"></a><!-- doxytag: member="SMALLINT_UNSIGNED" ref="ab696846dc0cbf6f8636bf5a8bcf6d266aca91a8c023fc074aa7afba2fde0acaf0" args="" -->SMALLINT_UNSIGNED</em>&nbsp;</td><td>
+<p>unsigned 16 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266ae58915dee0f1849c71bd21e9e6cf8666"></a><!-- doxytag: member="INT_UNSIGNED" ref="ab696846dc0cbf6f8636bf5a8bcf6d266ae58915dee0f1849c71bd21e9e6cf8666" args="" -->INT_UNSIGNED</em>&nbsp;</td><td>
+<p>unsigned 32 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a2ac9a1a11876fe9bbdb813e55cc74577"></a><!-- doxytag: member="NUMERIC_UNSIGNED" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a2ac9a1a11876fe9bbdb813e55cc74577" args="" -->NUMERIC_UNSIGNED</em>&nbsp;</td><td>
+<p>unsigned numeric </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266aea52590bc64eb520c50b81889e0c6a44"></a><!-- doxytag: member="DECIMAL_UNSIGNED" ref="ab696846dc0cbf6f8636bf5a8bcf6d266aea52590bc64eb520c50b81889e0c6a44" args="" -->DECIMAL_UNSIGNED</em>&nbsp;</td><td>
+<p>unsigned decimal </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a62961a64ad659ce3817481ab753bb60e"></a><!-- doxytag: member="REAL" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a62961a64ad659ce3817481ab753bb60e" args="" -->REAL</em>&nbsp;</td><td>
+<p>4 byte floating point number </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a564cd31cdc534c68294bb6b37a25207f"></a><!-- doxytag: member="DOUBLE_PRECISION" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a564cd31cdc534c68294bb6b37a25207f" args="" -->DOUBLE_PRECISION</em>&nbsp;</td><td>
+<p>8 byte floating point number </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a59e8ffc02bd57394fb38c39a338b9af5"></a><!-- doxytag: member="CHAR" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a59e8ffc02bd57394fb38c39a338b9af5" args="" -->CHAR</em>&nbsp;</td><td>
+<p>fixed length character types. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266aacb75ea700bb91e90d9e655b41749a53"></a><!-- doxytag: member="VARCHAR" ref="ab696846dc0cbf6f8636bf5a8bcf6d266aacb75ea700bb91e90d9e655b41749a53" args="" -->VARCHAR</em>&nbsp;</td><td>
+<p>varying length character types. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a44380d03ef2b795de30c85047828af08"></a><!-- doxytag: member="DATE" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a44380d03ef2b795de30c85047828af08" args="" -->DATE</em>&nbsp;</td><td>
+<p>date </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a36803a96faf38ec105228df9b91fc221"></a><!-- doxytag: member="TIME" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a36803a96faf38ec105228df9b91fc221" args="" -->TIME</em>&nbsp;</td><td>
+<p>time </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266ad8e388312a66654cc86af2ece2564394"></a><!-- doxytag: member="TIMESTAMP" ref="ab696846dc0cbf6f8636bf5a8bcf6d266ad8e388312a66654cc86af2ece2564394" args="" -->TIMESTAMP</em>&nbsp;</td><td>
+<p>timestamp </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a5b8bcc1ecfefa939e06e1b431f5a2564"></a><!-- doxytag: member="INTERVAL" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a5b8bcc1ecfefa939e06e1b431f5a2564" args="" -->INTERVAL</em>&nbsp;</td><td>
+<p>interval </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a0f315e31b36d6bf06c6d361352606870"></a><!-- doxytag: member="BLOB" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a0f315e31b36d6bf06c6d361352606870" args="" -->BLOB</em>&nbsp;</td><td>
+<p>Binary Large Object. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266acb20fc9eb1050fb670402263e8129437"></a><!-- doxytag: member="CLOB" ref="ab696846dc0cbf6f8636bf5a8bcf6d266acb20fc9eb1050fb670402263e8129437" args="" -->CLOB</em>&nbsp;</td><td>
+<p>Character Large Object. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a5522121626259cd01df63953b6499f1f"></a><!-- doxytag: member="TINYINT" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a5522121626259cd01df63953b6499f1f" args="" -->TINYINT</em>&nbsp;</td><td>
+<p>8 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a79c2f5c46711ae898e1ce8fe661a7055"></a><!-- doxytag: member="TINYINT_UNSIGNED" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a79c2f5c46711ae898e1ce8fe661a7055" args="" -->TINYINT_UNSIGNED</em>&nbsp;</td><td>
+<p>unsigned 8 bit integer </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab696846dc0cbf6f8636bf5a8bcf6d266a93e39bc9f828394f04f4dea0ba9f56cd"></a><!-- doxytag: member="BOOLEAN" ref="ab696846dc0cbf6f8636bf5a8bcf6d266a93e39bc9f828394f04f4dea0ba9f56cd" args="" -->BOOLEAN</em>&nbsp;</td><td>
+<p>boolean, 1 byte 0 or 1 </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312"></a><!-- doxytag: member="tmudr::TypeInfo::SQLTypeSubClassCode" ref="a82b5906be32d94b8ae2ba20d8cc3f312" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312">tmudr::TypeInfo::SQLTypeSubClassCode</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>More detailed type information, but not as detailed as the actual type </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312aec1f8938badce43ef7b7d916564c2e73"></a><!-- doxytag: member="FIXED_CHAR_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312aec1f8938badce43ef7b7d916564c2e73" args="" -->FIXED_CHAR_TYPE</em>&nbsp;</td><td>
+<p>CHAR types. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a95cff35312ae45825b4c11cde067bfbd"></a><!-- doxytag: member="VAR_CHAR_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a95cff35312ae45825b4c11cde067bfbd" args="" -->VAR_CHAR_TYPE</em>&nbsp;</td><td>
+<p>VARCHAR type. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a6220516814a84a54ec18897b5033f78a"></a><!-- doxytag: member="EXACT_NUMERIC_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a6220516814a84a54ec18897b5033f78a" args="" -->EXACT_NUMERIC_TYPE</em>&nbsp;</td><td>
+<p>Exact numeric. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a883f57f4046fb514e407ee2bfae4c150"></a><!-- doxytag: member="APPROXIMATE_NUMERIC_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a883f57f4046fb514e407ee2bfae4c150" args="" -->APPROXIMATE_NUMERIC_TYPE</em>&nbsp;</td><td>
+<p>Approximate numeric (floating point). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a1783dfb6ca7d790d9dd81e79ce31c51a"></a><!-- doxytag: member="DATE_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a1783dfb6ca7d790d9dd81e79ce31c51a" args="" -->DATE_TYPE</em>&nbsp;</td><td>
+<p>Date. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a2d9393a033a243a8da1351bd7bb516bf"></a><!-- doxytag: member="TIME_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a2d9393a033a243a8da1351bd7bb516bf" args="" -->TIME_TYPE</em>&nbsp;</td><td>
+<p>Time. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a8f245e8fed318c82158be45bab8eab79"></a><!-- doxytag: member="TIMESTAMP_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a8f245e8fed318c82158be45bab8eab79" args="" -->TIMESTAMP_TYPE</em>&nbsp;</td><td>
+<p>Timestamp (date + time + optional fractional seconds) </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312aea59eb6057ee0249ddb7c9ea02db5c22"></a><!-- doxytag: member="YEAR_MONTH_INTERVAL_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312aea59eb6057ee0249ddb7c9ea02db5c22" args="" -->YEAR_MONTH_INTERVAL_TYPE</em>&nbsp;</td><td>
+<p>Intervals involving year and month. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a40834e400cd23e40d1301cf793cd0efe"></a><!-- doxytag: member="DAY_SECOND_INTERVAL_TYPE" ref="a82b5906be32d94b8ae2ba20d8cc3f312a40834e400cd23e40d1301cf793cd0efe" args="" -->DAY_SECOND_INTERVAL_TYPE</em>&nbsp;</td><td>
+<p>Intervals involving days/hours/minutes/seconds </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a29452fb1a30719c6b4da88baf7a19f3f"></a><!-- doxytag: member="LOB_SUB_CLASS" ref="a82b5906be32d94b8ae2ba20d8cc3f312a29452fb1a30719c6b4da88baf7a19f3f" args="" -->LOB_SUB_CLASS</em>&nbsp;</td><td>
+<p>LOBs. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312ace4ee59929901bdbe32083660ecc3998"></a><!-- doxytag: member="BOOLEAN_SUB_CLASS" ref="a82b5906be32d94b8ae2ba20d8cc3f312ace4ee59929901bdbe32083660ecc3998" args="" -->BOOLEAN_SUB_CLASS</em>&nbsp;</td><td>
+<p>Boolean. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a82b5906be32d94b8ae2ba20d8cc3f312a779d60e795dc59c3267c0805a02f1a06"></a><!-- doxytag: member="UNDEFINED_TYPE_SUB_CLASS" ref="a82b5906be32d94b8ae2ba20d8cc3f312a779d60e795dc59c3267c0805a02f1a06" args="" -->UNDEFINED_TYPE_SUB_CLASS</em>&nbsp;</td><td>
+<p>undefined value </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="aa8530a671d0e202da5766878865c6b92"></a><!-- doxytag: member="tmudr::TypeInfo::TypeInfo" ref="aa8530a671d0e202da5766878865c6b92" args="(const TypeInfo &amp;type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TypeInfo::TypeInfo </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1TypeInfo.html">TypeInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>type</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Copy constructor </p>
+
+</div>
+</div>
+<a class="anchor" id="a6f2af20efd3971a50dc3b9e43692cb1f"></a><!-- doxytag: member="tmudr::TypeInfo::TypeInfo" ref="a6f2af20efd3971a50dc3b9e43692cb1f" args="(SQLTypeCode sqltype=UNDEFINED_SQL_TYPE, int length=0, bool nullable=false, int scale=0, SQLCharsetCode charset=CHARSET_UTF8, SQLIntervalCode intervalCode=UNDEFINED_INTERVAL_CODE, int precision=0, SQLCollationCode collation=SYSTEM_COLLATION)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TypeInfo::TypeInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">SQLTypeCode</a>&nbsp;</td>
+          <td class="paramname"> <em>sqlType</em> = <code>UNDEFINED_SQL_TYPE</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>length</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>nullable</em> = <code>false</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>scale</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">SQLCharsetCode</a>&nbsp;</td>
+          <td class="paramname"> <em>charset</em> = <code>CHARSET_UTF8</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#a7abbf6085f46df317c9af55c360d5693">SQLIntervalCode</a>&nbsp;</td>
+          <td class="paramname"> <em>intervalCode</em> = <code>UNDEFINED_INTERVAL_CODE</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>precision</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">SQLCollationCode</a>&nbsp;</td>
+          <td class="paramname"> <em>collation</em> = <code>SYSTEM_COLLATION</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor, with optional arguments</p>
+<p>Construct a <a class="el" href="classtmudr_1_1TypeInfo.html" title="Data types in the UDR interface.">TypeInfo</a> object from an SQL type, with several optional arguments (including the SQL type). This is mostly used to create formal parameters or output columns in the compiler interface, if a more complex data type is required that is not covered by the TupleInfo::addXXXColumn() methods.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>sqlType</em>&nbsp;</td><td>SQL type enum to construct the type from. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>length</em>&nbsp;</td><td>Length of CHAR/VARCHAR types, not needed for other types. Note that the length for UTF-8 types is in bytes, not characters, so this is equivalent to <br/>
+ [VAR]CHAR (<code><b>length</b> BYTES</code>) CHARACTER SET UTF8 </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>nullable</em>&nbsp;</td><td>Determines the NULL / NOT NULL attribute of the type Default: false (that means NOT NULL) </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>scale</em>&nbsp;</td><td>Scale for numeric type, fraction precision for fractional seconds, not needed for other types. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>charset</em>&nbsp;</td><td>Character set enum for CHAR/VARCHAR types, not needed for other types. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>intervalCode</em>&nbsp;</td><td>Interval code enum for intervals, not needed otherwise. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>precision</em>&nbsp;</td><td>Precision for numeric types and leading precision for interval data types. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>collation</em>&nbsp;</td><td>Collation enum for CHAR/VARCHAR types, not needed for other types. Note that only one type of collation is currently supported. </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/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ae610f032b3f1db4a97562b609a9119d8"></a><!-- doxytag: member="tmudr::TypeInfo::getByteLength" ref="ae610f032b3f1db4a97562b609a9119d8" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TypeInfo::getByteLength </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the length of a value of the type.</p>
+<p>Getting the length is useful for CHAR/VARCHAR data types but probably not as useful for other types that may have an internal representation unknown to a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer. This returns the length in bytes, not in characters.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>getCharLength()</dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Length in bytes. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae14b0a07899ffb784c74eebf601eb0af"></a><!-- doxytag: member="tmudr::TypeInfo::getCharset" ref="ae14b0a07899ffb784c74eebf601eb0af" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619d">TypeInfo::SQLCharsetCode</a> TypeInfo::getCharset </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the character set of the data type.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Character set enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a07a9a08aced1ba15872605bc9774eb61"></a><!-- doxytag: member="tmudr::TypeInfo::getCollation" ref="a07a9a08aced1ba15872605bc9774eb61" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#ab0390570f1a369a2ad216999bf033568">TypeInfo::SQLCollationCode</a> TypeInfo::getCollation </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the collation for char/varchar data types.</p>
+<p>Note that, currently, only one collation is supported. This default collation is a binary collation, except that trailing blanks are ignored.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Collation enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5c1892b468507c422ceda6b60bdb0766"></a><!-- doxytag: member="tmudr::TypeInfo::getIntervalCode" ref="a5c1892b468507c422ceda6b60bdb0766" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#a7abbf6085f46df317c9af55c360d5693">TypeInfo::SQLIntervalCode</a> TypeInfo::getIntervalCode </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the interval code for start/end fields.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Interval code enum, indicating start and end fields of an interval type. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adb5577ca283d68a58de55ade4eee2af9"></a><!-- doxytag: member="tmudr::TypeInfo::getIsNullable" ref="adb5577ca283d68a58de55ade4eee2af9" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool TypeInfo::getIsNullable </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get whether the type is nullable.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>True for nullable types, false for non-nullable types. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4b52f733a78e59a2ea37b6e306b6fc56"></a><!-- doxytag: member="tmudr::TypeInfo::getMaxCharLength" ref="a4b52f733a78e59a2ea37b6e306b6fc56" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TypeInfo::getMaxCharLength </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the maximum number of characters that can be stored in this type.</p>
+<p>This method should be used only for character types that have a fixed-width encoding. For variable-length encoding, like UTF-8, the method returns the highest possible number of characters (assuming single byte characters in the case of UTF-8). Right now, UTF-8 data types all have byte semantics, meaning there is no limit for the number of characters stored in a type, it is only limited by the number of bytes. The method returns 0 for numeric types. It returns the length of the string [...]
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1TypeInfo.html#ae610f032b3f1db4a97562b609a9119d8">getByteLength()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Length in bytes. </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="a65b9039901423957438d611fec875ecb"></a><!-- doxytag: member="tmudr::TypeInfo::getPrecision" ref="a65b9039901423957438d611fec875ecb" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TypeInfo::getPrecision </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the precision (max. number of significant digits).</p>
+<p>The precision is the maximum number of digits before the decimal point a value can have. For interval types, this is the "leading
+  precision". For example, an INTEGER value can range from -2,147,483,648 to 2,147,483,647. It's precision is 10, since the longest number has 10 digits. Note that not all 10 digit numbers can be represented in an integer. This is called binary precision. NUMERIC and DECIMAL types have decimal precision, meaning that a NUMERIC(10,0) type can represent values from -9,999,999,999 to +9,999,999,999.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Precision of numeric types or interval types. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abc3cf966f53a123d28cb7592da8ea1c4"></a><!-- doxytag: member="tmudr::TypeInfo::getScale" ref="abc3cf966f53a123d28cb7592da8ea1c4" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int TypeInfo::getScale </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the scale of the data type.</p>
+<p>For integer, largeint, etc. types the scale is 0, since these are integer data types. For NUMERIC and DECIMAL types, a scale can be specified. Timestamp and some interval data types have a "fraction precision" value, which is the number of digits allowed after the decimal point for seconds. This fraction precision is returned as the scale, since can be considered the scale of the seconds part. For other data types like CHAR, the scale value is meaningless. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Scale (digits after the decimal point) for numeric types, fraction precision (digits of fractional seconds) for intervals. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a15f362c0467ea724f5a131abf616b4e3"></a><!-- doxytag: member="tmudr::TypeInfo::getSQLType" ref="a15f362c0467ea724f5a131abf616b4e3" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266">TypeInfo::SQLTypeCode</a> TypeInfo::getSQLType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the SQL type.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>SQL type enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abbeae3703448b022500bc51d03464ee8"></a><!-- doxytag: member="tmudr::TypeInfo::getSQLTypeClass" ref="abbeae3703448b022500bc51d03464ee8" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6">TypeInfo::SQLTypeClassCode</a> TypeInfo::getSQLTypeClass </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the SQL type class.</p>
+<p>Determine whether this is a numeric character, datetime or interval type. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>SQL type class enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2d4c5cb598281937eab0e29d86f63a4f"></a><!-- doxytag: member="tmudr::TypeInfo::getSQLTypeSubClass" ref="a2d4c5cb598281937eab0e29d86f63a4f" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312">TypeInfo::SQLTypeSubClassCode</a> TypeInfo::getSQLTypeSubClass </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the SQL type subclass.</p>
+<p>This goes to one more level of detail beyond the type class, like exact/approximate numeric, char/varchar, etc. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>SQL type subclass enum. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab370d3a8e693a893080c105a11d0a500"></a><!-- doxytag: member="tmudr::TypeInfo::setNullable" ref="ab370d3a8e693a893080c105a11d0a500" args="(bool nullable)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TypeInfo::setNullable </td>
+          <td>(</td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>nullable</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the nullable attribute of a type</p>
+<p>Use this method to set types created locally in the UDF to be nullable or not nullable.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>nullable</em>&nbsp;</td><td>true to set the type to nullable, false to give the type the NOT NULL attibute. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDR.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDR.html
new file mode 100644
index 0000000..da6752a
--- /dev/null
+++ b/apidocs/2.4.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+inter [...]
+<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 class [...]
+<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_1UDR [...]
+</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 [...]
+<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 se [...]
+<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="class [...]
+<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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRException.html
new file mode 100644
index 0000000..a9f2e18
--- /dev/null
+++ b/apidocs/2.4.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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRInvocationInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRInvocationInfo.html
new file mode 100644
index 0000000..d30a071
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRInvocationInfo.html
@@ -0,0 +1,1366 @@
+<!-- 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::UDRInvocationInfo 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_1UDRInvocationInfo.html">UDRInvocationInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UDRInvocationInfo Class Reference</h1><!-- doxytag: class="tmudr::UDRInvocationInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>Describes an invocation of 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>
+
+<p>Inherits tmudr::TMUDRSerializableObject.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">FuncType</a> { <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a8dcb9100d5fc6499d3f46fdbabd30d71">GENERIC</a>, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26">MAPPER</a>, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408">REDUCER</a>, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234a007c75e34f5e8f1922436f6a1b8e4ec2">REDUCER_NC</a>
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Type of a TMUDF: Generic, mapper or reducer. </p>
+ <a href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a5742766a2b3800bd06bbe486cafa0e0b">SQLAccessType</a> </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0dd8a181e55e743bb9ec39b747491e1e">SQLTransactionType</a> </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7c38879b0268e3b20bf2cced998d93f2">SQLRightsType</a> </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab8f0c182949b86f0eb01e7dd5533496d">IsolationType</a> </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">CallPhase</a> </td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>call phase for the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface </p>
+ <a href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361e">DebugFlags</a> { <br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361eaf44eafcbd8faccd8c85725874380eaf3">DEBUG_INITIAL_RUN_TIME_LOOP_ONE</a> =  0x00000001, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361eaffb9263b7a7c4d84b7e9af75f133b71a">DEBUG_INITIAL_RUN_TIME_LOOP_ALL</a> =  0x00000002, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea8e0cbb0080167b8735e1bc6ea6dd884f">DEBUG_INITIAL_COMPILE_TIME_LOOP</a> =  0x00000004, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea630511f4c789eb3f7ba27ee5a4e864df">DEBUG_LOAD_MSG_LOOP</a> =  0x00000008, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea5ee57a5f93619e910047e53cf5d1c9f0">TRACE_ROWS</a> =  0x00000010, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea208a06e955c534acf2f2a4ff987bbd3c">PRINT_INVOCATION_INFO_INITIAL</a> =  0x00000020, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361eaa3b4433164dcdb59c782867e25ec55cc">PRINT_INVOCATION_INFO_END_COMPILE</a> =  0x00000040, 
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549">PRINT_INVOCATION_INFO_AT_RUN_TIME</a> =  0x00000080, 
+<br/>
+&nbsp;&nbsp;<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361eaf15016f709fd2be11ebeae7a97ef3470">VALIDATE_WALLS</a> =  0x00000100
+<br/>
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>values used for the UDR_DEBUG_FLAGS CQD </p>
+ <a href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361e">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2>Public Member Functions</h2></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_1UDRInvocationInfo.html#a4fef718438b8d0f73c72960850e12f76">getUDRName</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a6c037fb917b24c9140966100583c4ddf">getNumTableInputs</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a8e8246083a145bfcf9771a915df70d2a">in</a> (int childNum=0) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#abccd0a12bb9f275f9b51d0b147bc238b">out</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">CallPhase</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a05e6cfdfe6353ff71bd9d788f2ad90a7">getCallPhase</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_1UDRInvocationInfo.html#a4260a3d72362f6ef3fa058b7f4fc733e">getCurrentUser</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_1UDRInvocationInfo.html#af6fe6a390c721a579d39f132b053e01e">getSessionUser</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_1UDRInvocationInfo.html#a526a57461a964c44fa08333cfbe3e403">getCurrentRole</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a44281bb80ce0ddfc220f830603184bb6">isCompileTime</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae6454d983c0e219533fbedce92fdbb7e">isRunTime</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#abc2ae451673901fadcc4d468903dcb90">getDebugFlags</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">FuncType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7ffc96813d89aaf680b69b17a9fd4efa">getFuncType</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ParameterListInfo.html">ParameterListInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a47c62b14380293ed12a99c23650938f8">getFormalParameters</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ParameterListInfo.html">ParameterListInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab311a6d5798704f36afc52a3603eeec9">par</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#abb1c5cae5193c0c736d534943ff6fd0a">getNumPredicates</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1PredicateInfo.html">PredicateInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a862b4fc9c3041408c18b72fa456bc37b">getPredicate</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af56ae6e3b533811727c01ac0dd373b2a">isAComparisonPredicate</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html">ComparisonPredicateInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac7b36f50b9bc332b532325ef6d74fef0">getComparisonPredicate</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0e46b3318bf4e8c5f5a0953e851fbae5">out</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae8ec687491875c1086660a237d936019">addFormalParameter</a> (const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;param)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">setFuncType</a> (<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">FuncType</a> type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">addPassThruColumns</a> (int inputTableNum=0, int startInputColNum=0, int endInputColNum=-1)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac2e13c982996e5e32f67cd157efce2fd">setChildPartitioning</a> (int inputTableNum, const <a class="el" href="classtmudr_1_1PartitionInfo.html">PartitionInfo</a> &amp;partInfo)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a9cf945532b68164df02ed59e56993dec">setChildOrdering</a> (int inputTableNum, const <a class="el" href="classtmudr_1_1OrderInfo.html">OrderInfo</a> &amp;orderInfo)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a165ce1b6a1e8430cc9ff8bc069c52403">setChildColumnUsage</a> (int inputTableNum, int inputColumnNum, <a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnInfo::ColumnUseCode</a> usage)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17aa99c78b92c21bb7f165d6a525ee45">setUnusedPassthruColumns</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a31ac324ce7cb12163be24b79eec1b416">setPredicateEvaluationCode</a> (int predicateNum, <a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">PredicateInfo::EvaluationCode</a> c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a08078fda7b63cea5e2f02546e04a9e1c">pushPredicatesOnPassthruColumns</a> (int startPredNum=0, int lastPredNum=-1)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac3c17d8d9c6efd94471179a052ca7ab7">propagateConstraintsFor1To1UDFs</a> (bool exactlyOneRowPerInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0f52f99de8bd5d268ad54b397037aaa4">getUDRWriterCompileTimeData</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a62d8e083376c816dc66d1d7447869bee">setUDRWriterCompileTimeData</a> (<a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *compileTimeData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7af8ac157fb75e4d426e6243bb8a4e1e">copyPassThruData</a> (int inputTableNum=0, int startInputColNum=0, int endInputColNum=-1)</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_1UDRInvocationInfo.html#ae743d98454eaf28158a14f7ff4e22908">getQueryId</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0fa7dbaa5449564569ac90579da6466f">getNumParallelInstances</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a8c4c9625a85c42534bb63324f78f1ba5">getMyInstanceNum</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a5f39c23ff94d54317d11cf87e4cc1102">print</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes an invocation 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 combines the description of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>, its names and properties with the parameters, input and output table layouts and other information. An object of this class is passed to most methods defined by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer. It can be used to get input and parameter data and [...]
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="a17775d1990732a2ac52bcc528c76e40b"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::CallPhase" ref="a17775d1990732a2ac52bcc528c76e40b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">tmudr::UDRInvocationInfo::CallPhase</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>call phase for the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> interface </p>
+<p>This is of limited interest for <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writers and mostly used internally to ensure method calls are not done at the wrong time. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab6b34603b9cad093f862ff650aeb361e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::DebugFlags" ref="ab6b34603b9cad093f862ff650aeb361e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361e">tmudr::UDRInvocationInfo::DebugFlags</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>values used for the UDR_DEBUG_FLAGS CQD </p>
+<p>use cqd UDR_DEBUG_FLAGS 'num' in SQL to set these, add up the flags (in decimal) that you want to set. 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>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361eaf44eafcbd8faccd8c85725874380eaf3"></a><!-- doxytag: member="DEBUG_INITIAL_RUN_TIME_LOOP_ONE" ref="ab6b34603b9cad093f862ff650aeb361eaf44eafcbd8faccd8c85725874380eaf3" args="" -->DEBUG_INITIAL_RUN_TIME_LOOP_ONE</em>&nbsp;</td><td>
+<p>1 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361eaffb9263b7a7c4d84b7e9af75f133b71a"></a><!-- doxytag: member="DEBUG_INITIAL_RUN_TIME_LOOP_ALL" ref="ab6b34603b9cad093f862ff650aeb361eaffb9263b7a7c4d84b7e9af75f133b71a" args="" -->DEBUG_INITIAL_RUN_TIME_LOOP_ALL</em>&nbsp;</td><td>
+<p>2 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361ea8e0cbb0080167b8735e1bc6ea6dd884f"></a><!-- doxytag: member="DEBUG_INITIAL_COMPILE_TIME_LOOP" ref="ab6b34603b9cad093f862ff650aeb361ea8e0cbb0080167b8735e1bc6ea6dd884f" args="" -->DEBUG_INITIAL_COMPILE_TIME_LOOP</em>&nbsp;</td><td>
+<p>4 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361ea630511f4c789eb3f7ba27ee5a4e864df"></a><!-- doxytag: member="DEBUG_LOAD_MSG_LOOP" ref="ab6b34603b9cad093f862ff650aeb361ea630511f4c789eb3f7ba27ee5a4e864df" args="" -->DEBUG_LOAD_MSG_LOOP</em>&nbsp;</td><td>
+<p>8 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361ea5ee57a5f93619e910047e53cf5d1c9f0"></a><!-- doxytag: member="TRACE_ROWS" ref="ab6b34603b9cad093f862ff650aeb361ea5ee57a5f93619e910047e53cf5d1c9f0" args="" -->TRACE_ROWS</em>&nbsp;</td><td>
+<p>16 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361ea208a06e955c534acf2f2a4ff987bbd3c"></a><!-- doxytag: member="PRINT_INVOCATION_INFO_INITIAL" ref="ab6b34603b9cad093f862ff650aeb361ea208a06e955c534acf2f2a4ff987bbd3c" args="" -->PRINT_INVOCATION_INFO_INITIAL</em>&nbsp;</td><td>
+<p>32 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361eaa3b4433164dcdb59c782867e25ec55cc"></a><!-- doxytag: member="PRINT_INVOCATION_INFO_END_COMPILE" ref="ab6b34603b9cad093f862ff650aeb361eaa3b4433164dcdb59c782867e25ec55cc" args="" -->PRINT_INVOCATION_INFO_END_COMPILE</em>&nbsp;</td><td>
+<p>64 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549"></a><!-- doxytag: member="PRINT_INVOCATION_INFO_AT_RUN_TIME" ref="ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" args="" -->PRINT_INVOCATION_INFO_AT_RUN_TIME</em>&nbsp;</td><td>
+<p>128 </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab6b34603b9cad093f862ff650aeb361eaf15016f709fd2be11ebeae7a97ef3470"></a><!-- doxytag: member="VALIDATE_WALLS" ref="ab6b34603b9cad093f862ff650aeb361eaf15016f709fd2be11ebeae7a97ef3470" args="" -->VALIDATE_WALLS</em>&nbsp;</td><td>
+<p>256 </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aa1a5e7aa734a95a5478db3d785508234"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::FuncType" ref="aa1a5e7aa734a95a5478db3d785508234" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">tmudr::UDRInvocationInfo::FuncType</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Type of a TMUDF: Generic, mapper or reducer. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="aa1a5e7aa734a95a5478db3d785508234a8dcb9100d5fc6499d3f46fdbabd30d71"></a><!-- doxytag: member="GENERIC" ref="aa1a5e7aa734a95a5478db3d785508234a8dcb9100d5fc6499d3f46fdbabd30d71" args="" -->GENERIC</em>&nbsp;</td><td>
+<p>The Trafodion compiler will make only the most conservative assumptions about this type of UDF. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26"></a><!-- doxytag: member="MAPPER" ref="aa1a5e7aa734a95a5478db3d785508234a280bc2ccb82ecc8f20e75f05f0ab8e26" args="" -->MAPPER</em>&nbsp;</td><td>
+<p>A UDF that behaves like a mapper. A mapper does not carry any state between rows it reads from its table-valued inputs. It produces zero or more output rows per input row. Because no state is kept between rows, the Trafodion compiler can automatically parallelize execution and push predicates down to the table-valued inputs. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408"></a><!-- doxytag: member="REDUCER" ref="aa1a5e7aa734a95a5478db3d785508234a94b5e63a173450993e7723c9609e0408" args="" -->REDUCER</em>&nbsp;</td><td>
+<p>A reducer requires the data to be partitioned on a set of columns. The UDF does not carry any state between groups of rows with the same partition column values, but it may carry state within such groups. This allows the compiler to parallelize execution and to push predicates on the partitioning column(s) down to table-valued inputs. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa1a5e7aa734a95a5478db3d785508234a007c75e34f5e8f1922436f6a1b8e4ec2"></a><!-- doxytag: member="REDUCER_NC" ref="aa1a5e7aa734a95a5478db3d785508234a007c75e34f5e8f1922436f6a1b8e4ec2" args="" -->REDUCER_NC</em>&nbsp;</td><td>
+<p>Same as REDUCER, except that in this case the UDF does not require the rows belonging to a key to be grouped together, they can be non-contiguous (NC). This can avoid a costly sort of the input table in cases where a highly reducing UDF can keep a table of all the keys in memory. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab8f0c182949b86f0eb01e7dd5533496d"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::IsolationType" ref="ab8f0c182949b86f0eb01e7dd5533496d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab8f0c182949b86f0eb01e7dd5533496d">tmudr::UDRInvocationInfo::IsolationType</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Indicates whether this <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> is trusted or not </p>
+
+</div>
+</div>
+<a class="anchor" id="a5742766a2b3800bd06bbe486cafa0e0b"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::SQLAccessType" ref="a5742766a2b3800bd06bbe486cafa0e0b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a5742766a2b3800bd06bbe486cafa0e0b">tmudr::UDRInvocationInfo::SQLAccessType</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Type of SQL access allowed in this routine </p>
+
+</div>
+</div>
+<a class="anchor" id="a7c38879b0268e3b20bf2cced998d93f2"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::SQLRightsType" ref="a7c38879b0268e3b20bf2cced998d93f2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7c38879b0268e3b20bf2cced998d93f2">tmudr::UDRInvocationInfo::SQLRightsType</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Effective user ids for determining privileges</p>
+<p>This is meaningful only for UDRs that perform SQL operations, using the default connection. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0dd8a181e55e743bb9ec39b747491e1e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::SQLTransactionType" ref="a0dd8a181e55e743bb9ec39b747491e1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0dd8a181e55e743bb9ec39b747491e1e">tmudr::UDRInvocationInfo::SQLTransactionType</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Type of transaction that is required, if any </p>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ae8ec687491875c1086660a237d936019"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::addFormalParameter" ref="ae8ec687491875c1086660a237d936019" args="(const ColumnInfo &amp;param)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::addFormalParameter </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1ColumnInfo.html">ColumnInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>param</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a formal parameter to match an actual parameter.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>describeParamsAndColumns()</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>param</em>&nbsp;</td><td>Info with name and type of the formal parameter.</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="ae7274d94c79a78a4cd0976cbe572ab26"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::addPassThruColumns" ref="ae7274d94c79a78a4cd0976cbe572ab26" args="(int inputTableNum=0, int startInputColNum=0, int endInputColNum=&#45;1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::addPassThruColumns </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>startInputColNum</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>endInputColNum</em> = <code>-1</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add columns of table-valued inputs as output columns.</p>
+<p>Many TMUDFs make the column values of their table-valued inputs available as output columns. Such columns are called "pass-thru" columns. This method is an easy interface to create such pass-thru columns. Note that if a column is marked as pass-thru column, the UDF must copy the input value to the output (e.g. with the <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a7af8ac157fb75e4d426e6243bb8a4e1e">copyPassThruData()</a> method). If it fails to do that, incorrect results ma [...]
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ProvenanceInfo.html" title="Describes where an output column is coming from.">ProvenanceInfo</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1ColumnInfo.html#abd56e48603e02a2b65f383921a2c44a1">ColumnInfo::getProvenance()</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>inputTableNum</em>&nbsp;</td><td>Index of table-valued input to add. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>startInputColNum</em>&nbsp;</td><td>First column of the table-valued input to add as an output column. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>endInputColNum</em>&nbsp;</td><td>Last column of the table-valued input to add as an output column (note this is inclusive) or -1 to add all remaining column. </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="a7af8ac157fb75e4d426e6243bb8a4e1e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::copyPassThruData" ref="a7af8ac157fb75e4d426e6243bb8a4e1e" args="(int inputTableNum=0, int startInputColNum=0, int endInputColNum=&#45;1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::copyPassThruData </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>startInputColNum</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>endInputColNum</em> = <code>-1</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Copy values of pass-thru columns from the input to the output table.</p>
+<p>This method is an easy way to set the values of the table-valued result row from their corresponding values in the table-valued inputs. Note that the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> must set all the values of the pass-thru columns to the corresponsing values of the input tables. If it fails to do that, some optimizations done by Trafodion could lead to wrong results (e.g. some predicates could be applied [...]
+<p>This method can only be called from within <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">UDR::processData()</a>.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">addPassThruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">UDR::processData()</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>inputTableNum</em>&nbsp;</td><td>Number of table-valued input to copy from. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>startInputColNum</em>&nbsp;</td><td>First column number in the input table to copy </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>endInputColNum</em>&nbsp;</td><td>Last column number in the input table to copy (inclusive) or -1 to copy all remaining columns </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="a05e6cfdfe6353ff71bd9d788f2ad90a7"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getCallPhase" ref="a05e6cfdfe6353ff71bd9d788f2ad90a7" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">UDRInvocationInfo::CallPhase</a> UDRInvocationInfo::getCallPhase </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get call phase.</p>
+<p>This call is not normally needed, since we know which method of <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> we are in. However, in some cases where the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer wants to use code in multiple call phases this might be useful.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Enum for the call phase we are in. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac7b36f50b9bc332b532325ef6d74fef0"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getComparisonPredicate" ref="ac7b36f50b9bc332b532325ef6d74fef0" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ComparisonPredicateInfo.html">ComparisonPredicateInfo</a> &amp; UDRInvocationInfo::getComparisonPredicate </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a comparison predicate</p>
+<p>Note: This will throw an exception if predicate i is not a comparison predicate. Use method <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af56ae6e3b533811727c01ac0dd373b2a">isAComparisonPredicate()</a> to make sure this is the case. Note also that the numbering scheme is the same as that for getPredicate, so if there is a mix of different predicate types, the numbers of comparison predicates are not contiguous.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a862b4fc9c3041408c18b72fa456bc37b">getPredicate()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af56ae6e3b533811727c01ac0dd373b2a">isAComparisonPredicate()</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>i</em>&nbsp;</td><td>Number/ordinal of the predicate to retrieve. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Comparison predicate. </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="a526a57461a964c44fa08333cfbe3e403"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getCurrentRole" ref="a526a57461a964c44fa08333cfbe3e403" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRInvocationInfo::getCurrentRole </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get current role.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Current role. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4260a3d72362f6ef3fa058b7f4fc733e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getCurrentUser" ref="a4260a3d72362f6ef3fa058b7f4fc733e" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRInvocationInfo::getCurrentUser </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get current user.</p>
+<p>Get the id of the current user, which is the effective user id at the time. This is usually the same as the session user, except when a view or <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> uses "definer
+  privileges", substituting the current user with the definer of the view or <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. In SQL, this value is called CURRENT_USER.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af6fe6a390c721a579d39f132b053e01e">getSessionUser()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Current user. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abc2ae451673901fadcc4d468903dcb90"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getDebugFlags" ref="abc2ae451673901fadcc4d468903dcb90" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRInvocationInfo::getDebugFlags </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get debugging flags, set via CONTROL QUERY DEFAULT.</p>
+<p>Debug flags are set via the UDR_DEBUG_FLAGS CONTROL QUERY DEFAULT at compile time. This returns the value of this CQD. Usually not needed.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Value the UDR_DEBUG_FLAGS CQD has or had at compile time. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a47c62b14380293ed12a99c23650938f8"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getFormalParameters" ref="a47c62b14380293ed12a99c23650938f8" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ParameterListInfo.html">ParameterListInfo</a> &amp; UDRInvocationInfo::getFormalParameters </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the formal parameters of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<p>Formal parameters are available only at compile time. They are either defined in the CREATE FUNCTION DDL or through the compile time interface. Note that number and types of formal and actual parameters must match, once we return from the describeParamsAndColumns() call, otherwise an error will be generated.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Formal parameter description. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7ffc96813d89aaf680b69b17a9fd4efa"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getFuncType" ref="a7ffc96813d89aaf680b69b17a9fd4efa" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">UDRInvocationInfo::FuncType</a> UDRInvocationInfo::getFuncType </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the function type of this <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<p>Returns the function type that can be set by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer with the <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">setFuncType()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#af9fad0a00cccb776398083cf35aec4f9">setFuncType()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Enum of the function type. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8c4c9625a85c42534bb63324f78f1ba5"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getMyInstanceNum" ref="a8c4c9625a85c42534bb63324f78f1ba5" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRInvocationInfo::getMyInstanceNum </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the instance number of this runtime process.</p>
+<p>Use this method to find out which of the parallel instances executing a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> this process is.</p>
+<p>This method can only be called from within <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">UDR::processData()</a>.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0fa7dbaa5449564569ac90579da6466f">getNumParallelInstances()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>A number between 0 and <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0fa7dbaa5449564569ac90579da6466f">getNumParallelInstances()</a> - 1. </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="a0fa7dbaa5449564569ac90579da6466f"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getNumParallelInstances" ref="a0fa7dbaa5449564569ac90579da6466f" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRInvocationInfo::getNumParallelInstances </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of parallel instances working on this <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<p>Use this method to find out how many parallel instances are executing this <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 only be called from within <a class="el" href="classtmudr_1_1UDR.html#aac3ba2f5c48f11b7913d460cb22e3dc1">UDR::processData()</a>.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a8c4c9625a85c42534bb63324f78f1ba5">getMyInstanceNum()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of parallel instances for this <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </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="abb1c5cae5193c0c736d534943ff6fd0a"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getNumPredicates" ref="abb1c5cae5193c0c736d534943ff6fd0a" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRInvocationInfo::getNumPredicates </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return number of predicates to be applied in the context of this UDF.</p>
+<p>Don't use this method from within <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a>, since the predicates are not yet set up in that phase.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of predicates. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6c037fb917b24c9140966100583c4ddf"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getNumTableInputs" ref="a6c037fb917b24c9140966100583c4ddf" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRInvocationInfo::getNumTableInputs </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get number of table-valued inputs provided.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of table-valued inputs provided. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a862b4fc9c3041408c18b72fa456bc37b"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getPredicate" ref="a862b4fc9c3041408c18b72fa456bc37b" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1PredicateInfo.html">PredicateInfo</a> &amp; UDRInvocationInfo::getPredicate </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the description of a predicate to be applied.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Description of the predicate.</dd></dl>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a31ac324ce7cb12163be24b79eec1b416">setPredicateEvaluationCode()</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>
+<a class="anchor" id="ae743d98454eaf28158a14f7ff4e22908"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getQueryId" ref="ae743d98454eaf28158a14f7ff4e22908" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRInvocationInfo::getQueryId </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get query id.</p>
+<p>The query id is only available at runtime. It is an empty string at compile time.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Query id. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af6fe6a390c721a579d39f132b053e01e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getSessionUser" ref="af6fe6a390c721a579d39f132b053e01e" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRInvocationInfo::getSessionUser </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get session user.</p>
+<p>Get the id of the session user, which is the user who connected to the database. This is usually the same as the current user, except when a view or <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> uses "definer
+  privileges", substituting the current user with the definer of the view or <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. In SQL, this value is called SESSION_USER.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a4260a3d72362f6ef3fa058b7f4fc733e">getCurrentUser()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Session user. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4fef718438b8d0f73c72960850e12f76"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getUDRName" ref="a4fef718438b8d0f73c72960850e12f76" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::string &amp; UDRInvocationInfo::getUDRName </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> name.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Fully qualified name (catalog.schema.name) of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0f52f99de8bd5d268ad54b397037aaa4"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::getUDRWriterCompileTimeData" ref="a0f52f99de8bd5d268ad54b397037aaa4" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> * UDRInvocationInfo::getUDRWriterCompileTimeData </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get data to persist between calls of the compile-time interface</p>
+<p>The <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer must use a static or dynamic cast to get a pointer to the derived class.</p>
+<p>Only use this method at compile time.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a62d8e083376c816dc66d1d7447869bee">setUDRWriterCompileTimeData()</a></dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer-specific data that was previously attached or NULL. </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="a8e8246083a145bfcf9771a915df70d2a"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::in" ref="a8e8246083a145bfcf9771a915df70d2a" args="(int childNum=0) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp; UDRInvocationInfo::in </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>childNum</em> = <code>0</code></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get description of a table-valued input.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classtmudr_1_1TableInfo.html" title="Describes a table-valued input or a table-valued output.">TableInfo</a> reference for the table-valued input. </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="af56ae6e3b533811727c01ac0dd373b2a"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::isAComparisonPredicate" ref="af56ae6e3b533811727c01ac0dd373b2a" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool UDRInvocationInfo::isAComparisonPredicate </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether a given predicate is a comparison predicate.</p>
+<p>This returns whether it is safe to use method <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac7b36f50b9bc332b532325ef6d74fef0">getComparisonPredicate()</a>.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ac7b36f50b9bc332b532325ef6d74fef0">getComparisonPredicate()</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>i</em>&nbsp;</td><td>Number/ordinal index of the predicate. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true if predcate i is a comparison predicate, false otherwise. </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="a44281bb80ce0ddfc220f830603184bb6"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::isCompileTime" ref="a44281bb80ce0ddfc220f830603184bb6" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool UDRInvocationInfo::isCompileTime </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether we are in the compile time interface.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>true at compile time, false at run-time. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae6454d983c0e219533fbedce92fdbb7e"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::isRunTime" ref="ae6454d983c0e219533fbedce92fdbb7e" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool UDRInvocationInfo::isRunTime </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Check whether we are in the run-time interface.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>false at compile time, true at run-time. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0e46b3318bf4e8c5f5a0953e851fbae5"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::out" ref="a0e46b3318bf4e8c5f5a0953e851fbae5" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp; UDRInvocationInfo::out </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Non-const method to get description of the table-valued result.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Non-const <a class="el" href="classtmudr_1_1TableInfo.html" title="Describes a table-valued input or a table-valued output.">TableInfo</a> reference for the table-valued output. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abccd0a12bb9f275f9b51d0b147bc238b"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::out" ref="abccd0a12bb9f275f9b51d0b147bc238b" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1TableInfo.html">TableInfo</a> &amp; UDRInvocationInfo::out </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get description of the table-valued result.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classtmudr_1_1TableInfo.html" title="Describes a table-valued input or a table-valued output.">TableInfo</a> reference for the table-valued output. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab311a6d5798704f36afc52a3603eeec9"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::par" ref="ab311a6d5798704f36afc52a3603eeec9" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="classtmudr_1_1ParameterListInfo.html">ParameterListInfo</a> &amp; UDRInvocationInfo::par </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get parameters of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<p>These are the actual parameters. At compile time, if a constant has been used, the value of this constant is available, using getString(), getInt() etc. methods. The isAvailable() method indicates whether the parameter is indeed available at compile time. Parameters are always available at run-time.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Parameter description. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5f39c23ff94d54317d11cf87e4cc1102"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::print" ref="a5f39c23ff94d54317d11cf87e4cc1102" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::print </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Print the object, for use in debugging.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#a9a0d3501ad5d27d90ca85a8791c87409">UDR::debugLoop()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" title="128">UDRInvocationInfo::PRINT_INVOCATION_INFO_AT_RUN_TIME</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac3c17d8d9c6efd94471179a052ca7ab7"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::propagateConstraintsFor1To1UDFs" ref="ac3c17d8d9c6efd94471179a052ca7ab7" args="(bool exactlyOneRowPerInput)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::propagateConstraintsFor1To1UDFs </td>
+          <td>(</td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>exactlyOneRowPerInput</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Propagate constraints for UDFs that return one result row for every input row.</p>
+<p>Use this method only if the UDF returns no more than one result row for every input row it reads from its single table-valued input. Note that it is ok for the UDF to return no result rows for some input rows. Wrong results may be returned by SQL statements involving this UDF if the UDF does at runtime not conform to the 1x1 relationship of rows.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a83262ec6806c3811bf55b1704fea599d">UDR::describeConstraints()</a> method.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>exactlyOneRowPerInput</em>&nbsp;</td><td>Indicates whether the UDF returns exactly one output row (true) or at most one output row (false) for every input row. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a08078fda7b63cea5e2f02546e04a9e1c"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::pushPredicatesOnPassthruColumns" ref="a08078fda7b63cea5e2f02546e04a9e1c" args="(int startPredNum=0, int lastPredNum=&#45;1)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::pushPredicatesOnPassthruColumns </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>startPredNum</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>lastPredNum</em> = <code>-1</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Push predicates on pass-thru columns to the table-valued input.</p>
+<p>Push one or more predicates to their corresponding table-valued input, if they reference only columns from that input, otherwise leave the predicate(s) unchanged.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>PredicateInfo::setEvaluationCode() </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</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>startPredNum</em>&nbsp;</td><td>Number/index of first predicate to be pushed. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>lastPredNum</em>&nbsp;</td><td>Number/index of last predicate to be pushed (inclusive) or -1 to push all remaining predicates. </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="a165ce1b6a1e8430cc9ff8bc069c52403"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setChildColumnUsage" ref="a165ce1b6a1e8430cc9ff8bc069c52403" args="(int inputTableNum, int inputColumnNum, ColumnInfo::ColumnUseCode usage)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setChildColumnUsage </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputColumnNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1ColumnInfo.html#acd91858abc45772d55f3310d789271b4">ColumnInfo::ColumnUseCode</a>&nbsp;</td>
+          <td class="paramname"> <em>usage</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the usage information for a column of a table-valued input</p>
+<p>This method allows the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer to specify whether a given child column is needed or not.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17aa99c78b92c21bb7f165d6a525ee45">setUnusedPassthruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</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>inputTableNum</em>&nbsp;</td><td>Number of table-valued input to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>inputColumnNum</em>&nbsp;</td><td>Column number for the column to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>usage</em>&nbsp;</td><td>New usage for this column. </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="a9cf945532b68164df02ed59e56993dec"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setChildOrdering" ref="a9cf945532b68164df02ed59e56993dec" args="(int inputTableNum, const OrderInfo &amp;orderInfo)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setChildOrdering </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1OrderInfo.html">OrderInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>orderInfo</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the ORDER BY info for a table-valued input.</p>
+<p>This method allows the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer to override the ORDER BY syntax specified for a table-valued input in the query. Use it to change the required order.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>getChildOrdering() </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</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>inputTableNum</em>&nbsp;</td><td>Number of table-valued input to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>orderInfo</em>&nbsp;</td><td>New information on required order for this input table. </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="ac2e13c982996e5e32f67cd157efce2fd"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setChildPartitioning" ref="ac2e13c982996e5e32f67cd157efce2fd" args="(int inputTableNum, const PartitionInfo &amp;partInfo)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setChildPartitioning </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>inputTableNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classtmudr_1_1PartitionInfo.html">PartitionInfo</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>partInfo</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the PARTITION BY info for a table-valued input.</p>
+<p>This method allows the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer to override the PARTITION BY syntax specified for a table-valued input in the query. Use it to change the required partitioning.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>getChildPartitioning() </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</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>inputTableNum</em>&nbsp;</td><td>Number of table-valued input to set. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>partInfo</em>&nbsp;</td><td>New information on required partitioning for this input table. </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="af9fad0a00cccb776398083cf35aec4f9"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setFuncType" ref="af9fad0a00cccb776398083cf35aec4f9" args="(FuncType type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setFuncType </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#aa1a5e7aa734a95a5478db3d785508234">FuncType</a>&nbsp;</td>
+          <td class="paramname"> <em>type</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the function type of this <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<p>Use this simple method with some caution, since it has an effect on how predicates are pushed down through TMUDFs with table-valued inputs. See describeDataflowAndPredicates() for details. The function type also influences the default degree of parallelism for a TMUDF.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#a795387c54b27b667ae73b668f606595c">UDR::describeParamsAndColumns()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>getFunctType() </dd>
+<dd>
+describeParamsAndColumns() </dd>
+<dd>
+describeDataflowAndPredicates() </dd>
+<dd>
+setDesiredDegreeOfParallelism()</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>type</em>&nbsp;</td><td>Function type of this <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="a31ac324ce7cb12163be24b79eec1b416"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setPredicateEvaluationCode" ref="a31ac324ce7cb12163be24b79eec1b416" args="(int predicateNum, PredicateInfo::EvaluationCode c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setPredicateEvaluationCode </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>predicateNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1PredicateInfo.html#aa2a53f51db2e8e56cf79fe8c28e54232">PredicateInfo::EvaluationCode</a>&nbsp;</td>
+          <td class="paramname"> <em>c</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Decide where to evaluate a predicate.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a862b4fc9c3041408c18b72fa456bc37b">getPredicate()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</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>predicateNum</em>&nbsp;</td><td>Number/index of predicate returned by <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a862b4fc9c3041408c18b72fa456bc37b">getPredicate()</a> method. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>Evaluation code for this predicate. </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="a62d8e083376c816dc66d1d7447869bee"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setUDRWriterCompileTimeData" ref="a62d8e083376c816dc66d1d7447869bee" args="(UDRWriterCompileTimeData *compileTimeData)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setUDRWriterCompileTimeData </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *&nbsp;</td>
+          <td class="paramname"> <em>compileTimeData</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set data to persist between calls of the compile-time interface</p>
+<p>This call can be used to attach an object derived from class <a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html" title="Compile time data owned by the UDR writer.">UDRWriterCompileTimeData</a> to the <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> object. Once attached, the data will be carried between the stages of the compiler interface and can be used to keep state. Note that this data will be de [...]
+<p>Only use this method at compile time.</p>
+<p>To keep state for specific plan alternatives, use the <a class="el" href="classtmudr_1_1UDRPlanInfo.html#a9699b7abd3e69cb9ea15bc999f424cc0">UDRPlanInfo::setUDRWriterCompileTimeData()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0f52f99de8bd5d268ad54b397037aaa4">UDRInvocationInfo::getUDRWriterCompileTimeData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#a9699b7abd3e69cb9ea15bc999f424cc0">UDRPlanInfo::setUDRWriterCompileTimeData()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a0f52f99de8bd5d268ad54b397037aaa4">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>compileTimeData</em>&nbsp;</td><td><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer-defined compile-time data to attach. </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="a17aa99c78b92c21bb7f165d6a525ee45"></a><!-- doxytag: member="tmudr::UDRInvocationInfo::setUnusedPassthruColumns" ref="a17aa99c78b92c21bb7f165d6a525ee45" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRInvocationInfo::setUnusedPassthruColumns </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Mark any passthru columns that are not needed as unused.</p>
+<p>For any passthru columns that are marked as NOT_USED or NOT_PRODUCED in the table-valued result, set the corresponding input columns to NOT_USED as well. Note that this assumes that the UDF does not need these columns, either! The usage for the passthru column itself is also set to NOT_PRODUCED, since the UDF could not produce the column without having access to the corresponding input column.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">addPassThruColumns()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a165ce1b6a1e8430cc9ff8bc069c52403">setChildColumnUsage()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDR.html#abbfc60e9c860f3c02dc4262ffc1c9939">UDR::describeDataflowAndPredicates()</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/>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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRPlanInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRPlanInfo.html
new file mode 100644
index 0000000..5c8f094
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRPlanInfo.html
@@ -0,0 +1,431 @@
+<!-- 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::UDRPlanInfo 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_1UDRPlanInfo.html">UDRPlanInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UDRPlanInfo Class Reference</h1><!-- doxytag: class="tmudr::UDRPlanInfo" --><!-- doxytag: inherits="tmudr::TMUDRSerializableObject" -->
+<p>Describes the query plan used for a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+
+<p>Inherits tmudr::TMUDRSerializableObject.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td colspan="2"><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19">SpecialDegreeOfParallelism</a> { <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19ad2a2dc16a27a8570ae00f68ea6126f42">ANY_DEGREE_OF_PARALLELISM</a> =  0, 
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19a1e33ba932a38eb933afc90e4963ec9b5">DEFAULT_DEGREE_OF_PARALLELISM</a> =  -1, 
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19a521c09523839fae6c72ccc9519ca971a">MAX_DEGREE_OF_PARALLELISM</a> =  -2, 
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19afb640839034de9ed8b6fffe6c172f06d">ONE_INSTANCE_PER_NODE</a> =  -3
+ }</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Special degrees of parallelism. </p>
+ <a href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac8f8d0cba4c48f24f787f036019dc120">getPlanNum</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a6617be36d31c31dd96685b8fe07f0efa">getCostPerRow</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac856607de40f3bd6813adbd6a0da7ee4">getDesiredDegreeOfParallelism</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2432b7bbc63ed88aaffc3f4d3a5c4a30">setCostPerRow</a> (long nanoseconds)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2c04c1d3f7f28bd58b163d85deb02d3d">setDesiredDegreeOfParallelism</a> (int dop)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a73487ea5456ec8a53d52a66813589976">getUDRWriterCompileTimeData</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a9699b7abd3e69cb9ea15bc999f424cc0">setUDRWriterCompileTimeData</a> (<a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *compileTimeData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac95f99f26ba311d31875a87c1bc75672">addPlanData</a> (const char *planData, int planDataLength)</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_1UDRPlanInfo.html#a57aadeeb3f77fd63b7b9059b84043a2c">getPlanData</a> (int &amp;planDataLength)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UDRPlanInfo.html#af33a0f91b8d1c791f72515cb246af21d">print</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Describes the query plan used for a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation. </p>
+<p>Objects of this type are used together with <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> objects and they contain additional info on plan-related such as the chosen partitioning and ordering. </p>
+<hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="ac65dd2b236e8f48c00c9b69efed78d19"></a><!-- doxytag: member="tmudr::UDRPlanInfo::SpecialDegreeOfParallelism" ref="ac65dd2b236e8f48c00c9b69efed78d19" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19">tmudr::UDRPlanInfo::SpecialDegreeOfParallelism</a></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Special degrees of parallelism. </p>
+<p>Values that can be used in the <a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2c04c1d3f7f28bd58b163d85deb02d3d">setDesiredDegreeOfParallelism()</a> method, in addition to positive numbers for the degree of parallelism (DoP). </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ac65dd2b236e8f48c00c9b69efed78d19ad2a2dc16a27a8570ae00f68ea6126f42"></a><!-- doxytag: member="ANY_DEGREE_OF_PARALLELISM" ref="ac65dd2b236e8f48c00c9b69efed78d19ad2a2dc16a27a8570ae00f68ea6126f42" args="" -->ANY_DEGREE_OF_PARALLELISM</em>&nbsp;</td><td>
+<p>Optimizer decides DoP. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ac65dd2b236e8f48c00c9b69efed78d19a1e33ba932a38eb933afc90e4963ec9b5"></a><!-- doxytag: member="DEFAULT_DEGREE_OF_PARALLELISM" ref="ac65dd2b236e8f48c00c9b69efed78d19a1e33ba932a38eb933afc90e4963ec9b5" args="" -->DEFAULT_DEGREE_OF_PARALLELISM</em>&nbsp;</td><td>
+<p>Optimizer decides DoP based on dataflow heuristics. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ac65dd2b236e8f48c00c9b69efed78d19a521c09523839fae6c72ccc9519ca971a"></a><!-- doxytag: member="MAX_DEGREE_OF_PARALLELISM" ref="ac65dd2b236e8f48c00c9b69efed78d19a521c09523839fae6c72ccc9519ca971a" args="" -->MAX_DEGREE_OF_PARALLELISM</em>&nbsp;</td><td>
+<p>Execute the UDF with the largest degree of parallelism allowed. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ac65dd2b236e8f48c00c9b69efed78d19afb640839034de9ed8b6fffe6c172f06d"></a><!-- doxytag: member="ONE_INSTANCE_PER_NODE" ref="ac65dd2b236e8f48c00c9b69efed78d19afb640839034de9ed8b6fffe6c172f06d" args="" -->ONE_INSTANCE_PER_NODE</em>&nbsp;</td><td>
+<p>Execute one instance of the on every Trafodion node. Used internally for maintenance UDFs. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ac95f99f26ba311d31875a87c1bc75672"></a><!-- doxytag: member="tmudr::UDRPlanInfo::addPlanData" ref="ac95f99f26ba311d31875a87c1bc75672" args="(const char *planData, int planDataLength)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRPlanInfo::addPlanData </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>planData</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>planDataLength</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Attach a byte array to the plan to be sent to the runtime instances.</p>
+<p>Compile time and runtime interfaces of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> can be called from different processes, since UDRs can be executed in parallel and on different nodes. If the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer would like to carry state from the compiler interface calls to runtime calls, the best way to achieve [...]
+<p>The best place to use this method is from within <a class="el" href="classtmudr_1_1UDR.html#a36eaba4ea82ca80b2f3c25c7bdee871f">UDR::completeDescription()</a> method, since this method is called on the optimal plan that will be used at runtime. It can also be called from other methods, and the plan data will be discarded if the plan is not chosen.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a57aadeeb3f77fd63b7b9059b84043a2c">getPlanData()</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>planData</em>&nbsp;</td><td>A byte array, content defined by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer, to be sent to all runtime instances executing the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a>. The buffer can and should be deleted by the caller after calling this method. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>planDataLength</em>&nbsp;</td><td>Length, in bytes, of the planData. </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="a6617be36d31c31dd96685b8fe07f0efa"></a><!-- doxytag: member="tmudr::UDRPlanInfo::getCostPerRow" ref="a6617be36d31c31dd96685b8fe07f0efa" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">long UDRPlanInfo::getCostPerRow </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the cost of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> per row, approximately in nanoseconds.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2432b7bbc63ed88aaffc3f4d3a5c4a30">setCostPerRow()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Cost of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> per row, in nanoseconds, for optimization purposes. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac856607de40f3bd6813adbd6a0da7ee4"></a><!-- doxytag: member="tmudr::UDRPlanInfo::getDesiredDegreeOfParallelism" ref="ac856607de40f3bd6813adbd6a0da7ee4" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRPlanInfo::getDesiredDegreeOfParallelism </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Return the desired degree of parallelism for this plan.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a2c04c1d3f7f28bd58b163d85deb02d3d">setDesiredDegreeOfParallelism()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Degree of parallelism to be used for this plan alternative (positive) or one of the enum values in <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19" title="Special degrees of parallelism.">UDRPlanInfo::SpecialDegreeOfParallelism</a> (zero or negative). </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a57aadeeb3f77fd63b7b9059b84043a2c"></a><!-- doxytag: member="tmudr::UDRPlanInfo::getPlanData" ref="a57aadeeb3f77fd63b7b9059b84043a2c" args="(int &amp;planDataLength)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char * UDRPlanInfo::getPlanData </td>
+          <td>(</td>
+          <td class="paramtype">int &amp;&nbsp;</td>
+          <td class="paramname"> <em>planDataLength</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Retrieve plan data attached to the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation and plan.</p>
+<p>This method can be called at runtime to get state generated at compile time.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd>setPlanData()</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>planDataLength</em>&nbsp;</td><td>(out) Length of returned plan data. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a byte array with plan data generated by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer at compile time. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac8f8d0cba4c48f24f787f036019dc120"></a><!-- doxytag: member="tmudr::UDRPlanInfo::getPlanNum" ref="ac8f8d0cba4c48f24f787f036019dc120" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UDRPlanInfo::getPlanNum </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a unique id for a given plan within a <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> invocation.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Plan number for this object, relative to the invocation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a73487ea5456ec8a53d52a66813589976"></a><!-- doxytag: member="tmudr::UDRPlanInfo::getUDRWriterCompileTimeData" ref="a73487ea5456ec8a53d52a66813589976" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> * UDRPlanInfo::getUDRWriterCompileTimeData </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get data to persist between calls of the optimizer interface</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#a9699b7abd3e69cb9ea15bc999f424cc0">setUDRWriterCompileTimeData()</a> </dd></dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer-specific data that was previously attached or NULL. </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="af33a0f91b8d1c791f72515cb246af21d"></a><!-- doxytag: member="tmudr::UDRPlanInfo::print" ref="af33a0f91b8d1c791f72515cb246af21d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRPlanInfo::print </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Print the object, for use in debugging.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" title="128">UDRInvocationInfo::PRINT_INVOCATION_INFO_AT_RUN_TIME</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2432b7bbc63ed88aaffc3f4d3a5c4a30"></a><!-- doxytag: member="tmudr::UDRPlanInfo::setCostPerRow" ref="a2432b7bbc63ed88aaffc3f4d3a5c4a30" args="(long nanoseconds)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRPlanInfo::setCostPerRow </td>
+          <td>(</td>
+          <td class="paramtype">long&nbsp;</td>
+          <td class="paramname"> <em>nanoseconds</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the cost of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> per row, approximately in nanoseconds.</p>
+<p>Specifying a cost can help with query plan issues. Note that the operator cost ("EST_OPER_COST") in EXPLAIN is not directly related to the nanosecond value specified here: </p>
+<ul>
+<li>
+For parallel plans (those under an ESP_EXCHANGE), the cost is calculated for one parallel instance only. </li>
+<li>
+The cost in nanoseconds is converted to internal units (see CQD NCM_UDR_NANOSEC_FACTOR). </li>
+<li>
+The EXPLAIN cost contains additional factors, accounting for the cost to send input data to the process that executes the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> and for sending back the result. </li>
+</ul>
+<p>The default implementation estimates the cost to be approximately 100 * sqrt(out().getRecordLength()). Therefore, a value of 1000 might be a good starting point for a cost per row estimate, assuming an output row length of about 1 KB. Increase this for more complex UDFs or for wider result rows, decrease it for simpler UDFs or shorter result rows.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#ae7bc614d12d011fc5f6d799abcc91935">UDR::describeDesiredDegreeOfParallelism()</a> method.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#ae7bc614d12d011fc5f6d799abcc91935">UDR::describeDesiredDegreeOfParallelism()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRPlanInfo.html#a6617be36d31c31dd96685b8fe07f0efa">getCostPerRow()</a> </dd>
+<dd>
+UDR::TupleInfo::getRecordLength() </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>nanoseconds</em>&nbsp;</td><td>Cost of the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> per row, in nanoseconds, for optimization purposes. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2c04c1d3f7f28bd58b163d85deb02d3d"></a><!-- doxytag: member="tmudr::UDRPlanInfo::setDesiredDegreeOfParallelism" ref="a2c04c1d3f7f28bd58b163d85deb02d3d" args="(int dop)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRPlanInfo::setDesiredDegreeOfParallelism </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>dop</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set the desired degree of parallelism.</p>
+<p>Only use this method from within the <a class="el" href="classtmudr_1_1UDR.html#ae7bc614d12d011fc5f6d799abcc91935">UDR::describeDesiredDegreeOfParallelism()</a> method.</p>
+<p>Here are some special values that can be set, in addition to positive numbers. These are defined in class <a class="el" href="classtmudr_1_1UDRPlanInfo.html" title="Describes the query plan used for a UDR invocation.">UDRPlanInfo</a>.</p>
+<ul>
+<li><code>ANY_DEGREE_OF_PARALLELISM:</code> This will allow the optimizer to choose any degree of parallelism, including 1 (serial execution) </li>
+<li><code>DEFAULT_DEGREE_OF_PARALLELISM:</code> Currently the same as ANY_DEGREE_OF_PARALLELISM. The optimizer will use a heuristic based on the estimated cardinality (which you can set in the <a class="el" href="classtmudr_1_1UDR.html#a371a0c6d1dce6857f10b171099d67fdf">UDR::describeStatistics()</a> interface). </li>
+<li><code>MAX_DEGREE_OF_PARALLELISM:</code> Choose the highest possible degree of parallelism. </li>
+<li><code>ONE_INSTANCE_PER_NODE:</code> Start one parallel instance on every Trafodion node. This is mostly meant for internal TMUDFs, e.g. a TMUDF to read the log files on every node.</li>
+</ul>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac856607de40f3bd6813adbd6a0da7ee4">getDesiredDegreeOfParallelism()</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>dop</em>&nbsp;</td><td>desired degree of parallelism (a positive number or one of the enum values in <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19" title="Special degrees of parallelism.">UDRPlanInfo::SpecialDegreeOfParallelism</a>). </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="a9699b7abd3e69cb9ea15bc999f424cc0"></a><!-- doxytag: member="tmudr::UDRPlanInfo::setUDRWriterCompileTimeData" ref="a9699b7abd3e69cb9ea15bc999f424cc0" args="(UDRWriterCompileTimeData *compileTimeData)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRPlanInfo::setUDRWriterCompileTimeData </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a> *&nbsp;</td>
+          <td class="paramname"> <em>compileTimeData</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Set data to persist between calls of the optimizer interface</p>
+<p>This call can be used to attach an object derived from class <a class="el" href="classtmudr_1_1UDRWriterCompileTimeData.html" title="Compile time data owned by the UDR writer.">UDRWriterCompileTimeData</a> to the <a class="el" href="classtmudr_1_1UDRPlanInfo.html" title="Describes the query plan used for a UDR invocation.">UDRPlanInfo</a> object. Once attached, the data will be carried between the stages of the optimizer interface and can be used to keep state. Note that this data wil [...]
+<p>Use this method to keep data that is specific to a query plan alternative, represented by the <a class="el" href="classtmudr_1_1UDRPlanInfo.html" title="Describes the query plan used for a UDR invocation.">UDRPlanInfo</a> object. Use <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a62d8e083376c816dc66d1d7447869bee">UDRInvocationInfo::setUDRWriterCompileTimeData()</a> to keep data that is common for the entire <a class="el" href="classtmudr_1_1UDR.html" title="This class repre [...]
+<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#a73487ea5456ec8a53d52a66813589976">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>compileTimeData</em>&nbsp;</td><td><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer-defined compile-time data to attach. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRWriterCompileTimeData.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRWriterCompileTimeData.html
new file mode 100644
index 0000000..97913e1
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UDRWriterCompileTimeData.html
@@ -0,0 +1,148 @@
+<!-- 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::UDRWriterCompileTimeData 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_1UDRWriterCompileTimeData.html">UDRWriterCompileTimeData</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UDRWriterCompileTimeData Class Reference</h1><!-- doxytag: class="tmudr::UDRWriterCompileTimeData" -->
+<p>Compile time data owned by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer.  
+<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_1UDRWriterCompileTimeData.html#aa8baf9c39fb18c2ed91931df9e3e2511">UDRWriterCompileTimeData</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_1UDRWriterCompileTimeData.html#af458898871a2a4ed99c3a18d02bd365f">~UDRWriterCompileTimeData</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_1UDRWriterCompileTimeData.html#a4bc7a400170505033011c37773d87fd5">print</a> ()</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>Compile time data owned 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>When attached to a <a class="el" href="classtmudr_1_1UDRInvocationInfo.html" title="Describes an invocation of a UDR.">UDRInvocationInfo</a> object, keeps context between compiler interface calls for this object. This class can also be attached to a <a class="el" href="classtmudr_1_1UDRPlanInfo.html" title="Describes the query plan used for a UDR invocation.">UDRPlanInfo</a> object, to keep state between plan alternatives for a <a class="el" href="classtmudr_1_1UDR.html" title="This c [...]
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="aa8baf9c39fb18c2ed91931df9e3e2511"></a><!-- doxytag: member="tmudr::UDRWriterCompileTimeData::UDRWriterCompileTimeData" ref="aa8baf9c39fb18c2ed91931df9e3e2511" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDRWriterCompileTimeData::UDRWriterCompileTimeData </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor.</p>
+<p><a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writers can derive from this class to store state between the calls of the compiler interface. </p>
+
+</div>
+</div>
+<a class="anchor" id="af458898871a2a4ed99c3a18d02bd365f"></a><!-- doxytag: member="tmudr::UDRWriterCompileTimeData::~UDRWriterCompileTimeData" ref="af458898871a2a4ed99c3a18d02bd365f" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDRWriterCompileTimeData::~UDRWriterCompileTimeData </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 the virtual destructor in derived classes to clean up any resources owned by the <a class="el" href="classtmudr_1_1UDR.html" title="This class represents the code associated with a UDR.">UDR</a> writer once the compile phase of a query is completed. </p>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a4bc7a400170505033011c37773d87fd5"></a><!-- doxytag: member="tmudr::UDRWriterCompileTimeData::print" ref="a4bc7a400170505033011c37773d87fd5" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UDRWriterCompileTimeData::print </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Print the object, for use in debugging.</p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classtmudr_1_1UDR.html#a9a0d3501ad5d27d90ca85a8791c87409">UDR::debugLoop()</a> </dd>
+<dd>
+<a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ab6b34603b9cad093f862ff650aeb361ea6b367b009643535ace09423ae914e549" title="128">UDRInvocationInfo::PRINT_INVOCATION_INFO_AT_RUN_TIME</a> </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.gif b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.gif
new file mode 100644
index 0000000..05f8076
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.gif differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.html b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.html
new file mode 100644
index 0000000..1438de9
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/classtmudr_1_1UniqueConstraintInfo.html
@@ -0,0 +1,196 @@
+<!-- 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::UniqueConstraintInfo 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_1UniqueConstraintInfo.html">UniqueConstraintInfo</a>
+  </div>
+</div>
+<div class="contents">
+<h1>tmudr::UniqueConstraintInfo Class Reference</h1><!-- doxytag: class="tmudr::UniqueConstraintInfo" --><!-- doxytag: inherits="tmudr::ConstraintInfo" -->
+<p>A uniqueness constraint.  
+<a href="#_details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sqludr_8h_source.html">sqludr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for tmudr::UniqueConstraintInfo:</div>
+<div class="dynsection">
+ <div class="center">
+  <img src="classtmudr_1_1UniqueConstraintInfo.gif" usemap="#tmudr::UniqueConstraintInfo_map" alt=""/>
+  <map id="tmudr::UniqueConstraintInfo_map" name="tmudr::UniqueConstraintInfo_map">
+<area href="classtmudr_1_1ConstraintInfo.html" alt="tmudr::ConstraintInfo" shape="rect" coords="0,0,165,24"/>
+</map>
+ </div>
+</div>
+<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_1UniqueConstraintInfo.html#a369e24f52470dac46c051d072255590e">UniqueConstraintInfo</a> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#ad47e14ccc5fe2c1e1740fa7fc1ea0bf7">getNumUniqueColumns</a> () const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#ae781aff62acfd3745b91d08b2246a5b5">getUniqueColumn</a> (int i) const </td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#a20b7a861cebf2362c707a5da433e4a62">addColumn</a> (int c)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<p>A uniqueness constraint. </p>
+<p>A list of columns that, together, form a unique key </p>
+<hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a369e24f52470dac46c051d072255590e"></a><!-- doxytag: member="tmudr::UniqueConstraintInfo::UniqueConstraintInfo" ref="a369e24f52470dac46c051d072255590e" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UniqueConstraintInfo::UniqueConstraintInfo </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Default constructor for an empty uniqueness constraint.</p>
+<p>Use method <a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#a20b7a861cebf2362c707a5da433e4a62">addColumn()</a> to add columns. </p>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a20b7a861cebf2362c707a5da433e4a62"></a><!-- doxytag: member="tmudr::UniqueConstraintInfo::addColumn" ref="a20b7a861cebf2362c707a5da433e4a62" args="(int c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void UniqueConstraintInfo::addColumn </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>c</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Add a column to a uniqueness constraint.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>Column number/ordinal of one of the unique columns in the constraint. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad47e14ccc5fe2c1e1740fa7fc1ea0bf7"></a><!-- doxytag: member="tmudr::UniqueConstraintInfo::getNumUniqueColumns" ref="ad47e14ccc5fe2c1e1740fa7fc1ea0bf7" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UniqueConstraintInfo::getNumUniqueColumns </td>
+          <td>(</td>
+          <td class="paramname"></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get the number of columns that form the unique key.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Number of columns in the uniqueness constraint. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae781aff62acfd3745b91d08b2246a5b5"></a><!-- doxytag: member="tmudr::UniqueConstraintInfo::getUniqueColumn" ref="ae781aff62acfd3745b91d08b2246a5b5" args="(int i) const " -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UniqueConstraintInfo::getUniqueColumn </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>i</em></td>
+          <td>&nbsp;)&nbsp;</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Get a column of the uniqueness constraint by iterator.</p>
+<p>Like in other methods, we use an integer to iterate over the columns in the set. Note that the columns form a set, so this number i is merely there to iterate over the set of columns.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>i</em>&nbsp;</td><td>A number between 0 and <a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#ad47e14ccc5fe2c1e1740fa7fc1ea0bf7">getNumUniqueColumns()</a>-1. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Column number/ordinal of the unique column. </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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/deprecated.html b/apidocs/2.4.0/tmudr_doxygen/html/deprecated.html
new file mode 100644
index 0000000..1e70cf3
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/deprecated.html
@@ -0,0 +1,67 @@
+<!-- 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: Deprecated List</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 class="current"><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+      <li><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>
+<div class="contents">
+
+
+<h1><a class="anchor" id="deprecated">Deprecated List </a></h1><p><a class="anchor" id="_deprecated000001"></a> </p>
+<dl>
+<dt>Global <a class="el" href="classtmudr_1_1UDRException.html#a1fbcd51c04fd8253403bef5c7d5b0879">tmudr::UDRException::getText</a> () const  </dt>
+<dd>Use getMessage() instead, in Java that is the standard method. </dd>
+</dl>
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/doxygen.css b/apidocs/2.4.0/tmudr_doxygen/html/doxygen.css
new file mode 100644
index 0000000..9ca3caf
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/doxygen.css
@@ -0,0 +1,498 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+	font-size: 12px;
+}
+
+/* @group Heading Levels */
+
+h1 {
+	text-align: center;
+	font-size: 150%;
+}
+
+h2 {
+	font-size: 120%;
+}
+
+h3 {
+	font-size: 100%;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #153788;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #1b77c5;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+}
+
+a.codeRef {
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+.fragment {
+	font-family: monospace, fixed;
+	font-size: 105%;
+}
+
+pre.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	padding: 4px 6px;
+	margin: 4px 8px 4px 2px;
+}
+
+div.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	margin-bottom: 6px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+
+td.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	border: 1px solid #CCCCCC;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+}
+
+td.indexvalue {
+	background-color: #e8eef2;
+	border: 1px solid #CCCCCC;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #f0f0f0;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+/* @end */
+
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #84b0c7;
+}
+
+th.dirtab {
+	background: #e8eef2;
+	font-weight: bold;
+}
+
+hr {
+	height: 0;
+	border: none;
+	border-top: 1px solid #666;
+}
+
+/* @group Member Descriptions */
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #FAFAFA;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+	border-top: 1px solid #ccc;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memTemplParams {
+	color: #606060;
+        white-space: nowrap;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #606060;
+	font-weight: normal;
+	margin-left: 3px;
+}
+
+.memnav {
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+}
+
+.memname {
+	white-space: nowrap;
+	font-weight: bold;
+}
+
+.memproto, .memdoc {
+	border: 1px solid #84b0c7;	
+}
+
+.memproto {
+	padding: 0;
+	background-color: #d5e1e8;
+	font-weight: bold;
+	-webkit-border-top-left-radius: 8px;
+	-webkit-border-top-right-radius: 8px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+	-moz-border-radius-topleft: 8px;
+	-moz-border-radius-topright: 8px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+
+}
+
+.memdoc {
+	padding: 2px 5px;
+	background-color: #eef3f5;
+	border-top-width: 0;
+	-webkit-border-bottom-left-radius: 8px;
+	-webkit-border-bottom-right-radius: 8px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+	-moz-border-radius-bottomleft: 8px;
+	-moz-border-radius-bottomright: 8px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+	font-family: sans-serif;
+	margin: 0.5em;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+	font-size: 9pt;
+	font-weight: bold;
+}
+
+.directory h3 {
+	margin: 0px;
+	margin-top: 1em;
+	font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice.  Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+	height: 61px;
+	background-repeat: no-repeat;
+	background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+	display: none;
+}
+*/
+
+.directory > h3 {
+	margin-top: 0;
+}
+
+.directory p {
+	margin: 0px;
+	white-space: nowrap;
+}
+
+.directory div {
+	display: none;
+	margin: 0px;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+	font-size: 100%;
+	font-weight: bold;
+}
+
+.directory-alt h3 {
+	margin: 0px;
+	margin-top: 1em;
+	font-size: 11pt;
+}
+
+.directory-alt > h3 {
+	margin-top: 0;
+}
+
+.directory-alt p {
+	margin: 0px;
+	white-space: nowrap;
+}
+
+.directory-alt div {
+	display: none;
+	margin: 0px;
+}
+
+.directory-alt img {
+	vertical-align: -30%;
+}
+
+/* @end */
+
+address {
+	font-style: normal;
+	color: #333;
+}
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/doxygen.png b/apidocs/2.4.0/tmudr_doxygen/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/apidocs/2.4.0/tmudr_doxygen/html/doxygen.png differ
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/files.html b/apidocs/2.4.0/tmudr_doxygen/html/files.html
new file mode 100644
index 0000000..e8ce021
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/files.html
@@ -0,0 +1,68 @@
+<!-- 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: File Index</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><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li class="current"><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 class="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
+  <tr><td class="indexkey"><b>sqludr.h</b> <a href="sqludr_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/functions.html b/apidocs/2.4.0/tmudr_doxygen/html/functions.html
new file mode 100644
index 0000000..bd7da10
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/functions.html
@@ -0,0 +1,164 @@
+<!-- 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: Data Fields</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 class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+<h3><a class="anchor" id="index_a">- a -</a></h3><ul>
+<li>addCardinalityConstraint()
+: <a class="el" href="classtmudr_1_1TableInfo.html#a7076d7e7f07e59a06d698c77c2bfa1d7">tmudr::TableInfo</a>
+</li>
+<li>addCharColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#a8952e96505708cbde4ff3f611fdaf613">tmudr::TupleInfo</a>
+</li>
+<li>addColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#a597bb78ac5815850d014e1ad3d1340eb">tmudr::TupleInfo</a>
+, <a class="el" href="classtmudr_1_1UniqueConstraintInfo.html#a20b7a861cebf2362c707a5da433e4a62">tmudr::UniqueConstraintInfo</a>
+</li>
+<li>addColumnAt()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#a5e340f907ceaa51373508ff192078980">tmudr::TupleInfo</a>
+</li>
+<li>addColumns()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#a8aedec53dff3ec91f2b71ce30c5aa6ae">tmudr::TupleInfo</a>
+</li>
+<li>addDoubleColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#ae3a882a83201d49b0933b6d189e54c1d">tmudr::TupleInfo</a>
+</li>
+<li>addEntry()
+: <a class="el" href="classtmudr_1_1PartitionInfo.html#aa6f04c586f8f76c9213507c4c76d9500">tmudr::PartitionInfo</a>
+, <a class="el" href="classtmudr_1_1OrderInfo.html#a5b74383fb58f2003fcbab8daaf69194a">tmudr::OrderInfo</a>
+</li>
+<li>addEntryAt()
+: <a class="el" href="classtmudr_1_1OrderInfo.html#a672fd00b856f225c189de7adce65cf30">tmudr::OrderInfo</a>
+</li>
+<li>addFormalParameter()
+: <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae8ec687491875c1086660a237d936019">tmudr::UDRInvocationInfo</a>
+</li>
+<li>addIntColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#ac45f91bb0400a5030e087bdb2ce3acf1">tmudr::TupleInfo</a>
+</li>
+<li>addLongColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#a9f4c7996f9eefca3ebe9823dcec89607">tmudr::TupleInfo</a>
+</li>
+<li>addPassThruColumns()
+: <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#ae7274d94c79a78a4cd0976cbe572ab26">tmudr::UDRInvocationInfo</a>
+</li>
+<li>addPlanData()
+: <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac95f99f26ba311d31875a87c1bc75672">tmudr::UDRPlanInfo</a>
+</li>
+<li>addUniquenessConstraint()
+: <a class="el" href="classtmudr_1_1TableInfo.html#aa87fcee592d9fb0cf1afbac9aa703e72">tmudr::TableInfo</a>
+</li>
+<li>addVarCharColumn()
+: <a class="el" href="classtmudr_1_1TupleInfo.html#ad8be3c967e7dabf8b80a8ee6366736b1">tmudr::TupleInfo</a>
+</li>
+<li>ANY
+: <a class="el" href="classtmudr_1_1PartitionInfo.html#a00d9199b7b9ded5c9f6c2d2aadf16e47a30b6fa8e98526ba1e69dc2bf79cbcb67">tmudr::PartitionInfo</a>
+</li>
+<li>ANY_DEGREE_OF_PARALLELISM
+: <a class="el" href="classtmudr_1_1UDRPlanInfo.html#ac65dd2b236e8f48c00c9b69efed78d19ad2a2dc16a27a8570ae00f68ea6126f42">tmudr::UDRPlanInfo</a>
+</li>
+<li>APPROXIMATE_NUMERIC_TYPE
+: <a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312a883f57f4046fb514e407ee2bfae4c150">tmudr::TypeInfo</a>
+</li>
+<li>ASCENDING
+: <a class="el" href="classtmudr_1_1OrderInfo.html#a6dc71ab80df38d3c3fe0d060ac03664ca9f5d23e242952104222576f9ab331ad4">tmudr::OrderInfo</a>
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/functions_0x62.html b/apidocs/2.4.0/tmudr_doxygen/html/functions_0x62.html
new file mode 100644
index 0000000..1d6496f
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/functions_0x62.html
@@ -0,0 +1,117 @@
+<!-- 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: Data Fields</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 class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+<h3><a class="anchor" id="index_b">- b -</a></h3><ul>
+<li>BLOB
+: <a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a0f315e31b36d6bf06c6d361352606870">tmudr::TypeInfo</a>
+</li>
+<li>BOOLEAN
+: <a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a93e39bc9f828394f04f4dea0ba9f56cd">tmudr::TypeInfo</a>
+</li>
+<li>BOOLEAN_SUB_CLASS
+: <a class="el" href="classtmudr_1_1TypeInfo.html#a82b5906be32d94b8ae2ba20d8cc3f312ace4ee59929901bdbe32083660ecc3998">tmudr::TypeInfo</a>
+</li>
+<li>BOOLEAN_TYPE
+: <a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6aa5ade31c984878b78f9a5dba6862d6c9">tmudr::TypeInfo</a>
+</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.OnSelectIte [...]
+
+<!-- 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 2 May 2020 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>
diff --git a/apidocs/2.4.0/tmudr_doxygen/html/functions_0x63.html b/apidocs/2.4.0/tmudr_doxygen/html/functions_0x63.html
new file mode 100644
index 0000000..511b8bf
--- /dev/null
+++ b/apidocs/2.4.0/tmudr_doxygen/html/functions_0x63.html
@@ -0,0 +1,151 @@
+<!-- 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: Data Fields</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 class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    </ul>
+  </div>
+  <div class="tabs">
+    <ul>
+      <li><a href="functions.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+<h3><a class="anchor" id="index_c">- c -</a></h3><ul>
+<li>CallPhase
+: <a class="el" href="classtmudr_1_1UDRInvocationInfo.html#a17775d1990732a2ac52bcc528c76e40b">tmudr::UDRInvocationInfo</a>
+</li>
+<li>CARDINALITY
+: <a class="el" href="classtmudr_1_1ConstraintInfo.html#a10e620641613b68ca5a9c063f3ed5029afb46759b2d515c81e6e10a7a687432e4">tmudr::ConstraintInfo</a>
+</li>
+<li>CardinalityConstraintInfo()
+: <a class="el" href="classtmudr_1_1CardinalityConstraintInfo.html#aa25bef11164f258550666409889986aa">tmudr::CardinalityConstraintInfo</a>
+</li>
+<li>CHAR
+: <a class="el" href="classtmudr_1_1TypeInfo.html#ab696846dc0cbf6f8636bf5a8bcf6d266a59e8ffc02bd57394fb38c39a338b9af5">tmudr::TypeInfo</a>
+</li>
+<li>CHARACTER_TYPE
+: <a class="el" href="classtmudr_1_1TypeInfo.html#a9804443638ca97a8e5dbfeebe0d08ca6ac1ddf5a35e4973c871c59882a1748ed0">tmudr::TypeInfo</a>
+</li>
+<li>CHARSET_ISO88591
+: <a class="el" href="classtmudr_1_1TypeInfo.html#a66c9cc313ff649857e47285a80af619da89d942ed0ec37f58306ecffc8bc27f50">tmudr::TypeInfo</a>
+</li>
+<li>CHARSET_UCS2
... 59096 lines suppressed ...