Commit fdc5671c authored by Mike Ryan's avatar Mike Ryan

#32: Added loader tests, refactored some others.

parent 2c1e1f96
Pipeline #52457509 passed with stage
in 2 minutes and 21 seconds
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE soong_dbal_extractor_test_empty_table (id INTEGER NOT NULL, PRIMARY KEY(id));
COMMIT;
......@@ -142,8 +142,10 @@ $(document).ready(function(){initNavTree('annotated.html','');});
<tr id="row_0_7_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_1_" class="arrow" onclick="toggleFolder('0_7_0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>Extractor</b></td><td class="desc"></td></tr>
<tr id="row_0_7_0_1_0_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_countable_extractor_test_base.html" target="_self">CountableExtractorTestBase</a></td><td class="desc">Base class for testing CountableExtractor implementations </td></tr>
<tr id="row_0_7_0_1_1_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_extractor_test_base.html" target="_self">ExtractorTestBase</a></td><td class="desc">Base class for testing Extractor implementations </td></tr>
<tr id="row_0_7_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_2_" class="arrow" onclick="toggleFolder('0_7_0_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>Transformer</b></td><td class="desc"></td></tr>
<tr id="row_0_7_0_2_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base.html" target="_self">TransFormerTestBase</a></td><td class="desc">Base class for testing Transformer implementations </td></tr>
<tr id="row_0_7_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_2_" class="arrow" onclick="toggleFolder('0_7_0_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>Loader</b></td><td class="desc"></td></tr>
<tr id="row_0_7_0_2_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html" target="_self">LoaderTestBase</a></td><td class="desc">Base class for testing Loader implementations </td></tr>
<tr id="row_0_7_0_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_3_" class="arrow" onclick="toggleFolder('0_7_0_3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>Transformer</b></td><td class="desc"></td></tr>
<tr id="row_0_7_0_3_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base.html" target="_self">TransFormerTestBase</a></td><td class="desc">Base class for testing Transformer implementations </td></tr>
<tr id="row_0_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_8_" class="arrow" onclick="toggleFolder('0_8_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>Transformer</b></td><td class="desc"></td></tr>
<tr id="row_0_8_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_transformer_1_1_copy.html" target="_self">Copy</a></td><td class="desc">Transformer to simply copy extracted data to the destination </td></tr>
<tr id="row_0_8_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_soong_1_1_transformer_1_1_double.html" target="_self">Double</a></td><td class="desc">Transformer to multiply the extracted data value by 2 </td></tr>
......
......@@ -66,6 +66,9 @@ var annotated_dup =
[ "CountableExtractorTestBase", "class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_countable_extractor_test_base.html", "class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_countable_extractor_test_base" ],
[ "ExtractorTestBase", "class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_extractor_test_base.html", "class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_extractor_test_base" ]
] ],
[ "Loader", null, [
[ "LoaderTestBase", "class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html", "class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base" ]
] ],
[ "Transformer", null, [
[ "TransFormerTestBase", "class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base.html", "class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base" ]
] ]
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Soong: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Soong
</div>
<div id="projectbrief">Soong provides a general-purpose ETL library for data migration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">LoaderTestBase Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html">LoaderTestBase</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a862fa07b99712dcf14d5eb5d81b54822">$loaderClass</a></td><td class="entry"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html">LoaderTestBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a6eca7ef2e77a9253f581fb7344aedbbf">testGetProperties</a>(array $configuration, array $expectedProperties, array $expectedKeyProperties)</td><td class="entry"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html">LoaderTestBase</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Soong: LoaderTestBase Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Soong
</div>
<div id="projectbrief">Soong provides a general-purpose ETL library for data migration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">LoaderTestBase Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for LoaderTestBase:</div>
<div class="dyncontent">
<div class="center">
<img src="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.png" alt=""/>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a6eca7ef2e77a9253f581fb7344aedbbf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a6eca7ef2e77a9253f581fb7344aedbbf">testGetProperties</a> (array $configuration, array $expectedProperties, array $expectedKeyProperties)</td></tr>
<tr class="separator:a6eca7ef2e77a9253f581fb7344aedbbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a862fa07b99712dcf14d5eb5d81b54822"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a862fa07b99712dcf14d5eb5d81b54822">$loaderClass</a></td></tr>
<tr class="separator:a862fa07b99712dcf14d5eb5d81b54822"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Base class for testing Loader implementations. </p>
<p>To test a loader class, extend this class and implement setUp(), assigning the fully-qualified class name to loaderClass:</p>
<div class="fragment"><div class="line"><span class="keyword">protected</span> <span class="keyword">function</span> setUp() : void</div><div class="line">{</div><div class="line"> $this-&gt;loaderClass = <span class="stringliteral">&#39;\Soong\Loader\Csv&#39;</span>;</div><div class="line">}</div></div><!-- fragment --><p>And implement a data provider, where each row of data provided contains a configuration array for the loader, a list of all properties, and a list of the key properties:</p>
<div class="fragment"><div class="line"><span class="keyword">public</span> <span class="keyword">function</span> propertyDataProvider()</div><div class="line">{</div><div class="line"> $properties1 = [</div><div class="line"> <span class="stringliteral">&#39;field1&#39;</span>,</div><div class="line"> <span class="stringliteral">&#39;field2&#39;</span>,</div><div class="line"> ...</div><div class="line"> ];</div><div class="line"> $key_properties1 = [</div><div class="line"> <span class="stringliteral">&#39;field1&#39;</span> =&gt; [<span class="stringliteral">&#39;type&#39;</span> =&gt; <span class="stringliteral">&#39;string&#39;</span>],</div><div class="line"> ],</div><div class="line"> $configuration1 = [</div><div class="line"> <span class="stringliteral">&#39;key_properties&#39;</span> =&gt; $key_properties1,</div><div class="line"> ];</div><div class="line"> <span class="keywordflow">return</span> [</div><div class="line"> <span class="stringliteral">&#39;set one&#39;</span> =&gt; [$configuration1, $properties1, $key_properties1],</div><div class="line"> ...</div><div class="line"> ];</div><div class="line">}</div></div><!-- fragment --> </div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a6eca7ef2e77a9253f581fb7344aedbbf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6eca7ef2e77a9253f581fb7344aedbbf">&#9670;&nbsp;</a></span>testGetProperties()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">testGetProperties </td>
<td>(</td>
<td class="paramtype">array&#160;</td>
<td class="paramname"><em>$configuration</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">array&#160;</td>
<td class="paramname"><em>$expectedProperties</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">array&#160;</td>
<td class="paramname"><em>$expectedKeyProperties</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Test getProperties() and getKeyProperties(). </p>
<p>@dataProvider propertyDataProvider</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramtype">array</td><td class="paramname">$configuration</td><td>Extractor configuration. </td></tr>
<tr><td class="paramtype">array</td><td class="paramname">$expectedProperties</td><td>Expected set of property metadata returned. </td></tr>
<tr><td class="paramtype">array</td><td class="paramname">$expectedKeyProperties</td><td>Expected set of key property metadata returned. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a862fa07b99712dcf14d5eb5d81b54822"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a862fa07b99712dcf14d5eb5d81b54822">&#9670;&nbsp;</a></span>$loaderClass</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="interface_soong_1_1_contracts_1_1_loader_1_1_loader.html">Loader</a> $loaderClass</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Fully-qualified name of a Loader implementation. </p>
<p class="reference">Referenced by <a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a6eca7ef2e77a9253f581fb7344aedbbf">LoaderTestBase\testGetProperties()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Tests</b></li><li class="navelem"><b>Contracts</b></li><li class="navelem"><b>Loader</b></li><li class="navelem"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html">LoaderTestBase</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>
var class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base =
[
[ "testGetProperties", "class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a6eca7ef2e77a9253f581fb7344aedbbf", null ],
[ "$loaderClass", "class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html#a862fa07b99712dcf14d5eb5d81b54822", null ]
];
\ No newline at end of file
......@@ -99,50 +99,50 @@ $(document).ready(function(){initNavTree('classes.html','');});
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_array_extractor.html">ArrayExtractor</a> (Soong\Extractor)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_loader_1_1_loader.html">Loader</a> (Soong\Contracts\Loader)&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_c"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;c&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_loader_base.html">LoaderBase</a> (Soong\Loader)&#160;&#160;&#160;</td></tr>
<tr><td></td><td rowspan="2" valign="bottom"><a name="letter_m"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;m&#160;&#160;</div></td></tr></table>
<tr><td></td><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_loader_1_1_loader_test_base.html">LoaderTestBase</a> (Soong\Tests\Contracts\Loader)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_copy.html">Copy</a> (Soong\Transformer)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_m"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;m&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_copy.html">Copy</a> (Soong\Transformer)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_countable.html">Countable</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_migrate_command.html">MigrateCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_countable_extractor_base.html">CountableExtractorBase</a> (Soong\Extractor)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_countable_extractor_test_base.html">CountableExtractorTestBase</a> (Soong\Tests\Contracts\Extractor)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_csv.html">Csv</a> (Soong\Extractor)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_data_1_1_property.html">Property</a> (Soong\Data)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_csv.html">Csv</a> (Soong\Loader)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
<tr><td valign="top"><a class="el" href="class_countable.html">Countable</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_countable_extractor_base.html">CountableExtractorBase</a> (Soong\Extractor)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_migrate_command.html">MigrateCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_countable_extractor_test_base.html">CountableExtractorTestBase</a> (Soong\Tests\Contracts\Extractor)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_csv.html">Csv</a> (Soong\Extractor)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_csv.html">Csv</a> (Soong\Loader)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_data_1_1_property.html">Property</a> (Soong\Data)&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;d&#160;&#160;</div></td></tr></table>
</td><td></td></tr>
<tr><td></td><td valign="top"><a class="el" href="class_soong_1_1_data_1_1_record.html">Record</a> (Soong\Data)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_data_1_1_data_property.html">DataProperty</a> (Soong\Contracts\Data)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_recursive_filter_iterator.html">RecursiveFilterIterator</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_data_1_1_data_property_test_base.html">DataPropertyTestBase</a> (Soong\Tests\Contracts\Data)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_rollback_command.html">RollbackCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_data_1_1_data_record.html">DataRecord</a> (Soong\Contracts\Data)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
</td><td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td></td><td></td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_data_1_1_data_property.html">DataProperty</a> (Soong\Contracts\Data)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_data_1_1_record.html">Record</a> (Soong\Data)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_data_1_1_data_property_test_base.html">DataPropertyTestBase</a> (Soong\Tests\Contracts\Data)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_recursive_filter_iterator.html">RecursiveFilterIterator</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_data_1_1_data_record.html">DataRecord</a> (Soong\Contracts\Data)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_rollback_command.html">RollbackCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_d_b_a_l.html">DBAL</a> (Soong\Extractor)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_d_b_a_l.html">DBAL</a> (Soong\Extractor)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html">DBAL</a> (Soong\KeyMap)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_status_command.html">StatusCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_d_b_a_l.html">DBAL</a> (Soong\Loader)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
<tr><td valign="top"><a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html">DBAL</a> (Soong\KeyMap)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_d_b_a_l.html">DBAL</a> (Soong\Loader)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_status_command.html">StatusCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_double.html">Double</a> (Soong\Transformer)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_double.html">Double</a> (Soong\Transformer)&#160;&#160;&#160;</td><td></td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_task_1_1_task.html">Task</a> (Soong\Contracts\Task)&#160;&#160;&#160;</td></tr>
<tr><td></td><td valign="top"><a class="el" href="class_soong_1_1_task_1_1_task.html">Task</a> (Soong\Task)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_etl_command.html">EtlCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_transformer_1_1_transformer.html">Transformer</a> (Soong\Contracts\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_task_1_1_etl_task.html">EtlTask</a> (Soong\Contracts\Task)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_transformer_base.html">TransformerBase</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_task_1_1_etl_task.html">EtlTask</a> (Soong\Task)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base.html">TransFormerTestBase</a> (Soong\Tests\Contracts\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html">Extractor</a> (Soong\Contracts\Extractor)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;u&#160;&#160;</div></td></tr></table>
</td><td></td></tr>
<tr><td></td><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_task_1_1_task.html">Task</a> (Soong\Contracts\Task)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_etl_command.html">EtlCommand</a> (Soong\Console\Command)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_task_1_1_task.html">Task</a> (Soong\Task)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_task_1_1_etl_task.html">EtlTask</a> (Soong\Contracts\Task)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_transformer_1_1_transformer.html">Transformer</a> (Soong\Contracts\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_task_1_1_etl_task.html">EtlTask</a> (Soong\Task)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_transformer_base.html">TransformerBase</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html">Extractor</a> (Soong\Contracts\Extractor)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_transformer_1_1_trans_former_test_base.html">TransFormerTestBase</a> (Soong\Tests\Contracts\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a> (Soong\Extractor)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;u&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a> (Soong\Extractor)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_extractor_test_base.html">ExtractorTestBase</a> (Soong\Tests\Contracts\Extractor)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_uc_first.html">UcFirst</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_tests_1_1_contracts_1_1_extractor_1_1_extractor_test_base.html">ExtractorTestBase</a> (Soong\Tests\Contracts\Extractor)&#160;&#160;&#160;</td><td></td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;i&#160;&#160;</div></td></tr></table>
</td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;v&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_uc_first.html">UcFirst</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td></td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;v&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td></td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_increment.html">Increment</a> (Soong\Transformer)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_value_lookup.html">ValueLookup</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_increment.html">Increment</a> (Soong\Transformer)&#160;&#160;&#160;</td><td></td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_k"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;k&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_var_dump.html">VarDump</a> (Soong\Loader)&#160;&#160;&#160;</td></tr>
<tr><td></td><td rowspan="2" valign="bottom"><a name="letter_y"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;y&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_value_lookup.html">ValueLookup</a> (Soong\Transformer)&#160;&#160;&#160;</td></tr>
<tr><td></td><td valign="top"><a class="el" href="class_soong_1_1_loader_1_1_var_dump.html">VarDump</a> (Soong\Loader)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_key_map_1_1_key_map.html">KeyMap</a> (Soong\Contracts\KeyMap)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_y"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;y&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="interface_soong_1_1_contracts_1_1_key_map_1_1_key_map.html">KeyMap</a> (Soong\Contracts\KeyMap)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_key_map_1_1_key_map_base.html">KeyMapBase</a> (Soong\KeyMap)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_yaml_recursive_filter_iterator.html">YamlRecursiveFilterIterator</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_key_map_lookup.html">KeyMapLookup</a> (Soong\Transformer)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_key_map_1_1_key_map_base.html">KeyMapBase</a> (Soong\KeyMap)&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="class_soong_1_1_transformer_1_1_key_map_lookup.html">KeyMapLookup</a> (Soong\Transformer)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_yaml_recursive_filter_iterator.html">YamlRecursiveFilterIterator</a> (Soong\Console\Command)&#160;&#160;&#160;</td></tr>
<tr><td></td><td></td></tr>
</table>
<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_c">c</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_k">k</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_m">m</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_t">t</a>&#160;|&#160;<a class="qindex" href="#letter_u">u</a>&#160;|&#160;<a class="qindex" href="#letter_v">v</a>&#160;|&#160;<a class="qindex" href="#letter_y">y</a></div>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Soong: Loader Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Soong
</div>
<div id="projectbrief">Soong provides a general-purpose ETL library for data migration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('dir_d292f396817300994ed688abb7140c85.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>