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