Просмотр исходного кода

Merge pull request #4949 from Sargul/devel

Fix comment handling and edit/view of scripting objects

Former-commit-id: a0ad92e0cf937cc2bc8fab7368b682fadbcef116
Charly 7 лет назад
Родитель
Сommit
66718ce8b8

+ 2 - 1
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolFunctionManager.java

@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.exasol.manager;
 import org.jkiss.dbeaver.DBException;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolFunction;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolSchema;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.model.DBPDataSource;
 import org.jkiss.dbeaver.model.DBPEvaluationContext;
 import org.jkiss.dbeaver.model.edit.DBECommandContext;
@@ -108,7 +109,7 @@ public class ExasolFunctionManager extends SQLObjectEditor<ExasolFunction, Exaso
         if (command.getProperty("description") != null) {
             actions.add(new SQLDatabasePersistAction("Comment on Script","COMMENT ON FUNCTION " + 
                             command.getObject().getFullyQualifiedName(DBPEvaluationContext.DDL) + " IS " +
-                            SQLUtils.quoteString(command.getObject(), command.getObject().getDescription())));
+                            SQLUtils.quoteString(command.getObject(), ExasolUtils.quoteString(command.getObject().getDescription()))));
         }
     }
 

+ 2 - 1
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolRoleManager.java

@@ -8,6 +8,7 @@ import org.jkiss.dbeaver.DBException;
 import org.jkiss.dbeaver.ext.exasol.ExasolMessages;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolDataSource;
 import org.jkiss.dbeaver.ext.exasol.model.security.ExasolRole;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.ext.exasol.ui.ExasolRoleDialog;
 import org.jkiss.dbeaver.model.DBPDataSource;
 import org.jkiss.dbeaver.model.DBUtils;
@@ -114,7 +115,7 @@ public class ExasolRoleManager extends SQLObjectEditor<ExasolRole, ExasolDataSou
 	
 	private SQLDatabasePersistAction Comment(ExasolRole obj)
 	{
-		return new SQLDatabasePersistAction("Comment on Role", "COMMENT ON ROLE " + DBUtils.getQuotedIdentifier(obj) + " IS '" + obj.getDescription() + "'");
+		return new SQLDatabasePersistAction("Comment on Role", "COMMENT ON ROLE " + DBUtils.getQuotedIdentifier(obj) + " IS '" + ExasolUtils.quoteString(obj.getDescription()) + "'");
 	}
 	
 	@Override

+ 2 - 1
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolScriptManager.java

@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.exasol.manager;
 import org.jkiss.dbeaver.DBException;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolSchema;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolScript;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.model.DBPDataSource;
 import org.jkiss.dbeaver.model.DBPEvaluationContext;
 import org.jkiss.dbeaver.model.edit.DBECommandContext;
@@ -107,7 +108,7 @@ public class ExasolScriptManager extends SQLObjectEditor<ExasolScript, ExasolSch
         if (command.getProperty("description") != null) {
             actions.add(new SQLDatabasePersistAction("Comment on Script","COMMENT ON SCRIPT " + 
                             command.getObject().getFullyQualifiedName(DBPEvaluationContext.DDL) + " IS " +
-                            SQLUtils.quoteString(command.getObject(), command.getObject().getDescription())));
+                            SQLUtils.quoteString(command.getObject(), ExasolUtils.quoteString(command.getObject().getDescription()))));
         }
     }
 

+ 3 - 2
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolTableColumnManager.java

@@ -23,6 +23,7 @@ import org.jkiss.dbeaver.Log;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolTable;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.model.DBPEvaluationContext;
 import org.jkiss.dbeaver.model.DBUtils;
 import org.jkiss.dbeaver.model.edit.DBECommandContext;
