package com.quantum.actions; import java.sql.Connection; import java.sql.SQLException; import java.util.Vector; import com.quantum.Messages; import com.quantum.QuantumPlugin; import com.quantum.model.Bookmark; import com.quantum.sql.MultiSQLServer; import com.quantum.sql.SQLParser; import com.quantum.sql.SQLResults; import com.quantum.view.LogProxy; import com.quantum.view.SQLQueryView; import com.quantum.view.bookmark.BookmarkNode; import com.quantum.view.bookmark.BookmarkView; import com.quantum.view.tableview.DefaultSizes; import com.quantum.view.tableview.TableView; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; /** * Executes a query from the QueryView * * @author panic */ public class ExecuteAction extends BaseSQLAction implements IViewActionDelegate { SQLQueryView view; String execute1 = Messages.getString("ExecuteAction.Executing_Query3"); //$NON-NLS-1$ String execute2 = Messages.getString("ExecuteAction.Executing_Query2"); //$NON-NLS-1$ public ExecuteAction() { setActionDefinitionId("com.quantum.actions.ExecuteAction"); setImageDescriptor(QuantumPlugin.getImageDescriptor("play.gif")); setText(Messages.getString("sqlqueryview.executeQuery")); setToolTipText(Messages.getString("sqlqueryview.executeQuery")); } public void init(IViewPart view) { this.view = (SQLQueryView) view; } public void run(IAction action) { run(); } public void run() { BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark(); if (current == null) { MessageDialog.openInformation( view.getSite().getShell(),"Sorry","Please select a bookmark to use as connection."); return; } getStatusLineManager().setErrorMessage(null); Connection con = getConnection(); getStatusLineManager().setMessage(execute1); MultiSQLServer server = MultiSQLServer.getInstance(); getStatusLineManager().setMessage(Messages.getString("ExecuteAction.Parsing_sql_script3")); //$NON-NLS-1$ Vector queries = new Vector(); String viewQuery = view.getQuery(); // We parse the executable units to send to the JDBC driver queries = SQLParser.parse(viewQuery); for (int i = 0; i < queries.size(); i++) { String query = (String) queries.elementAt(i); System.out.println(query); } int resultCount = 0; int resultUpdateCount = 0; int errorCount = 0; int resultsDisplayed = 0; double startTime = 0.0; // stores the time when query is started double queryDuration= 0.0; // stores query's execution time IProgressMonitor progressBar = getStatusLineManager().getProgressMonitor(); progressBar.beginTask("queries", queries.size()); for (int i = 0; i < queries.size(); i++) { if (i % 2 == 0) { getStatusLineManager().setMessage(execute1); } else { getStatusLineManager().setMessage(execute2); } String query = (String) queries.elementAt(i); System.out.println(">" + query + "<"); //$NON-NLS-1$ //$NON-NLS-2$ if (con != null && !query.equals("")) { //$NON-NLS-1$ SQLResults results; try { startTime = System.currentTimeMillis(); // Start the measure of execution time results = server.execute(con, query, 1, DefaultSizes.PAGE_SIZE, DefaultSizes.MAX_COLUMN_SIZE); queryDuration = (System.currentTimeMillis() - startTime)/1000; // calculate the execution time (in seconds) current.getBookmark().addQuery(query); } catch (SQLException e) { errorCount++; LogProxy log = LogProxy.getInstance(); log.addText( LogProxy.ERROR, "Error Executing: " + query + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$ MessageDialog.openConfirm(view.getSite().getShell(), "Database returned error", e.getLocalizedMessage()); //$NON-NLS-1$ continue; } resultCount++; if (results.isResultSet()) { TableView.getInstance().loadQuery(current.getBookmark(), results); resultsDisplayed++; } else { int count = results.getUpdateCount(); if (count > 0) { resultUpdateCount += results.getUpdateCount(); } } } System.out.println(getStatusLineManager().getProgressMonitor() == null ? "not found" : "found!"); progressBar.worked(i); // view.setProgress(i + 1, queries.size()); } progressBar.done(); String message = Messages.getString("ExecuteAction.Done") + "(" + //$NON-NLS-1$ //$NON-NLS-2$ resultCount + Messages.getString("ExecuteAction.QueriesExecuted") + //$NON-NLS-1$ resultUpdateCount + Messages.getString("ExecuteAction.RowsUpdated") + //$NON-NLS-1$ resultsDisplayed + Messages.getString("ExecuteAction.ResultsDisplayed") + //$NON-NLS-1$ errorCount + Messages.getString("ExecuteAction.Errors") + //$NON-NLS-1$ queryDuration + Messages.getString("ExecutAction.TimeExec") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ if (errorCount > 0) { getStatusLineManager().setErrorMessage( QuantumPlugin.getImage("stop.gif"), message); } else { getStatusLineManager().setMessage( QuantumPlugin.getImage("success.gif"), message); } } /** * @return */ private IStatusLineManager getStatusLineManager() { return this.view.getViewSite().getActionBars().getStatusLineManager(); } public void selectionChanged(IAction action, ISelection selection) { } protected Bookmark getBookmark() { BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark(); return current.getBookmark(); } /* (non-Javadoc) * @see com.quantum.actions.BaseSQLAction#getShell() */ protected Shell getShell() { return this.view.getViewSite().getShell(); } }