From 97f367c7b5e1d39059cc1603fcc11fa2174e40f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=9C=A8=E6=9C=A8sir?= <1078213484@qq.com> Date: Thu, 29 Sep 2022 02:31:20 +0000 Subject: [PATCH] =?UTF-8?q?update=20=E8=A1=A8=E8=81=94=E6=83=B3=E5=80=BCal?= =?UTF-8?q?l=EF=BC=8C=E8=8E=B7=E5=BE=97all=E6=96=B9=E6=B3=95=20=E4=B8=BA?= =?UTF-8?q?=E4=BA=86=E6=96=B9=E4=BE=BF=E5=9C=A8=E6=9F=A5=E6=89=BE=E5=AD=90?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=EF=BC=8C=E6=B7=BB=E5=8A=A0key=E5=80=BCOCP=3D?= =?UTF-8?q?"all"=E8=AF=B4=E6=98=8E=E8=8E=B7=E5=BE=97=E8=AF=A5=E5=80=BC?= =?UTF-8?q?=E8=A6=81=E8=8E=B7=E5=BE=97=E5=AD=90=E5=AF=B9=E8=B1=A1=E7=9A=84?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E3=80=82=E5=A2=9E=E5=8A=A0=E4=BA=86private?= =?UTF-8?q?=20static=20final=20String=20OCP=20=3D=20"all";=E4=BB=A5?= =?UTF-8?q?=E5=8F=8AgetClms()=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王木木sir <1078213484@qq.com> update 调用方法获得key为all的value值 为了在使用函数select再敲击 . 的时候可以出现all提醒,并且可以得到该表所有的列 Signed-off-by: 王木木sir <1078213484@qq.com> update getChildObject(),将所有子对象存在key=all中 使用函数加 . 或者 ( 的时候可以获得所有的子对象。在getChildObject()中加了获得每一个子对象的name值并存在了字符串中,再将该值存入到对象中并保存。因为最后key值对应的value是一个ServerObject所以要将值存入到ServerObject中。最后点击all获得得时候该ServerObject的name属性。因为有新的对象加入,还需要引入包ColumnAll。 Signed-off-by: 王木木sir <1078213484@qq.com> add ColumnAll.java. 为了保存key=all的value值。因为此value是一个对象,所以我们需要通过一个ServerObject存储值,该值直接通过name属性来存储的。所以只需要继承ServerObject,添加name属性即可。 Signed-off-by: 王木木sir <1078213484@qq.com> update isQualifiedSimpleObjectName() 为了确保存储key为all的value值ColumnAll的name属性合法,故需要将此处的正则表达进行修改。正则表达式加入和合法的英文逗号和空格。当最后点击all进行输出的时候会判断该name属性是否符合正则表达式,如果按照以前的它是不符合的最后会输出一个两头带双引号的name值,但我们需要的不带双引号的name值。故需要将此处的正则表达式修改让其返回true。 Signed-off-by: 王木木sir <1078213484@qq.com> update import java.util.Random; 在修改getChildObject()方法的时候使用的Random(),故需要引入该包。 Signed-off-by: 王木木sir <1078213484@qq.com> update getChildObject 去掉random(),去除import java.util.Random;。修改代码规范问题。 Signed-off-by: 王木木sir <1078213484@qq.com> update getChildObject() 根据代码规范修改空格距离以及末端冗余空间 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 根据提示修改代码规范 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 根据代码规范调整空格以及冗余 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnMetaData.java. 删除冗余 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 修改格式问题 Signed-off-by: 王木木sir <1078213484@qq.com> update getChildObject() 修改格式问题 Signed-off-by: 王木木sir <1078213484@qq.com> update getChildObject() 修改规范 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 修改末端冗余 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 减少冗余 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java 去除末端冗余空间 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilOLAP.java. 在new ColumnAll的时候使用的OBJECTTYPE所以还需要导入import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; Signed-off-by: 王木木sir <1078213484@qq.com> update isQualifiedSimpleObjectName 保证存储内容合法 Signed-off-by: 王木木sir <1078213484@qq.com> update ColumnAll.java. 修改初始化类型,可以随着传入的值进行变化 Signed-off-by: 王木木sir <1078213484@qq.com> add OpUtils.java. 增加工具类,从而对获取的值进行判断存储。主要包括:是否存在from,保存别名 Signed-off-by: 王木木sir <1078213484@qq.com> update findAllChildObjects 增加map,从而点击all,会获得所有的列 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilOLAP.java. 引入了工具包OpUtils;加入了新的获取列方法。 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilDefault.java. 增加getChildObjectSelect新方法 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilIf.java. 增加方法getChildObjectSelect的声明 Signed-off-by: 王木木sir <1078213484@qq.com> update getMatch() 扩展表信息,一旦有from后,需要将表前面的namespace也带出来,保证程序可以运行。 Signed-off-by: 王木木sir <1078213484@qq.com> update getContextProposals 当遇到分号的时候不进行提醒 Signed-off-by: 王木木sir <1078213484@qq.com> update computeAliasProposal 保存别名和表名的hashmap。方便后续对其的使用。 Signed-off-by: 王木木sir <1078213484@qq.com> update computeCompletionProposals 增加输入内容是否有from,以及对别名的保存。 Signed-off-by: 王木木sir <1078213484@qq.com> update getMatching 魔法变量,提取为静态变量 Signed-off-by: 王木木sir <1078213484@qq.com> update isQualifiedSimpleObjectName 正则表达式提取为静态变量 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistProcesserCore.java. 魔法变量提取为静态变量 Signed-off-by: 王木木sir <1078213484@qq.com> update SQLContentAssistProcessor.java. 魔法字符串提取为静态变量 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilDefault.java. 增加方法声明调用 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilIf.java. 增加方法声明 Signed-off-by: 王木木sir <1078213484@qq.com> update ContentAssistUtilOLAP.java. 修改魔法字符串改为静态变量变量名修改,以及进行函数体进行逻辑拆分 Signed-off-by: 王木木sir <1078213484@qq.com> --- .../ContentAssistProcesserData.java | 1 + .../bl/contentassist/ContentAssistUtil.java | 17 +++- .../ContentAssistUtilDefault.java | 19 +++++ .../bl/contentassist/ContentAssistUtilIf.java | 33 ++++++++ .../contentassist/ContentAssistUtilOLAP.java | 84 ++++++++++++++++++- .../bl/serverdatacache/ColumnMetaData.java | 13 +++ .../bl/serverdatacache/ServerObject.java | 3 +- .../bl/serverdatacache/groups/ColumnAll.java | 60 +++++++++++++ .../opengauss/mppdbide/bl/util/OpUtils.java | 46 ++++++++++ .../ContentAssistProcesserCore.java | 4 + .../SQLContentAssistAliasProcessor.java | 2 + .../SQLContentAssistProcessor.java | 6 ++ 12 files changed, 284 insertions(+), 4 deletions(-) create mode 100644 code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/groups/ColumnAll.java create mode 100644 code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/util/OpUtils.java diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistProcesserData.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistProcesserData.java index 7c30d9ef..66390aae 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistProcesserData.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistProcesserData.java @@ -133,6 +133,7 @@ public class ContentAssistProcesserData implements ISQLContentAssistProcessor { } else if (servObj instanceof TableMetaData) { TableMetaData tbl = (TableMetaData) servObj; found.putAll(tbl.findAllChildObjects()); + found = contentAssistUtil.getChildObjectSelect(found, parentObjMap.size() > 1); } else if (servObj instanceof ViewMetaData) { ViewMetaData view = ViewMetaData.class.cast(servObj); found.putAll(view.findAllChildObjects()); diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtil.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtil.java index d09e2e4d..ff7f3a27 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtil.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtil.java @@ -23,8 +23,12 @@ import java.util.TreeMap; import org.apache.commons.collections4.trie.PatriciaTrie; +import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; import org.opengauss.mppdbide.bl.serverdatacache.ServerObject; +import org.opengauss.mppdbide.bl.serverdatacache.TableMetaData; +import org.opengauss.mppdbide.bl.serverdatacache.groups.ColumnAll; import org.opengauss.mppdbide.bl.util.BLUtils; +import org.opengauss.mppdbide.bl.util.OpUtils; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; /** @@ -42,6 +46,7 @@ public abstract class ContentAssistUtil implements ContentAssistUtilIf { private static final char CLOSING_BRACE = ')'; private static final char SEMI_COLON = ';'; private static final String COMMA = ","; + private static final String OPENING_PERIOD = "."; private int minPosition = 0; /** @@ -66,9 +71,19 @@ public abstract class ContentAssistUtil implements ContentAssistUtilIf { SortedMap resultMap = new TreeMap(); for (ServerObject obj : serverObjMap.values()) { if (obj.getSearchName().toLowerCase(Locale.ENGLISH).startsWith(prefix.toLowerCase(Locale.ENGLISH))) { - resultMap.put(obj.getSearchName(), obj); + if (obj instanceof TableMetaData && OpUtils.getFrom()) { + StringBuffer tableName = new StringBuffer(); + tableName.append(obj.getNamespace().getName()); + tableName.append(OPENING_PERIOD); + tableName.append(obj.getName()); + ColumnAll ocb = new ColumnAll(1,tableName.toString(),OBJECTTYPE.TABLEMETADATA, false); + resultMap.put(obj.getSearchName(), ocb); + } else { + resultMap.put(obj.getSearchName(), obj); + } } } + OpUtils.setFrom(false); return (SortedMap) resultMap; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilDefault.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilDefault.java index 914d0e6f..0ab6f35c 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilDefault.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilDefault.java @@ -258,6 +258,12 @@ public class ContentAssistUtilDefault extends ContentAssistUtil { return defaultMap; } + @Override + public SortedMap getChildObjectSelect(SortedMap found, + boolean isParentDescNeeded) { + return defaultMap; + } + @Override public SortedMap findMatchingTriggerObject(String prefix) { return defaultMap; @@ -278,4 +284,17 @@ public class ContentAssistUtilDefault extends ContentAssistUtil { return defaultMap; } + + @Override + public void saveAllColumn(ServerObject object, int start, int len, StringBuffer columnName, + SortedMap resultMap, boolean isParentDescNeeded) { + // TODO Auto-generated method stub + } + + @Override + public void saveAliasColumn(ServerObject object, int start, int len, StringBuffer columnName, + SortedMap resultMap, boolean isParentDescNeeded) { + // TODO Auto-generated method stub + } + } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilIf.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilIf.java index b5801101..e895877b 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilIf.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilIf.java @@ -195,6 +195,15 @@ public interface ContentAssistUtilIf { */ SortedMap getChildObject(SortedMap found, boolean isParentDescNeeded); + /** + * Gets the child select object. + * + * @param found the found + * @param isParentDescNeeded the is parent desc needed + * @return the child object + */ + SortedMap getChildObjectSelect(SortedMap found, boolean isParentDescNeeded); + /** * Find matching trigger object. * @@ -230,4 +239,28 @@ public interface ContentAssistUtilIf { default SortedMap findExactMatchingSynonyms(String prefix) { return null; } + + /** + * all column if is insert. + * + * @param object the ServerObject + * @param start the start + * @param len the len + * @param columnName the column name + * @param resultMap the sorted map + * @param isParentDescNeeded the parent pesc needed + */ + void saveAllColumn(ServerObject object, int start, int len, StringBuffer columnName, SortedMap resultMap, boolean isParentDescNeeded); + + /** + * all column if is insert. + * + * @param object the ServerObject + * @param start the start + * @param len the len + * @param columnName the column name + * @param resultMap the sorted map + * @param isParentDescNeeded the parent pesc needed + */ + void saveAliasColumn(ServerObject object, int start, int len, StringBuffer columnName, SortedMap resultMap, boolean isParentDescNeeded); } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilOLAP.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilOLAP.java index 01a9735a..1efc9207 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilOLAP.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/contentassist/ContentAssistUtilOLAP.java @@ -23,9 +23,12 @@ import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; +import org.opengauss.mppdbide.bl.serverdatacache.groups.ColumnAll; +import org.opengauss.mppdbide.bl.util.OpUtils; import org.opengauss.mppdbide.bl.serverdatacache.ColumnMetaData; import org.opengauss.mppdbide.bl.serverdatacache.Database; import org.opengauss.mppdbide.bl.serverdatacache.DebugObjects; +import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; import org.opengauss.mppdbide.bl.serverdatacache.SequenceMetadata; import org.opengauss.mppdbide.bl.serverdatacache.ServerObject; import org.opengauss.mppdbide.bl.serverdatacache.SynonymMetaData; @@ -52,6 +55,8 @@ public class ContentAssistUtilOLAP extends ContentAssistUtil { private static final char ESCAPE_CHAR = '\"'; + private static final String COMMA = ", "; + private static final char NEW_LINE_CHAR = MPPDBIDEConstants.LINE_SEPARATOR.length() > 1 ? MPPDBIDEConstants.LINE_SEPARATOR.charAt(1) : MPPDBIDEConstants.LINE_SEPARATOR.charAt(0); @@ -528,18 +533,93 @@ public class ContentAssistUtilOLAP extends ContentAssistUtil { public SortedMap getChildObject(SortedMap found, boolean isParentDescNeeded) { SortedMap resultMap = new TreeMap(); + int len = found.size(); + if (isInsert()) { + len = len - 1; + } + StringBuffer columnName = new StringBuffer(); + int temp = 0; for (ServerObject obj : found.values()) { if (obj instanceof ColumnMetaData) { - ColumnMetaData clm = (ColumnMetaData) obj; + saveAllColumn(obj, temp, len, columnName, resultMap, isParentDescNeeded); + temp++; + } else if (obj instanceof ViewColumnMetaData) { + ViewColumnMetaData clm = (ViewColumnMetaData) obj; resultMap.put(clm.getClmNameWithDatatype(isParentDescNeeded), obj); + } + } + return resultMap; + } + + @Override + public void saveAllColumn(ServerObject object, int start, int len, StringBuffer columnName, + SortedMap resultMap, boolean isParentDescNeeded) { + ColumnMetaData clm = (ColumnMetaData) object; + resultMap.put(clm.getClmNameWithDatatype(isParentDescNeeded), object); + if (start < len) { + columnName.append(((ColumnMetaData) object).getParentTable().getColumnMetaDataList().get(start).getName()); + if (start < len - 1) { + columnName.append(COMMA); + } else { + ColumnAll columnAll = new ColumnAll(start, columnName.toString(), OBJECTTYPE.COLUMN_METADATA, false); + resultMap.put(clm.getClms(), columnAll); + } + start++; + } + } + + @Override + public SortedMap getChildObjectSelect(SortedMap found, + boolean isParentDescNeeded) { + SortedMap resultMap = new TreeMap(); + int len = found.size(); + StringBuffer columnName = new StringBuffer(); + int temp = 0; + for (ServerObject obj : found.values()) { + if (obj instanceof ColumnMetaData) { + saveAliasColumn(obj, temp, len, columnName, resultMap, isParentDescNeeded); + temp++; } else if (obj instanceof ViewColumnMetaData) { ViewColumnMetaData clm = (ViewColumnMetaData) obj; resultMap.put(clm.getClmNameWithDatatype(isParentDescNeeded), obj); } } + OpUtils.getMap().clear(); return resultMap; } + @Override + public void saveAliasColumn(ServerObject object, int start, int len, StringBuffer columnName, + SortedMap resultMap, boolean isParentDescNeeded) { + ColumnMetaData clm = (ColumnMetaData) object; + resultMap.put(clm.getClmNameWithDatatype(isParentDescNeeded), object); + if (start < len) { + columnName.append(((ColumnMetaData) object).getParentTable().getColumnMetaDataList().get(start).getName()); + if (start < len - 1) { + columnName.append(COMMA); + String key = null; + if (!OpUtils.getMap().isEmpty()) { + for (Entry> entry : OpUtils.getMap().entrySet()) { + if ((entry.getValue().contains((((ColumnMetaData) object).getParentTable().getName())) + || entry.getValue().contains((((ColumnMetaData) object).getParentTable().getNameSpaceName() + + DOT + (((ColumnMetaData) object).getParentTable().getName())))) + && entry.getKey().equals(OpUtils.getPre().substring(0, OpUtils.getPre().length() - 1))) { + key = entry.getKey(); + } + } + columnName.append(key); + } else { + columnName.append(((ColumnMetaData) object).getParentTable().getName()); + } + columnName.append(DOT); + } else { + ColumnAll ocb = new ColumnAll(start, columnName.toString(), OBJECTTYPE.COLUMN_METADATA, false); + resultMap.put(clm.getClms(), ocb); + } + start++; + } + } + /** * Find matching trigger object. * @@ -562,4 +642,4 @@ public class ContentAssistUtilOLAP extends ContentAssistUtil { return new TreeMap(); } -} +} \ No newline at end of file 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 c9689710..e6047431 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 @@ -66,6 +66,8 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB private String colDescription; + private static final String OCP = "all"; + /** * Gets the col description. * @@ -894,6 +896,17 @@ public class ColumnMetaData extends BatchDropServerObject implements GaussOLAPDB return commentQry.toString(); } + + /** + * Gets the String. + * + * @param + * @return the string all + */ + public String getClms() { + return OCP; + } + /** * Gets the clm name with datatype. * diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ServerObject.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ServerObject.java index e84fcfe7..faf774e8 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ServerObject.java +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/ServerObject.java @@ -34,6 +34,7 @@ public abstract class ServerObject { private String name; private OBJECTTYPE type; private boolean isValid = true; + private static final String isObjectName = "^([a-z_][a-z|0-9|_|$]*)|([a-z_][a-z|0-9|_|,| |.|$]*)$"; /** * The is loaded. @@ -344,7 +345,7 @@ public abstract class ServerObject { * @return true, if is qualified simple object name */ public static boolean isQualifiedSimpleObjectName(String objectName) { - if (null != objectName && !objectName.isEmpty() && objectName.matches("^[a-z_][a-z|0-9|_|$]*$")) { + if (null != objectName && !objectName.isEmpty() && objectName.matches(isObjectName)) { return true; } diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/groups/ColumnAll.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/groups/ColumnAll.java new file mode 100644 index 00000000..088d3ddf --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/serverdatacache/groups/ColumnAll.java @@ -0,0 +1,60 @@ +/* + * 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.bl.serverdatacache.groups; + +import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; +import org.opengauss.mppdbide.bl.serverdatacache.ServerObject; + +/** + * + * Title: ColumnAll + * + * Description: Get all the current columns from the table and store them + * + */ +public class ColumnAll extends ServerObject { + private int id; + private String name; + + /** + * Instantiates a new ColumnsAll object. + * + * @param oid the oid + * @param name the name + * @param type the type + * @param isPrivilegeFlag is the privilege flag + */ + public ColumnAll(long oid, String name, OBJECTTYPE type, boolean isPrivilegeFlag) { + super(oid, name, type, false); + this.name = name; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setId(int id) { + this.id = id; + } + + public int getId() { + return id; + } +} \ No newline at end of file diff --git a/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/util/OpUtils.java b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/util/OpUtils.java new file mode 100644 index 00000000..027a27a9 --- /dev/null +++ b/code/datastudio/src/org.opengauss.mppdbide.bl/src/org/opengauss/mppdbide/bl/util/OpUtils.java @@ -0,0 +1,46 @@ +package org.opengauss.mppdbide.bl.util; + +import java.util.HashMap; +import java.util.List; + +/** + * + * Title: class + * + * Description: The Class OpUtils. + * + * @since 3.0.0 + */ +public class OpUtils { + private static boolean from = false; + private static HashMap> map = null; + private static String pre = null; + + public OpUtils() { + + } + + public static void setFrom(boolean from) { + OpUtils.from = from; + } + + public static boolean getFrom() { + return from; + } + + public static void setPre(String pre) { + OpUtils.pre = pre; + } + + public static String getPre() { + return pre; + } + + public static void setMap(HashMap> map) { + OpUtils.map = map; + } + + public static HashMap> getMap() { + return map; + } +} diff --git a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/contentassistprocesser/ContentAssistProcesserCore.java b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/contentassistprocesser/ContentAssistProcesserCore.java index 089a08a0..8ce150e9 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/contentassistprocesser/ContentAssistProcesserCore.java +++ b/code/datastudio/src/org.opengauss.mppdbide.presentation/src/org/opengauss/mppdbide/presentation/contentassistprocesser/ContentAssistProcesserCore.java @@ -39,6 +39,7 @@ public class ContentAssistProcesserCore { private String[] currentPrefix = new String[0]; private int replaceLength = 0; private ContentAssistProcesserData contentData; + private static final String SEMICOLON = ";"; /** * Instantiates a new content assist processer core. @@ -68,6 +69,9 @@ public class ContentAssistProcesserCore { // Mark the object items for lazy loading of schema. setCurrentPrefix(unQuotedPrefix); + if (fullPretext.endsWith(SEMICOLON)) { + return autoMap; + } if ((prefixLen != 0 && isEndsWithDot) || (prefixLen != 0 && contentData.isInsert() && (fullPretext.endsWith("(") || fullPretext.endsWith(",")))) { autoMap = contentData.findExactMatchingObjects(unQuotedPrefix); diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistAliasProcessor.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistAliasProcessor.java index 8810eddc..d0039a7d 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistAliasProcessor.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistAliasProcessor.java @@ -29,6 +29,7 @@ import org.opengauss.mppdbide.bl.queryparser.ParseContext; import org.opengauss.mppdbide.bl.serverdatacache.Alias; import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; import org.opengauss.mppdbide.bl.serverdatacache.ServerObject; +import org.opengauss.mppdbide.bl.util.OpUtils; import org.opengauss.mppdbide.presentation.contentassistprocesser.ContentAssistProcesserCore; import org.opengauss.mppdbide.utils.CustomStringUtility; import org.opengauss.mppdbide.utils.JSQLParserUtils; @@ -94,6 +95,7 @@ public class SQLContentAssistAliasProcessor { aliasToTableNameMap = parseAndGetAliasMap(fullContent, isPrefixEndsWithDot); + OpUtils.setMap(aliasToTableNameMap); if (null != aliasToTableNameMap && aliasToTableNameMap.size() > 0) { /* * Assumption: There will only be 2 parts in the prefix Replace diff --git a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistProcessor.java b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistProcessor.java index 219077cc..1b3d248c 100644 --- a/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistProcessor.java +++ b/code/datastudio/src/org.opengauss.mppdbide.view/src/org/opengauss/mppdbide/view/core/sourceeditor/SQLContentAssistProcessor.java @@ -42,6 +42,7 @@ import org.opengauss.mppdbide.bl.serverdatacache.OBJECTTYPE; import org.opengauss.mppdbide.bl.serverdatacache.ServerObject; import org.opengauss.mppdbide.bl.util.ExecTimer; import org.opengauss.mppdbide.bl.util.IExecTimer; +import org.opengauss.mppdbide.bl.util.OpUtils; import org.opengauss.mppdbide.presentation.contentassistprocesser.ContentAssistProcesserCore; import org.opengauss.mppdbide.utils.IMessagesConstants; import org.opengauss.mppdbide.utils.MPPDBIDEConstants; @@ -79,6 +80,7 @@ public class SQLContentAssistProcessor implements IContentAssistProcessor { private LinkedHashMap autoMap = null; private static LinkedHashMap map = null; private static boolean lookupTemplates = false; + private static final String ISFROM = "from"; /** * Instantiates a new SQL content assist processor. @@ -139,6 +141,9 @@ public class SQLContentAssistProcessor implements IContentAssistProcessor { if (validateFullText(fullContent)) { fullPretext = fullContent.substring(0, offset); prefix = core.findString(fullPretext, DatabaseUtils.getCharacterList(database)); + if (fullPretext.contains(ISFROM)) { + OpUtils.setFrom(true); + } if (canCheckForAlias(viewer)) { assistant.enableAutoInsert(true); assistant.setShowEmptyList(true); @@ -147,6 +152,7 @@ public class SQLContentAssistProcessor implements IContentAssistProcessor { boolean isSuccess = aliasProcessor.computeAliasProposal(core); if (isSuccess) { + OpUtils.setPre(prefix); prefix = aliasProcessor.getProcessedPrefix(); aliasMap = aliasProcessor.getComputedAliasMap(); } -- Gitee