diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index a9b09e0b5c..20e1c0ca0f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1,1699 +1,1699 @@ -/** - * Copyright (c) 2009-2012, Lukas Eder, lukas.eder@gmail.com - * All rights reserved. - * - * This software is licensed to you under the Apache License, Version 2.0 - * (the "License"); You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name "jOOQ" nor the names of its contributors may be - * used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jooq.impl; - -import static java.lang.Math.max; -import static java.lang.Math.min; -import static org.jooq.tools.StringUtils.abbreviate; -import static org.jooq.tools.StringUtils.leftPad; -import static org.jooq.tools.StringUtils.rightPad; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.Date; -import java.sql.ResultSet; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.jooq.ArrayRecord; -import org.jooq.Attachable; -import org.jooq.AttachableInternal; -import org.jooq.Configuration; -import org.jooq.Converter; -import org.jooq.EnumType; -import org.jooq.Field; -import org.jooq.FieldProvider; -import org.jooq.Record; -import org.jooq.RecordHandler; -import org.jooq.Result; -import org.jooq.Store; -import org.jooq.Table; -import org.jooq.exception.InvalidResultException; -import org.jooq.exception.MappingException; -import org.jooq.tools.Convert; -import org.jooq.tools.StringUtils; -import org.jooq.tools.json.JSONObject; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * @author Lukas Eder - * @author Ivan Dugic - */ -class ResultImpl implements Result, AttachableInternal { - - /** - * Generated UID - */ - private static final long serialVersionUID = 6416154375799578362L; - - private final FieldProvider fields; - private final List records; - private Configuration configuration; - - ResultImpl(Configuration configuration, FieldProvider fields) { - this.fields = fields; - this.records = new ArrayList(); - this.configuration = configuration; - } - - // ------------------------------------------------------------------------- - // XXX: Attachable API - // ------------------------------------------------------------------------- - - @Override - public final I internalAPI(Class internalType) throws ClassCastException { - return internalType.cast(this); - } - - @SuppressWarnings("deprecation") - @Override - public final void attach(Configuration c) { - this.configuration = c; - - for (Attachable attachable : getAttachables()) { - attachable.attach(c); - } - } - - @Override - @Deprecated - public final List getAttachables() { - List result = new ArrayList(); - - for (Store item : records) { - if (item != null) { - result.add(item); - } - } - - return result; - } - - @Override - public final Configuration getConfiguration() { - return configuration; - } - - // ------------------------------------------------------------------------- - // XXX: Result API - // ------------------------------------------------------------------------- - - @Override - public final List> getFields() { - return fields.getFields(); - } - - @Override - public final Field getField(Field field) { - return fields.getField(field); - } - - @Override - public final Field getField(String name) { - return fields.getField(name); - } - - @Override - public final Field getField(int index) { - return fields.getField(index); - } - - @Override - public final int getIndex(Field field) throws IllegalArgumentException { - return fields.getIndex(field); - } - - @Override - public final boolean isEmpty() { - return records.isEmpty(); - } - - @Override - public final boolean isNotEmpty() { - return !records.isEmpty(); - } - - @Override - public final T getValue(int index, Field field) throws IndexOutOfBoundsException { - return get(index).getValue(field); - } - - @Override - public final T getValue(int index, Field field, T defaultValue) throws IndexOutOfBoundsException { - return get(index).getValue(field, defaultValue); - } - - @Override - public final Object getValue(int index, int fieldIndex) throws IndexOutOfBoundsException { - return get(index).getValue(fieldIndex); - } - - @Override - public final Object getValue(int index, int fieldIndex, Object defaultValue) throws IndexOutOfBoundsException { - return get(index).getValue(fieldIndex, defaultValue); - } - - @Override - public final Object getValue(int index, String fieldName) throws IndexOutOfBoundsException { - return get(index).getValue(fieldName); - } - - @Override - public final Object getValue(int index, String fieldName, Object defaultValue) throws IndexOutOfBoundsException { - return get(index).getValue(fieldName, defaultValue); - } - - @Override - public final , T> T[] getValueAsArray(int index, Field field) - throws IndexOutOfBoundsException { - return get(index).getValueAsArray(field); - } - - @Override - public final , T> T[] getValueAsArray(int index, Field field, T[] defaultValue) - throws IndexOutOfBoundsException { - return get(index).getValueAsArray(field, defaultValue); - } - - @Override - public final String getValueAsString(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsString(field); - } - - @Override - public final String getValueAsString(int index, Field field, String defaultValue) throws IllegalArgumentException { - return get(index).getValueAsString(field, defaultValue); - } - - @Override - public final String getValueAsString(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsString(fieldIndex); - } - - @Override - public final String getValueAsString(int index, int fieldIndex, String defaultValue) throws IllegalArgumentException { - return get(index).getValueAsString(fieldIndex, defaultValue); - } - - @Override - public final Byte getValueAsByte(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsByte(field); - } - - @Override - public final Byte getValueAsByte(int index, Field field, Byte defaultValue) throws IllegalArgumentException { - return get(index).getValueAsByte(field, defaultValue); - } - - @Override - public final Byte getValueAsByte(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsByte(fieldIndex); - } - - @Override - public final Byte getValueAsByte(int index, int fieldIndex, Byte defaultValue) throws IllegalArgumentException { - return get(index).getValueAsByte(fieldIndex, defaultValue); - } - - @Override - public final Short getValueAsShort(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsShort(field); - } - - @Override - public final Short getValueAsShort(int index, Field field, Short defaultValue) throws IllegalArgumentException { - return get(index).getValueAsShort(field, defaultValue); - } - - @Override - public final Short getValueAsShort(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsShort(fieldIndex); - } - - @Override - public final Short getValueAsShort(int index, int fieldIndex, Short defaultValue) throws IllegalArgumentException { - return get(index).getValueAsShort(fieldIndex, defaultValue); - } - - @Override - public final Integer getValueAsInteger(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsInteger(field); - } - - @Override - public final Integer getValueAsInteger(int index, Field field, Integer defaultValue) throws IllegalArgumentException { - return get(index).getValueAsInteger(field, defaultValue); - } - - @Override - public final Integer getValueAsInteger(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsInteger(fieldIndex); - } - - @Override - public final Integer getValueAsInteger(int index, int fieldIndex, Integer defaultValue) throws IllegalArgumentException { - return get(index).getValueAsInteger(fieldIndex, defaultValue); - } - - @Override - public final Long getValueAsLong(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsLong(field); - } - - @Override - public final Long getValueAsLong(int index, Field field, Long defaultValue) throws IllegalArgumentException { - return get(index).getValueAsLong(field, defaultValue); - } - - @Override - public final Long getValueAsLong(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsLong(fieldIndex); - } - - @Override - public final Long getValueAsLong(int index, int fieldIndex, Long defaultValue) throws IllegalArgumentException { - return get(index).getValueAsLong(fieldIndex, defaultValue); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsBigInteger(field); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, Field field, BigInteger defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigInteger(field, defaultValue); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsBigInteger(fieldIndex); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, int fieldIndex, BigInteger defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigInteger(fieldIndex, defaultValue); - } - - @Override - public final Float getValueAsFloat(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsFloat(field); - } - - @Override - public final Float getValueAsFloat(int index, Field field, Float defaultValue) throws IllegalArgumentException { - return get(index).getValueAsFloat(field, defaultValue); - } - - @Override - public final Float getValueAsFloat(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsFloat(fieldIndex); - } - - @Override - public final Float getValueAsFloat(int index, int fieldIndex, Float defaultValue) throws IllegalArgumentException { - return get(index).getValueAsFloat(fieldIndex, defaultValue); - } - - @Override - public final Double getValueAsDouble(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsDouble(field); - } - - @Override - public final Double getValueAsDouble(int index, Field field, Double defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDouble(field, defaultValue); - } - - @Override - public final Double getValueAsDouble(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsDouble(fieldIndex); - } - - @Override - public final Double getValueAsDouble(int index, int fieldIndex, Double defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDouble(fieldIndex, defaultValue); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(field); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, Field field, BigDecimal defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(field, defaultValue); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(fieldIndex); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, int fieldIndex, BigDecimal defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(fieldIndex, defaultValue); - } - - @Override - public final Boolean getValueAsBoolean(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsBoolean(field); - } - - @Override - public final Boolean getValueAsBoolean(int index, Field field, Boolean defaultValue) throws IllegalArgumentException { - return get(index).getValueAsBoolean(field, defaultValue); - } - - @Override - public final Boolean getValueAsBoolean(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsBoolean(fieldIndex); - } - - @Override - public final Boolean getValueAsBoolean(int index, int fieldIndex, Boolean defaultValue) throws IllegalArgumentException { - return get(index).getValueAsBoolean(fieldIndex, defaultValue); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsTimestamp(field); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, Field field, Timestamp defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsTimestamp(field, defaultValue); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsTimestamp(fieldIndex); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, int fieldIndex, Timestamp defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsTimestamp(fieldIndex, defaultValue); - } - - @Override - public final Date getValueAsDate(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsDate(field); - } - - @Override - public final Date getValueAsDate(int index, Field field, Date defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDate(field, defaultValue); - } - - @Override - public final Date getValueAsDate(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsDate(fieldIndex); - } - - @Override - public final Date getValueAsDate(int index, int fieldIndex, Date defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDate(fieldIndex, defaultValue); - } - - @Override - public final Time getValueAsTime(int index, Field field) throws IllegalArgumentException { - return get(index).getValueAsTime(field); - } - - @Override - public final Time getValueAsTime(int index, Field field, Time defaultValue) throws IllegalArgumentException { - return get(index).getValueAsTime(field, defaultValue); - } - - @Override - public final Time getValueAsTime(int index, int fieldIndex) throws IllegalArgumentException { - return get(index).getValueAsTime(fieldIndex); - } - - @Override - public final Time getValueAsTime(int index, int fieldIndex, Time defaultValue) throws IllegalArgumentException { - return get(index).getValueAsTime(fieldIndex, defaultValue); - } - - @Override - public final String getValueAsString(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsString(fieldName); - } - - @Override - public final String getValueAsString(int index, String fieldName, String defaultValue) throws IllegalArgumentException { - return get(index).getValueAsString(fieldName, defaultValue); - } - - @Override - public final Byte getValueAsByte(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsByte(fieldName); - } - - @Override - public final Byte getValueAsByte(int index, String fieldName, Byte defaultValue) throws IllegalArgumentException { - return get(index).getValueAsByte(fieldName, defaultValue); - } - - @Override - public final Short getValueAsShort(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsShort(fieldName); - } - - @Override - public final Short getValueAsShort(int index, String fieldName, Short defaultValue) throws IllegalArgumentException { - return get(index).getValueAsShort(fieldName, defaultValue); - } - - @Override - public final Integer getValueAsInteger(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsInteger(fieldName); - } - - @Override - public final Integer getValueAsInteger(int index, String fieldName, Integer defaultValue) throws IllegalArgumentException { - return get(index).getValueAsInteger(fieldName, defaultValue); - } - - @Override - public final Long getValueAsLong(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsLong(fieldName); - } - - @Override - public final Long getValueAsLong(int index, String fieldName, Long defaultValue) throws IllegalArgumentException { - return get(index).getValueAsLong(fieldName, defaultValue); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsBigInteger(fieldName); - } - - @Override - public final BigInteger getValueAsBigInteger(int index, String fieldName, BigInteger defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigInteger(fieldName, defaultValue); - } - - @Override - public final Float getValueAsFloat(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsFloat(fieldName); - } - - @Override - public final Float getValueAsFloat(int index, String fieldName, Float defaultValue) throws IllegalArgumentException { - return get(index).getValueAsFloat(fieldName, defaultValue); - } - - @Override - public final Double getValueAsDouble(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsDouble(fieldName); - } - - @Override - public final Double getValueAsDouble(int index, String fieldName, Double defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDouble(fieldName, defaultValue); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(fieldName); - } - - @Override - public final BigDecimal getValueAsBigDecimal(int index, String fieldName, BigDecimal defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsBigDecimal(fieldName, defaultValue); - } - - @Override - public final Boolean getValueAsBoolean(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsBoolean(fieldName); - } - - @Override - public final Boolean getValueAsBoolean(int index, String fieldName, Boolean defaultValue) throws IllegalArgumentException { - return get(index).getValueAsBoolean(fieldName, defaultValue); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsTimestamp(fieldName); - } - - @Override - public final Timestamp getValueAsTimestamp(int index, String fieldName, Timestamp defaultValue) - throws IllegalArgumentException { - return get(index).getValueAsTimestamp(fieldName, defaultValue); - } - - @Override - public final Date getValueAsDate(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsDate(fieldName); - } - - @Override - public final Date getValueAsDate(int index, String fieldName, Date defaultValue) throws IllegalArgumentException { - return get(index).getValueAsDate(fieldName, defaultValue); - } - - @Override - public final Time getValueAsTime(int index, String fieldName) throws IllegalArgumentException { - return get(index).getValueAsTime(fieldName); - } - - @Override - public final Time getValueAsTime(int index, String fieldName, Time defaultValue) throws IllegalArgumentException { - return get(index).getValueAsTime(fieldName, defaultValue); - } - @Override - public final List getValues(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValue(field)); - } - - return result; - } - - @Override - public final List getValues(Field field, Class type) { - return Convert.convert(getValues(field), type); - } - - @Override - public final List getValues(Field field, Converter converter) { - return Convert.convert(getValues(field), converter); - } - - @Override - public final List getValues(int fieldIndex) { - return getValues(getField(fieldIndex)); - } - - @Override - public final List getValues(int fieldIndex, Class type) { - return Convert.convert(getValues(fieldIndex), type); - } - - @Override - public final List getValues(int fieldIndex, Converter converter) { - return Convert.convert(getValues(fieldIndex), converter); - } - - @Override - public final List getValues(String fieldName) { - return getValues(getField(fieldName)); - } - - @Override - public final List getValues(String fieldName, Class type) { - return Convert.convert(getValues(fieldName), type); - } - - @Override - public final List getValues(String fieldName, Converter converter) { - return Convert.convert(getValues(fieldName), converter); - } - - @Override - public final List getValuesAsBigDecimal(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsBigDecimal(field)); - } - - return result; - } - - @Override - public final List getValuesAsBigDecimal(int fieldIndex) { - return getValuesAsBigDecimal(getField(fieldIndex)); - } - - @Override - public final List getValuesAsBigInteger(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsBigInteger(field)); - } - - return result; - } - - @Override - public final List getValuesAsBigInteger(int fieldIndex) { - return getValuesAsBigInteger(getField(fieldIndex)); - } - - @Override - public final List getValuesAsByte(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsByte(field)); - } - - return result; - } - - @Override - public final List getValuesAsByte(int fieldIndex) { - return getValuesAsByte(getField(fieldIndex)); - } - - @Override - public final List getValuesAsDate(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsDate(field)); - } - - return result; - } - - @Override - public final List getValuesAsDate(int fieldIndex) { - return getValuesAsDate(getField(fieldIndex)); - } - - @Override - public final List getValuesAsDouble(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsDouble(field)); - } - - return result; - } - - @Override - public final List getValuesAsDouble(int fieldIndex) { - return getValuesAsDouble(getField(fieldIndex)); - } - - @Override - public final List getValuesAsFloat(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsFloat(field)); - } - - return result; - } - - @Override - public final List getValuesAsFloat(int fieldIndex) { - return getValuesAsFloat(getField(fieldIndex)); - } - - @Override - public final List getValuesAsInteger(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsInteger(field)); - } - - return result; - } - - @Override - public final List getValuesAsInteger(int fieldIndex) { - return getValuesAsInteger(getField(fieldIndex)); - } - - @Override - public final List getValuesAsLong(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsLong(field)); - } - - return result; - } - - @Override - public final List getValuesAsLong(int fieldIndex) { - return getValuesAsLong(getField(fieldIndex)); - } - - @Override - public final List getValuesAsShort(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsShort(field)); - } - - return result; - } - - @Override - public final List getValuesAsShort(int fieldIndex) { - return getValuesAsShort(getField(fieldIndex)); - } - - @Override - public final List getValuesAsString(Field field) { - List result = new ArrayList(size()); - - for (R record : this) { - result.add(record.getValueAsString(field)); - } - - return result; - } - - @Override - public final List getValuesAsString(int fieldIndex) { - return getValuesAsString(getField(fieldIndex)); - } - - @Override - public final List