blob: 9e14cb97566fb2f3e2733cbc0f36cd21b7133ea1 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ClassBuilder (Drill : 1.20.3 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ClassBuilder (Drill : 1.20.3 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ClassBuilder.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/drill/exec/compile/ClassBodyBuilder.html" title="class in org.apache.drill.exec.compile"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/drill/exec/compile/ClassCompilerSelector.html" title="class in org.apache.drill.exec.compile"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/drill/exec/compile/ClassBuilder.html" target="_top">Frames</a></li>
<li><a href="ClassBuilder.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.drill.exec.compile</div>
<h2 title="Class ClassBuilder" class="title">Class ClassBuilder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.drill.exec.compile.ClassBuilder</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">ClassBuilder</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Implements the "plain Java" method of code generation and
compilation. Given a <a href="../../../../../org/apache/drill/exec/expr/CodeGenerator.html" title="class in org.apache.drill.exec.expr"><code>CodeGenerator</code></a>, obtains the generated
source code, compiles it with the selected compiler, loads the
byte-codes into a class loader and provides the resulting
class. Compared with the <a href="../../../../../org/apache/drill/exec/compile/ClassTransformer.html" title="class in org.apache.drill.exec.compile"><code>ClassTransformer</code></a> mechanism,
this one requires the code generator to have generated a complete
Java class that is capable of direct compilation and loading.
This means the generated class must be a subclass of the template
so that the JVM can use normal Java inheritance to associate the
template and generated methods.
<p>
Here is how to use the plain Java technique to debug
generated code:
<ul>
<li>Set the config option <tt>drill.exec.compile.code_dir</tt>
to the location where you want to save the generated source
code.</li>
<li>Where you generate code (using a <a href="../../../../../org/apache/drill/exec/expr/CodeGenerator.html" title="class in org.apache.drill.exec.expr"><code>CodeGenerator</code></a>),
set the "plain Java" options:<pre>
CodeGenerator&lt;Foo> cg = ...
cg.plainJavaCapable(true); // Class supports plain Java
cg.preferPlainJava(true); // Actually generate plain Java
cg.saveCodeForDebugging(true); // Save code for debugging
...</pre>
Note that <tt>saveCodeForDebugging</tt> automatically sets the PJ
option if the generator is capable. Call <tt>preferPlainJava</tt>
only if you want to try PJ for this particular generated class
without saving the generated code.</li>
<li>In your favorite IDE, add to the code lookup path the
code directory saved earlier. In Eclipse, for example, you do
this in the debug configuration you will use to debug Drill.</li>
<li>Set a breakpoint in template used for the generated code.</li>
<li>Run Drill. The IDE will stop at your breakpoint.</li>
<li>Step into the generated code. Examine class field and
local variables. Have fun!</li>
</ul>
<p>
Most generated classes have been upgraded to support Plain Java
compilation. Once this work is complete, the calls to
<tt>plainJavaCapable<tt> can be removed as all generated classes
will be capable.
<p>
The setting to prefer plain Java is ignored for any remaining generated
classes not marked as plain Java capable.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/drill/exec/compile/ClassBuilder.html#CODE_DIR_OPTION">CODE_DIR_OPTION</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/drill/exec/compile/ClassBuilder.html#ClassBuilder-org.apache.drill.common.config.DrillConfig-org.apache.drill.exec.server.options.OptionSet-">ClassBuilder</a></span>(<a href="../../../../../org/apache/drill/common/config/DrillConfig.html" title="class in org.apache.drill.common.config">DrillConfig</a>&nbsp;config,
<a href="../../../../../org/apache/drill/exec/server/options/OptionSet.html" title="interface in org.apache.drill.exec.server.options">OptionSet</a>&nbsp;optionManager)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/drill/exec/compile/ClassBuilder.html#getCompiledClass-java.lang.String-java.lang.String-org.apache.drill.common.config.DrillConfig-org.apache.drill.exec.server.options.OptionSet-">getCompiledClass</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;code,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className,
<a href="../../../../../org/apache/drill/common/config/DrillConfig.html" title="class in org.apache.drill.common.config">DrillConfig</a>&nbsp;config,
<a href="../../../../../org/apache/drill/exec/server/options/OptionSet.html" title="interface in org.apache.drill.exec.server.options">OptionSet</a>&nbsp;options)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/drill/exec/compile/ClassBuilder.html#getImplementationClass-org.apache.drill.exec.expr.CodeGenerator-">getImplementationClass</a></span>(<a href="../../../../../org/apache/drill/exec/expr/CodeGenerator.html" title="class in org.apache.drill.exec.expr">CodeGenerator</a>&lt;?&gt;&nbsp;cg)</code>
<div class="block">Given a code generator which has already generated plain Java
code, compile the code, create a class loader, and return the
resulting Java class.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="CODE_DIR_OPTION">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>CODE_DIR_OPTION</h4>
<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> CODE_DIR_OPTION</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.drill.exec.compile.ClassBuilder.CODE_DIR_OPTION">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="ClassBuilder-org.apache.drill.common.config.DrillConfig-org.apache.drill.exec.server.options.OptionSet-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ClassBuilder</h4>
<pre>public&nbsp;ClassBuilder(<a href="../../../../../org/apache/drill/common/config/DrillConfig.html" title="class in org.apache.drill.common.config">DrillConfig</a>&nbsp;config,
<a href="../../../../../org/apache/drill/exec/server/options/OptionSet.html" title="interface in org.apache.drill.exec.server.options">OptionSet</a>&nbsp;optionManager)</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getImplementationClass-org.apache.drill.exec.expr.CodeGenerator-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getImplementationClass</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;getImplementationClass(<a href="../../../../../org/apache/drill/exec/expr/CodeGenerator.html" title="class in org.apache.drill.exec.expr">CodeGenerator</a>&lt;?&gt;&nbsp;cg)
throws <a href="../../../../../org/apache/drill/exec/exception/ClassTransformationException.html" title="class in org.apache.drill.exec.exception">ClassTransformationException</a></pre>
<div class="block">Given a code generator which has already generated plain Java
code, compile the code, create a class loader, and return the
resulting Java class.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>cg</code> - a plain Java capable code generator that has generated
plain Java code</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the class that the code generator defines</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/drill/exec/exception/ClassTransformationException.html" title="class in org.apache.drill.exec.exception">ClassTransformationException</a></code></dd>
</dl>
</li>
</ul>
<a name="getCompiledClass-java.lang.String-java.lang.String-org.apache.drill.common.config.DrillConfig-org.apache.drill.exec.server.options.OptionSet-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getCompiledClass</h4>
<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;getCompiledClass(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;code,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className,
<a href="../../../../../org/apache/drill/common/config/DrillConfig.html" title="class in org.apache.drill.common.config">DrillConfig</a>&nbsp;config,
<a href="../../../../../org/apache/drill/exec/server/options/OptionSet.html" title="interface in org.apache.drill.exec.server.options">OptionSet</a>&nbsp;options)
throws org.codehaus.commons.compiler.CompileException,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a>,
<a href="../../../../../org/apache/drill/exec/exception/ClassTransformationException.html" title="class in org.apache.drill.exec.exception">ClassTransformationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.codehaus.commons.compiler.CompileException</code></dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></code></dd>
<dd><code><a href="../../../../../org/apache/drill/exec/exception/ClassTransformationException.html" title="class in org.apache.drill.exec.exception">ClassTransformationException</a></code></dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ClassBuilder.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/drill/exec/compile/ClassBodyBuilder.html" title="class in org.apache.drill.exec.compile"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/drill/exec/compile/ClassCompilerSelector.html" title="class in org.apache.drill.exec.compile"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/drill/exec/compile/ClassBuilder.html" target="_top">Frames</a></li>
<li><a href="ClassBuilder.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 1970 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>