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.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; /** * @author panic * * Executes a query from the QueryView */ public class ExecuteAction extends BaseSQLAction implements IViewActionDelegate { SQLQueryView view; boolean flag = false; 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"); } 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; } Connection con = getConnection(); view.setStatus(execute1); MultiSQLServer server = MultiSQLServer.getInstance(); view.setStatus(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 for (int i = 0; i < queries.size(); i++) { if (flag) { view.setStatus(execute1); } else { view.setStatus(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(); } } } flag = !flag; view.setProgress(i + 1, queries.size()); } Image statImage = QuantumPlugin.getImage((errorCount > 0) ? "stop.gif" : "success.gif"); //$NON-NLS-1$ //$NON-NLS-2$ view.setStatus(statImage, 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$ view.setProgress(0, 1); } 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(); } }