blob: 8b19b95f13a01c270f21149e8e153b01237356c1 [file] [log] [blame]
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 10">
<meta name=Originator content="Microsoft Word 10">
<title>SQL Query Parser User documentation</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>Rupesh</o:Author>
<o:Template>Normal</o:Template>
<o:LastAuthor>Rupesh</o:LastAuthor>
<o:Revision>19</o:Revision>
<o:TotalTime>494</o:TotalTime>
<o:Created>2005-12-15T21:14:00Z</o:Created>
<o:LastSaved>2005-12-21T00:23:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>1438</o:Words>
<o:Characters>8202</o:Characters>
<o:Company>IBM</o:Company>
<o:Lines>68</o:Lines>
<o:Paragraphs>19</o:Paragraphs>
<o:CharactersWithSpaces>9621</o:CharactersWithSpaces>
<o:Version>10.6735</o:Version>
</o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Helv;
panose-1:2 11 6 4 2 2 2 3 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
h1
{mso-style-next:Normal;
margin-top:12.0pt;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:1;
font-size:16.0pt;
font-family:Arial;
mso-font-kerning:16.0pt;}
h2
{mso-style-next:Normal;
margin-top:12.0pt;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:2;
font-size:14.0pt;
font-family:Arial;
font-style:italic;}
h3
{mso-style-next:Normal;
margin-top:12.0pt;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:3;
font-size:13.0pt;
font-family:Arial;}
span.SpellE
{mso-style-name:"";
mso-spl-e:yes;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:115029601;
mso-list-template-ids:-752958178;}
@list l0:level1
{mso-level-start-at:2;
mso-level-text:%1;
mso-level-tab-stop:20.25pt;
mso-level-number-position:left;
margin-left:20.25pt;
text-indent:-20.25pt;}
@list l0:level2
{mso-level-text:"%1\.%2";
mso-level-tab-stop:.5in;
mso-level-number-position:left;
margin-left:.5in;
text-indent:-.5in;}
@list l0:level3
{mso-level-text:"%1\.%2\.%3";
mso-level-tab-stop:.5in;
mso-level-number-position:left;
margin-left:.5in;
text-indent:-.5in;}
@list l0:level4
{mso-level-text:"%1\.%2\.%3\.%4";
mso-level-tab-stop:.75in;
mso-level-number-position:left;
margin-left:.75in;
text-indent:-.75in;}
@list l0:level5
{mso-level-text:"%1\.%2\.%3\.%4\.%5";
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
margin-left:1.0in;
text-indent:-1.0in;}
@list l0:level6
{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
margin-left:1.0in;
text-indent:-1.0in;}
@list l0:level7
{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
mso-level-tab-stop:1.25in;
mso-level-number-position:left;
margin-left:1.25in;
text-indent:-1.25in;}
@list l0:level8
{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
mso-level-tab-stop:1.25in;
mso-level-number-position:left;
margin-left:1.25in;
text-indent:-1.25in;}
@list l0:level9
{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
margin-left:1.5in;
text-indent:-1.5in;}
@list l1
{mso-list-id:646207190;
mso-list-type:hybrid;
mso-list-template-ids:-749714554 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l2
{mso-list-id:1169910884;
mso-list-template-ids:739684470;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3
{mso-list-id:2068717998;
mso-list-type:hybrid;
mso-list-template-ids:2141609920 67698703 67698689 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
{mso-level-tab-stop:.25in;
mso-level-number-position:left;
margin-left:.25in;
text-indent:-.25in;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l3:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}
table.MsoTableGrid
{mso-style-name:"Table Grid";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}
</style>
<![endif]-->
</head>
<body lang=EN-US style='tab-interval:.5in'>
<div class=Section1>
<h1 style='margin-left:.25in;text-align:justify;text-indent:-.25in;mso-list:
l3 level1 lfo2;tab-stops:list 0in .25in'><![if !supportLists]><span
style='mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>1.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Introduction</h1>
<p class=MsoNormal style='text-align:justify'>The SQL Query Parser (also
referred to as ‘parser’ in this document) is a generated parser. LPG (<span
class=SpellE>Lexer</span> Parser Generator) is used to generate the parser,
which, based on a set of grammar rules, generates the Parser and <span
class=SpellE>Lexer</span> source code in Java. The focus of this document is on
how to use the generated parser.</p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='text-align:justify'>The parser takes SQL DML
statements as input and creates instances of SQL Query Model classes if the SQL
is syntactically valid. In addition to the syntactic validation, the parser can
also perform a semantic validation. The parser is extensible to support vendor
specific dialects and custom source generation.</p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<h1 style='margin-left:.25in;text-align:justify;text-indent:-.25in;mso-list:
l3 level1 lfo2;tab-stops:list 0in .25in'><![if !supportLists]><span
style='mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Usage</h1>
<p class=MsoNormal>// imports needed</p>
<p class=MsoNormal>import <span class=SpellE>java.util.ArrayList</span>;</p>
<p class=MsoNormal>import <span class=SpellE>java.util.Iterator</span>;</p>
<p class=MsoNormal>import java.util.List;</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal>import org.eclipse.datatools.modelbase.sql.datatypes.DataType;</p>
<p class=MsoNormal>import
org.eclipse.datatools.modelbase.sql.query.QueryStatement;</p>
<p class=MsoNormal>import
org.eclipse.datatools.modelbase.sql.query.ValueExpressionColumn;</p>
<p class=MsoNormal>import
org.eclipse.datatools.modelbase.sql.query.helper.StatementHelper;</p>
<p class=MsoNormal>import
org.eclipse.datatools.modelbase.sql.query.util.SQLQuerySourceFormat;</p>
<p class=MsoNormal>import org.eclipse.datatools.modelbase.sql.schema.Database;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.SQLParseErrorInfo;</p>
<p class=MsoNormal>import org.eclipse.datatools.sqltools.parsers.sql.SQLParserException;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.SQLParserInternalException;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.postparse.PostParseProcessor;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParseResult;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParserManager;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParserManagerProvider;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.query.postparse.DataTypeResolver;</p>
<p class=MsoNormal>import
org.eclipse.datatools.sqltools.parsers.sql.query.postparse.TableReferenceResolver;</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<h2 style='margin-left:.5in;text-indent:-.5in;mso-list:l0 level2 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
Arial;font-style:normal;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>2.1<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-style:normal;mso-bidi-font-style:
italic'>Invoking the parser <o:p></o:p></span></h2>
<p class=MsoNormal>This code snippet below shows how to use the parser without
using the semantic validation (known as post parse processing) and source formatting.
</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>try
{</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
Create an instance the Parser Manager</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
SQLQueryParserManagerProvider.getInstance().getParserManager</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
returns the best compliant SQLQueryParserManager</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
supporting the SQL dialect of the database described by the given</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
database product information. In the code below null is passed for both the
database and version</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
in which case a generic parser is returned</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>SQLQueryParserManager
parserManager = SQLQueryParserManagerProvider</p>
<p class=MsoNormal><span style='mso-tab-count:5'>                                                            </span>.getInstance().getParserManager(null,
null);</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//Sample
query</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>String
sql = &quot;SELECT * FROM TABLE1&quot;;</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//Parse</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>SQLQueryParseResult
parseResult = parserManager.parseQuery(sql);</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
Get the Query Model object from the result </p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>QueryStatement
resultObject = parseResult.getQueryStatement();</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
Get the SQL text </p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>String
parsedSQL = resultObject.getSQL();</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>System.out.println(parsedSQL);</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>}
catch (SQLParserException spe) {</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
handle the syntax error</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>System.out.println(spe.getMessage());</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>List
syntacticErrors = spe.getErrorInfoList();</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>Iterator
itr = syntacticErrors.iterator();</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>while
(itr.hasNext()) {</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>SQLParseErrorInfo
errorInfo = (SQLParseErrorInfo) itr.next();</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>//
Example usage of the SQLParseErrorInfo object</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>//
the error message</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>String
errorMessage = errorInfo.getParserErrorMessage();</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>//
the line numbers of error</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>int
errorLine = errorInfo.getLineNumberStart();</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>int
errorColumn = errorInfo.getColumnNumberStart();</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>}</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>}
catch (SQLParserInternalException spie) {</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span>//
handle the exception</p>
<p class=MsoNormal><span style='mso-tab-count:3'>                                    </span><span
lang=DE style='mso-ansi-language:DE'>System.out.println(spie.getMessage());<o:p></o:p></span></p>
<p class=MsoNormal><span lang=DE style='mso-ansi-language:DE'><span
style='mso-tab-count:2'>                        </span></span>}</p>
<h2 style='margin-left:.5in;text-indent:-.5in;mso-list:l0 level2 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
Arial;font-style:normal;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>2.2<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-style:normal;mso-bidi-font-style:
italic'>Getting a parser manager for a specific vendor<o:p></o:p></span></h2>
<p class=MsoNormal>The recommended way is to instantiate a parser based on the
database vendor information so as to handle vendor specific variations of SQL.
The following code snippet shows how to create the parser based on the vendor
information</p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
TODO initialize the variable db with the </p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
org.eclipse.wst.rdb.internal.models.sql.schema.Database intance obtained from </p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
the database connection</p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
Database db;</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
TODO<span style='mso-spacerun:yes'>  </span>get the vendorname and version
after the variable is initialized </p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
String dbName = db.getVendor();</p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
String dbVersion = db.getVersion();</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>//
get the best matching parser manager depending on what parser extension are
plugged in</p>
<p class=MsoNormal><span style='mso-tab-count:2'>                        </span>SQLQueryParserManager
parserManager = SQLQueryParserManagerProvider</p>
<p class=MsoNormal><span style='mso-tab-count:4'>                                                </span>.getInstance().getParserManager(dbName,
dbVersion);</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<p class=MsoNormal>If not matching parser is found, then the generic parser is
retuned.</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<h2 style='margin-left:.5in;text-indent:-.5in;mso-list:l0 level2 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
Arial;font-style:normal;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>2.3<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-style:normal;mso-bidi-font-style:
italic'>Using post parse processing and source formatting<o:p></o:p></span></h2>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'>The semantic validation of the parsed
SQL is done in a step called the Post Parse Processing. <o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'>At present there are two types of
semantic validations are supported. <o:p></o:p></span></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='color:black;text-align:justify;line-height:12.0pt;
mso-list:l1 level1 lfo7;tab-stops:list .5in;mso-layout-grid-align:none;
text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv'>Table reference resolving – verifying that the
tables referred to in the SQL are existing in the database<o:p></o:p></span></li>
<li class=MsoNormal style='color:black;text-align:justify;line-height:12.0pt;
mso-list:l1 level1 lfo7;tab-stops:list .5in;mso-layout-grid-align:none;
text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv'>Data type resolving – verifying the data types
of the result columns<o:p></o:p></span></li>
</ul>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'>Appending the schema name to the
database object (for example schema1.table1) is optional, when the parser
generates the SQL after a successful parse.<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'>The following code snippet shows how to
configure post parse processors and the source formatting for the parser.<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
TODO initialize the variable db with the <o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
org.eclipse.wst.rdb.internal.models.sql.schema.Database intance obtained from <o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
the database connection<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
initialize the variable currentSchemaName to be the schema name<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
Database <span class=SpellE>database</span>;<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
String currentSchemaName;<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
String dbName = db.getVendor();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
String dbVersion = db.getVersion();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>String
sql = &quot;SELECT * FROM TABLE1&quot;;<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
create the post parse processors, maybe wrapped in <span class=SpellE>createPostParseProcessorList</span>()<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>PostParseProcessor</span> <span class=SpellE>tableRefResolver</span>
= new <span class=SpellE>TableReferenceResolver</span>(<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>database,
currentSchemaName);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>PostParseProcessor</span> <span class=SpellE>dataTypeResolver</span>
= new <span class=SpellE>DataTypeResolver</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
ordering is important for post parse processing! first we need to fill<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
in the database information for table references and column types<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>List
<span class=SpellE>postParseProcessors</span> = new <span class=SpellE>ArrayList</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>postParseProcessors.add</span>(0, <span class=SpellE>tableRefResolver</span>);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>postParseProcessors.add</span>(1, <span class=SpellE>dataTypeResolver</span>);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
get the SQL source format options and set at least the current schema<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
that is <span class=SpellE>omited</span> but implicit for any unqualified table
references<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
important for later resolving of table references!<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>SQLQuerySourceFormat</span> <span class=SpellE>sourceFormat</span>
= <span class=SpellE>SQLQuerySourceFormat</span><o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>.<span
class=SpellE>copyDefaultFormat</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>sourceFormat.setOmitSchema</span>(currentSchemaName);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>SQLQueryParserManager
parserManager = SQLQueryParserManagerProvider<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>.getInstance().getParserManager(dbName,
dbVersion);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span><span
class=SpellE>parserManager.configParser</span>(<span class=SpellE>sourceFormat</span>,
<span class=SpellE>postParseProcessors</span>);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>//
parse the SQL statement<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>try
{<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>SQLQueryParseResult
parseResult = parserManager.parseQuery(sql);<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>List
<span class=SpellE>semanticErrors</span> = <span class=SpellE>parseResult.getErrorList</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>Iterator
itr = <span class=SpellE>semanticErrors.iterator</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>while
(itr.hasNext()) {<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>SQLParseErrorInfo
errorInfo = (SQLParseErrorInfo) itr.next();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>//
the error message<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>String
errorMessage = errorInfo.getParserErrorMessage();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>//
the line numbers of error<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>int
errorLine = errorInfo.getLineNumberStart();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>int
errorColumn = errorInfo.getColumnNumberStart();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>//
Error processing for specific errors<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>String
<span class=SpellE>errorCode</span> = <span class=SpellE>errorInfo.getErrorCode</span>();<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>if
(<span class=SpellE>TableReferenceResolver.ERROR_CODE_TABLE_UNRESOLVED</span><o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:6'>                                                                                                </span>.equals(<span
class=SpellE>errorCode</span>)) {<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:5'>                                                                                </span>//
table not found<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>}
else if (<span class=SpellE>TableReferenceResolver.ERROR_CODE_COLUMN_UNRESOLVED</span><o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:6'>                                                                                                </span>.equals(<span
class=SpellE>errorCode</span>)<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:6'>                                                                                                </span>||
<span class=SpellE>TableReferenceResolver.ERROR_CODE_NONEXISTENT_COLUMN</span><o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:8'>                                                                                                                                </span>.equals(<span
class=SpellE>errorCode</span>)) {<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:5'>                                                                                </span>//
column not found<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:4'>                                                                </span>}<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>}<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>}
catch (SQLParserException spe) {<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>//
handle the syntax exception<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>System.out.println(spe.getMessage());<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:2'>                                </span>}
catch (SQLParserInternalException spie) {<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span>//
handle the exception<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><span style='mso-tab-count:3'>                                                </span></span><span
lang=DE style='font-size:10.0pt;font-family:Helv;mso-bidi-font-family:Helv;
color:black;mso-ansi-language:DE'>System.out.println(spie.getMessage());<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span lang=DE style='font-size:10.0pt;font-family:
Helv;mso-bidi-font-family:Helv;color:black;mso-ansi-language:DE'><span
style='mso-tab-count:2'>                                </span></span><span
style='font-size:10.0pt;font-family:Helv;mso-bidi-font-family:Helv;color:black'>}<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:justify;line-height:12.0pt;mso-layout-grid-align:
none;text-autospace:none'><span style='font-size:10.0pt;font-family:Helv;
mso-bidi-font-family:Helv;color:black'><o:p>&nbsp;</o:p></span></p>
<h2 style='margin-left:.5in;text-indent:-.5in;mso-list:l0 level2 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family:
Arial;font-style:normal;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>2.4<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-style:normal;mso-bidi-font-style:
italic'>Getting result columns<o:p></o:p></span></h2>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//
the effective result columns of a <span class=SpellE>QuerySelectStatement</span>
are the columns that are returned by</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//
the select statement</p>
<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//
e.g.:<span style='mso-spacerun:yes'>   </span>SELECT SUBQRY.* FROM (SELECT
COL1, COL2 FROM TABLEA) AS SUBQRY</p>
<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//
QueryStatement <span class=SpellE>queryStmt</span> =
parserManager.parseQuery(&quot;SELECT SUBQRY.* FROM (SELECT COL1, COL2 FROM
TABLEA) AS SUBQRY&quot;);</p>
<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//<span
style='mso-tab-count:1'>          </span> get the List of effective result
columns with data types </p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>List
<span class=SpellE>columnExprList</span> = <span class=SpellE>StatementHelper</span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:4'>                                                </span>.<span
class=SpellE>getEffectivesResultColumns</span>(<span class=SpellE>queryStmt</span>);</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>Iterator
<span class=SpellE>columnIt</span> = <span class=SpellE>columnExprList.iterator</span>();</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>while
(<span class=SpellE>columnIt.hasNext</span>()) {</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:3'>                                    </span><span
class=SpellE>ValueExpressionColumn</span> <span class=SpellE>colExpr</span> = (<span
class=SpellE>ValueExpressionColumn</span>) <span class=SpellE>columnIt</span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:5'>                                                            </span>.next();</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:3'>                                    </span><span
class=SpellE>DataType</span> <span class=SpellE>dataType</span> = <span
class=SpellE>colExpr.getDataType</span>();</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:3'>                                    </span>System.out.println(&quot;effective
result column: &quot; + <span class=SpellE>colExpr.getName</span>()</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:5'>                                                            </span>+
&quot; with data type: &quot; + <span class=SpellE>dataType.getPrimitiveType</span>());</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>}</p>
<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//
expected Output of example &quot;SELECT SUBQRY.* FROM (SELECT COL1, COL2 FROM
TABLEA) AS SUBQRY&quot;:</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//<span
style='mso-spacerun:yes'>     </span>effective result column: COL1 with data
type: VARCHAR</p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:2'>                        </span>//<span
style='mso-spacerun:yes'>     </span>effective result column: COL2 with data
type: VARCHAR</p>
<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='margin-left:.5in'><span style='mso-tab-count:1'>            </span>}</p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
<h1 style='margin-left:20.25pt;text-align:justify;text-indent:-20.25pt;
mso-list:l0 level1 lfo4;tab-stops:list 20.25pt'><![if !supportLists]><span
style='mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>3<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Parser <span class=SpellE>Plugins</span></h1>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=645
style='width:483.4pt;border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt;mso-border-insideh:
.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
<tr style='mso-yfti-irow:0;height:20.45pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE><b
style='mso-bidi-font-weight:normal'>Plugins</b></span><b style='mso-bidi-font-weight:
normal'><o:p></o:p></b></p>
</td>
<td width=252 valign=top style='width:188.9pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
<p class=MsoNormal style='text-align:justify'><b style='mso-bidi-font-weight:
normal'>Description<o:p></o:p></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;height:62.4pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
padding:0in 5.4pt 0in 5.4pt;height:62.4pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.lexer</span></p>
<p class=MsoNormal style='text-align:justify'>org.eclipse.datatools.sqltools.parsers.sql.lexer.db2</p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
<td width=252 valign=top style='width:188.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:62.4pt'>
<p class=MsoNormal style='text-align:justify'>SQL <span class=SpellE>Lexer</span>
and<span style='mso-spacerun:yes'>  </span><span class=SpellE>lexer</span> to
support DB2 specific keywords</p>
</td>
</tr>
<tr style='mso-yfti-irow:2;height:20.45pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql</span></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
<td width=252 valign=top style='width:188.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
</tr>
<tr style='mso-yfti-irow:3;height:21.55pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.query</span></p>
<p class=MsoNormal style='text-align:justify'>org.eclipse.datatools.sqltools.parsers.sql.query.db2</p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
<td width=252 valign=top style='width:188.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'>DML Parser and extension<span
style='mso-spacerun:yes'>  </span>to support SQL dialect specific to DB2</p>
</td>
</tr>
<tr style='mso-yfti-irow:4;height:21.55pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.xml.query</span></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
<td width=252 valign=top style='width:188.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'>Parser for SQL/XML:</p>
</td>
</tr>
<tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes;height:21.55pt'>
<td width=393 valign=top style='width:294.5pt;border:solid windowtext 1.0pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'>org.eclipse.datatools.sqltools.parsers.sql.query.db2.test</p>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.query.test</span></p>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.test</span></p>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>org.eclipse.datatools.sqltools.parsers.sql.xml.query.test</span></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</td>
<td width=252 valign=top style='width:188.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt;height:21.55pt'>
<p class=MsoNormal style='text-align:justify'><span class=SpellE>JUint</span>
test cases for the parser</p>
</td>
</tr>
</table>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
<p class=MsoNormal style='text-align:justify'><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>