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$