IDEA Extractors 自定义数据提取器

372 阅读1分钟

一个groovy脚本,实现的效果为在DataGrip的查询结果中复制单列的时候,自从拼成('val1','val2','val3')格式。

我看csdn上有仁兄搞了个但是要积分才能下载,就自己实现了一下(也不是,GPT帮我写的,感谢GPT)。 导入Database Tools and SQL > data > extractors,即可使用。

使用时记得选择In-Condition

本文由作者wolgy首发于稀土掘金。

代码如下

/*
 * Available context bindings:
 *   COLUMNS     List<DataColumn>
 *   ROWS        Iterable<DataRow>
 *   OUT         { append() }
 *   FORMATTER   { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
 *   TRANSPOSED  Boolean
 * plus ALL_COLUMNS, TABLE, DIALECT
 *
 * where:
 *   DataRow     { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
 *   DataColumn  { columnNumber(), name() }
 */

SEPARATOR = ","
QUOTE     = "\""
NEWLINE   = System.getProperty("line.separator")

def printRow = { values, valueToString ->
  values.eachWithIndex { value, idx ->
    def str = valueToString(value)
    def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
    OUT.append(q ? QUOTE : "")
      .append(str.replace(QUOTE, QUOTE + QUOTE))
      .append(q ? QUOTE : "")
      .append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
  }
}

def selectedColumnValues = []
ROWS.each { row ->
  selectedColumnValues.add(row.value(COLUMNS[0]))
}

def quotedSelectedColumnValues = selectedColumnValues.collect { value ->
  def stringValue = FORMATTER.formatValue(value, COLUMNS[0])
  FORMATTER.isStringLiteral(value, COLUMNS[0]) ? QUOTE + stringValue + QUOTE : stringValue
}

def formattedString = "(" + quotedSelectedColumnValues.join(SEPARATOR) + ")"
OUT.append(formattedString)

参考阅读