1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
3
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>TableChunker</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
4
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
6
<!-- Generated by Natural Docs, version 1.52 -->
7
<!-- http://www.naturaldocs.org -->
9
<!-- saved from url=(0026)http://www.naturaldocs.org -->
14
<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="TableChunker"></a>TableChunker</h1><div class=CBody><p>TableChunker helps determine how to “chunk” a table. Chunk are pre-determined ranges of rows defined by boundary values (sometimes also called endpoints) on numeric or numeric-like columns, including date/time types. Any numeric column type that MySQL can do positional comparisons (<, <=, >, >=) on works. Chunking on character data is not supported yet (but see <a href="http://code.google.com/p/maatkit/issues/detail?id=568" class=LURL target=_top>issue 568</a>).</p><p>Usually chunks range over all rows in a table but sometimes they only range over a subset of rows if an optional where arg is passed to various subs. In either case a chunk is like “`col` >= 5 AND `col` < 10”. If col is of type int and is unique, then that chunk ranges over up to 5 rows.</p><p>Chunks are included in WHERE clauses by various tools to do work on discrete chunks of the table instead of trying to work on the entire table at once. Chunks do not overlap and their size is configurable via the chunk_size arg passed to several subs. The chunk_size can be a number of rows or a size like 1M, in which case it’s in estimated bytes of data. Real chunk sizes are usually close to the requested chunk_size but unless the optional exact arg is assed the real chunk sizes are approximate. Sometimes the distribution of values on the chunk colun can skew chunking. If, for example, col has values 0, 100, 101, ... then the zero value skews chunking. The zero_chunk arg handles this.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#TableChunker" >TableChunker</a></td><td class=SDescription>TableChunker helps determine how to “chunk” a table. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#TableChunker.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.new" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">new</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.find_chunk_columns" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">find_chunk_columns</a></td><td class=SDescription>Find chunkable columns.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.calculate_chunks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">calculate_chunks</a></td><td class=SDescription>Calculate chunks for the given range statistics. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker._chunk_numeric" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">_chunk_numeric</a></td><td class=SDescription>Determine how to chunk a numeric column.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker._chunk_numeric" >_chunk_numeric</a></td><td class=SDescription>Determine how to chunk a character column.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker._chunk_char" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">_chunk_char</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.get_first_chunkable_column" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">get_first_chunkable_column</a></td><td class=SDescription>Get the first chunkable column in a table. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.size_to_rows" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">size_to_rows</a></td><td class=SDescription>Convert a size in rows or bytes to a number of rows in the table, using SHOW TABLE STATUS. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.get_range_statistics" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">get_range_statistics</a></td><td class=SDescription>Determine the range of values for the chunk_col column on this table.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.inject_chunks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">inject_chunks</a></td><td class=SDescription>Create a SQL statement from a query prototype by filling in placeholders.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.value_to_number" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">value_to_number</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.range_num" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">range_num</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.range_time" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">range_time</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.range_date" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">range_date</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.range_datetime" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">range_datetime</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.range_timestamp" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">range_timestamp</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.timestampdiff" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">timestampdiff</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.get_valid_end_points" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">get_valid_end_points</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker._get_valid_end_point" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">_get_valid_end_point</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.get_first_valid_value" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">get_first_valid_value</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker._validate_temporal_value" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">_validate_temporal_value</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker.get_nonzero_value" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">get_nonzero_value</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#TableChunker.base_count" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">base_count</a></td><td class=SDescription>Count to any number in any base with the given symbols. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#TableChunker._d" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">_d</a></td><td class=SDescription></td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
16
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="TableChunker.Functions"></a>Functions</h3></div></div>
18
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.new"></a>new</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub new</td></tr></table></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>$class</td><td class=CDLDescription>TableChunker (automatic)</td></tr><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Quoter</td><td class=CDLDescription><a href="Quoter-pm.html#Quoter" class=LClass id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">Quoter</a> object</td></tr><tr><td class=CDLEntry>MySQLDump</td><td class=CDLDescription><a href="MySQLDump-pm.html#MySQLDump" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">MySQLDump</a> object</td></tr></table></div></div></div>
20
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.find_chunk_columns"></a>find_chunk_columns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub find_chunk_columns</td></tr></table></blockquote><p>Find chunkable columns.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>table_struct</td><td class=CDLDescription>Hashref returned from <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>exact</td><td class=CDLDescription>bool: Try to support exact chunk sizes (may still chunk fuzzily)</td></tr></table><h4 class=CHeading>Returns</h4><p>Array: whether the table can be chunked exactly if requested (zero otherwise), arrayref of columns that support chunking. Example:</p><blockquote><pre class="prettyprint">1,
22
{ column => 'id', index => 'PRIMARY' },
23
{ column => 'i', index => 'i_idx' },
24
]</pre></blockquote></div></div></div>
26
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.calculate_chunks"></a>calculate_chunks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_chunks</td></tr></table></blockquote><p>Calculate chunks for the given range statistics. Args min, max and rows_in_range are returned from get_range_statistics() which is usually called before this sub. Min and max are expected to be valid values (NULL is valid).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dbh</td><td class=CDLDescription>dbh</td></tr><tr><td class=CDLEntry>db</td><td class=CDLDescription>database name</td></tr><tr><td class=CDLEntry>tbl</td><td class=CDLDescription>table name</td></tr><tr><td class=CDLEntry>tbl_struct</td><td class=CDLDescription>retval of <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr><tr><td class=CDLEntry>chunk_col</td><td class=CDLDescription>column name to chunk on</td></tr><tr><td class=CDLEntry>min</td><td class=CDLDescription>min col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt8', 'link28')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>max</td><td class=CDLDescription>max col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt8', 'link29')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>rows_in_range</td><td class=CDLDescription>number of rows to chunk, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link30 onMouseOver="ShowTip(event, 'tt8', 'link30')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>chunk_size</td><td class=CDLDescription>requested size of each chunk</td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>exact</td><td class=CDLDescription>Use exact chunk_size? Use approximates is not.</td></tr><tr><td class=CDLEntry>tries</td><td class=CDLDescription>Fetch up to this many rows to find a non-zero value</td></tr><tr><td class=CDLEntry>chunk_range</td><td class=CDLDescription>Make chunk range open (default) or openclosed</td></tr></table><h4 class=CHeading>Returns</h4><p>Array of WHERE predicates like “`col` >= ‘10’ AND `col` < ‘20’”, one for each chunk. All values are single-quoted due to <a href="http://code.google.com/p/maatkit/issues/detail?id=1002" class=LURL target=_top>issue 1002</a>. Example:</p><blockquote><pre class="prettyprint">`film_id` < '30',
27
`film_id` >= '30' AND `film_id` < '60',
28
`film_id` >= '60' AND `film_id` < '90',
29
`film_id` >= '90',</pre></blockquote></div></div></div>
31
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._chunk_numeric"></a>_chunk_numeric</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _chunk_numeric</td></tr></table></blockquote><p>Determine how to chunk a numeric column.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dbh</td><td class=CDLDescription>dbh</td></tr><tr><td class=CDLEntry>db</td><td class=CDLDescription>database name</td></tr><tr><td class=CDLEntry>tbl</td><td class=CDLDescription>table name</td></tr><tr><td class=CDLEntry>tbl_struct</td><td class=CDLDescription>retval of <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link31 onMouseOver="ShowTip(event, 'tt26', 'link31')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr><tr><td class=CDLEntry>chunk_col</td><td class=CDLDescription>column name to chunk on</td></tr><tr><td class=CDLEntry>min</td><td class=CDLDescription>min col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link32 onMouseOver="ShowTip(event, 'tt8', 'link32')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>max</td><td class=CDLDescription>max col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link33 onMouseOver="ShowTip(event, 'tt8', 'link33')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>rows_in_range</td><td class=CDLDescription>number of rows to chunk, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link34 onMouseOver="ShowTip(event, 'tt8', 'link34')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>chunk_size</td><td class=CDLDescription>requested size of each chunk</td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>exact</td><td class=CDLDescription>Use exact chunk_size? Use approximates is not.</td></tr><tr><td class=CDLEntry>tries</td><td class=CDLDescription>Fetch up to this many rows to find a non-zero value</td></tr><tr><td class=CDLEntry>zero_chunk</td><td class=CDLDescription>Add an extra chunk for zero values? (0, 00:00, etc.)</td></tr></table><h4 class=CHeading>Returns</h4><p>Array of chunker info that <a href="#TableChunker.calculate_chunks" class=LFunction id=link35 onMouseOver="ShowTip(event, 'tt3', 'link35')" onMouseOut="HideTip('tt3')">calculate_chunks()</a> uses to create chunks, like:</p><blockquote><pre class="prettyprint">col => quoted chunk column name
32
start_point => start value (a Perl number)
33
end_point => end value (a Perl number)
34
interval => interval to walk from start_ to end_point (a Perl number)
35
range_func => coderef to return a value while walking that ^ range
36
have_zero_chunk => whether to include a zero chunk (col=0)</pre></blockquote></div></div></div>
38
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._chunk_numeric"></a>_chunk_numeric</h3><div class=CBody><p>Determine how to chunk a character column.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dbh</td><td class=CDLDescription>dbh</td></tr><tr><td class=CDLEntry>db</td><td class=CDLDescription>database name</td></tr><tr><td class=CDLEntry>tbl</td><td class=CDLDescription>table name</td></tr><tr><td class=CDLEntry>tbl_struct</td><td class=CDLDescription>retval of <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link36 onMouseOver="ShowTip(event, 'tt26', 'link36')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr><tr><td class=CDLEntry>chunk_col</td><td class=CDLDescription>column name to chunk on</td></tr><tr><td class=CDLEntry>min</td><td class=CDLDescription>min col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link37 onMouseOver="ShowTip(event, 'tt8', 'link37')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>max</td><td class=CDLDescription>max col value, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link38 onMouseOver="ShowTip(event, 'tt8', 'link38')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>rows_in_range</td><td class=CDLDescription>number of rows to chunk, from <a href="#TableChunker.get_range_statistics" class=LFunction id=link39 onMouseOver="ShowTip(event, 'tt8', 'link39')" onMouseOut="HideTip('tt8')">TableChunker::get_range_statistics()</a></td></tr><tr><td class=CDLEntry>chunk_size</td><td class=CDLDescription>requested size of each chunk</td></tr></table><h4 class=CHeading>Returns</h4><p>Array of chunker info that <a href="#TableChunker.calculate_chunks" class=LFunction id=link40 onMouseOver="ShowTip(event, 'tt3', 'link40')" onMouseOut="HideTip('tt3')">calculate_chunks()</a> uses to create chunks, like:</p><blockquote><pre class="prettyprint">col => quoted chunk column name
39
start_point => start value (a Perl number)
40
end_point => end value (a Perl number)
41
interval => interval to walk from start_ to end_point (a Perl number)
42
range_func => coderef to return a value while walking that ^ range</pre></blockquote></div></div></div>
44
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._chunk_char"></a>_chunk_char</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _chunk_char</td></tr></table></blockquote></div></div></div>
46
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.get_first_chunkable_column"></a>get_first_chunkable_column</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_first_chunkable_column</td></tr></table></blockquote><p>Get the first chunkable column in a table. Only a “sane” column/index is returned. That means that the first auto-detected chunk col/index are used if any combination of preferred chunk col or index would be really bad, like chunk col=x and chunk index=some index over (y, z). That’s bad because the index doesn’t include the column; it would also be bad if the column wasn’t a left-most prefix of the index.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>tbl_struct</td><td class=CDLDescription>Hashref returned by <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link41 onMouseOver="ShowTip(event, 'tt26', 'link41')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr></table><h4 class=CHeading>Optional arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>chunk_column</td><td class=CDLDescription>Preferred chunkable column name</td></tr><tr><td class=CDLEntry>chunk_index</td><td class=CDLDescription>Preferred chunkable column index name</td></tr><tr><td class=CDLEntry>exact</td><td class=CDLDescription>bool: passed to <a href="#TableChunker.find_chunk_columns" class=LFunction id=link42 onMouseOver="ShowTip(event, 'tt2', 'link42')" onMouseOut="HideTip('tt2')">find_chunk_columns()</a></td></tr></table><h4 class=CHeading>Returns</h4><p>List: chunkable column name, chunkable colum index</p></div></div></div>
48
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.size_to_rows"></a>size_to_rows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub size_to_rows</td></tr></table></blockquote><p>Convert a size in rows or bytes to a number of rows in the table, using SHOW TABLE STATUS. If the size is a string with a suffix of M/G/k, interpret it as mebibytes, gibibytes, or kibibytes respectively. If it’s just a number, treat it as a number of rows and return right away.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dbh</td><td class=CDLDescription>dbh</td></tr><tr><td class=CDLEntry>db</td><td class=CDLDescription>Database name</td></tr><tr><td class=CDLEntry>tbl</td><td class=CDLDescription>Table name</td></tr><tr><td class=CDLEntry>chunk_size</td><td class=CDLDescription>Chunk size string like “1000” or “50M”</td></tr></table><h4 class=CHeading>Returns</h4><p>Array: number of rows, average row size</p></div></div></div>
50
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.get_range_statistics"></a>get_range_statistics</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_range_statistics</td></tr></table></blockquote><p>Determine the range of values for the chunk_col column on this table.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dbh</td><td class=CDLDescription>dbh</td></tr><tr><td class=CDLEntry>db</td><td class=CDLDescription>Database name</td></tr><tr><td class=CDLEntry>tbl</td><td class=CDLDescription>Table name</td></tr><tr><td class=CDLEntry>chunk_col</td><td class=CDLDescription>Chunk column name</td></tr><tr><td class=CDLEntry>tbl_struct</td><td class=CDLDescription>Hashref returned by <a href="TableParser-pm.html#TableParser.parse" class=LFunction id=link43 onMouseOver="ShowTip(event, 'tt26', 'link43')" onMouseOut="HideTip('tt26')">TableParser::parse()</a></td></tr></table><h4 class=CHeading>Optional arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>where</td><td class=CDLDescription>WHERE clause without “WHERE” to restrict range</td></tr><tr><td class=CDLEntry>index_hint</td><td class=CDLDescription>”FORCE INDEX (...)” clause</td></tr><tr><td class=CDLEntry>tries</td><td class=CDLDescription>Fetch up to this many rows to find a valid value</td></tr></table><h4 class=CHeading>Returns</h4><p>Array: min row value, max row value, rows in range</p></div></div></div>
52
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.inject_chunks"></a>inject_chunks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub inject_chunks</td></tr></table></blockquote><p>Create a SQL statement from a query prototype by filling in placeholders.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>database</td><td class=CDLDescription>Database name</td></tr><tr><td class=CDLEntry>table</td><td class=CDLDescription>Table name</td></tr><tr><td class=CDLEntry>chunks</td><td class=CDLDescription>Arrayref of chunks from <a href="#TableChunker.calculate_chunks" class=LFunction id=link44 onMouseOver="ShowTip(event, 'tt3', 'link44')" onMouseOut="HideTip('tt3')">calculate_chunks()</a></td></tr><tr><td class=CDLEntry>chunk_num</td><td class=CDLDescription>Index into chunks to use</td></tr><tr><td class=CDLEntry>query</td><td class=CDLDescription>Query prototype returned by <a href="TableChecksum-pm.html#TableChecksum.make_checksum_query" class=LFunction id=link45 onMouseOver="ShowTip(event, 'tt27', 'link45')" onMouseOut="HideTip('tt27')">TableChecksum::make_checksum_query()</a></td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>index_hint</td><td class=CDLDescription>”FORCE INDEX (...)” clause</td></tr><tr><td class=CDLEntry>where</td><td class=CDLDescription>Arrayref of WHERE clauses joined with AND</td></tr></table><h4 class=CHeading>Returns</h4><p>A SQL statement</p></div></div></div>
54
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.value_to_number"></a>value_to_number</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub value_to_number</td></tr></table></blockquote></div></div></div>
56
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.range_num"></a>range_num</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_num</td></tr></table></blockquote></div></div></div>
58
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.range_time"></a>range_time</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_time</td></tr></table></blockquote></div></div></div>
60
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.range_date"></a>range_date</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_date</td></tr></table></blockquote></div></div></div>
62
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.range_datetime"></a>range_datetime</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_datetime</td></tr></table></blockquote></div></div></div>
64
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.range_timestamp"></a>range_timestamp</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_timestamp</td></tr></table></blockquote></div></div></div>
66
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.timestampdiff"></a>timestampdiff</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub timestampdiff</td></tr></table></blockquote></div></div></div>
68
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.get_valid_end_points"></a>get_valid_end_points</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_valid_end_points</td></tr></table></blockquote></div></div></div>
70
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._get_valid_end_point"></a>_get_valid_end_point</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _get_valid_end_point</td></tr></table></blockquote></div></div></div>
72
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.get_first_valid_value"></a>get_first_valid_value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_first_valid_value</td></tr></table></blockquote></div></div></div>
74
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._validate_temporal_value"></a>_validate_temporal_value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _validate_temporal_value</td></tr></table></blockquote></div></div></div>
76
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.get_nonzero_value"></a>get_nonzero_value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_nonzero_value</td></tr></table></blockquote></div></div></div>
78
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker.base_count"></a>base_count</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub base_count</td></tr></table></blockquote><p>Count to any number in any base with the given symbols. E.g. if counting to 10 in base 16 with symbols 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f the result is “a”. This is trival for stuff like base 16 (hex), but far less trivial for arbitrary bases with arbitrary symbols like base 25 with symbols B,C,D,...X,Y,Z. For that, counting to 10 results in “L”. The base and its symbols are determined by the character column. Symbols can be non-ASCII.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>count_to</td><td class=CDLDescription>Number to count to</td></tr><tr><td class=CDLEntry>base</td><td class=CDLDescription>Base of special system</td></tr><tr><td class=CDLEntry>symbols</td><td class=CDLDescription>Arrayref of symbols for “numbers” in special system</td></tr></table><h4 class=CHeading>Returns</h4><p>The “number” (symbol) in the special target base system</p></div></div></div>
80
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="TableChunker._d"></a>_d</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _d</td></tr></table></blockquote></div></div></div>
85
<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
88
<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Modules</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="Advisor-pm.html">Advisor</a></div></div><div class=MEntry><div class=MFile><a href="AdvisorRules-pm.html">AdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="BinaryLogParser-pm.html">BinaryLogParser</a></div></div><div class=MEntry><div class=MFile><a href="ChangeHandler-pm.html">ChangeHandler</a></div></div><div class=MEntry><div class=MFile><a href="CompareQueryTimes-pm.html">CompareQueryTimes</a></div></div><div class=MEntry><div class=MFile><a href="CompareResults-pm.html">CompareResults</a></div></div><div class=MEntry><div class=MFile><a href="CompareTableStructs-pm.html">CompareTableStructs</a></div></div><div class=MEntry><div class=MFile><a href="CompareWarnings-pm.html">CompareWarnings</a></div></div><div class=MEntry><div class=MFile><a href="CopyRowsInsertSelect-pm.html">CopyRowsInsertSelect</a></div></div><div class=MEntry><div class=MFile><a href="Daemon-pm.html">Daemon</a></div></div><div class=MEntry><div class=MFile><a href="DSNParser-pm.html">DSNParser</a></div></div><div class=MEntry><div class=MFile><a href="DuplicateKeyFinder-pm.html">DuplicateKeyFinder</a></div></div><div class=MEntry><div class=MFile><a href="EventAggregator-pm.html">EventAggregator</a></div></div><div class=MEntry><div class=MFile><a href="EventTimeline-pm.html">EventTimeline</a></div></div><div class=MEntry><div class=MFile><a href="ExecutionThrottler-pm.html">ExecutionThrottler</a></div></div><div class=MEntry><div class=MFile><a href="ExplainAnalyzer-pm.html">ExplainAnalyzer</a></div></div><div class=MEntry><div class=MFile><a href="FileIterator-pm.html">FileIterator</a></div></div><div class=MEntry><div class=MFile><a href="ForeignKeyIterator-pm.html">ForeignKeyIterator</a></div></div><div class=MEntry><div class=MFile><a href="GeneralLogParser-pm.html">GeneralLogParser</a></div></div><div class=MEntry><div class=MFile><a href="HTTPProtocolParser-pm.html">HTTPProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="IndexUsage-pm.html">IndexUsage</a></div></div><div class=MEntry><div class=MFile><a href="InnoDBStatusParser-pm.html">InnoDBStatusParser</a></div></div><div class=MEntry><div class=MFile><a href="KeySize-pm.html">KeySize</a></div></div><div class=MEntry><div class=MFile><a href="LogSplitter-pm.html">LogSplitter</a></div></div><div class=MEntry><div class=MFile><a href="MaatkitTest-pm.html">MaatkitTest</a></div></div><div class=MEntry><div class=MFile><a href="MasterSlave-pm.html">MasterSlave</a></div></div><div class=MEntry><div class=MFile><a href="MemcachedEvent-pm.html">MemcachedEvent</a></div></div><div class=MEntry><div class=MFile><a href="MemcachedProtocolParser-pm.html">MemcachedProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="MockSth-pm.html">MockSth</a></div></div><div class=MEntry><div class=MFile><a href="MockSync-pm.html">MockSync</a></div></div><div class=MEntry><div class=MFile><a href="MockSyncStream-pm.html">MockSyncStream</a></div></div><div class=MEntry><div class=MFile><a href="MySQLConfig-pm.html">MySQLConfig</a></div></div><div class=MEntry><div class=MFile><a href="MySQLConfigComparer-pm.html">MySQLConfigComparer</a></div></div><div class=MEntry><div class=MFile><a href="MySQLDump-pm.html">MySQLDump</a></div></div><div class=MEntry><div class=MFile><a href="MySQLProtocolParser-pm.html">MySQLProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="OptionParser-pm.html">OptionParser</a></div></div><div class=MEntry><div class=MFile><a href="OSCCaptureSync-pm.html">OSCCaptureSync</a></div></div><div class=MEntry><div class=MFile><a href="Outfile-pm.html">Outfile</a></div></div><div class=MEntry><div class=MFile><a href="PgLogParser-pm.html">PgLogParser</a></div></div><div class=MEntry><div class=MFile><a href="Pipeline-pm.html">Pipeline</a></div></div><div class=MEntry><div class=MFile><a href="PodParser-pm.html">PodParser</a></div></div><div class=MEntry><div class=MFile><a href="Processlist-pm.html">Processlist</a></div></div><div class=MEntry><div class=MFile><a href="ProcesslistAggregator-pm.html">ProcesslistAggregator</a></div></div><div class=MEntry><div class=MFile><a href="Progress-pm.html">Progress</a></div></div><div class=MEntry><div class=MFile><a href="ProtocolParser-pm.html">ProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="QueryAdvisorRules-pm.html">QueryAdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="QueryParser-pm.html">QueryParser</a></div></div><div class=MEntry><div class=MFile><a href="QueryReportFormatter-pm.html">QueryReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="QueryReview-pm.html">QueryReview</a></div></div><div class=MEntry><div class=MFile><a href="QueryRewriter-pm.html">QueryRewriter</a></div></div><div class=MEntry><div class=MFile><a href="Quoter-pm.html">Quoter</a></div></div><div class=MEntry><div class=MFile><a href="ReportFormatter-pm.html">ReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="Retry-pm.html">Retry</a></div></div><div class=MEntry><div class=MFile><a href="RowDiff-pm.html">RowDiff</a></div></div><div class=MEntry><div class=MFile><a href="Runtime-pm.html">Runtime</a></div></div><div class=MEntry><div class=MFile><a href="Sandbox-pm.html">Sandbox</a></div></div><div class=MEntry><div class=MFile><a href="Schema-pm.html">Schema</a></div></div><div class=MEntry><div class=MFile><a href="SchemaIterator-pm.html">SchemaIterator</a></div></div><div class=MEntry><div class=MFile><a href="SimpleTCPDumpParser-pm.html">SimpleTCPDumpParser</a></div></div><div class=MEntry><div class=MFile><a href="SlowLogParser-pm.html">SlowLogParser</a></div></div><div class=MEntry><div class=MFile><a href="SlowLogWriter-pm.html">SlowLogWriter</a></div></div><div class=MEntry><div class=MFile><a href="SQLParser-pm.html">SQLParser</a></div></div><div class=MEntry><div class=MFile><a href="SysLogParser-pm.html">SysLogParser</a></div></div><div class=MEntry><div class=MFile><a href="TableChecksum-pm.html">TableChecksum</a></div></div><div class=MEntry><div class=MFile id=MSelected>TableChunker</div></div><div class=MEntry><div class=MFile><a href="TableNibbler-pm.html">TableNibbler</a></div></div><div class=MEntry><div class=MFile><a href="TableParser-pm.html">TableParser</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncChunk-pm.html">TableSyncChunk</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncer-pm.html">TableSyncer</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncGroupBy-pm.html">TableSyncGroupBy</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncNibble-pm.html">TableSyncNibble</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncStream-pm.html">TableSyncStream</a></div></div><div class=MEntry><div class=MFile><a href="TableUsage-pm.html">TableUsage</a></div></div><div class=MEntry><div class=MFile><a href="TcpdumpParser-pm.html">TcpdumpParser</a></div></div><div class=MEntry><div class=MFile><a href="TCPRequestAggregator-pm.html">TCPRequestAggregator</a></div></div><div class=MEntry><div class=MFile><a href="TextResultSetParser-pm.html">TextResultSetParser</a></div></div><div class=MEntry><div class=MFile><a href="TimeSeriesTrender-pm.html">TimeSeriesTrender</a></div></div><div class=MEntry><div class=MFile><a href="Transformers-pm.html">Transformers</a></div></div><div class=MEntry><div class=MFile><a href="UpgradeReportFormatter-pm.html">UpgradeReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="VariableAdvisorRules-pm.html">VariableAdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="VersionParser-pm.html">VersionParser</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Tools</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../tools/pt-archiver-pm.html">pt_archiver</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-config-diff-pm.html">pt_config_diff</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-deadlock-logger-pm.html">pt_deadlock_logger</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-duplicate-key-checker-pm.html">pt_duplicate_key_checker</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-fifo-split-pm.html">pt_fifo_split</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-find-pm.html">pt_find</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-fk-error-logger-pm.html">pt_fk_error_logger</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-heartbeat-pm.html">pt_heartbeat</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-index-usage-pm.html">pt_index_usage</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-kill-pm.html">pt_kill</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-log-player-pm.html">pt_log_player</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-online-schema-change-pm.html">pt_online_schema_change</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-profile-compact-pm.html">pt_profile_compact</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-advisor-pm.html">pt_query_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-digest-pm.html">pt_query_digest</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-profiler-pm.html">pt_query_profiler</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-schema-advisor-pm.html">pt_schema_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-show-grants-pm.html">pt_show_grants</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-delay-pm.html">pt_slave_delay</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-find-pm.html">pt_slave_find</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-restart-pm.html">pt_slave_restart</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-checksum-pm.html">pt_table_checksum</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-sync-pm.html">pt_table_sync</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-usage-pm.html">pt_table_usage</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-tcp-model-pm.html">pt_tcp_model</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-trend-pm.html">pt_trend</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-upgrade-pm.html">pt_upgrade</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-variable-advisor-pm.html">pt_variable_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-visual-explain-pm.html">pt_visual_explain</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Index</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Variables.html">Variables</a></div></div></div></div></div><script type="text/javascript"><!--
89
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
90
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Functions">Functions</option><option value="Variables">Variables</option></select></div><script language=JavaScript><!--
91
HideAllBut([1], 4);// --></script></div><!--Menu-->
95
<!--START_ND_TOOLTIPS-->
96
<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub new</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub find_chunk_columns</td></tr></table></blockquote>Find chunkable columns.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_chunks</td></tr></table></blockquote>Calculate chunks for the given range statistics. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _chunk_numeric</td></tr></table></blockquote>Determine how to chunk a numeric column.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _chunk_char</td></tr></table></blockquote></div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_first_chunkable_column</td></tr></table></blockquote>Get the first chunkable column in a table. </div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub size_to_rows</td></tr></table></blockquote>Convert a size in rows or bytes to a number of rows in the table, using SHOW TABLE STATUS. </div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_range_statistics</td></tr></table></blockquote>Determine the range of values for the chunk_col column on this table.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub inject_chunks</td></tr></table></blockquote>Create a SQL statement from a query prototype by filling in placeholders.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub value_to_number</td></tr></table></blockquote></div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_num</td></tr></table></blockquote></div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_time</td></tr></table></blockquote></div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_date</td></tr></table></blockquote></div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_datetime</td></tr></table></blockquote></div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub range_timestamp</td></tr></table></blockquote></div></div><div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub timestampdiff</td></tr></table></blockquote></div></div><div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_valid_end_points</td></tr></table></blockquote></div></div><div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _get_valid_end_point</td></tr></table></blockquote></div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_first_valid_value</td></tr></table></blockquote></div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _validate_temporal_value</td></tr></table></blockquote></div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_nonzero_value</td></tr></table></blockquote></div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub base_count</td></tr></table></blockquote>Count to any number in any base with the given symbols. </div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _d</td></tr></table></blockquote></div></div><div class=CToolTip id="tt24"><div class=CClass>Quoter handles value quoting, unquoting, escaping, etc.</div></div><div class=CToolTip id="tt25"><div class=CClass>MySQLDump gets CREATE TABLE defs from MySQL.</div></div><div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub parse</td></tr></table></blockquote>Parse SHOW CREATE TABLE.</div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub make_checksum_query</td></tr></table></blockquote></div></div><!--END_ND_TOOLTIPS-->
101
<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
104
<script language=JavaScript><!--
105
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
b'\\ No newline at end of file'