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

package org.postgresql.core;

import static org.postgresql.core.SqlCommandType.INSERT;
import static org.postgresql.core.SqlCommandType.SELECT;
import static org.postgresql.core.SqlCommandType.WITH;

Data Modification Language inspection support.
Author:Jeremy Whiting jwhiting@redhat.com, Christopher Deckers (chrriis@gmail.com)
/** * Data Modification Language inspection support. * * @author Jeremy Whiting jwhiting@redhat.com * @author Christopher Deckers (chrriis@gmail.com) * */
public class SqlCommand { public static final SqlCommand BLANK = SqlCommand.createStatementTypeInfo(SqlCommandType.BLANK); public boolean isBatchedReWriteCompatible() { return valuesBraceOpenPosition >= 0; } public int getBatchRewriteValuesBraceOpenPosition() { return valuesBraceOpenPosition; } public int getBatchRewriteValuesBraceClosePosition() { return valuesBraceClosePosition; } public SqlCommandType getType() { return commandType; } public boolean isReturningKeywordPresent() { return parsedSQLhasRETURNINGKeyword; } public boolean returnsRows() { return parsedSQLhasRETURNINGKeyword || commandType == SELECT || commandType == WITH; } public static SqlCommand createStatementTypeInfo(SqlCommandType type, boolean isBatchedReWritePropertyConfigured, int valuesBraceOpenPosition, int valuesBraceClosePosition, boolean isRETURNINGkeywordPresent, int priorQueryCount) { return new SqlCommand(type, isBatchedReWritePropertyConfigured, valuesBraceOpenPosition, valuesBraceClosePosition, isRETURNINGkeywordPresent, priorQueryCount); } public static SqlCommand createStatementTypeInfo(SqlCommandType type) { return new SqlCommand(type, false, -1, -1, false, 0); } public static SqlCommand createStatementTypeInfo(SqlCommandType type, boolean isRETURNINGkeywordPresent) { return new SqlCommand(type, false, -1, -1, isRETURNINGkeywordPresent, 0); } private SqlCommand(SqlCommandType type, boolean isBatchedReWriteConfigured, int valuesBraceOpenPosition, int valuesBraceClosePosition, boolean isPresent, int priorQueryCount) { commandType = type; parsedSQLhasRETURNINGKeyword = isPresent; boolean batchedReWriteCompatible = (type == INSERT) && isBatchedReWriteConfigured && valuesBraceOpenPosition >= 0 && valuesBraceClosePosition > valuesBraceOpenPosition && !isPresent && priorQueryCount == 0; this.valuesBraceOpenPosition = batchedReWriteCompatible ? valuesBraceOpenPosition : -1; this.valuesBraceClosePosition = batchedReWriteCompatible ? valuesBraceClosePosition : -1; } private final SqlCommandType commandType; private final boolean parsedSQLhasRETURNINGKeyword; private final int valuesBraceOpenPosition; private final int valuesBraceClosePosition; }