blob: 6e19f3f9e7bab815f29101cbe99671a8741824d7 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>org.apache.calcite.test.concurrent (Calcite 1.20.0 Test API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="org.apache.calcite.test.concurrent (Calcite 1.20.0 Test API)";
}
}
catch(err) {
}
//-->
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<main role="main">
<div class="header">
<h1 title="Package" class="title">Package&nbsp;org.apache.calcite.test.concurrent</h1>
</div>
<div class="contentContainer">
<section role="region"><a id="package.description">
<!-- -->
</a>
<div class="block">A framework for concurrent JDBC unit tests.
<p>The class <code>ConcurrentCommandGenerator</code> provides a Java API for
constructing concurrent JDBC tests: an instance of the class represents a
test case, which contains several sequences of SQL commands (abstracted as
subclasses of <code>ConcurrentCommand</code>). Each sequence is run in its
own thread as a separate jdbc client (ie a separate
<code>java.sql.Connection</code>). There are facilties to synchronize these
command threads. Only a simple command sequence is supported: no branching,
no looping.</p>
<p>An alternative is to define a test by writing a test script in
<code>mtsql</code> format, as described below. An instance of
<code>ConcurrentCommandScript</code> parses and executes a script.</p>
<h3>Script Format</h3>
<h4>Syntax:</h4>
<p>The syntactic structure of an <i>mtsql</i> script is:
<blockquote><pre>
&lt;directive&gt;*
&lt;setup section&gt;?
&lt;cleanup section&gt;?
&lt;thread section&gt;+
&nbsp;
&lt;directive&gt; := &#64;[no]lockstep | &#64;enable | &#64;disable
&lt;setup section&gt; := &#64;setup &lt;basic command&gt;* &#64;end
&lt;cleanup section&gt; := &#64;setup &lt;basic command&gt;* &#64;end
&lt;thread section&gt; := &#64;thread &lt;thread-name&gt;?
&lt;command&gt;* &#64;end
&nbsp;
&lt;command&gt; :=
&lt;basic command&gt; |
&lt;command prefix&gt;? &lt;threadly command&gt; |
&lt;synchronization point&gt;
</pre></blockquote>
<p>Blank lines and comments are allowed anywhere.
A comment starts with two hyphens and runs to the end of the line.
Command names start with an '&#64;'.
Some commands run to the end of the line; but a command that contains SQL
can
span lines and ends with a semicolon.
<h4>Semantics:</h4>
<p>Running a section means running its commands in sequence.
First the setup section (if any) is run.
Next all the thread sections are run at once, each in its own thread.
When all these threads complete, the cleanup section (if any) is run.
<h4>Synchronization:</h4>
<p>The threads are synchronized by inserting synchronization points
(&#64;sync).</p>
<p>When a thread reaches a &#64;sync, it waits until all threads are waiting
on the same &#64;sync: then all threads proceed. &#64;sync points have no
names. Clearly all thread sections must contain the same number of &#64;sync
points.</p>
<p>The directive &#64;lockstep has the same effect as adding a &#64;sync
after each command in every thread section. Clearly it requires that all
thread sections have the same number of commands. The default is the antonym
&#64;nolockstep.</p>
<p>The directive &#64;disable means "skip this script". The deault is the
antonym &#64;enable.</p>
<h4>Error handling: </h4>
<p>When a sql command fails, the rest of its section is skipped. However, if
the attribute <i>force</i> is true the error is ignored, and the section
continues. <i>force</i> has an independent value in each section. Within a
section it can be toggled using the sql directive <code>!SET FORCE
<i>val</i></code>, where <i>val</i> can be <i>true, false, on, off.</i> (This
is modelled after sqlline and sqllineClient. Other sqlline
<i>!-</i>directives are ignored.)</p>
<p>An error in a thread section will stop that thread, but the other threads
continue (with one fewer partner to synchronize with), and finally the
cleanup section runs. If the setup section quits, then only the cleanup
section is run.</p>
<h4>Basic Commands (allowed in any section):</h4>
<blockquote><pre>
&lt;SQL statement&gt;:
An SQL statement terminated by a semicolon. The statement can span lines.
</pre></blockquote>
<blockquote><pre>
&#64;include FILE
Reads and executes the contents of FILE, another mtsql script.
Inclusions may nest.
</pre></blockquote>
<h4>Threaded Commands (allowed only in a &#64;thread section):</h4>
<blockquote><pre>
&#64;sleep N -- thread sleeps for N milliseconds
&#64;echo MESSAGE -- prints the message to stdout
&nbsp;
&lt;SQL statement&gt; ';' -- executes the SQL
&#64;timeout N &lt;SQL&gt; ';' -- executes the SQL with the given ms timeout
&#64;rowlimit N &lt;SQL&gt; ';' -- executes the SQL, stops after N rows
&#64;err &lt;SQL&gt; ';' -- executes the SQL, expecting it to fail
&nbsp;
&#64;repeat N &lt;command&gt;+ &#64;end
Denotes a repeated block of commands, with repeat count = N.
N must be positive.
&nbsp;
&#64;prepare SQL-STATEMENT ';'
Prepares the sql. A thread has at most one prepared statement at a time.
&nbsp;
&#64;print FORMAT
Sets the result-printing format for the current prepared statement.
FORMAT is a sequence of the phrases:
none -- means print nothing
all -- means print all rows (the default)
every N -- means print the rows 0, N, 2N, etc.
count -- means print row number (starts with 0).
time -- means print the time each printed row was fetched
total -- means print a final summary, with row count and
net fetch time (not including any timeout).
&nbsp;
(Sorry, no way yet to print selected columns, to print time in a special way,
etc.)
&nbsp;
&#64;fetch &lt;timeout&gt;?
Starts fetching and printing result rows, with an optional timeout (in
msecs). Stop on EOD or on timeout.
&nbsp;
&#64;close
Closes the current prepared statement. However that an open prepared
statement will be closed automatically at the end of its thread.
&nbsp;
&#64;shell &lt;Shell Command&gt;
Runs the command in a spawned subshell, proceeds after it concludes, but
quits if it fails. For &#64;shell and &#64;echo, the command or message
runs to the end of the line in the script, but can be continued if the
line ends with a single '\'.
</pre></blockquote>
<h4>Substituted Variables</h4>
<p>Needed mainly to pass arguments to the command of &#64;shell, but also
useful to
parameterize SQL statements, timeout values etc.
<ul>
<li>Variable Expansion: If VAR is a declared variable, $VAR is replaced
by the value of VAR. Quotes are ignored. $$ expands to $. A variable
cannot expand to a mtsql command name.</li>
<li>Variable Declaration: Before being used, a script variable must be
explicitly declared in the script (or an included script)
by a &#64;var command.</li>
</ul>
<blockquote><pre>
&#64;var VAR
Declares a variable VAR
&#64;var VAR1 VAR2 ... VARn
Declares n variables.
</pre></blockquote>
<p>The initial value of a script variable VAR is taken from the shell
environment variable of the same name. The value can be set to a
different value when the script is run, by employing a phrase
VAR=VALUE on the mtsql command line.</p>
<h4>Stand-Alone Tool</h4>
<p>A command-line tool that runs an mtsql script against a specified JDBC
connection,a nd prints the query results. (But see &#64;print command to
filter the output.)</p>
<p> Usage: mtsql [-qvg] -u SERVER -d DRIVER [-n USER] [-p PASSWORD]
[VAR=VALUE]* SCRIPT [SCRIPT]*<br>
Flags: -q : (quiet) do not print results.<br>
-v : (verbose) trace as script is parsed.<br>
-g : (debug) print command lists before starting the threads<br>
-u SERVER : sets the target; a JDBC URL.<br>
-d DRIVER : sets the jdbc driver; a class on the classpath<br>
VAR=VALUE : binds the script variable VAR to the VALUE; VAR must be
declared at the beginning of the script(s) in a &#64;var command.</p>
<h4>Example Script</h4>
<blockquote><pre>-- redundant:
&#64;nolockstep
&nbsp;
-- Two threads reading the same data.
&#64;thread 1,2
-- pre execute the SQL to prime the pumps
&#64;timeout 1000 select * from sales.bids;
&nbsp;
&#64;prepare select * from sales.bids;
&nbsp;
-- rendezvous with writer thread
&#64;sync
&#64;fetch 15000
&#64;sync
&#64;close
&#64;end
&nbsp;
&#64;thread writer
-- rendezvous with reader threads
&#64;sync
&#64;sleep 5000
insert into sales.bids
values(1, 'ORCL', 100, 12.34, 10000, 'Oracle at 12.34');
commit;
insert into sales.bids
values(2, 'MSFT', 101, 23.45, 20000, 'Microsoft at 23.45');
commit;
&nbsp;
-- real test has more inserts here
&nbsp;
&#64;sync
&#64;end</pre></blockquote>
<h3>Example Output File</h3>
<p>The output from each thread is stored in a temporary file until
the test completes. At that point, the files are merged together
into a single <code>.log</code> file containing the results of each
thread, in the order the threads were defined. The output for the
example script looks like:
<blockquote><pre>-- thread 1
&gt; select * from sales.bids;
+---------+------------+
| DEPTNO | NAME |
+---------+------------+
| 10 | Sales |
| 20 | Marketing |
| 30 | Accounts |
+---------+------------+
&gt;
&gt; select * from sales.bids;
+---------+------------+
| DEPTNO | NAME |
+---------+------------+
| 10 | Sales |
| 20 | Marketing |
| 30 | Accounts |
+---------+------------+
&nbsp;
-- end of thread 1
&nbsp;
-- thread 2
&gt; select * from sales.bids;
+---------+------------+
| DEPTNO | NAME |
+---------+------------+
| 10 | Sales |
| 20 | Marketing |
| 30 | Accounts |
+---------+------------+
&gt;
&gt; select * from sales.bids;
+---------+------------+
| DEPTNO | NAME |
+---------+------------+
| 10 | Sales |
| 20 | Marketing |
| 30 | Accounts |
+---------+------------+
&nbsp;
-- end of thread 2
&nbsp;
-- thread writer
&gt; insert into sales.bids
&gt; values(1, 'ORCL', 100, 12.34, 10000, 'Oracle at 12.34');
1 row affected.
&gt; commit;
&gt; insert into sales.bids
&gt; values(2, 'MSFT', 101, 23.45, 20000, 'Microsoft at 23.45');
1 row affected.
&gt; commit;
-- end of thread writer</pre></blockquote>
<p>(Yes the results of the select statements are obviously wrong.)
<h3>Open Issues</h3>
<ul>
<li>Repeating tests for a period of time isn't supported.</li>
</ul></div>
</section>
<ul class="blockList">
<li class="blockList">
<table class="typeSummary">
<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommand.html" title="interface in org.apache.calcite.test.concurrent">ConcurrentTestCommand</a></th>
<td class="colLast">
<div class="block">ConcurrentTestCommand represents a command, sequentially executed by
<a href="ConcurrentTestCommandExecutor.html" title="class in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommandExecutor</code></a>, during a concurrency test</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestPluginCommand.html" title="interface in org.apache.calcite.test.concurrent">ConcurrentTestPluginCommand</a></th>
<td class="colLast">
<div class="block">Used to extend functionality of mtsql.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestPluginCommand.TestContext.html" title="interface in org.apache.calcite.test.concurrent">ConcurrentTestPluginCommand.TestContext</a></th>
<td class="colLast">
<div class="block">Test context.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary">
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandExecutor.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandExecutor</a></th>
<td class="colLast">
<div class="block">ConcurrentTestCommandExecutor is a thread that executes a sequence of
<a href="ConcurrentTestCommand.html" title="interface in org.apache.calcite.test.concurrent"><code>commands</code></a> on a JDBC connection.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandExecutor.Sync.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandExecutor.Sync</a></th>
<td class="colLast">
<div class="block">Synchronization object that allows multiple
ConcurrentTestCommandExecutors to execute commands in lock-step.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator</a></th>
<td class="colLast">
<div class="block">ConcurrentTestCommandGenerator creates instances of
<a href="ConcurrentTestCommand.html" title="interface in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommand</code></a> that perform specific actions in a specific
order and within the context of a test thread
(<a href="ConcurrentTestCommandExecutor.html" title="class in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommandExecutor</code></a>).</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.AbstractCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.AbstractCommand</a></th>
<td class="colLast">
<div class="block">abstract base to handle SQLExceptions</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.AutoSynchronizationCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.AutoSynchronizationCommand</a></th>
<td class="colLast">
<div class="block">AutoSynchronizationCommand is idential to SynchronizationCommand, except
that it is generated automatically by the test harness and is not counted
when displaying the step number in which an error occurred.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.CloseCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.CloseCommand</a></th>
<td class="colLast">
<div class="block">CloseCommand closes a previously prepared statement.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.CommandWithTimeout.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.CommandWithTimeout</a></th>
<td class="colLast">
<div class="block">Command that executes statements with a given timeout.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.CommitCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.CommitCommand</a></th>
<td class="colLast">
<div class="block">CommitCommand commits pending transactions via
<code>Connection.commit()</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.DdlCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.DdlCommand</a></th>
<td class="colLast">
<div class="block">DdlCommand executes DDL commands.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.ExplainCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.ExplainCommand</a></th>
<td class="colLast">
<div class="block">ExplainCommand executes explain plan commands.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.FailedThread.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.FailedThread</a></th>
<td class="colLast">
<div class="block">Describes a thread that failed</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.FetchAndCompareCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.FetchAndCompareCommand</a></th>
<td class="colLast">
<div class="block">FetchAndCompareCommand executes a previously prepared statement stored in
the ConcurrentTestCommandExecutor and then validates the returned
rows against expected data.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.InsertCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.InsertCommand</a></th>
<td class="colLast">
<div class="block">InsertCommand exeutes an insert, update or delete SQL statement.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.PrepareCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.PrepareCommand</a></th>
<td class="colLast">
<div class="block">PrepareCommand creates a <code>PreparedStatement</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.RollbackCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.RollbackCommand</a></th>
<td class="colLast">
<div class="block">RollbackCommand rolls back pending transactions via
<code>Connection.rollback()</code>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.SleepCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.SleepCommand</a></th>
<td class="colLast">
<div class="block">SleepCommand causes the execution thread to wait for all other threads in
the test before continuing.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandGenerator.SynchronizationCommand.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandGenerator.SynchronizationCommand</a></th>
<td class="colLast">
<div class="block">SynchronizationCommand causes the execution thread to wait for all other
threads in the test before continuing.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript</a></th>
<td class="colLast">
<div class="block">ConcurrentTestCommandScript creates instances of
<a href="ConcurrentTestCommand.html" title="interface in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommand</code></a> that perform specific actions in a specific
order and within the context of a test thread
(<a href="ConcurrentTestCommandExecutor.html" title="class in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommandExecutor</code></a>).</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.CommandWithTimeout.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript.CommandWithTimeout</a></th>
<td class="colLast">
<div class="block">Command that has a timeout.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.CommandWithTimeoutAndRowLimit.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript.CommandWithTimeoutAndRowLimit</a></th>
<td class="colLast">
<div class="block">Command with timeout and row limit.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.StateAction.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript.StateAction</a></th>
<td class="colLast">
<div class="block">State action.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.StateDatum.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript.StateDatum</a></th>
<td class="colLast">
<div class="block">State datum.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommandScript.Tool.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommandScript.Tool</a></th>
<td class="colLast">
<div class="block">Standalone client test tool.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestPlugin.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestPlugin</a></th>
<td class="colLast">
<div class="block">Used to extend functionality of mtsql.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestTimedCommandGenerator.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestTimedCommandGenerator</a></th>
<td class="colLast">
<div class="block">ConcurrentTestTimedCommandGenerator extends
<a href="ConcurrentTestCommandGenerator.html" title="class in org.apache.calcite.test.concurrent"><code>ConcurrentTestCommandGenerator</code></a> and repeats the configured command
sequence until a certain amount of time has elapsed.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SamplePlugin.html" title="class in org.apache.calcite.test.concurrent">SamplePlugin</a></th>
<td class="colLast">
<div class="block">Sample mtsql plugin.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SamplePlugin.DescribeResultSet.html" title="class in org.apache.calcite.test.concurrent">SamplePlugin.DescribeResultSet</a></th>
<td class="colLast">
<div class="block">Command that describes a result set.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary">
<caption><span>Exception Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Exception</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ConcurrentTestCommand.ShouldHaveFailedException.html" title="class in org.apache.calcite.test.concurrent">ConcurrentTestCommand.ShouldHaveFailedException</a></th>
<td class="colLast">
<div class="block">Indicates that a command should have failed, but instead succeeded, which
is a test error</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2012&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>