158264; Modified ProfileUtil.createConnection to set the connection profile status first; Fixed a NPE bug in content assist.
diff --git a/plugins/org.eclipse.datatools.sqltools.editor.core/src/org/eclipse/datatools/sqltools/core/profile/ProfileUtil.java b/plugins/org.eclipse.datatools.sqltools.editor.core/src/org/eclipse/datatools/sqltools/core/profile/ProfileUtil.java
index 59a54e1..af3b080 100644
--- a/plugins/org.eclipse.datatools.sqltools.editor.core/src/org/eclipse/datatools/sqltools/core/profile/ProfileUtil.java
+++ b/plugins/org.eclipse.datatools.sqltools.editor.core/src/org/eclipse/datatools/sqltools/core/profile/ProfileUtil.java
@@ -360,6 +360,10 @@
     public static Connection getReusableConnection(DatabaseIdentifier databaseIdentifier) throws SQLException, NoSuchProfileException
     {
     	IConnectionProfile profile = getProfile(databaseIdentifier.getProfileName());
+    	if (!profile.isConnected())
+    	{
+    		throw new SQLException(NLS.bind(Messages.ProfileUtil_error_not_connected, (new Object[]{databaseIdentifier.getProfileName()})));
+    	}
     	IManagedConnection managedConn = profile.getManagedConnection("java.sql.Connection");
     	if (managedConn == null || !managedConn.isConnected())
     	{
@@ -394,7 +398,41 @@
     }
     
     /**
-     * Returns a connection from the connection layer
+     * Connects the connection profile and returns the shared connection. If for some reason,
+     * the connection can't be made, the result would be null.
+     * @param profileName
+     * @return
+     */
+    public static Connection connectProfile(String profileName)
+    {
+    	IConnectionProfile profile = null;
+    	Connection conn = null;
+		try {
+			profile = getProfile(profileName);
+		} catch (NoSuchProfileException e1) {
+			EditorCorePlugin.getDefault().log(e1);
+			return null;
+		}
+        if (!profile.isConnected())
+        {
+        	IStatus status = profile.connect();
+        	if (!status.isOK())
+        	{
+        		return null;
+        	}
+        }
+        try {
+        	conn = getReusableConnection(new DatabaseIdentifier(profileName));
+        } catch (Exception e1) {
+        	EditorCorePlugin.getDefault().log(e1);
+        	return null;
+        }
+        return conn;
+    }
+    
+    /**
+     * Returns a connection from the connection layer. If the connection profile is not in "connected"
+     * state, connect it first and returns the shared connection.
      * 
      * @param profile
      * @param dbName
@@ -402,6 +440,10 @@
      */
     public static Connection createConnection(IConnectionProfile profile, String dbName)
     {
+    	if (!profile.isConnected())
+    	{
+    		return connectProfile(profile.getName());
+    	}
         try
         {
             Connection conn = null;
@@ -497,26 +539,13 @@
 			EditorCorePlugin.getDefault().log(e1);
 			return list;
 		}
-        String dbname = profile.getBaseProperties().getProperty(DATABASENAME);
-        try {
-			conn = getReusableConnection(new DatabaseIdentifier(profileName));
-        }
-        catch (Exception e)
-        {
-        	IStatus status = profile.connect();
-        	if (!status.isOK())
-        	{
-        		EditorCorePlugin.getDefault().log(status);
-        		return list;
-        	}
-        	try {
-				conn = getReusableConnection(new DatabaseIdentifier(profileName));
-			} catch (Exception e1) {
-				EditorCorePlugin.getDefault().log(e1);
-				return list;
-			}
-        }
-        try {
+		String dbname = profile.getBaseProperties().getProperty(DATABASENAME);
+		conn = connectProfile(profileName);
+		if (conn == null)
+		{
+			return list;
+		}
+		try {
 
 			rs = conn.getMetaData().getCatalogs();
             while (rs.next())
diff --git a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/SQLEditor.java b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/SQLEditor.java
index 23a8241..57ca236 100644
--- a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/SQLEditor.java
+++ b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/SQLEditor.java
@@ -290,7 +290,7 @@
     protected void createActions() {
         super.createActions();
         ResourceBundle bundle = getResourceBundle();
-        IActionBars bars = ((PartSite) getSite()).getActionBars();
+        IActionBars bars = ((IEditorSite) getSite()).getActionBars();
 
         IAction a = new TextOperationAction( bundle,
                 "ContentAssistProposal.", this, ISourceViewer.CONTENTASSIST_PROPOSALS ); //$NON-NLS-1$
@@ -663,7 +663,14 @@
 
         addAction( menu, ISQLEditorActionConstants.GROUP_SQLEDITOR_SAVE, ISQLEditorActionConstants.SAVE_AS_TEMPLATE_ACTION_ID);
 
-		//database specific actions go here
+
+        Collection fExtensions = SQLEditorPlugin.getSQLEditorActionContributorExtension();
+        for (Iterator iter = fExtensions.iterator(); iter.hasNext();) {
+        	ISQLEditorActionContributorExtension ext = (ISQLEditorActionContributorExtension) iter.next();
+        	ext.contributeToContextMenu(menu);
+		}
+        
+        //database specific actions go here
         HashMap dbActions = editorService.getAdditionalActions();
         if (dbActions != null && !dbActions.isEmpty())
         {
@@ -690,11 +697,6 @@
             menu.appendToGroup(ISQLEditorActionConstants.GROUP_SQLEDITOR_ADDITION, dbSubMenuMgr);
         }        
 
-        Collection fExtensions = SQLEditorPlugin.getSQLEditorActionContributorExtension();
-        for (Iterator iter = fExtensions.iterator(); iter.hasNext();) {
-        	ISQLEditorActionContributorExtension ext = (ISQLEditorActionContributorExtension) iter.next();
-        	ext.contributeToContextMenu(menu);
-		}
     }
 
     private void addContributedMenus(String key, Object dba, IMenuManager manager, MenuManager dbSubMenuMgr)
diff --git a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/editor/SQLUpdater.java b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/editor/SQLUpdater.java
index 55a9d40..ea31375 100644
--- a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/editor/SQLUpdater.java
+++ b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/editor/SQLUpdater.java
@@ -124,13 +124,13 @@
 
     public void run()
     {
+    	setInput(_editor.getEditorInput());
         if (enableSyntaxValidation() == false)
         {
         	removeMarkers();
             return;
         }
 
-        setInput(_editor.getEditorInput());
         try
         {
             //use ISchedulingRule to avoid locking the whole workspace
diff --git a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/sql/SQLParserCompletionEngine.java b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/sql/SQLParserCompletionEngine.java
index 83de17b..93b269d 100644
--- a/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/sql/SQLParserCompletionEngine.java
+++ b/plugins/org.eclipse.datatools.sqltools.sqleditor/src/org/eclipse/datatools/sqltools/sqleditor/internal/sql/SQLParserCompletionEngine.java
@@ -130,9 +130,7 @@
 		_config = SQLToolsFacade
 				.getConfigurationByVendorIdentifier(_databaseVendorDefinitionId);
 		SQLParser _parser = _config.getSQLService().getSQLParser();
-		if (_parser == null) {
-			return getTemplateProposalsAtLineStart();
-		}
+		
 		_selection = selection;
 		String text = doc.get();
 		if (text.trim().length() == 0) {
@@ -145,9 +143,12 @@
 
 			int wordOffset = SQLWordFinder.getWordStartOffset(text,
 					documentOffset - 1);
-			int expStart = findStatementStart(text, _fDocumentOffset - 1,
-					_parser.getStatementStartTokens(), _parser
-							.getStatementTerminators());
+			int expStart = 0;
+			if (_parser != null) {
+				findStatementStart(text, _fDocumentOffset - 1,
+				_parser.getStatementStartTokens(), _parser
+						.getStatementTerminators());
+			}
 			String uptoCurrentCursorText = text.substring(0, documentOffset);
 			String sqlCmdStartToCurrentCursorText = text.substring(expStart,
 					documentOffset);
@@ -161,6 +162,10 @@
 
 		}
 
+		if (_parser == null) {
+			return getTemplateProposalsAtLineStart();
+		}
+		
 		String parseText = null;
 
 		if (_fFullText.equals("")) //$NON-NLS-1$