--- /dev/null
+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();
+ }
+}