From 122f5e6638246b698533700c3bc2adee6e497f00 Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Tue, 4 Apr 2023 16:57:00 +0800 Subject: [PATCH 1/2] support more types and add dolphin types --- 3rd_src/pom.xml | 2 +- code/datastudio/src/copyExternalsToBuild.sh | 14 +- .../.classpath | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../build.properties | 2 +- .../bl/serverdatacache/ColumnMetaData.java | 67 +++- .../mppdbide/bl/serverdatacache/Database.java | 86 +++++ .../bl/serverdatacache/DatabaseUtils.java | 10 +- .../mppdbide/bl/serverdatacache/Server.java | 1 + .../serverdatacache/TableValidatorRules.java | 20 + .../edittabledata/EditTableExecuteQuery.java | 6 +- .../EditTableExecuteQueryUtility.java | 9 +- .../edittabledata/IEditTableExecuteQuery.java | 20 +- .../src/messages.properties | 3 + .../src/messages_zh_CN.properties | 3 + .../mppdbide/utils/IMessagesConstantsOne.java | 3 + .../component/grid/DSGridToolTipProvider.java | 3 +- .../grid/EditTableGridStyleConfiguration.java | 47 ++- .../view/component/grid/GridUIUtils.java | 66 +++- .../core/GridColumnHeaderAccumulator.java | 2 +- .../grid/core/GridColumnLabelAccumulator.java | 2 +- .../grid/core/GridColumnValueAccessor.java | 2 +- .../mppdbide/view/handler/ConnectToDB.java | 1 + .../mppdbide/view/ui/table/AddColumn.java | 2 +- .../view/ui/table/ChangeDataTypeDialog.java | 364 +++++++++++++++++- .../mppdbide/view/ui/table/ColumnUI.java | 362 ++++++++++++++++- .../mppdbide/view/ui/table/UIUtils.java | 11 +- 27 files changed, 1046 insertions(+), 66 deletions(-) diff --git a/3rd_src/pom.xml b/3rd_src/pom.xml index 915c853a..f1d5deb1 100644 --- a/3rd_src/pom.xml +++ b/3rd_src/pom.xml @@ -21,7 +21,7 @@ org.opengauss opengauss-jdbc - 3.1.0 + 3.1.1 org.jsoup diff --git a/code/datastudio/src/copyExternalsToBuild.sh b/code/datastudio/src/copyExternalsToBuild.sh index 1f0cb611..e20907cd 100644 --- a/code/datastudio/src/copyExternalsToBuild.sh +++ b/code/datastudio/src/copyExternalsToBuild.sh @@ -13,7 +13,7 @@ rm -rf ../docs rm -rf $DEST/../build rm -rf $DEST/db_assistant -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $DEST/org.opengauss.mppdbide.presentation/src-test/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $DEST/org.opengauss.mppdbide.presentation/src-test/. cp $SOURCE/3rd_src/target/dependency/hamcrest-api-1.0.jar $DEST/org.opengauss.mppdbide.presentation/src-test/. cp $SOURCE/3rd_src/target/dependency/junit-4.13.2.jar $DEST/org.opengauss.mppdbide.presentation/src-test/. cp $SOURCE/3rd_src/target/dependency/log4j-1.2.15.jar $DEST/org.opengauss.mppdbide.presentation/src-test/. @@ -53,7 +53,7 @@ cp $SOURCE/3rd_src/target/dependency/javafx-base-18-ea+2-win.jar $DEST/org.openg cp $SOURCE/3rd_src/target/dependency/javafx-controls-18-ea+2-win.jar $DEST/org.opengauss.mppdbide.view/. cp $SOURCE/3rd_src/target/dependency/javafx-graphics-18-ea+2-win.jar $DEST/org.opengauss.mppdbide.view/. cp $SOURCE/3rd_src/target/dependency/jsoup-1.14.3.jar $DEST/org.opengauss.mppdbide.view/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $DEST/org.opengauss.dbdriver.jdbc.gauss/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $DEST/org.opengauss.dbdriver.jdbc.gauss/. rm -rf $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib mkdir $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib @@ -70,7 +70,7 @@ cp $SOURCE/3rd_src/target/dependency/mockrunner-core-2.0.6.jar $TEST/org.openga cp $SOURCE/3rd_src/target/dependency/commons-codec-1.15.jar $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/log4j-1.2.15.jar $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/org.eclipse.osgi-3.9.1.v20130814-1242.jar $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $TEST/org.opengauss.mppdbide.adapter.test.fragment/lib/. rm -rf $TEST/org.opengauss.mppdbide.bl.debug.test.fragment/lib mkdir $TEST/org.opengauss.mppdbide.bl.debug.test.fragment/lib @@ -123,7 +123,7 @@ cp $SOURCE/3rd_src/target/dependency/javassist-3.20.0-GA.jar $TEST/org.opengauss cp $SOURCE/3rd_src/target/dependency/jcommander-1.27.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/mockito-all-1.10.19.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/objenesis-3.2.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. cp $SOURCE/platform/Gauss200/gs_jdbc/mockrunner-jdbc.jar $TEST/org.opengauss.mppdbide.bl.test.fragment/lib/. rm -rf $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib @@ -134,7 +134,7 @@ cp $SOURCE/3rd_src/target/dependency/mockrunner-jdbc-2.0.6.jar $TEST/org.openga cp $SOURCE/3rd_src/target/dependency/mockrunner-core-2.0.6.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/xml-apis-1.0.b2.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/gson-2.8.6.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/hamcrest-api-1.0.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/jsqlparser-3.2.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/junit-4.13.2.jar $TEST/org.opengauss.mppdbide.bl.windows.test.fragment/lib/. @@ -206,7 +206,7 @@ cp $SOURCE/3rd_src/target/dependency/mockrunner-core-2.0.6.jar $TEST/org.opengau cp $SOURCE/3rd_src/target/dependency/xml-apis-1.0.b2.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/gson-2.8.6.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/commons-collections4-4.4.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/hamcrest-api-1.0.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/jsqlparser-3.2.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/log4j-1.2.15.jar $TEST/org.opengauss.mppdbide.presentation.windows.test.fragment/lib/. @@ -227,7 +227,7 @@ cp $SOURCE/3rd_src/target/dependency/mockrunner-jdbc-2.0.6.jar $TEST/org.opengau cp $SOURCE/3rd_src/target/dependency/mockrunner-core-2.0.6.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/xml-apis-1.0.b2.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/gson-2.8.6.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. -cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.0.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. +cp $SOURCE/3rd_src/target/dependency/opengauss-jdbc-3.1.1.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/hamcrest-api-1.0.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/jsqlparser-3.2.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. cp $SOURCE/3rd_src/target/dependency/junit-4.13.2.jar $TEST/org.opengauss.mppdbide.util.windows.test.fragment/lib/. diff --git a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/.classpath b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/.classpath index 208f2462..c82ca5d8 100644 --- a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/.classpath +++ b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/.classpath @@ -2,6 +2,6 @@ - + diff --git a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/META-INF/MANIFEST.MF b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/META-INF/MANIFEST.MF index 5fb0909f..080a53f0 100644 --- a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/META-INF/MANIFEST.MF +++ b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/META-INF/MANIFEST.MF @@ -25,4 +25,4 @@ Export-Package: org.postgresql, org.postgresql.util, org.postgresql.xa Bundle-ClassPath: ., - opengauss-jdbc-3.1.0.jar + opengauss-jdbc-3.1.1.jar diff --git a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/build.properties b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/build.properties index a38c0ca0..15654db7 100644 --- a/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/build.properties +++ b/code/datastudio/src/org.opengauss.dbdriver.jdbc.gauss/build.properties @@ -1,3 +1,3 @@ output.. = . bin.includes = META-INF/,\ - opengauss-jdbc-3.1.0.jar + opengauss-jdbc-3.1.1.jar diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java index e6047431..0de64268 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java @@ -15,6 +15,9 @@ package org.opengauss.mppdbide.bl.serverdatacache; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import org.opengauss.mppdbide.adapter.gauss.DBConnection; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; @@ -66,6 +69,10 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB private String colDescription; + private ArrayList enumOrSetValues; + + private HashSet enumOrSetList; + private static final String OCP = "all"; /** @@ -86,6 +93,24 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB this.colDescription = colDescription; } + /** + * Gets the enum or set values. + * + * @return the enum or set values + */ + public ArrayList getEnumOrSetValues() { + return enumOrSetValues; + } + + /** + * Sets the enum or set values. + * + * @param enumOrSetValues the new enum or set values + */ + public void setEnumOrSetValues(ArrayList enumOrSetValues) { + this.enumOrSetValues = enumOrSetValues; + } + /** * Instantiates a new column meta data. * @@ -403,7 +428,11 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB if (isSchemaselected) { query.append(this.dataType.getDisplayName()); } else { - query.append(this.dataType.getName()); + String dataType = this.dataType.getName(); + query.append(dataType); + if ("set".equals(dataType) || "enum".equals(dataType)) { + query.append(formEnumOrSetValues()); + } } } @@ -435,6 +464,31 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB return query.toString(); } + /** + * Form enum or set values string + * + */ + private String formEnumOrSetValues() { + if (this.enumOrSetValues == null || this.enumOrSetValues.size() == 0) { + return ""; + } + Iterator valuesItr = this.enumOrSetValues.iterator(); + boolean hasNext = valuesItr.hasNext(); + String value = null; + StringBuilder formValues = new StringBuilder(); + formValues.append('('); + while (hasNext) { + value = valuesItr.next(); + formValues.append('\'').append(value).append('\''); + hasNext = valuesItr.hasNext(); + if (hasNext) { + formValues.append(", "); + } + } + formValues.append(')'); + return formValues.toString(); + } + /** * Form precision and array dimension for query. * @@ -621,6 +675,9 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB qry.append(this.dataType.getName()); } + if ("set".equals(this.dataType.getName()) || "enum".equals(this.dataType.getName())) { + qry.append(formEnumOrSetValues()); + } } if (0 != this.lenOrPrecision) { qry.append('('); @@ -950,4 +1007,12 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB return ""; } + public HashSet getEnumOrSetList() { + return enumOrSetList; + } + + public void setEnumOrSetList(HashSet enumOrSetList) { + this.enumOrSetList = enumOrSetList; + } + } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java index 5f8d2f96..52865f42 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java @@ -15,6 +15,7 @@ package org.opengauss.mppdbide.bl.serverdatacache; +import java.sql.Array; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; @@ -136,6 +137,8 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { private DataTypeProvider dataTypeProvider = null; + private HashMap dolphinTypes = null; + /** * Gets the db name. * @@ -1431,4 +1434,87 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { public boolean isExplainPlanSupported() { return isExplainPlanSupported; } + + public void initDolphinTypesIfNeeded() throws DatabaseCriticalException, DatabaseOperationException { + if (hasDolphin()) { + initDolphinTypes(); + } + } + + private boolean hasDolphin() + throws DatabaseCriticalException, DatabaseOperationException { + String qry = "select count(*) = 1 from pg_extension where extname = 'dolphin'"; + String qry2 = "select count(*) = 1 from pg_proc where proname = 'dolphin_types' and pronamespace = 11 and pronargs = 0"; + boolean hasDolphinExtention = false; + boolean hasDolphinTypesFunction = false; + ResultSet rs = null; + ResultSet rs2 = null; + try { + rs = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); + boolean hasNext = rs.next(); + while (hasNext) { + hasDolphinExtention = rs.getBoolean(1); + hasNext = rs.next(); + } + rs2 = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry2); + hasNext = rs2.next(); + while (hasNext) { + hasDolphinTypesFunction = rs2.getBoolean(1); + hasNext = rs2.next(); + } + } catch (SQLException exp) { + try { + GaussUtils.handleCriticalException(exp); + } catch (DatabaseCriticalException dc) { + throw dc; + } + MPPDBIDELoggerUtility + .error(MessageConfigLoader.getProperty(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION), exp); + throw new DatabaseOperationException(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION, exp); + } finally { + this.getConnectionManager().closeRSOnObjBrowserConn(rs); + this.getConnectionManager().closeRSOnObjBrowserConn(rs2); + } + + return hasDolphinExtention & hasDolphinTypesFunction; + } + + public void initDolphinTypes() throws DatabaseCriticalException, DatabaseOperationException + { + String qry = "select dolphin_types()"; + ResultSet rs = null; + try { + rs = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); + boolean hasNext = rs.next(); + while (hasNext) { + Array array = rs.getArray(1); + if (array != null) { + String[][] strs = (String[][]) array.getArray(); + dolphinTypes = new HashMap(strs.length); + for (int i = 0; i < strs.length; i++) { + dolphinTypes.put(strs[i][0], new boolean[] {Boolean.parseBoolean(strs[i][1]), + Boolean.parseBoolean(strs[i][2])}); + } + } + hasNext = rs.next(); + } + } catch (SQLException exp) { + try { + GaussUtils.handleCriticalException(exp); + } catch (DatabaseCriticalException dc) { + throw dc; + } + MPPDBIDELoggerUtility + .error(MessageConfigLoader.getProperty(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION), exp); + throw new DatabaseOperationException(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION, exp); + } finally { + this.getConnectionManager().closeRSOnObjBrowserConn(rs); + } + + return; + } + + public HashMap getDolphinTypes() { + return this.dolphinTypes; + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DatabaseUtils.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DatabaseUtils.java index 8abd4e68..03eadcc4 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DatabaseUtils.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/DatabaseUtils.java @@ -555,11 +555,11 @@ public interface DatabaseUtils { */ static String[][] getdefaultDatatypeList() { String[][] defaultDatatype = {{"char", null}, {"varchar", null}, {"text", null}, {"int4", "integer"}, - {"int2", "smallint"}, {"int8", "bigint"}, {"date", null}, {"money", null}, {"numeric", null}, - {"numeric", "decimal"}, {"float8", "double precision"}, {"float4", "real"}, {"interval", null}, - {"time", "time without time zone"}, {"timestamp", "timestamp without time zone"}, {"bool", "boolean"}, - {"bit", null}, {"box", null}, {"bytea", null}, {"cidr", null}, {"circle", null}, {"inet", null}, - {"lseg", null}, {"macaddr", null}, {"path", null}, {"point", null}, {"polygon", null}, + {"int1", "tinyint"}, {"int2", "smallint"}, {"int8", "bigint"}, {"date", null}, {"money", null}, + {"numeric", null}, {"numeric", "decimal"}, {"float8", "double precision"}, {"float4", "real"}, + {"interval", null}, {"time", "time without time zone"}, {"timestamp", "timestamp without time zone"}, + {"bool", "boolean"}, {"bit", null}, {"box", null}, {"bytea", null}, {"cidr", null}, {"circle", null}, + {"inet", null}, {"lseg", null}, {"macaddr", null}, {"path", null}, {"point", null}, {"polygon", null}, {"timetz", "time with time zone"}, {"timestamptz", "timestamp with time zone"}, {"tsquery", null}, {"tsvector", null}, {"txid_snapshot", null}, {"uuid", null}, {"varbit", null}, {"xml", null}, {"clob", null}, {"blob", null}}; diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Server.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Server.java index cb111b44..d861edc1 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Server.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Server.java @@ -359,6 +359,7 @@ public class Server implements IConnectionProfile, GaussOLAPDBMSObject { setServerIP2(db.fetchServerIP()); DatabaseUtils.checkCancelStatusAndAbort(status, db); refreshUserRoleObjectGroup(); + db.initDolphinTypesIfNeeded(); return db.getProfileId(); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java index e5f39591..a94f70c6 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java @@ -16,6 +16,7 @@ package org.opengauss.mppdbide.bl.serverdatacache; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; /** @@ -89,6 +90,9 @@ public final class TableValidatorRules { ArrayList types = null; types = db.getDefaultDatatype().getList(); + HashMap dolphinTypes = db.getDolphinTypes(); + + boolean dolphin = dolphinTypes != null; // remove pseudo types when listing data types for column if (column) { @@ -106,9 +110,25 @@ public final class TableValidatorRules { objectIter.remove(); } + if (dolphin && dolphinTypes.containsKey(name)) { + dolphin = false; + } hasMore = objectIter.hasNext(); } } + if (dolphin) { + Namespace ns = (Namespace)db.getSystemNamespaces().get("pg_catalog"); + Iterator dolphinTypesIter = dolphinTypes.keySet().stream().sorted().iterator(); + int typeOid = 10000; + String typename = null; + boolean hasMore = dolphinTypesIter.hasNext(); + + while (hasMore) { + typename = dolphinTypesIter.next(); + types.add(new TypeMetaData(typeOid++, typename, ns)); + hasMore = dolphinTypesIter.hasNext(); + } + } return types; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQuery.java b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQuery.java index f0b9de3a..78d6f3d7 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQuery.java +++ b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQuery.java @@ -87,7 +87,11 @@ public class EditTableExecuteQuery implements EditTableExecuteQueryUtility { for (int index = 0; index < editValueCount; index++) { value = editValues.get(index); if (!IEditTableExecuteQuery.isNonPlaceholderType(value)) { - stmt.setObject(index + 1, value); + if (value instanceof String) { + stmt.setObject(index + 1, value, Types.OTHER); + } else { + stmt.setObject(index + 1, value); + } } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQueryUtility.java b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQueryUtility.java index 0236b7ea..6567bfb5 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQueryUtility.java +++ b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/EditTableExecuteQueryUtility.java @@ -17,6 +17,7 @@ package org.opengauss.mppdbide.presentation.edittabledata; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.HashMap; import java.util.List; import org.opengauss.mppdbide.adapter.gauss.DBConnection; @@ -93,7 +94,7 @@ public interface EditTableExecuteQueryUtility { value = updatedRow.getOriginalValue(columnIndex); if (value != null && !IEditTableExecuteQuery.isNonPlaceholderType(value) && IEditTableExecuteQuery.isDatatypeSupported(columnProvider.getColumnDataTypeName(columnIndex), - columnProvider.getPrecision(columnIndex))) { + columnProvider.getPrecision(columnIndex), dsEditTableDataGridDataProvider.getDatabse().getDolphinTypes())) { placeholderIdx++; IEditTableExecuteQuery.preparePlaceHolderStmt(columnProvider, value, placeholderIdx, stmt, index); } @@ -168,7 +169,7 @@ public interface EditTableExecuteQueryUtility { PreparedStatement stmt = null; try { stmt = conn.getConnection().prepareStatement(query); - addPlaceHolderForDeletedClms(deletedRow, uniqueKeys, columnProvider, stmt, conn); + addPlaceHolderForDeletedClms(deletedRow, uniqueKeys, columnProvider, stmt, conn, dsEditTableDataGridDataProvider.getDatabse().getDolphinTypes()); int result = stmt.executeUpdate(); if (result == 0) { @@ -208,7 +209,7 @@ public interface EditTableExecuteQueryUtility { * @throws SQLException the SQL exception */ public default void addPlaceHolderForDeletedClms(IDSGridEditDataRow deletedRow, List uniqueKeys, - IDSGridColumnProvider columnProvider, PreparedStatement stmt, DBConnection conn) throws SQLException { + IDSGridColumnProvider columnProvider, PreparedStatement stmt, DBConnection conn, HashMap dolphinTypes) throws SQLException { Object value; String colName; int columnIndex; @@ -220,7 +221,7 @@ public interface EditTableExecuteQueryUtility { value = deletedRow.getOriginalValue(columnIndex); if (null != value && !IEditTableExecuteQuery.isNonPlaceholderType(value) && IEditTableExecuteQuery.isDatatypeSupported(columnProvider.getColumnDataTypeName(columnIndex), - columnProvider.getPrecision(columnIndex))) { + columnProvider.getPrecision(columnIndex), dolphinTypes)) { placeHolder++; value = IEditTableExecuteQuery.transformToSqlDatatypes(columnProvider, index, value, conn.getConnection()); diff --git a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/IEditTableExecuteQuery.java b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/IEditTableExecuteQuery.java index 24d2d5af..401626d0 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/IEditTableExecuteQuery.java +++ b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/edittabledata/IEditTableExecuteQuery.java @@ -21,6 +21,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; import java.sql.Types; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -244,7 +245,11 @@ public interface IEditTableExecuteQuery { int placeholderIdx, PreparedStatement stmt, int index) throws SQLException { Object value = valueParam; value = transformToSqlDatatypes(columnProvider, index, value, stmt.getConnection()); - stmt.setObject(placeholderIdx, value); + if (value instanceof String) { + stmt.setObject(placeholderIdx, value, Types.OTHER); + } else { + stmt.setObject(placeholderIdx, value); + } } /** @@ -398,7 +403,7 @@ public interface IEditTableExecuteQuery { strBldr.append(" is null"); } else { strBldr.append(" = "); - handleNonEditableDatatypeQuery(columnProvider, value, columnIndex, strBldr); + handleNonEditableDatatypeQuery(columnProvider, value, columnIndex, strBldr, dsEditTableDataGridDataProvider.getDatabse().getDolphinTypes()); } if (iterator.hasNext()) { @@ -463,7 +468,7 @@ public interface IEditTableExecuteQuery { queryBuilder.append(" is null"); } else { queryBuilder.append(" = "); - handleNonEditableDatatypeQuery(columnProvider, value, columnIndex, queryBuilder); + handleNonEditableDatatypeQuery(columnProvider, value, columnIndex, queryBuilder, dsEditTableDataGridDataProvider.getDatabse().getDolphinTypes()); } if (iterator.hasNext()) { @@ -484,9 +489,9 @@ public interface IEditTableExecuteQuery { * @param query the query */ static void handleNonEditableDatatypeQuery(IDSGridColumnProvider columnProvider, Object value, int columnIndex, - StringBuilder query) { + StringBuilder query, HashMap dolphinTypes) { if (!isDatatypeSupported(columnProvider.getColumnDataTypeName(columnIndex), - columnProvider.getPrecision(columnIndex))) { + columnProvider.getPrecision(columnIndex), dolphinTypes)) { query.append(ServerObject.getLiteralName(value.toString())); } else { filterPlaceHolderQuery(value, query); @@ -529,7 +534,7 @@ public interface IEditTableExecuteQuery { * @param precision the precision * @return true, if is datatype supported */ - public static boolean isDatatypeSupported(String sqlType, int precision) { + public static boolean isDatatypeSupported(String sqlType, int precision, HashMap dolphinTypes) { switch (sqlType.toLowerCase(Locale.ENGLISH)) { case "bpchar": case "char": @@ -555,6 +560,9 @@ public interface IEditTableExecuteQuery { } return true; default: + if (dolphinTypes != null && dolphinTypes.containsKey(sqlType.toLowerCase(Locale.ENGLISH))) { + return true; + } return false; } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties index 9acaa368..f5d6a1a3 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages.properties @@ -591,6 +591,9 @@ INDEX_UI_TYPE=Index Type INDEX_UI_ACCESS_METHOD=Access Method INDEX_UI_TABLESPACE=Tablespace +SET_ENUM_UI_USER_VALUE=User Defined Value +EDIT_SETTING_VALUE=Edit Setting Value + DATA_DIST_UI_HAST_FUN=HASH Function Options DATA_DIST_UI_DEFAULT_DIST=DEFAULT DISTRIBUTION diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties index f15d3ac7..5700a3cc 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/messages_zh_CN.properties @@ -575,6 +575,9 @@ INDEX_UI_TYPE=\u7D22\u5F15\u7C7B\u578B INDEX_UI_ACCESS_METHOD=\u8BBF\u95EE\u65B9\u5F0F INDEX_UI_TABLESPACE=\u8868\u7A7A\u95F4 +SET_ENUM_UI_USER_VALUE=\u7528\u6237\u81EA\u5B9A\u4E49\u503C +EDIT_SETTING_VALUE=\u7F16\u8F91\u8BBE\u7F6E\u503C + DATA_DIST_UI_HAST_FUN=HASH\u51FD\u6570\u7684\u9009\u62E9 DATA_DIST_UI_DEFAULT_DIST=\u9ED8\u8BA4\u5206\u5E03 diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java index dab1c0c3..e9f0a0fd 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/IMessagesConstantsOne.java @@ -676,6 +676,9 @@ public interface IMessagesConstantsOne extends IMessagesConstantsTwo { String INDEX_UI_ACCESS_METHOD = "INDEX_UI_ACCESS_METHOD"; String INDEX_UI_TABLESPACE = "INDEX_UI_TABLESPACE"; + String SET_ENUM_UI_USER_VALUE = "SET_ENUM_UI_USER_VALUE"; + String EDIT_SETTING_VALUE="EDIT_SETTING_VALUE"; + String DATA_DIST_UI_HAST_FUN = "DATA_DIST_UI_HAST_FUN"; String DATA_DIST_UI_DEFAULT_DIST = "DATA_DIST_UI_DEFAULT_DIST"; diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/DSGridToolTipProvider.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/DSGridToolTipProvider.java index 4e34bc21..a6daeb8e 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/DSGridToolTipProvider.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/DSGridToolTipProvider.java @@ -244,7 +244,8 @@ public class DSGridToolTipProvider extends NatTableContentTooltip { return toolTipText + MessageConfigLoader.getProperty(IMessagesConstants.TOOLTIP_DISTRIBUTION_COL); } else if (dataProvider instanceof DSObjectPropertiesGridDataProvider) { return toolTipText; - } else if (!GridUIUtils.isDatatypeEditSupported(colDatatypeName, colPrecisionVal)) { + } else if (!GridUIUtils.isDatatypeEditSupported(colDatatypeName, colPrecisionVal, + dataProvider.getDatabse())) { return toolTipText + MessageConfigLoader.getProperty(IMessagesConstants.TOOLTIP_READONLY_COL); } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java index 2e7789fe..9eadb54c 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java @@ -16,6 +16,8 @@ package org.opengauss.mppdbide.view.component.grid; import java.sql.Types; +import java.util.HashMap; +import java.util.HashSet; import org.eclipse.nebula.widgets.cdatetime.CDT; import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration; @@ -50,7 +52,10 @@ import org.opengauss.mppdbide.presentation.objectproperties.PropertiesConstants; import org.opengauss.mppdbide.presentation.objectproperties.PropertiesUserRoleImpl; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; +import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; +import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; import org.opengauss.mppdbide.view.component.IGridUIPreference; import org.opengauss.mppdbide.view.component.grid.core.DSAbstractRegistryConfiguration; import org.opengauss.mppdbide.view.component.grid.core.DSBlobCellEditor; @@ -70,7 +75,24 @@ import org.opengauss.mppdbide.view.utils.icon.IconUtility; public class EditTableGridStyleConfiguration extends AbstractRegistryConfiguration implements IEditTableGridStyleLabelFactory { private static final String COL_LABEL_TIMESTAMP = "TIMESTAMP"; - + private static HashSet extraTypes = new HashSet<>(); + + + static { + extraTypes.add("int1"); + extraTypes.add("nvarchar2"); + extraTypes.add("interval"); + extraTypes.add("blob"); + extraTypes.add("clob"); + extraTypes.add("varbit"); + extraTypes.add("box"); + extraTypes.add("path"); + extraTypes.add("circle"); + extraTypes.add("lseg"); + extraTypes.add("point"); + extraTypes.add("polygon"); + extraTypes.add("binary"); + } /** * Configure registry. * @@ -303,12 +325,13 @@ public class EditTableGridStyleConfiguration extends AbstractRegistryConfigurati if (dataProvider instanceof DSObjectPropertiesGridDataProvider) { handleDSObjectGridConfigureRegistry(configRegistry, dataProvider, columnCount); } - handleCommonColumnConfigureRegistry(configRegistry, dataProvider, columnCount); + handleCommonColumnConfigureRegistry(configRegistry, dataProvider, columnCount, + dataProvider.getDatabse() != null ?dataProvider.getDatabse().getDolphinTypes() : null); } private void handleCommonColumnConfigureRegistry(IConfigRegistry configRegistry, - IDSGridDataProvider dataProvider, int columnCount) { + IDSGridDataProvider dataProvider, int columnCount, HashMapdolphinTypes) { int colDatatype = 0; for (int i = 0; i < columnCount; i++) { colDatatype = dataProvider.getColumnDataProvider().getColumnDatatype(i); @@ -331,6 +354,24 @@ public class EditTableGridStyleConfiguration extends AbstractRegistryConfigurati break; } case Types.OTHER: { + String colDatatypeName = dataProvider.getColumnDataProvider().getColumnDataTypeName(i); + if (extraTypes.contains(colDatatypeName) || (dolphinTypes != null && dolphinTypes.containsKey(colDatatypeName))) { + configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), + DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); + break; + } + try { + if (GridUIUtils.istypType(colDatatypeName, "s", dataProvider.getDatabse()) || + GridUIUtils.istypType(colDatatypeName, "e", dataProvider.getDatabse())) { + configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), + DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); + break; + } + } catch (DatabaseCriticalException exception) { + MPPDBIDELoggerUtility.error("istypType query failed", exception); + } catch (DatabaseOperationException exception) { + MPPDBIDELoggerUtility.error("istypType query failed", exception); + } cursorTypeConfiguration(configRegistry, dataProvider); break; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java index e2821735..8a8a44b9 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java @@ -15,6 +15,9 @@ package org.opengauss.mppdbide.view.component.grid; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; import java.util.Locale; import org.eclipse.swt.SWT; @@ -22,11 +25,15 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; - +import org.opengauss.mppdbide.adapter.gauss.GaussUtils; +import org.opengauss.mppdbide.bl.serverdatacache.Database; import org.opengauss.mppdbide.presentation.objectproperties.PropertiesConstants; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; +import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; +import org.opengauss.mppdbide.utils.logger.MPPDBIDELoggerUtility; /** * @@ -95,13 +102,14 @@ public class GridUIUtils { * @param precision the precision * @return true, if is datatype edit supported */ - public static boolean isDatatypeEditSupported(String sqlType, int precision) { + public static boolean isDatatypeEditSupported(String sqlType, int precision, Database db) { switch (sqlType.toLowerCase(Locale.ENGLISH)) { case "bpchar": case "char": case "varchar": case "text": case "int4": + case "int1": case "int2": case "int8": case "date": @@ -118,6 +126,18 @@ public class GridUIUtils { case "real": case "number": case "boolean": + case "nvarchar2": + case "interval": + case "blob": + case "clob": + case "varbit": + case "box": + case "path": + case "circle": + case "lseg": + case "point": + case "polygon": + case "binary": case MPPDBIDEConstants.BYTEA: { return true; } @@ -128,12 +148,54 @@ public class GridUIUtils { return true; } default: { + HashMap dolphinTypes = db.getDolphinTypes(); + if (dolphinTypes != null) { + String typeName = sqlType.toLowerCase(Locale.ENGLISH); + if (dolphinTypes.containsKey(typeName)) { + return true; + } + try { + if (istypType(typeName, "s", db) || istypType(typeName, "e", db)) { + return true; + } + } catch (DatabaseCriticalException exception) { + MPPDBIDELoggerUtility.error("istypType query failed", exception); + } catch (DatabaseOperationException exception) { + MPPDBIDELoggerUtility.error("istypType query failed", exception); + } + } return false; } } } + public static boolean istypType(String typeName, String typType, Database db) throws DatabaseCriticalException, DatabaseOperationException { + String qry = "select count(*) from pg_type where typname = '" + typeName + "' and typtype = '" + typType + "';"; + boolean isSetType = false; + ResultSet rs = null; + try { + rs = db.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); + boolean hasNext = rs.next(); + while (hasNext) { + isSetType = rs.getBoolean(1); + hasNext = rs.next(); + } + } catch (SQLException exp) { + try { + GaussUtils.handleCriticalException(exp); + } catch (DatabaseCriticalException dc) { + throw dc; + } + MPPDBIDELoggerUtility + .error(MessageConfigLoader.getProperty(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION), exp); + throw new DatabaseOperationException(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION, exp); + } finally { + db.getConnectionManager().closeRSOnObjBrowserConn(rs); + } + return isSetType; + } + /** * Checks if is editable properties attributes. * diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnHeaderAccumulator.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnHeaderAccumulator.java index 0796546f..15aebfcd 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnHeaderAccumulator.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnHeaderAccumulator.java @@ -76,7 +76,7 @@ public class GridColumnHeaderAccumulator extends ColumnLabelAccumulator { return; } - if (!GridUIUtils.isDatatypeEditSupported(columnDTName, precisionVal) + if (!GridUIUtils.isDatatypeEditSupported(columnDTName, precisionVal, editDP.getDatabse()) || editDP.isDistributionColumn(columnPosition)) { configLabels.addLabel(IEditTableGridStyleLabelFactory.COL_HEADER_LABEL_READONLY_CELL); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnLabelAccumulator.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnLabelAccumulator.java index 42ac4c77..4554c09f 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnLabelAccumulator.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnLabelAccumulator.java @@ -217,7 +217,7 @@ public class GridColumnLabelAccumulator extends ColumnOverrideLabelAccumulator { private boolean checkIfDatatypeSupported(int colPosition, IDSEditGridDataProvider editDataProvider) { String columnDataTypeName = editDataProvider.getColumnDataProvider().getColumnDataTypeName(colPosition); int colPrecisionValue = editDataProvider.getColumnDataProvider().getPrecision(colPosition); - return GridUIUtils.isDatatypeEditSupported(columnDataTypeName, colPrecisionValue); + return GridUIUtils.isDatatypeEditSupported(columnDataTypeName, colPrecisionValue, editDataProvider.getDatabse()); } /* diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnValueAccessor.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnValueAccessor.java index 62d132f6..89a2cae5 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnValueAccessor.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/core/GridColumnValueAccessor.java @@ -319,7 +319,7 @@ public class GridColumnValueAccessor implements IColumnPropertyAccessor setOrEnumValues; + private HashSet setOrEnumList; + /** * Instantiates a new change data type dialog. * @@ -133,16 +155,16 @@ public class ChangeDataTypeDialog extends Dialog { Composite mainComposite = new Composite(currentShell, SWT.NONE); mainComposite.setLayout(new GridLayout(1, false)); - GridData mainCompositeGD = new GridData(SWT.FILL, SWT.NONE, true, false); + GridData mainCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); mainComposite.setLayoutData(mainCompositeGD); createDatatypeInfoGui(mainComposite); - Composite btnComposite = new Composite(mainComposite, SWT.NONE); + Composite btnComposite = new Composite(mainComposite, SWT.BOTTOM); btnComposite.setLayout(new GridLayout(8, true)); GridData btnCompositeGD = new GridData(SWT.FILL, SWT.BOTTOM, true, false); + btnCompositeGD.heightHint = 40; btnComposite.setLayoutData(btnCompositeGD); - new Label(btnComposite, SWT.NONE).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 6, 1)); ; okButton = new Button(btnComposite, SWT.NONE); @@ -177,7 +199,7 @@ public class ChangeDataTypeDialog extends Dialog { currentShell.setLayout(new GridLayout(1, false)); GridData currentShellGD = new GridData(SWT.FILL, SWT.NONE, true, true); currentShell.setLayoutData(currentShellGD); - currentShell.setSize(720, 235); + currentShell.setSize(720, 345); /* Place the window in the centre of primary monitor */ if (display != null) { @@ -241,14 +263,16 @@ public class ChangeDataTypeDialog extends Dialog { final Database db = tableMetaData.getNamespace().getDatabase(); Label lblCurrentDataType = new Label(compositeColumns, SWT.NONE); - GridData lblCurrentDataTypeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData lblCurrentDataTypeGD = new GridData(SWT.FILL, SWT.NONE, true, false); lblCurrentDataTypeGD.horizontalIndent = 10; + lblCurrentDataTypeGD.heightHint = 20; lblCurrentDataType.setLayoutData(lblCurrentDataTypeGD); Composite inputComp = new Composite(compositeColumns, SWT.NONE); inputComp.setLayout(new GridLayout(4, false)); - GridData inputCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData inputCompGD = new GridData(SWT.FILL, SWT.FILL, true, false); inputComp.setLayoutData(inputCompGD); + inputCompGD.heightHint = 100; createDatatypeSchemaComposite(inputComp, db); createDataTypeComposite(inputComp, db); @@ -257,6 +281,8 @@ public class ChangeDataTypeDialog extends Dialog { createTypeDescriptorComposite(compositeColumns); createTypeConversionTipComposite(compositeColumns); + addDisplayEditValuesButton(compositeColumns); + createColumnOrExpr(compositeColumns); comboClmDataSchema.addSelectionListener(addComboClmDataSchemaSelectionListener(db)); comboClmDataType.addModifyListener(addComboClmDataTypeModifyListener(db)); @@ -280,9 +306,10 @@ public class ChangeDataTypeDialog extends Dialog { private void createTypeDescriptorComposite(Composite compositeColumns) { Composite typeDescriptorComp = new Composite(compositeColumns, SWT.NONE); typeDescriptorComp.setLayout(new GridLayout(2, false)); - GridData typeDescriptorCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData typeDescriptorCompGD = new GridData(SWT.FILL, SWT.FILL, true, false); typeDescriptorCompGD.horizontalIndent = 5; typeDescriptorComp.setLayoutData(typeDescriptorCompGD); + typeDescriptorCompGD.heightHint = 40; Label lblTypeDescription = new Label(typeDescriptorComp, SWT.NONE); lblTypeDescription.setText(MessageConfigLoader.getProperty(IMessagesConstants.TYPE_DES)); @@ -290,15 +317,17 @@ public class ChangeDataTypeDialog extends Dialog { lblDescriptionOfDatatype = new Label(typeDescriptorComp, SWT.NONE); lblDescriptionOfDatatype.setBackground(FontAndColorUtility.getColor(SWT.COLOR_WHITE)); - GridData lblDescriptionOfDatatypeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData lblDescriptionOfDatatypeGD = new GridData(SWT.FILL, SWT.NONE, true, false); + lblDescriptionOfDatatypeGD.heightHint = 40; lblDescriptionOfDatatype.setLayoutData(lblDescriptionOfDatatypeGD); lblDescriptionOfDatatype.setText(""); } private void createTypeConversionTipComposite(Composite compositeColumns) { Label datatypeConversionTip = new Label(compositeColumns, SWT.NONE); - GridData datatypeConversionTipGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData datatypeConversionTipGD = new GridData(SWT.FILL, SWT.FILL, true, false); datatypeConversionTipGD.horizontalIndent = 10; + datatypeConversionTipGD.heightHint = 30; datatypeConversionTip.setLayoutData(datatypeConversionTipGD); datatypeConversionTip.setText(MessageConfigLoader.getProperty(IMessagesConstants.DATA_TYPE_CONVERSION_TIP)); datatypeConversionTip.pack(); @@ -307,7 +336,8 @@ public class ChangeDataTypeDialog extends Dialog { private void createScaleComposite(Composite compositeColumns) { Composite scaleComp = new Composite(compositeColumns, SWT.NONE); scaleComp.setLayout(new GridLayout(1, false)); - GridData scaleCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData scaleCompGD = new GridData(SWT.FILL, SWT.FILL, true, false); + scaleCompGD.heightHint = 30; scaleCompGD.verticalSpan = 2; scaleComp.setLayoutData(scaleCompGD); @@ -316,14 +346,15 @@ public class ChangeDataTypeDialog extends Dialog { lblScale.pack(); spinnerScale = new Spinner(scaleComp, SWT.BORDER); - GridData spinnerScaleGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData spinnerScaleGD = new GridData(SWT.FILL, SWT.FILL, true, false); spinnerScale.setLayoutData(spinnerScaleGD); } private void createPrecisionComposite(Composite compositeColumns) { Composite precisionSizeComp = new Composite(compositeColumns, SWT.NONE); precisionSizeComp.setLayout(new GridLayout(1, false)); - GridData precisionSizeCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData precisionSizeCompGD = new GridData(SWT.FILL, SWT.FILL, true, false); + precisionSizeCompGD.heightHint = 30; precisionSizeCompGD.verticalSpan = 2; precisionSizeComp.setLayoutData(precisionSizeCompGD); @@ -332,7 +363,7 @@ public class ChangeDataTypeDialog extends Dialog { lblPre.pack(); spinnerPrevSize = new Spinner(precisionSizeComp, SWT.BORDER); - GridData spinnerPrevSizeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData spinnerPrevSizeGD = new GridData(SWT.FILL, SWT.FILL, true, false); spinnerPrevSize.setLayoutData(spinnerPrevSizeGD); spinnerPrevSize.setMaximum(Integer.MAX_VALUE); } @@ -437,8 +468,8 @@ public class ChangeDataTypeDialog extends Dialog { return; } - spinnerPrevSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName())); - spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName())); + spinnerPrevSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName(), db.getDolphinTypes())); + spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName(), db.getDolphinTypes())); /* * when dialog is opened the saved value should be displayed @@ -476,8 +507,14 @@ public class ChangeDataTypeDialog extends Dialog { */ if (selectedNamespace == null || (!"information_schema".equals(selectedNamespace.getName()) && !"pg_catalog".equals(selectedNamespace.getName()))) { - spinnerPrevSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName())); - spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName())); + spinnerPrevSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName(), db.getDolphinTypes())); + spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName(), db.getDolphinTypes())); + if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + editValues.setVisible(true); + } else { + grpValues.setVisible(false); + editValues.setVisible(false); + } } else { spinnerPrevSize.setEnabled(false); spinnerScale.setEnabled(false); @@ -512,6 +549,11 @@ public class ChangeDataTypeDialog extends Dialog { if (spinnerPrevSize != null && spinnerScale != null) { columnMetaData.setPre(spinnerPrevSize.getSelection(), spinnerScale.getSelection()); } + + if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + columnMetaData.setEnumOrSetValues(new ArrayList(this.setOrEnumValues)); + columnMetaData.setEnumOrSetList(new HashSet(this.setOrEnumList)); + } } /** @@ -539,7 +581,7 @@ public class ChangeDataTypeDialog extends Dialog { } /** - * Disable data typen combo. + * Disable data type combo. */ private void disableDataTypenCombo() { if (!(validator.enableDisable())) { @@ -576,4 +618,288 @@ public class ChangeDataTypeDialog extends Dialog { public void cancel() { } + /** + * Creates the column or expr. + * + * @param comp the comp + */ + private void createColumnOrExpr(Composite comp) { + grpValues = new Group(comp, SWT.FILL); + grpValues.setLayout(new GridLayout(5, false)); + GridData groupGD = new GridData(SWT.FILL, SWT.FILL, true, true); + groupGD.heightHint = 10; + groupGD.horizontalSpan = 4; + grpValues.setLayoutData(groupGD); + + createUserDefComposite(); + createAddRemoveValueComposite(); + createValueTable(grpValues); + createUpDownValueComposite(); + createFinishComposite(); + grpValues.setVisible(false); + } + + private void createUserDefComposite() { + Composite userValueComp = new Composite(this.grpValues, SWT.FILL); + userValueComp.setLayout(new GridLayout(1, false)); + GridData avalColsOrUserExpCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + userValueComp.setLayoutData(avalColsOrUserExpCompGD); + + Composite userExprComposite = new Composite(userValueComp, SWT.FILL); + userExprComposite.setLayout(new GridLayout(1, false)); + GridData userExprCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + userExprComposite.setLayoutData(userExprCompositeGD); + userExprComposite.setSize(50, 30); + + Label lblUserDefinedValue = new Label(userExprComposite, SWT.FILL); + lblUserDefinedValue.setText(MessageConfigLoader.getProperty(IMessagesConstants.SET_ENUM_UI_USER_VALUE)); + lblUserDefinedValue.pack(); + + txtUserValue = new StyledText(userExprComposite, SWT.BORDER); + txtUserValue.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TXT_INDEXUI_USEREXPR_001"); + GridData txtUserExprGD = new GridData(SWT.FILL, SWT.NONE, true, true); + txtUserExprGD.heightHint = 30; + txtUserValue.setLayoutData(txtUserExprGD); + + setOrEnumList = new HashSet(); + setOrEnumValues = new ArrayList(); + } + + private void createAddRemoveValueComposite() { + Composite addRemoveValueComposite = new Composite(this.grpValues, SWT.NONE); + addRemoveValueComposite.setLayout(new GridLayout(1, false)); + GridData addRemoveIndexCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + addRemoveIndexCompositeGD.verticalAlignment = SWT.CENTER; + addRemoveValueComposite.setLayoutData(addRemoveIndexCompositeGD); + + createAddToValue(addRemoveValueComposite); + createRemoveFromIndex(addRemoveValueComposite); + } + /** + * Creates the add to index.Add/Remove/MoveUp/MoveDown Buttons + * + * @param comp the comp + */ + private void createAddToValue(Composite comp) { + Button addToIndex = new Button(comp, SWT.ARROW | SWT.RIGHT); + GridData addToIndexGD = new GridData(SWT.FILL, SWT.FILL, true, true); + addToIndexGD.heightHint = 20; + addToIndex.setLayoutData(addToIndexGD); + addToIndex.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_ADD_TO_INDEX_001"); + addToIndex.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_ADD_TO)); + addToIndex.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + String userExpr = txtUserValue.getText().trim(); + if (!"".equals(userExpr)) { + if (!setOrEnumList.contains(userExpr)) { + setOrEnumList.add(userExpr); + setOrEnumValues.add(userExpr); + repopulateValueCols(); + txtUserValue.setText(""); + } + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + public void repopulateValueCols() { + TableItem item = null; + tblValues.removeAll(); + Iterator valuesItr = this.setOrEnumValues.iterator(); + boolean hasNext = valuesItr.hasNext(); + String value = null; + + while (hasNext) { + value = valuesItr.next(); + item = new TableItem(tblValues, SWT.NONE); + item.setText(value); + hasNext = valuesItr.hasNext(); + } + } + + + private void createRemoveFromIndex(Composite comp) { + Button removeFromIndex = new Button(comp, SWT.ARROW | SWT.LEFT); + GridData removeFromIndexGD = new GridData(SWT.FILL, SWT.FILL, true, true); + removeFromIndexGD.heightHint = 20; + removeFromIndex.setLayoutData(removeFromIndexGD); + removeFromIndex.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_REMOVE_FROM_INDEX_001"); + removeFromIndex.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_REMOVE)); + removeFromIndex.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > -1) { + String expr = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + tblValues.remove(selectedIdx); + setOrEnumList.remove(expr); + txtUserValue.setText(expr); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent eevent) { + // Nothing to do. + } + }); + } + + private void createValueTable(Composite comp) { + tblValues = new Table(comp, SWT.BORDER | SWT.FULL_SELECTION); + tblValues.setLayout(new GridLayout(1, false)); + GridData tblIndexColsGD = new GridData(SWT.FILL, SWT.FILL, true, true); + tblIndexColsGD.horizontalIndent = 5; + tblValues.setLayoutData(tblIndexColsGD); + tblValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TBL_INDEXUI_INDEX_COLS_001"); + tblValues.setLinesVisible(true); + tblValues.setHeaderVisible(true); + + ControlDecoration decofk = new ControlDecoration(tblValues, SWT.TOP | SWT.LEFT); + + // use an existing image + Image image = IconUtility.getIconImage(IiconPath.MANDATORY_FIELD, this.getClass()); + + // set description and image + decofk.setDescriptionText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MSG)); + decofk.setImage(image); + + TableColumn tblclmnIndexColumns = new TableColumn(tblValues, SWT.FILL); + tblclmnIndexColumns.setWidth(185); + tblclmnIndexColumns.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TBL_COL_INDEXUI_INDEX_COLS_001"); + tblclmnIndexColumns.setText(MessageConfigLoader.getProperty(IMessagesConstants.SET_ENUM_UI_USER_VALUE)); + + } + + private void createFinishComposite() { + Composite finishValueComposite = new Composite(this.grpValues, SWT.NONE); + finishValueComposite.setLayout(new GridLayout(1, false)); + GridData finishValueCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + finishValueCompositeGD.verticalAlignment = SWT.CENTER; + finishValueComposite.setLayoutData(finishValueCompositeGD); + + Button finish = new Button(finishValueComposite, SWT.NONE); + GridData finishGD = new GridData(SWT.FILL, SWT.FILL, true, true); + finishGD.heightHint = 20; + finish.setLayoutData(finishGD); + finish.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + finish.setText(MessageConfigLoader.getProperty(IMessagesConstants.CREATE_TABLE_FINISH_BTN)); + finish.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + grpValues.setVisible(false); + grpValues.setSize(0,0); + editValues.setVisible(true); + currentShell.setSize(720, 345); + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + private void createUpDownValueComposite() { + Composite upDownValueComposite = new Composite(this.grpValues, SWT.NONE); + upDownValueComposite.setLayout(new GridLayout(1, false)); + GridData upDownIndexCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + upDownIndexCompositeGD.verticalAlignment = SWT.CENTER; + upDownValueComposite.setLayoutData(upDownIndexCompositeGD); + + createValueMoveUp(upDownValueComposite); + createValueMoveDown(upDownValueComposite); + } + + private void createValueMoveUp(Composite comp) { + Button moveUp = new Button(comp, SWT.ARROW | SWT.UP); + GridData moveUpGD = new GridData(SWT.FILL, SWT.FILL, true, true); + moveUpGD.heightHint = 20; + moveUp.setLayoutData(moveUpGD); + moveUp.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + moveUp.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MOVE_UP)); + moveUp.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > 0) { + String value = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + setOrEnumValues.add(selectedIdx - 1, value); + repopulateValueCols(); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + private void createValueMoveDown(Composite comp) { + Button moveDown = new Button(comp, SWT.ARROW | SWT.DOWN); + GridData moveDownGD = new GridData(SWT.FILL, SWT.FILL, true, true); + moveDownGD.heightHint = 20; + moveDown.setLayoutData(moveDownGD); + moveDown.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_DOWN_INDEX_001"); + moveDown.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MOVE_DOWN)); + moveDown.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > -1 && selectedIdx < (tblValues.getItemCount() - 1)) { + String value = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + setOrEnumValues.add(selectedIdx + 1, value); + repopulateValueCols(); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + + } + }); + } + + /** + * + * @param compositeColumns + */ + private void addDisplayEditValuesButton(Composite compositeColumns) { + Composite editValuesComposite = new Composite(compositeColumns, SWT.FILL); + editValuesComposite.setLayout(new GridLayout(1, false)); + editValues = new Button(editValuesComposite, SWT.NONE); + GridData editValuesCompositeGD = new GridData(SWT.NONE, SWT.NONE, true, false); + editValuesCompositeGD.horizontalAlignment = SWT.RIGHT; + editValuesCompositeGD.heightHint = 20; + editValuesCompositeGD.widthHint = 100; + editValues.setLayoutData(editValuesCompositeGD); + editValues.setSize(20, 100); + editValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + editValues.setText(MessageConfigLoader.getProperty(IMessagesConstants.EDIT_SETTING_VALUE)); + editValues.setVisible(false); + editValues.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + grpValues.setSize(720, 200); + grpValues.setVisible(true); + editValues.setVisible(false); + currentShell.setSize(720, 525); + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java index 1f91fea3..2304ffdf 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java @@ -15,8 +15,12 @@ package org.opengauss.mppdbide.view.ui.table; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import java.util.Locale; +import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ModifyEvent; @@ -37,6 +41,7 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; @@ -67,6 +72,7 @@ import org.opengauss.mppdbide.view.utils.icon.IiconPath; */ public class ColumnUI { private Text textColumnName; + private StyledText txtUserValue; private Button chkColumnNameCase; @@ -93,12 +99,14 @@ public class ColumnUI { private StyledText textCheckExpr; private Group grpColumns; + private Group grpValues; private Database db; private TableMetaData selectedTable; private int editIndex = -1; private TableValidatorRules validator; private Table tableCloumnList; + private Table tblValues; private boolean duplicateName; @@ -108,9 +116,13 @@ public class ColumnUI { private Label lblCheck; private Button chkFunction; + private Button editValues; private Text textColumnDescription; + private ArrayList setOrEnumValues; + private HashSet setOrEnumList; + /** * Sets the UI labels color gray. */ @@ -254,9 +266,9 @@ public class ColumnUI { /** * STEP: 2 COLUMN CREATION */ - Composite columnDetails = new Composite(compositeColumns, SWT.NONE); + Composite columnDetails = new Composite(compositeColumns, SWT.FILL); columnDetails.setLayout(new GridLayout(4, false)); - GridData columnDetailsGD = new GridData(SWT.FILL, SWT.NONE, true, true); + GridData columnDetailsGD = new GridData(SWT.FILL, SWT.FILL, true, true); columnDetails.setLayoutData(columnDetailsGD); addColumnNameGui(columnDetails); @@ -270,17 +282,19 @@ public class ColumnUI { addDataTypeSchemaGui(columnDetails); - Composite typeDescriptionComposite = new Composite(compositeColumns, SWT.NONE); + Composite typeDescriptionComposite = new Composite(compositeColumns, SWT.FILL); typeDescriptionComposite.setLayout(new GridLayout(2, false)); GridData typeDescriptionCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); typeDescriptionCompositeGD.heightHint = 50; typeDescriptionComposite.setLayoutData(typeDescriptionCompositeGD); addDatatypeDescpGui(typeDescriptionComposite); + addDisplayEditValuesButton(compositeColumns); addDatatypeGui(columnDetails); addPrecisionSizeGUI(columnDetails); addScaleGui(columnDetails); + createValues(compositeColumns); addColumnConstraintGui(compositeColumns); addColumnDescription(compositeColumns); @@ -448,7 +462,7 @@ public class ColumnUI { * @param compositeColumns the composite columns */ private void addDatatypeGui(Composite compositeColumns) { - Composite dataTypeComposite = new Composite(compositeColumns, SWT.NONE); + Composite dataTypeComposite = new Composite(compositeColumns, SWT.FILL); dataTypeComposite.setLayout(new GridLayout(1, false)); GridData dataTypeCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); dataTypeComposite.setLayoutData(dataTypeCompositeGD); @@ -562,6 +576,7 @@ public class ColumnUI { textColumnName = new Text(columnNameComposite, SWT.BORDER); GridData textColumnNameGD = new GridData(SWT.FILL, SWT.FILL, true, true); + textColumnNameGD.heightHint = 30; textColumnNameGD.widthHint = 200; textColumnName.setLayoutData(textColumnNameGD); textColumnName.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TXT_COLUMNUI_COL_NAME_001"); @@ -596,6 +611,7 @@ public class ColumnUI { */ public void modifyText(ModifyEvent event) { enableDisableSizeLen(); + enableDisableSetValues(); } } @@ -700,8 +716,8 @@ public class ColumnUI { if (selectedNS == null || (!"information_schema".equals(selectedNS.getName()) && !"pg_catalog".equals(selectedNS.getName()))) { - spinnerPreSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName())); - spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName())); + spinnerPreSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName(), db.getDolphinTypes())); + spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName(), db.getDolphinTypes())); } else { spinnerPreSize.setEnabled(false); spinnerScale.setEnabled(false); @@ -721,6 +737,28 @@ public class ColumnUI { } } + /** + * Enable disable set values tab. + */ + public void enableDisableSetValues() { + Namespace selectedNS = UIUtils.getNamespaceForDatatype(db, cmbClmDataSchema); + TypeMetaData type = null; + + type = UIUtils.getDtypeFromCombo(selectedNS, db, cmbClmDataType); + + if (null == type || null == grpValues) { + return; + } + + if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + editValues.setVisible(true); + } else { + grpValues.setVisible(false); + grpValues.setSize(0,0); + editValues.setVisible(false); + } + } + /** * Gets the grp control. * @@ -803,6 +841,14 @@ public class ColumnUI { } newTempColumn.setColDescription(textColumnDescription.getText()); + if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + newTempColumn.setEnumOrSetValues(new ArrayList(this.setOrEnumValues)); + newTempColumn.setEnumOrSetList(new HashSet(this.setOrEnumList)); + setOrEnumValues = new ArrayList(); + setOrEnumList = new HashSet(); + repopulateValueCols(); + txtUserValue.setText(""); + } return newTempColumn; } @@ -854,6 +900,13 @@ public class ColumnUI { spinnerScale.setSelection(columnMetaData.getScale()); chkColumnNameCase.setSelection(columnMetaData.getColumnCase()); this.editIndex = editIndx; + if ("set".equals(columnMetaData.getDataTypeName()) || "enum".equals(columnMetaData.getDataTypeName())) { + this.setOrEnumValues = columnMetaData.getEnumOrSetValues() != null ? new ArrayList(columnMetaData.getEnumOrSetValues()) : + new ArrayList(); + this.setOrEnumList = columnMetaData.getEnumOrSetList() != null ? new HashSet(columnMetaData.getEnumOrSetList()) : + new HashSet(); + repopulateValueCols(); + } setSpinnerData(columnMetaData); } @@ -912,6 +965,9 @@ public class ColumnUI { textColumnDescription.setText(""); cmbClmDataSchema.select(0); + this.setOrEnumList = new HashSet<>(); + this.setOrEnumValues = new ArrayList<>(); + tblValues.removeAll(); populateDataTypes(); this.editIndex = -1; } @@ -1015,4 +1071,298 @@ public class ColumnUI { } } + /** + * Creates the values list for enum or set. + * + * @param comp the comp + */ + private void createValues(Composite comp) { + grpValues = new Group(comp, SWT.FILL); + grpValues.setLayout(new GridLayout(5, false)); + GridData groupGD = new GridData(SWT.FILL, SWT.FILL, true, true); + groupGD.heightHint = 10; + groupGD.horizontalSpan = 4; + grpValues.setLayoutData(groupGD); + + createUserDefComposite(); + createAddRemoveValueComposite(); + createValueTable(grpValues); + createUpDownValueComposite(); + createFinishComposite(); + grpValues.setVisible(false); + + } + + private void createUserDefComposite() { + Composite userValueComp = new Composite(this.grpValues, SWT.FILL); + userValueComp.setLayout(new GridLayout(1, false)); + GridData avalColsOrUserExpCompGD = new GridData(SWT.FILL, SWT.FILL, true, true); + userValueComp.setLayoutData(avalColsOrUserExpCompGD); + + Composite userExprComposite = new Composite(userValueComp, SWT.FILL); + + userExprComposite.setLayout(new GridLayout(1, false)); + GridData userExprCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + userExprCompositeGD.verticalAlignment = SWT.CENTER; + userExprComposite.setLayoutData(userExprCompositeGD); + userExprComposite.setSize(50, 30); + + Label lblUserDefinedValue = new Label(userExprComposite, SWT.FILL); + lblUserDefinedValue.setText(MessageConfigLoader.getProperty(IMessagesConstants.SET_ENUM_UI_USER_VALUE)); + lblUserDefinedValue.pack(); + + txtUserValue = new StyledText(userExprComposite, SWT.BORDER); + txtUserValue.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TXT_INDEXUI_USEREXPR_001"); + GridData txtUserExprGD = new GridData(SWT.FILL, SWT.NONE, true, true); + txtUserExprGD.heightHint = 30; + txtUserValue.setLayoutData(txtUserExprGD); + + setOrEnumList = new HashSet(); + setOrEnumValues = new ArrayList(); + } + + private void createAddRemoveValueComposite() { + Composite addRemoveValueComposite = new Composite(this.grpValues, SWT.NONE); + addRemoveValueComposite.setLayout(new GridLayout(1, false)); + GridData addRemoveIndexCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + addRemoveIndexCompositeGD.verticalAlignment = SWT.CENTER; + addRemoveValueComposite.setLayoutData(addRemoveIndexCompositeGD); + + createAddToValue(addRemoveValueComposite); + createRemoveFromValues(addRemoveValueComposite); + } + + /** + * Creates the add to Add/Remove/MoveUp/MoveDown Buttons + * + * @param comp the comp + */ + private void createAddToValue(Composite comp) { + Button addToIndex = new Button(comp, SWT.ARROW | SWT.RIGHT); + GridData addToIndexGD = new GridData(SWT.FILL, SWT.FILL, true, true); + addToIndexGD.heightHint = 20; + addToIndex.setLayoutData(addToIndexGD); + addToIndex.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_ADD_TO_INDEX_001"); + addToIndex.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_ADD_TO)); + addToIndex.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + String userExpr = txtUserValue.getText().trim(); + if (!"".equals(userExpr)) { + if (!setOrEnumList.contains(userExpr)) { + setOrEnumList.add(userExpr); + setOrEnumValues.add(userExpr); + repopulateValueCols(); + txtUserValue.setText(""); + } + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + public void repopulateValueCols() { + TableItem item = null; + tblValues.removeAll(); + Iterator valuesItr = this.setOrEnumValues.iterator(); + boolean hasNext = valuesItr.hasNext(); + String value = null; + + while (hasNext) { + value = valuesItr.next(); + item = new TableItem(tblValues, SWT.NONE); + item.setText(value); + hasNext = valuesItr.hasNext(); + } + } + + private void createRemoveFromValues(Composite comp) { + Button removeFromValues = new Button(comp, SWT.ARROW | SWT.LEFT); + GridData removeFromValuesGD = new GridData(SWT.FILL, SWT.FILL, true, true); + removeFromValuesGD.heightHint = 20; + removeFromValues.setLayoutData(removeFromValuesGD); + removeFromValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_REMOVE_FROM_INDEX_001"); + removeFromValues.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_REMOVE)); + removeFromValues.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > -1) { + String expr = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + tblValues.remove(selectedIdx); + setOrEnumList.remove(expr); + txtUserValue.setText(expr); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent eevent) { + // Nothing to do. + } + }); + } + + private void createValueTable(Composite comp) { + tblValues = new Table(comp, SWT.BORDER | SWT.FULL_SELECTION); + tblValues.setLayout(new GridLayout(1, false)); + GridData tblIndexColsGD = new GridData(SWT.FILL, SWT.FILL, true, true); + tblIndexColsGD.horizontalIndent = 5; + tblValues.setLayoutData(tblIndexColsGD); + + tblValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TBL_INDEXUI_INDEX_COLS_001"); + tblValues.setLinesVisible(true); + tblValues.setHeaderVisible(true); + + ControlDecoration decofk = new ControlDecoration(tblValues, SWT.TOP | SWT.LEFT); + + // use an existing image + Image image = IconUtility.getIconImage(IiconPath.MANDATORY_FIELD, this.getClass()); + + // set description and image + decofk.setDescriptionText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MSG)); + decofk.setImage(image); + + TableColumn tblclmnValues = new TableColumn(tblValues, SWT.NONE); + tblclmnValues.setWidth(185); + tblclmnValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_TBL_COL_INDEXUI_INDEX_COLS_001"); + tblclmnValues.setText(MessageConfigLoader.getProperty(IMessagesConstants.SET_ENUM_UI_USER_VALUE)); + + } + + private void createFinishComposite() { + Composite finishValueComposite = new Composite(this.grpValues, SWT.NONE); + finishValueComposite.setLayout(new GridLayout(1, false)); + GridData finishValueCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + finishValueCompositeGD.verticalAlignment = SWT.CENTER; + finishValueComposite.setLayoutData(finishValueCompositeGD); + + Button finish = new Button(finishValueComposite, SWT.NONE); + GridData finishGD = new GridData(SWT.FILL, SWT.FILL, true, true); + finishGD.heightHint = 20; + finish.setLayoutData(finishGD); + finish.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + finish.setText(MessageConfigLoader.getProperty(IMessagesConstants.CREATE_TABLE_FINISH_BTN)); + finish.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + grpValues.setVisible(false); + grpValues.setSize(0,0); + editValues.setVisible(true); + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + private void createUpDownValueComposite() { + Composite upDownValueComposite = new Composite(this.grpValues, SWT.NONE); + upDownValueComposite.setLayout(new GridLayout(1, false)); + GridData upDownValueCompositeGD = new GridData(SWT.FILL, SWT.FILL, true, true); + upDownValueCompositeGD.verticalAlignment = SWT.CENTER; + upDownValueComposite.setLayoutData(upDownValueCompositeGD); + + createValueMoveUp(upDownValueComposite); + createValueMoveDown(upDownValueComposite); + } + + /** + * + * @param comp + */ + private void createValueMoveUp(Composite comp) { + Button moveUp = new Button(comp, SWT.ARROW | SWT.UP); + GridData moveUpGD = new GridData(SWT.FILL, SWT.FILL, true, true); + moveUpGD.heightHint = 20; + moveUp.setLayoutData(moveUpGD); + moveUp.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + moveUp.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MOVE_UP)); + moveUp.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > 0) { + String value = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + setOrEnumValues.add(selectedIdx - 1, value); + repopulateValueCols(); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } + + /** + * + * @param comp + */ + private void createValueMoveDown(Composite comp) { + Button moveDown = new Button(comp, SWT.ARROW | SWT.DOWN); + GridData moveDownGD = new GridData(SWT.FILL, SWT.FILL, true, true); + moveDownGD.heightHint = 20; + moveDown.setLayoutData(moveDownGD); + moveDown.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_DOWN_INDEX_001"); + moveDown.setText(MessageConfigLoader.getProperty(IMessagesConstants.INDEX_UI_MOVE_DOWN)); + moveDown.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + int selectedIdx = tblValues.getSelectionIndex(); + if (selectedIdx > -1 && selectedIdx < (tblValues.getItemCount() - 1)) { + String value = setOrEnumValues.get(selectedIdx); + setOrEnumValues.remove(selectedIdx); + setOrEnumValues.add(selectedIdx + 1, value); + repopulateValueCols(); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + + } + }); + } + + /** + * + * @param compositeColumns + */ + private void addDisplayEditValuesButton(Composite compositeColumns) { + Composite editValuesComposite = new Composite(compositeColumns, SWT.FILL); + editValuesComposite.setLayout(new GridLayout(1, false)); + editValues = new Button(editValuesComposite, SWT.NONE); + GridData editValuesCompositeGD = new GridData(SWT.NONE, SWT.NONE, true, false); + editValuesCompositeGD.horizontalAlignment = SWT.RIGHT; + editValuesCompositeGD.heightHint = 30; + editValuesCompositeGD.widthHint = 100; + editValues.setLayoutData(editValuesCompositeGD); + editValues.setSize(30, 100); + editValues.setData(MPPDBIDEConstants.SWTBOT_KEY, "ID_BTN_INDEXUI_MOVE_UP_INDEX_001"); + editValues.setText(MessageConfigLoader.getProperty(IMessagesConstants.EDIT_SETTING_VALUE)); + editValues.setVisible(false); + editValues.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent event) { + grpValues.setVisible(true); + editValues.setVisible(false); + grpValues.setSize(625, 200); + } + + @Override + public void widgetDefaultSelected(SelectionEvent event) { + // Nothing to do + } + }); + } } \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/UIUtils.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/UIUtils.java index c2dde2e8..e335fc27 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/UIUtils.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/UIUtils.java @@ -99,7 +99,10 @@ public final class UIUtils { * @param datatype the datatype * @return true, if successful */ - public static boolean enableDisableScaleFieldForDatatype(String datatype) { + public static boolean enableDisableScaleFieldForDatatype(String datatype, HashMap dolphinTypes) { + if (dolphinTypes != null && dolphinTypes.containsKey(datatype)) { + return dolphinTypes.get(datatype)[1]; + } return scaleMap.get(datatype); } @@ -180,8 +183,10 @@ public final class UIUtils { * @param datatype the datatype * @return true, if successful */ - public static boolean enableDisablePrecisionFieldForDatatype(String datatype) { - + public static boolean enableDisablePrecisionFieldForDatatype(String datatype, HashMap dolphinTypes) { + if (dolphinTypes != null && dolphinTypes.containsKey(datatype)) { + return dolphinTypes.get(datatype)[0]; + } return precisionMap.get(datatype); } -- Gitee From 7beed6d4180a93615f1aea86b76335fbe8ccd005 Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Tue, 4 Apr 2023 17:14:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bl/serverdatacache/ColumnMetaData.java | 24 ++--- .../mppdbide/bl/serverdatacache/Database.java | 88 ++++++++++--------- .../serverdatacache/TableValidatorRules.java | 29 +++--- .../mppdbide/utils/SystemObjectName.java | 33 +++++++ .../grid/EditTableGridStyleConfiguration.java | 46 ++++++---- .../view/component/grid/GridUIUtils.java | 54 +++++++----- .../view/ui/table/ChangeDataTypeDialog.java | 20 ++--- .../mppdbide/view/ui/table/ColumnUI.java | 23 ++--- 8 files changed, 175 insertions(+), 142 deletions(-) create mode 100644 code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/SystemObjectName.java diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java index 0de64268..d8737152 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ColumnMetaData.java @@ -18,8 +18,10 @@ package org.opengauss.mppdbide.bl.serverdatacache; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; +import java.util.stream.Collectors; import org.opengauss.mppdbide.adapter.gauss.DBConnection; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; @@ -430,7 +432,7 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB } else { String dataType = this.dataType.getName(); query.append(dataType); - if ("set".equals(dataType) || "enum".equals(dataType)) { + if (SystemObjectName.SET.equals(dataType) || SystemObjectName.ENUM.equals(dataType)) { query.append(formEnumOrSetValues()); } } @@ -472,21 +474,8 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB if (this.enumOrSetValues == null || this.enumOrSetValues.size() == 0) { return ""; } - Iterator valuesItr = this.enumOrSetValues.iterator(); - boolean hasNext = valuesItr.hasNext(); - String value = null; - StringBuilder formValues = new StringBuilder(); - formValues.append('('); - while (hasNext) { - value = valuesItr.next(); - formValues.append('\'').append(value).append('\''); - hasNext = valuesItr.hasNext(); - if (hasNext) { - formValues.append(", "); - } - } - formValues.append(')'); - return formValues.toString(); + String collect = this.enumOrSetValues.stream().map(String::valueOf).collect(Collectors.joining("\', \'")); + return "(\'" + collect + "\')"; } /** @@ -675,7 +664,8 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB qry.append(this.dataType.getName()); } - if ("set".equals(this.dataType.getName()) || "enum".equals(this.dataType.getName())) { + if (SystemObjectName.SET.equals(this.dataType.getName()) || + SystemObjectName.ENUM.equals(this.dataType.getName())) { qry.append(formEnumOrSetValues()); } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java index 52865f42..ea57781b 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/Database.java @@ -45,9 +45,9 @@ import org.opengauss.mppdbide.bl.serverdatacache.groups.ObjectList; import org.opengauss.mppdbide.bl.serverdatacache.groups.SystemNamespaceObjectGroup; import org.opengauss.mppdbide.bl.serverdatacache.groups.UserNamespaceObjectGroup; import org.opengauss.mppdbide.bl.util.BLUtils; -import org.opengauss.mppdbide.bl.util.ExecTimer; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.exceptions.MPPDBIDEException; @@ -139,6 +139,13 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { private HashMap dolphinTypes = null; + private static final String DOLPHIN_EXTENSION_QUERY = "select count(*) from pg_extension where extname = 'dolphin'"; + private static final String DOLPHIN_TYPE_FUNCTION_QUERY = "select count(*) from pg_proc " + + "where proname = 'dolphin_types' and " + + "pronamespace = 11 and pronargs = 0"; + + private static final String DOLPHIN_TYPES_QUERY = "select dolphin_types()"; + /** * Gets the db name. * @@ -534,7 +541,7 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { */ public void loadDefaultDatatype() throws DatabaseOperationException { defaultDatatypes.clear(); - ServerObject servObj = getSystemNamespaces().get("pg_catalog"); + ServerObject servObj = getSystemNamespaces().get(SystemObjectName.PG_CATALOG); if (!(servObj instanceof Namespace)) { return; @@ -564,7 +571,7 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { orcDatatypes = new OLAPObjectList(OBJECTTYPE.DATATYPE_GROUP, this); - ServerObject servObj = getSystemNamespaces().get("pg_catalog"); + ServerObject servObj = getSystemNamespaces().get(SystemObjectName.PG_CATALOG); if (!(servObj instanceof Namespace)) { return; @@ -1441,52 +1448,30 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { } } + /** + * Checks has dolphin plugin and dolphin type function + * + * @return true, if has dolphin plugin and dolphin type function + */ private boolean hasDolphin() throws DatabaseCriticalException, DatabaseOperationException { - String qry = "select count(*) = 1 from pg_extension where extname = 'dolphin'"; - String qry2 = "select count(*) = 1 from pg_proc where proname = 'dolphin_types' and pronamespace = 11 and pronargs = 0"; - boolean hasDolphinExtention = false; - boolean hasDolphinTypesFunction = false; - ResultSet rs = null; - ResultSet rs2 = null; - try { - rs = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); - boolean hasNext = rs.next(); - while (hasNext) { - hasDolphinExtention = rs.getBoolean(1); - hasNext = rs.next(); - } - rs2 = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry2); - hasNext = rs2.next(); - while (hasNext) { - hasDolphinTypesFunction = rs2.getBoolean(1); - hasNext = rs2.next(); - } - } catch (SQLException exp) { - try { - GaussUtils.handleCriticalException(exp); - } catch (DatabaseCriticalException dc) { - throw dc; - } - MPPDBIDELoggerUtility - .error(MessageConfigLoader.getProperty(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION), exp); - throw new DatabaseOperationException(IMessagesConstants.ERR_FETCH_DATABASE_OPERATION, exp); - } finally { - this.getConnectionManager().closeRSOnObjBrowserConn(rs); - this.getConnectionManager().closeRSOnObjBrowserConn(rs2); - } + String dolphinExtensionResult = + this.getConnectionManager().execSelectAndGetFirstValOnObjBrowserConn(DOLPHIN_EXTENSION_QUERY); + String dolphinFunctionResult = + this.getConnectionManager().execSelectAndGetFirstValOnObjBrowserConn(DOLPHIN_TYPE_FUNCTION_QUERY); + boolean hasDolphinExtention = Integer.parseInt(dolphinExtensionResult) == 1; + boolean hasDolphinTypesFunction = Integer.parseInt(dolphinFunctionResult) == 1; - return hasDolphinExtention & hasDolphinTypesFunction; + return hasDolphinExtention && hasDolphinTypesFunction; } + public void initDolphinTypes() throws DatabaseCriticalException, DatabaseOperationException { - String qry = "select dolphin_types()"; ResultSet rs = null; try { - rs = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); - boolean hasNext = rs.next(); - while (hasNext) { + rs = this.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(DOLPHIN_TYPES_QUERY); + while (rs.next()) { Array array = rs.getArray(1); if (array != null) { String[][] strs = (String[][]) array.getArray(); @@ -1496,7 +1481,6 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { Boolean.parseBoolean(strs[i][2])}); } } - hasNext = rs.next(); } } catch (SQLException exp) { try { @@ -1514,7 +1498,29 @@ public class Database extends ServerObject implements GaussOLAPDBMSObject { return; } + /** + * Get the dolphinTypes + * + * @return dolphinTypes + */ public HashMap getDolphinTypes() { return this.dolphinTypes; } + + /** + * Get the oid of type + * + * @return integer, the dolphin type oid + */ + public int getDolphinTypeOid(String typname) { + int oid = 0; + try { + String getTypeOidQuery = "select oid from pg_type where typname=\'" + typname + "\' and typnamespace = 11"; + String result = this.getConnectionManager().execSelectAndGetFirstValOnObjBrowserConn(getTypeOidQuery); + oid = Integer.parseInt(result); + } catch (DatabaseOperationException | DatabaseCriticalException exp) { + MPPDBIDELoggerUtility.error("getDolphinTypeOid: Failed to get the type oid."); + } + return oid; + } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java index a94f70c6..34cf2729 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/TableValidatorRules.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import org.opengauss.mppdbide.utils.SystemObjectName; /** * * Title: class @@ -92,41 +93,31 @@ public final class TableValidatorRules { types = db.getDefaultDatatype().getList(); HashMap dolphinTypes = db.getDolphinTypes(); - boolean dolphin = dolphinTypes != null; + boolean hasDolphin = (dolphinTypes != null); // remove pseudo types when listing data types for column if (column) { Iterator objectIter = types.iterator(); - TypeMetaData typename = null; - boolean hasMore = objectIter.hasNext(); - String name = null; - - while (hasMore) { + while (objectIter.hasNext()) { typename = objectIter.next(); - name = typename.getName(); - + String name = typename.getName(); if (pseudoTypes.contains(name)) { objectIter.remove(); } - - if (dolphin && dolphinTypes.containsKey(name)) { - dolphin = false; + if (hasDolphin && dolphinTypes.containsKey(name)) { + hasDolphin = false; } - hasMore = objectIter.hasNext(); } } - if (dolphin) { - Namespace ns = (Namespace)db.getSystemNamespaces().get("pg_catalog"); + if (hasDolphin) { + Namespace ns = (Namespace)db.getSystemNamespaces().get(SystemObjectName.PG_CATALOG); Iterator dolphinTypesIter = dolphinTypes.keySet().stream().sorted().iterator(); - int typeOid = 10000; String typename = null; - boolean hasMore = dolphinTypesIter.hasNext(); - while (hasMore) { + while (dolphinTypesIter.hasNext()) { typename = dolphinTypesIter.next(); - types.add(new TypeMetaData(typeOid++, typename, ns)); - hasMore = dolphinTypesIter.hasNext(); + types.add(new TypeMetaData(db.getDolphinTypeOid(typename), typename, ns)); } } diff --git a/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/SystemObjectName.java b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/SystemObjectName.java new file mode 100644 index 00000000..72dc1d28 --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.utils/src/org/opengauss/mppdbide/utils/SystemObjectName.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Huawei Technologies Co.,Ltd. + * + * openGauss is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.opengauss.mppdbide.utils; + +/** + * + * Title: class + * + * Description: The Class SystemObjectName. + * + */ +public class SystemObjectName { + public static final String INFORMATION_SCHEMA = "information_schema"; + public static final String PG_CATALOG = "pg_catalog"; + public static final String ENUM = "enum"; + public static final String SET = "set"; + public static final String ENUM_TYP_TYPE = "e"; + public static final String SET_TYP_TYPE = "s"; + +} \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java index 9eadb54c..dbfc8aae 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/EditTableGridStyleConfiguration.java @@ -52,6 +52,7 @@ import org.opengauss.mppdbide.presentation.objectproperties.PropertiesConstants; import org.opengauss.mppdbide.presentation.objectproperties.PropertiesUserRoleImpl; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; @@ -354,25 +355,7 @@ public class EditTableGridStyleConfiguration extends AbstractRegistryConfigurati break; } case Types.OTHER: { - String colDatatypeName = dataProvider.getColumnDataProvider().getColumnDataTypeName(i); - if (extraTypes.contains(colDatatypeName) || (dolphinTypes != null && dolphinTypes.containsKey(colDatatypeName))) { - configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), - DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); - break; - } - try { - if (GridUIUtils.istypType(colDatatypeName, "s", dataProvider.getDatabse()) || - GridUIUtils.istypType(colDatatypeName, "e", dataProvider.getDatabse())) { - configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), - DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); - break; - } - } catch (DatabaseCriticalException exception) { - MPPDBIDELoggerUtility.error("istypType query failed", exception); - } catch (DatabaseOperationException exception) { - MPPDBIDELoggerUtility.error("istypType query failed", exception); - } - cursorTypeConfiguration(configRegistry, dataProvider); + handleCommonColumnConfigureForOther(configRegistry, dataProvider, dolphinTypes, i); break; } @@ -409,6 +392,31 @@ public class EditTableGridStyleConfiguration extends AbstractRegistryConfigurati } } + private void handleCommonColumnConfigureForOther(IConfigRegistry configRegistry, + IDSGridDataProvider dataProvider, HashMap dolphinTypes, int i) { + String colDatatypeName = dataProvider.getColumnDataProvider().getColumnDataTypeName(i); + if (extraTypes.contains(colDatatypeName) + || (dolphinTypes != null && dolphinTypes.containsKey(colDatatypeName))) { + configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), + DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); + return; + } + try { + if (GridUIUtils.checkTypType(colDatatypeName, SystemObjectName.SET_TYP_TYPE, dataProvider.getDatabse()) + || GridUIUtils.checkTypType(colDatatypeName, SystemObjectName.ENUM_TYP_TYPE, + dataProvider.getDatabse())) { + configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new DSTextCellEditor(), + DisplayMode.NORMAL, COL_LABEL_COPY_READONLY_CELL); + return; + } + } catch (DatabaseCriticalException exception) { + MPPDBIDELoggerUtility.error("checkTypType query failed", exception); + } catch (DatabaseOperationException exception) { + MPPDBIDELoggerUtility.error("checkTypType query failed", exception); + } + cursorTypeConfiguration(configRegistry, dataProvider); + } + /** * Blob configuration. * diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java index 8a8a44b9..a89d8f76 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/component/grid/GridUIUtils.java @@ -30,6 +30,7 @@ import org.opengauss.mppdbide.bl.serverdatacache.Database; import org.opengauss.mppdbide.presentation.objectproperties.PropertiesConstants; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.exceptions.DatabaseCriticalException; import org.opengauss.mppdbide.utils.exceptions.DatabaseOperationException; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; @@ -148,38 +149,49 @@ public class GridUIUtils { return true; } default: { - HashMap dolphinTypes = db.getDolphinTypes(); - if (dolphinTypes != null) { - String typeName = sqlType.toLowerCase(Locale.ENGLISH); - if (dolphinTypes.containsKey(typeName)) { - return true; - } - try { - if (istypType(typeName, "s", db) || istypType(typeName, "e", db)) { - return true; - } - } catch (DatabaseCriticalException exception) { - MPPDBIDELoggerUtility.error("istypType query failed", exception); - } catch (DatabaseOperationException exception) { - MPPDBIDELoggerUtility.error("istypType query failed", exception); - } - } - return false; + return isDolphinType(sqlType, db); } } + } + private static boolean isDolphinType (String sqlType, Database db) { + HashMap dolphinTypes = db.getDolphinTypes(); + if (dolphinTypes != null) { + String typeName = sqlType.toLowerCase(Locale.ENGLISH); + if (dolphinTypes.containsKey(typeName)) { + return true; + } + try { + if (checkTypType(typeName, SystemObjectName.SET_TYP_TYPE, db) || + checkTypType(typeName, SystemObjectName.ENUM_TYP_TYPE, db)) { + return true; + } + } catch (DatabaseCriticalException exception) { + MPPDBIDELoggerUtility.error("checkTypType query failed", exception); + } catch (DatabaseOperationException exception) { + MPPDBIDELoggerUtility.error("checkTypType query failed", exception); + } + } + return false; } - public static boolean istypType(String typeName, String typType, Database db) throws DatabaseCriticalException, DatabaseOperationException { + /** + * Checks the typtype of datatype. + * + * @param typeName the sql type name + * @param typType the expected typtype + * @param db the database + * @return true, if is datatype is the expected typtype + */ + public static boolean checkTypType(String typeName, String typType, Database db) + throws DatabaseCriticalException, DatabaseOperationException { String qry = "select count(*) from pg_type where typname = '" + typeName + "' and typtype = '" + typType + "';"; boolean isSetType = false; ResultSet rs = null; try { rs = db.getConnectionManager().execSelectAndReturnRsOnObjBrowserConn(qry); - boolean hasNext = rs.next(); - while (hasNext) { + while (rs.next()) { isSetType = rs.getBoolean(1); - hasNext = rs.next(); } } catch (SQLException exp) { try { diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ChangeDataTypeDialog.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ChangeDataTypeDialog.java index cf9358c9..847861a0 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ChangeDataTypeDialog.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ChangeDataTypeDialog.java @@ -54,6 +54,7 @@ import org.opengauss.mppdbide.bl.serverdatacache.TableValidatorRules; import org.opengauss.mppdbide.bl.serverdatacache.TypeMetaData; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; import org.opengauss.mppdbide.view.utils.FontAndColorUtility; import org.opengauss.mppdbide.view.utils.icon.IconUtility; @@ -505,11 +506,11 @@ public class ChangeDataTypeDialog extends Dialog { * we have not mapped the data types of information_schema and * pg_catalog hence the check is to avoid null pointer exception */ - if (selectedNamespace == null || (!"information_schema".equals(selectedNamespace.getName()) - && !"pg_catalog".equals(selectedNamespace.getName()))) { + if (selectedNamespace == null || (!SystemObjectName.INFORMATION_SCHEMA.equals(selectedNamespace.getName()) + && !SystemObjectName.PG_CATALOG.equals(selectedNamespace.getName()))) { spinnerPrevSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName(), db.getDolphinTypes())); spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName(), db.getDolphinTypes())); - if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + if (SystemObjectName.SET.equals(type.getName()) || SystemObjectName.ENUM.equals(type.getName())) { editValues.setVisible(true); } else { grpValues.setVisible(false); @@ -550,7 +551,7 @@ public class ChangeDataTypeDialog extends Dialog { columnMetaData.setPre(spinnerPrevSize.getSelection(), spinnerScale.getSelection()); } - if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + if (SystemObjectName.SET.equals(type.getName()) || SystemObjectName.ENUM.equals(type.getName())) { columnMetaData.setEnumOrSetValues(new ArrayList(this.setOrEnumValues)); columnMetaData.setEnumOrSetList(new HashSet(this.setOrEnumList)); } @@ -675,6 +676,7 @@ public class ChangeDataTypeDialog extends Dialog { createAddToValue(addRemoveValueComposite); createRemoveFromIndex(addRemoveValueComposite); } + /** * Creates the add to index.Add/Remove/MoveUp/MoveDown Buttons * @@ -707,23 +709,19 @@ public class ChangeDataTypeDialog extends Dialog { } }); } - + public void repopulateValueCols() { TableItem item = null; tblValues.removeAll(); Iterator valuesItr = this.setOrEnumValues.iterator(); - boolean hasNext = valuesItr.hasNext(); String value = null; - - while (hasNext) { + while (valuesItr.hasNext()) { value = valuesItr.next(); item = new TableItem(tblValues, SWT.NONE); item.setText(value); - hasNext = valuesItr.hasNext(); } } - private void createRemoveFromIndex(Composite comp) { Button removeFromIndex = new Button(comp, SWT.ARROW | SWT.LEFT); GridData removeFromIndexGD = new GridData(SWT.FILL, SWT.FILL, true, true); @@ -794,7 +792,7 @@ public class ChangeDataTypeDialog extends Dialog { @Override public void widgetSelected(SelectionEvent event) { grpValues.setVisible(false); - grpValues.setSize(0,0); + grpValues.setSize(0, 0); editValues.setVisible(true); currentShell.setSize(720, 345); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java index 2304ffdf..152fb5a2 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/ui/table/ColumnUI.java @@ -54,6 +54,7 @@ import org.opengauss.mppdbide.bl.serverdatacache.TableValidatorRules; import org.opengauss.mppdbide.bl.serverdatacache.TypeMetaData; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; +import org.opengauss.mppdbide.utils.SystemObjectName; import org.opengauss.mppdbide.utils.loader.MessageConfigLoader; import org.opengauss.mppdbide.view.utils.FontAndColorUtility; import org.opengauss.mppdbide.view.utils.UIMandatoryAttribute; @@ -713,8 +714,8 @@ public class ColumnUI { return; } - if (selectedNS == null - || (!"information_schema".equals(selectedNS.getName()) && !"pg_catalog".equals(selectedNS.getName()))) { + if (selectedNS == null || (!SystemObjectName.INFORMATION_SCHEMA.equals(selectedNS.getName()) && + !SystemObjectName.PG_CATALOG.equals(selectedNS.getName()))) { spinnerPreSize.setEnabled(UIUtils.enableDisablePrecisionFieldForDatatype(type.getName(), db.getDolphinTypes())); spinnerScale.setEnabled(UIUtils.enableDisableScaleFieldForDatatype(type.getName(), db.getDolphinTypes())); @@ -742,15 +743,11 @@ public class ColumnUI { */ public void enableDisableSetValues() { Namespace selectedNS = UIUtils.getNamespaceForDatatype(db, cmbClmDataSchema); - TypeMetaData type = null; - - type = UIUtils.getDtypeFromCombo(selectedNS, db, cmbClmDataType); - + TypeMetaData type = UIUtils.getDtypeFromCombo(selectedNS, db, cmbClmDataType); if (null == type || null == grpValues) { return; } - - if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + if (SystemObjectName.SET.equals(type.getName()) || SystemObjectName.ENUM.equals(type.getName())) { editValues.setVisible(true); } else { grpValues.setVisible(false); @@ -841,7 +838,7 @@ public class ColumnUI { } newTempColumn.setColDescription(textColumnDescription.getText()); - if ("set".equals(type.getName()) || "enum".equals(type.getName())) { + if (SystemObjectName.SET.equals(type.getName()) || SystemObjectName.ENUM.equals(type.getName())) { newTempColumn.setEnumOrSetValues(new ArrayList(this.setOrEnumValues)); newTempColumn.setEnumOrSetList(new HashSet(this.setOrEnumList)); setOrEnumValues = new ArrayList(); @@ -900,7 +897,8 @@ public class ColumnUI { spinnerScale.setSelection(columnMetaData.getScale()); chkColumnNameCase.setSelection(columnMetaData.getColumnCase()); this.editIndex = editIndx; - if ("set".equals(columnMetaData.getDataTypeName()) || "enum".equals(columnMetaData.getDataTypeName())) { + if (SystemObjectName.SET.equals(columnMetaData.getDataTypeName()) || + SystemObjectName.ENUM.equals(columnMetaData.getDataTypeName())) { this.setOrEnumValues = columnMetaData.getEnumOrSetValues() != null ? new ArrayList(columnMetaData.getEnumOrSetValues()) : new ArrayList(); this.setOrEnumList = columnMetaData.getEnumOrSetList() != null ? new HashSet(columnMetaData.getEnumOrSetList()) : @@ -1169,14 +1167,11 @@ public class ColumnUI { TableItem item = null; tblValues.removeAll(); Iterator valuesItr = this.setOrEnumValues.iterator(); - boolean hasNext = valuesItr.hasNext(); String value = null; - - while (hasNext) { + while (valuesItr.hasNext()) { value = valuesItr.next(); item = new TableItem(tblValues, SWT.NONE); item.setText(value); - hasNext = valuesItr.hasNext(); } } -- Gitee