/*
 * Copyright (c) 2003, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */

package org.postgresql.core;

import java.util.Arrays;

Cache key for a query that have some returning columns. columnNames should contain non-quoted column names. The parser will quote them automatically.

There's a special case of columnNames == new String[]{"*"} that means all columns should be returned. Parser is aware of that and does not quote *

/** * Cache key for a query that have some returning columns. * {@code columnNames} should contain non-quoted column names. * The parser will quote them automatically. * <p>There's a special case of {@code columnNames == new String[]{"*"}} that means all columns * should be returned. {@link Parser} is aware of that and does not quote {@code *}</p> */
class QueryWithReturningColumnsKey extends BaseQueryKey { public final String[] columnNames; private int size; // query length cannot exceed MAX_INT QueryWithReturningColumnsKey(String sql, boolean isParameterized, boolean escapeProcessing, String[] columnNames) { super(sql, isParameterized, escapeProcessing); if (columnNames == null) { // TODO: teach parser to fetch key columns somehow when no column names were given columnNames = new String[]{"*"}; } this.columnNames = columnNames; } @Override public long getSize() { int size = this.size; if (size != 0) { return size; } size = (int) super.getSize(); if (columnNames != null) { size += 16L; // array itself for (String columnName: columnNames) { size += columnName.length() * 2L; // 2 bytes per char, revise with Java 9's compact strings } } this.size = size; return size; } @Override public String toString() { return "QueryWithReturningColumnsKey{" + "sql='" + sql + '\'' + ", isParameterized=" + isParameterized + ", escapeProcessing=" + escapeProcessing + ", columnNames=" + Arrays.toString(columnNames) + '}'; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { return false; } QueryWithReturningColumnsKey that = (QueryWithReturningColumnsKey) o; // Probably incorrect - comparing Object[] arrays with Arrays.equals return Arrays.equals(columnNames, that.columnNames); } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + Arrays.hashCode(columnNames); return result; } }