<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Nathan Gervais
	# Date:			2007-12-05
	#
	# Description: DTP Website
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "DTP SQL Development Tools Project";
	$pageKeywords	= "eclipse, data tools, dtp, datatools, sqldevtools, sql";
	$pageAuthor		= "Nathan Gervais";
	
	ob_start();
	?>
	<div id="midcolumn">
		<h1><?=$pageTitle; ?></h1>
		<div class="homeitem3col">
			<h3>Project Overview</h3>
			<p>The SQL Development Tools project provides frameworks and tools for deep and broad SQL support.</p>
		</div>
		<hr class="clearer">
		<div class="homeitem3col">
			<h3>What's New</h3>
			<ul>
				<li>
					<b>November 28, 2008:</b> <a href="plans/SQL Dev Tools Plan.html" target="main">Development schedule posted</a>
				</li>
				<li>
					<b>June 2008:</b> SQL Query Builder added to available tools
			    </li>
			</ul>				
		</div>
		
		<div class="homeitem3col">
			<h3>Project Components</h3>
<ul><li><p><b>Routines Editor Framework</b><br/><br/>An extensible framework for editing database routines and SQL statements. 
      Vendor-specific extensions enable specialized support for particular databases.</p></ul>
<!--
	  <ul><LI><P><b>Routines Debugger Framework</b><br/><br/>While routine debug support varies widely in existing database offerings, 
	  the Routines Debugger Framework will provide an extensible base enabling debug support for specific cases in a manner consistent 
	  with existing Eclipse debug infrastructure.</p></ul>
-->
	  <ul><li><p><b>SQL Query Parser</b><br/><br/>Although SQL is defined by a standard, several major dialects exist. Thus, 
	  while the standard must be supported, practicality also demands flexibility in adjustment to dialects. The SQL Query 
	  Parser meets these needs by providing an extensible framework, enabling dialect-aware SQL components and tools.</p>
	  <p><b>IMPORTANT: </b><a href="sqltools_doc/sqlqueryparser_lpg_readme.html">Obtaining lpg.jar required by the SQL Query Parser</a></b></p>
	  <p><i>Using the SQL Query Parser</i> (<a href="sqltools_doc/SQL Query Parser User documentation.htm">HTML</a>)</p>
	  </ul>
<!--
	  <ul><li><p><b>SQL Execution Plan Framework</b><br/><br/>The ability to understand how a SQL evaluation engine will 
	  execute a given query is vital in tuning queries to optimize performance. The SQL Execution Plan Framework will provide 
	  a means for capturing and presenting execution plans in a generic fashion, enabling extends to customize support for specific 
	  SQL execution engines.</p></ul>
-->
	  <p>The tools include:</p>
	  <ul><li><p><b>SQL Editor</b><br/><br/>The SQL Editor will provide an exemplary tool for standard text-based editing 
	  of SQL statements. Providing content assist tied to the SQL Model, syntax colorization, and multiple statement support, 
	  this editor will provide an essential tool for data-centric development.</p></ul>
	  <ul><li><p><b>Visual SQL Builder</b><br/><br/>The Visual SQL Builder allows for graphical editing of SQL, raising the 
	  level of abstraction, increasing developer productivity, and making query construction possible for a wider user base.</p></ul>
	  <ul><li><p><b>Results View</b><br/><br/>The Results View displays the output of routine or SQL statement execution in a tabular 
	  form typical of SQL result sets. These results can be exported to persistent storage in a variety of formats and reloaded at a 
	  later time into the results view.</p></ul>
	  <ul><li><p><b>Script History</b><br/><br/>Typically a number of scripts will be executed repeatedly during the course 
	  data-centric development. The ability to retain a history of these queries and thereby quickly repeat execution of 
	  them and view results increases productivity. The Script History is a view meeting these needs, based on a development session.</p></ul>		</div>
	</div>
<?

	$html = ob_get_clean();
	
	# Configure the left navigator area.  In particular, we need to set the "About this Project" link.
    $Nav->setLinkList( array() );
    $Nav->addNavSeparator( "DTP SQL Dev Tools", "/datatools" );
    $Nav->addCustomNav( "About This Project",
        "/projects/project_summary.php?projectid=datatools.sqltools", "", 1  );
    # Can add more custom left navigator links here.	
	
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>