@@ -165,9 +166,9 @@ public class ExasolTableColumnManager extends SQLTableColumnManager<ExasolTableC
     private DBEPersistAction buildCommentAction(ExasolTableColumn exasolColumn) {
         if (CommonUtils.isNotEmpty(exasolColumn.getDescription())) {
             String tableName = exasolColumn.getTable().getFullyQualifiedName(DBPEvaluationContext.DDL);
-            String columnName = exasolColumn.getName();
+            String columnName = DBUtils.getObjectFullName(exasolColumn, DBPEvaluationContext.DDL);
             String comment = exasolColumn.getDescription();
-            String commentSQL = String.format(SQL_COMMENT, tableName, columnName, comment);
+            String commentSQL = String.format(SQL_COMMENT, tableName, columnName, ExasolUtils.quoteString(comment));
             return new SQLDatabasePersistAction(CMD_COMMENT, commentSQL);
         } else {
             return null;

+ 2 - 1
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolUserManager.java

@@ -8,6 +8,7 @@ import org.jkiss.dbeaver.DBException;
 import org.jkiss.dbeaver.ext.exasol.ExasolMessages;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolDataSource;
 import org.jkiss.dbeaver.ext.exasol.model.security.ExasolUser;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.ext.exasol.ui.ExasolUserDialog;
 import org.jkiss.dbeaver.ext.exasol.ui.ExasolUserQueryPassword;
 import org.jkiss.dbeaver.model.DBPDataSource;
@@ -126,7 +127,7 @@ public class ExasolUserManager extends SQLObjectEditor<ExasolUser, ExasolDataSou
 	
 	private SQLDatabasePersistAction Comment(ExasolUser obj)
 	{
-		return new SQLDatabasePersistAction("Comment on User", "COMMENT ON USER " + DBUtils.getQuotedIdentifier(obj) + " IS '" + obj.getDescription() + "'");
+		return new SQLDatabasePersistAction("Comment on User", "COMMENT ON USER " + DBUtils.getQuotedIdentifier(obj) + " IS '" + ExasolUtils.quoteString(obj.getDescription()) + "'");
 	}
 	
 	@Override

+ 13 - 0
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/manager/ExasolViewManager.java

@@ -24,6 +24,7 @@ import org.jkiss.dbeaver.DBException;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolSchema;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase;
 import org.jkiss.dbeaver.ext.exasol.model.ExasolView;
+import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils;
 import org.jkiss.dbeaver.model.DBPDataSource;
 import org.jkiss.dbeaver.model.DBPEvaluationContext;
 import org.jkiss.dbeaver.model.DBUtils;
@@ -112,6 +113,18 @@ public class ExasolViewManager
         try {
             actions.add(
                 new SQLDatabasePersistAction("Create view", view.getSource()));
+            
+            if (!CommonUtils.isEmpty(view.getDescription()))
+            {
+            	 actions.add(
+            			 new SQLDatabasePersistAction(
+            					 String.format("COMMENT ON VIEW %s is '%s'", 
+            							 view.getFullyQualifiedName(DBPEvaluationContext.DDL),
+            							 ExasolUtils.quoteString(view.getDescription())
+            							 )
+            					 )
+            			 );
+            }
         } catch (DBCException e) {
         }
     }

+ 17 - 31
plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolSchema.java

@@ -22,6 +22,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import org.jkiss.code.NotNull;
 import org.jkiss.dbeaver.DBException;
@@ -74,8 +75,6 @@ public class ExasolSchema extends ExasolGlobalObject implements DBSSchema, DBPNa
 
     // ExasolSchema's children
     public final DBSObjectCache<ExasolSchema, ExasolScript> scriptCache;
-    public final DBSObjectCache<ExasolSchema, ExasolScript> udfCache;
-    public final DBSObjectCache<ExasolSchema, ExasolScript> adapterCache;
 
     public final DBSObjectCache<ExasolSchema, ExasolFunction> functionCache;
     private ExasolViewCache viewCache = new ExasolViewCache();
@@ -95,30 +94,10 @@ public class ExasolSchema extends ExasolGlobalObject implements DBSSchema, DBPNa
         		"select "
         		+ "script_name,script_owner,script_language,script_type,script_result_type,script_text,script_comment,b.created "
         		+ "from SYS." + tablePrefix + "_SCRIPTS a inner join SYS." + tablePrefix + "_OBJECTS b "
-        		+ "on a.script_name = b.object_name and a.script_schema = b.root_name and b.object_type = 'SCRIPT' where a.script_schema = '%s' "
-        		+ "AND script_Type = 'SCRIPTING' order by script_name",
+        		+ "on a.SCRIPT_OBJECT_ID  = b.object_id and b.object_type = 'SCRIPT' where a.script_schema = '%s' "
+        		+ "order by script_name",
         		name);
