先看效果

引言
最近在使用JetBrain家的数据库管理软件Data Grip中发现了一个比较好玩的功能点: 数据提取工具(Data Extractors )。 该工具自带了几种提取方式,如下图所示,并且支持用户使用groovy脚本去自定义。
虽然自带的这几个数据提取工具已经很好用了,但是我在使用中还是遇到了一些场景无法满足我的需求。
比如我在分组时,想验证下分组的数据对不对,就要根据分组的条件去查下数据。 一般我们都会手动输入,如果分组条件就一两个还好,多了的话就比较烦了。所以我就想到了自己去写一个自定义的数据提取器。
正文
1. 前往脚本目录
点击当前的数据提取器,然后选择Go To Scripts Directory
2. 新建数据提取器
右击exactors
-> New
-> File
, 输入文件名称.groovy。这里由于我的是基于groovy实现的,所以文件后缀是 .groovy
编写脚本
想实现我这样的效果可以直接复制我的代码,也可以发挥你的想象力定制属于你自己的数据提取器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
SEPARATOR = " and " QUOTE = "'" EQUALS = " = " IS = " is " STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : "" KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT) KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
ROWS.each { row -> def values = COLUMNS .findAll { col -> row.hasValue(col) } .collect { col -> new Tuple(col.name(), col, col.name(), row.value(col)) }
def size = values.size().toInteger() def count = 0 OUT.append("where ") values.each { name, col, valuesName, value -> OUT.append("$name") count++ if (value == null) { OUT.append(IS) .append(KW_NULL) .append(count == size ? "" : SEPARATOR) } else { def stringValue = FORMATTER.formatValue(value, col) def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, col) if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(EQUALS) .append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "") .append(stringValue ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue) .append(isStringLiteral ? QUOTE : "") .append(count == size ? "" : SEPARATOR) } } OUT.append("\n") }
|
复制之后会自动保存,下次查询时选择你自定义的数据提取器,然后选中数据就会生效啦。
结语
注意 📢: 如果只选中一列数据,是不是生效的。只有选中 > 1列的数据时才会生效。