Revision: 6295
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6295&view=rev
Author: gerdwagner
Date: 2011-06-05 20:34:58 +0000 (Sun, 05 Jun 2011)
Log Message:
-----------
MSSQL Plugin:
- Added display of triggers source code.
- If two views with same name in different schemas exist now the views' sourcecode is
displayed correctly according to the selected Object tree node.
Thanks to damluar for the patch (Patch ID: 3310900)
Modified Paths:
--------------
trunk/sql12/doc/src/main/resources/changes.txt
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/MssqlPlugin.java
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/ViewSourceTab.java
trunk/sql12/plugins/mssql/src/main/resources/net/sourceforge/squirrel_sql/plugins/mssql/tab/I18NStrings.properties
Added Paths:
-----------
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/exp/
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/exp/MssqlTableTriggerExtractorImpl.java
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerDetailsTab.java
trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerSourceTab.java
Modified: trunk/sql12/doc/src/main/resources/changes.txt
===================================================================
--- trunk/sql12/doc/src/main/resources/changes.txt 2011-06-05 19:45:51 UTC (rev 6294)
+++ trunk/sql12/doc/src/main/resources/changes.txt 2011-06-05 20:34:58 UTC (rev 6295)
@@ -7,6 +7,13 @@
Enhancements:
+MSSQL Plugin:
+ - Added display of triggers source code.
+ - If two views with same name in different schemas exist now the views' source code is
+ displayed correctly according to the selected Object tree node.
+ Thanks to damluar for the patch (Patch ID: 3310900)
+
+
New Plugin: Greenplum DB Plugin
New Plugin for the Greenplum DB. Thanks to Adam Winn for the patch (Patch ID 3217167)
Modified: trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/MssqlPlugin.java
===================================================================
--- trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/MssqlPlugin.java 2011-06-05 19:45:51 UTC (rev 6294)
+++ trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/MssqlPlugin.java 2011-06-05 20:34:58 UTC (rev 6295)
@@ -18,11 +18,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-import javax.swing.Action;
-import javax.swing.JMenu;
-import javax.swing.event.MenuEvent;
-import javax.swing.event.MenuListener;
-
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.action.ActionCollection;
import net.sourceforge.squirrel_sql.client.gui.session.ObjectTreeInternalFrame;
@@ -37,41 +32,37 @@
import net.sourceforge.squirrel_sql.client.session.IObjectTreeAPI;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.expanders.TableWithChildNodesExpander;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetException;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ResultSetDataSet;
import net.sourceforge.squirrel_sql.fw.dialects.DialectFactory;
import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
import net.sourceforge.squirrel_sql.fw.preferences.IQueryTokenizerPreferenceBean;
-import net.sourceforge.squirrel_sql.fw.sql.DatabaseObjectType;
-import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
-import net.sourceforge.squirrel_sql.fw.sql.ISQLConnection;
-import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
-import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData;
+import net.sourceforge.squirrel_sql.fw.sql.*;
import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
import net.sourceforge.squirrel_sql.fw.util.IResources;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.GenerateSqlAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.IndexDefragAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.ScriptProcedureAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.ScriptProcedureExecAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.ShowStatisticsAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.ShrinkDatabaseAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.ShrinkDatabaseFileAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.TruncateLogAction;
-import net.sourceforge.squirrel_sql.plugins.mssql.action.UpdateStatisticsAction;
+import net.sourceforge.squirrel_sql.plugins.mssql.action.*;
import net.sourceforge.squirrel_sql.plugins.mssql.event.IndexIterationListener;
+import net.sourceforge.squirrel_sql.plugins.mssql.exp.MssqlTableTriggerExtractorImpl;
import net.sourceforge.squirrel_sql.plugins.mssql.gui.MonitorPanel;
import net.sourceforge.squirrel_sql.plugins.mssql.prefs.MSSQLPreferenceBean;
import net.sourceforge.squirrel_sql.plugins.mssql.prefs.PreferencesManager;
import net.sourceforge.squirrel_sql.plugins.mssql.sql.dbfile.DatabaseFile;
import net.sourceforge.squirrel_sql.plugins.mssql.sql.dbfile.DatabaseFileInfo;
+import net.sourceforge.squirrel_sql.plugins.mssql.tab.TriggerDetailsTab;
+import net.sourceforge.squirrel_sql.plugins.mssql.tab.TriggerSourceTab;
import net.sourceforge.squirrel_sql.plugins.mssql.tab.ViewSourceTab;
import net.sourceforge.squirrel_sql.plugins.mssql.tokenizer.MSSQLQueryTokenizer;
import net.sourceforge.squirrel_sql.plugins.mssql.util.MssqlIntrospector;
+import javax.swing.*;
+import javax.swing.event.MenuEvent;
+import javax.swing.event.MenuListener;
+
public class MssqlPlugin extends net.sourceforge.squirrel_sql.client.plugin.DefaultSessionPlugin {
private final static ILogger s_log = LoggerController.createLogger(MssqlPlugin.class);
@@ -282,6 +273,13 @@
_treeAPI.addDetailTab(DatabaseObjectType.VIEW, new ViewSourceTab());
_session = iSession;
+
+ TableWithChildNodesExpander trigExp = new TableWithChildNodesExpander();
+ trigExp.setTableTriggerExtractor(new MssqlTableTriggerExtractorImpl());
+ _treeAPI.addExpander(DatabaseObjectType.TABLE, trigExp);
+
+ _treeAPI.addDetailTab(DatabaseObjectType.TRIGGER, new TriggerDetailsTab());
+ _treeAPI.addDetailTab(DatabaseObjectType.TRIGGER, new TriggerSourceTab("The source of the trigger"));
MonitorPanel monitorPanel = new MonitorPanel();
iSession.addMainTab(monitorPanel);
Added: trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/exp/MssqlTableTriggerExtractorImpl.java
===================================================================
--- trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/exp/MssqlTableTriggerExtractorImpl.java (rev 0)
+++ trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/exp/MssqlTableTriggerExtractorImpl.java 2011-06-05 20:34:58 UTC (rev 6295)
@@ -0,0 +1,54 @@
+package net.sourceforge.squirrel_sql.plugins.mssql.exp;
+
+import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.expanders.ITableTriggerExtractor;
+import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
+import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+/**
+ * Provides the query and parameter binding behavior for MS SQL Server's trigger catalog.
+ *
+ * @author damluar
+ */
+public class MssqlTableTriggerExtractorImpl implements ITableTriggerExtractor {
+
+ /** Logger for this class */
+ private final static ILogger s_log =
+ LoggerController.createLogger(MssqlTableTriggerExtractorImpl.class);
+
+ /** The query that finds the triggers for a given table */
+ private static String SQL =
+ "SELECT sys.triggers.name AS [trigger] " +
+ "FROM sys.schemas JOIN " +
+ "sys.tables ON sys.schemas.schema_id = sys.tables.schema_id JOIN " +
+ "sys.triggers ON sys.tables.object_id = sys.triggers.parent_id " +
+ "WHERE sys.tables.name = ? " +
+ "AND sys.schemas.name = ?";
+
+ /**
+ * @see net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.expanders.ITableTriggerExtractor#bindParamters(java.sql.PreparedStatement, net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo)
+ */
+ public void bindParamters(PreparedStatement pstmt, IDatabaseObjectInfo dbo)
+ throws SQLException
+ {
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("Binding table name "+dbo.getSimpleName()+
+ " as first bind value");
+ s_log.debug("Binding schema name "+dbo.getSchemaName()+
+ " as second bind value");
+ }
+ pstmt.setString(1, dbo.getSimpleName());
+ pstmt.setString(2, dbo.getSchemaName());
+ }
+
+ /**
+ * @see net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.expanders.ITableTriggerExtractor#getTableTriggerQuery()
+ */
+ public String getTableTriggerQuery() {
+ return SQL;
+ }
+
+}
Added: trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerDetailsTab.java
===================================================================
--- trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerDetailsTab.java (rev 0)
+++ trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerDetailsTab.java 2011-06-05 20:34:58 UTC (rev 6295)
@@ -0,0 +1,99 @@
+package net.sourceforge.squirrel_sql.plugins.mssql.tab;
+/*
+ * Copyright (C) 2006 Rob Manning
+ * man...@us...
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.tabs.BasePreparedStatementTab;
+import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+/**
+ * This class will display the details for a MS SQL Server trigger.
+ *
+ * @author damluar
+ */
+public class TriggerDetailsTab extends BasePreparedStatementTab
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(TriggerDetailsTab.class);
+
+
+ /**
+ * This interface defines locale specific strings. This should be
+ * replaced with a property file.
+ */
+ private interface i18n
+ {
+ // i18n[TriggerDetailsTab.title=Details]
+ String TITLE = s_stringMgr.getString("TriggerDetailsTab.title");
+ // i18n[TriggerDetailsTab.hint=Display trigger details]
+ String HINT = s_stringMgr.getString("TriggerDetailsTab.hint");
+ }
+
+ /** SQL that retrieves the data. */
+ private static String SQL =
+ "SELECT tr.name AS [trigger], " +
+ " tb.name AS [table], " +
+ " sc.name AS [schema], " +
+ " tr.create_date AS [create date], " +
+ " tr.type_desc AS [type], " +
+ " CASE (select type_desc from sys.trigger_events WHERE sys.trigger_events.object_id = tr.object_id AND type = 1) " +
+ " WHEN 'INSERT' THEN 'Yes' ELSE 'No' " +
+ " END [insert event], " +
+ " CASE (select type_desc from sys.trigger_events WHERE sys.trigger_events.object_id = tr.object_id AND type = 2) " +
+ " WHEN 'UPDATE' THEN 'Yes' ELSE 'No' " +
+ " END [update event], " +
+ " CASE (select type_desc from sys.trigger_events WHERE sys.trigger_events.object_id = tr.object_id AND type = 3) " +
+ " WHEN 'DELETE' THEN 'Yes' ELSE 'No' " +
+ " END [delete event] " +
+ "FROM sys.schemas sc JOIN " +
+ " sys.tables tb ON sc.schema_id = tb.schema_id JOIN " +
+ " sys.triggers tr ON tb.object_id = tr.parent_id " +
+ "WHERE tr.name = ? " +
+ "AND sc.name = ?";
+
+ /** Logger for this class. */
+ private final static ILogger s_log =
+ LoggerController.createLogger(TriggerDetailsTab.class);
+
+ public TriggerDetailsTab()
+ {
+ super(i18n.TITLE, i18n.HINT, true);
+ }
+
+ protected PreparedStatement createStatement() throws SQLException
+ {
+ ISession session = getSession();
+ IDatabaseObjectInfo doi = getDatabaseObjectInfo();
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("Trigger details SQL: "+SQL);
+ s_log.debug("Trigger name: "+doi.getSimpleName());
+ s_log.debug("Trigger schema: "+doi.getSchemaName());
+ }
+ PreparedStatement pstmt = session.getSQLConnection().prepareStatement(SQL);
+ pstmt.setString(1, doi.getSimpleName());
+ pstmt.setString(2, doi.getSchemaName());
+ return pstmt;
+ }
+}
Added: trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerSourceTab.java
===================================================================
--- trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerSourceTab.java (rev 0)
+++ trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/TriggerSourceTab.java 2011-06-05 20:34:58 UTC (rev 6295)
@@ -0,0 +1,64 @@
+package net.sourceforge.squirrel_sql.plugins.mssql.tab;
+
+/*
+ * Copyright (C) 2006 Rob Manning
+ * man...@us...
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.tabs.BaseSourceTab;
+import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
+import net.sourceforge.squirrel_sql.fw.sql.ISQLConnection;
+import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+/**
+ * This class will display the source for a MS SQL Server trigger.
+ *
+ * @author damluar
+ */
+public class TriggerSourceTab extends BaseSourceTab
+{
+ /** SQL that retrieves the source of a stored procedure. */
+ private static String SQL = "exec sp_helptext ?";
+
+ /** Logger for this class. */
+ private final static ILogger s_log = LoggerController.createLogger(TriggerSourceTab.class);
+
+ public TriggerSourceTab(String hint) {
+ super(hint);
+ }
+
+ protected PreparedStatement createStatement() throws SQLException
+ {
+ final ISession session = getSession();
+ final IDatabaseObjectInfo doi = getDatabaseObjectInfo();
+
+ if (s_log.isDebugEnabled())
+ {
+ s_log.debug("Running SQL: " + SQL);
+ s_log.debug("Trigger Name=" + doi.getSimpleName());
+ s_log.debug("Schema Name=" + doi.getSchemaName());
+ }
+ ISQLConnection conn = session.getSQLConnection();
+ PreparedStatement pstmt = conn.prepareStatement(SQL);
+ pstmt.setString(1, doi.getSchemaName() + '.' + doi.getSimpleName());
+ return pstmt;
+ }
+}
Modified: trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/ViewSourceTab.java
===================================================================
--- trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/ViewSourceTab.java 2011-06-05 19:45:51 UTC (rev 6294)
+++ trunk/sql12/plugins/mssql/src/main/java/net/sourceforge/squirrel_sql/plugins/mssql/tab/ViewSourceTab.java 2011-06-05 20:34:58 UTC (rev 6295)
@@ -17,15 +17,15 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.tabs.BaseSourceTab;
import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
/**
* This class will display the source for an MS-SQLServer view.
*
@@ -52,11 +52,13 @@
* query can return a result-set with multiple rows that should be concatenated. They should be correctly
* ordered by the SYSCOMMENT.COLID field.
*/
- private static final String BIGVIEW_SQL =
- "SELECT text FROM sysobjects o , syscomments c " +
- "where o.name = ? " +
- "and o.id = c.id " +
- "order by c.colid ";
+ private static final String BIGVIEW_SQL =
+ "SELECT text " +
+ "FROM sys.objects o " +
+ "INNER JOIN sys.schemas ON o.schema_id = sys.schemas.schema_id " +
+ "INNER JOIN syscomments c ON o.object_id = c.id " +
+ "WHERE sys.schemas.name = ? " +
+ "AND o.name = ?";
@@ -70,7 +72,8 @@
ISession session = getSession();
PreparedStatement pstmt = session.getSQLConnection().prepareStatement(BIGVIEW_SQL);
IDatabaseObjectInfo doi = getDatabaseObjectInfo();
- pstmt.setString(1, doi.getSimpleName());
+ pstmt.setString(1, doi.getSchemaName());
+ pstmt.setString(2, doi.getSimpleName());
return pstmt;
}
}
Modified: trunk/sql12/plugins/mssql/src/main/resources/net/sourceforge/squirrel_sql/plugins/mssql/tab/I18NStrings.properties
===================================================================
--- trunk/sql12/plugins/mssql/src/main/resources/net/sourceforge/squirrel_sql/plugins/mssql/tab/I18NStrings.properties 2011-06-05 19:45:51 UTC (rev 6294)
+++ trunk/sql12/plugins/mssql/src/main/resources/net/sourceforge/squirrel_sql/plugins/mssql/tab/I18NStrings.properties 2011-06-05 20:34:58 UTC (rev 6295)
@@ -1,2 +1,6 @@
ViewSourceTab.display=Show view source
+
+
+TriggerDetailsTab.title=Details
+TriggerDetailsTab.hint=Display trigger details
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|