-        
-        this.udfCache = new ExasolJDBCObjectSimpleCacheLiterals<>(
-        		ExasolScript.class,
-        		"select "
-        		+ "script_name,script_owner,script_language,script_type,script_result_type,script_text,script_comment,b.created "
-        		+ "from SYS."+ tablePrefix + "_SCRIPTS a inner join SYS." + tablePrefix + "_OBJECTS b "
-        		+ "on a.script_name = b.object_name and a.script_schema = b.root_name and b.object_type = 'SCRIPT' where a.script_schema = '%s' "
-        		+ "AND script_Type = 'UDF' order by script_name",
-        		name);
-        
-        this.adapterCache = new ExasolJDBCObjectSimpleCacheLiterals<>(
-        		ExasolScript.class,
-        		"select "
-        		+ "script_name,script_owner,script_language,script_type,script_result_type,script_text,script_comment,b.created "
-        		+ "from SYS." + tablePrefix + "_SCRIPTS a inner join SYS." + tablePrefix + "_OBJECTS b "
-        		+ "on a.script_name = b.object_name and a.script_schema = b.root_name and b.object_type = 'SCRIPT' where a.script_schema = '%s' "
-        		+ "AND script_Type = 'ADAPTER' order by script_name",
-        		name);
-        
-        
-        
+
         this.functionCache = new ExasolJDBCObjectSimpleCacheLiterals<>(ExasolFunction.class,
                 "SELECT\n" + 
                 "    F.*,\n" + 
@@ -247,28 +226,35 @@ public class ExasolSchema extends ExasolGlobalObject implements DBSSchema, DBPNa
     @Override
     public Collection<ExasolScript> getProcedures(DBRProgressMonitor monitor) throws DBException {
 
-        return scriptCache.getAllObjects(monitor, this);
+        return scriptCache.getAllObjects(monitor, this).stream()
+    			.filter(o -> o.getType().equals("SCRIPTING"))
+    			.collect(Collectors.toCollection(ArrayList::new));
     }
     
     public Collection<ExasolScript> getUdfs(DBRProgressMonitor monitor) throws DBException {
-
-        return udfCache.getAllObjects(monitor, this);
+    	
+    	return scriptCache.getAllObjects(monitor, this).stream()
+    			.filter(o -> o.getType().equals("UDF"))
+    			.collect(Collectors.toCollection(ArrayList::new));
     }
 
     public ExasolScript getUdf(DBRProgressMonitor monitor, String name) throws DBException {
 
-        return udfCache.getObject(monitor, this, name);
+        return scriptCache.getObject(monitor, this, name);
     }
 
 
     public Collection<ExasolScript> getAdapter(DBRProgressMonitor monitor) throws DBException {
 
-        return adapterCache.getAllObjects(monitor, this);
+        return scriptCache.getAllObjects(monitor, this).stream()
+    			.filter(o -> o.getType().equals("ADAPTER"))
+    			.collect(Collectors.toCollection(ArrayList::new));
+
     }
 
     public ExasolScript getAdapter(DBRProgressMonitor monitor, String name) throws DBException {
 
-        return adapterCache.getObject(monitor, this, name);
+        return scriptCache.getObject(monitor, this, name);
     }