All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.ext.sql.ResultSet Maven / Gradle / Ivy

package io.vertx.ext.sql;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.json.annotations.JsonGen;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

/**
 * Represents the results of a SQL query.
 * 

* It contains a list for the column names of the results, and a list of {@code JsonArray} - one for each row of the * results. * * @author Tim Fox */ @DataObject @JsonGen(publicConverter = false) public class ResultSet { private List columnNames; private List results; private List rows; private JsonArray output; // chained result sets private ResultSet next; /** * Default constructor */ public ResultSet() { } /** * Copy constructor * * @param other result-set to copy */ public ResultSet(ResultSet other) { this.columnNames = other.columnNames; this.results = other.results; this.output = other.output; this.next = other.next; } /** * Create a result-set * * @param columnNames the column names * @param results the results */ public ResultSet(List columnNames, List results, ResultSet next) { this.columnNames = columnNames; this.results = results; this.next = next; } /** * Create a result-set from JSON * * @param json the json */ @SuppressWarnings("unchecked") public ResultSet(JsonObject json) { ResultSetConverter.fromJson(json, this); } /** * Convert to JSON * * @return json object */ public JsonObject toJson() { JsonObject obj = new JsonObject(); ResultSetConverter.toJson(this, obj); return obj; } /** * Get the results * * @return the results */ public List getResults() { return results; } public ResultSet setResults(List results) { this.results = results; return this; } /** * Get the registered outputs * * @return the outputs */ public JsonArray getOutput() { return output; } public ResultSet setOutput(JsonArray output) { this.output = output; return this; } /** * Get the column names * * @return the column names */ public List getColumnNames() { return columnNames; } public ResultSet setColumnNames(List columnNames) { this.columnNames = columnNames; return this; } /** * Get the next result set * * @return the next resultset */ public ResultSet getNext() { return next; } public ResultSet setNext(ResultSet next) { this.next = next; return this; } /** * Get the rows - each row represented as a JsonObject where the keys are the column names and the values are * the column values. * * Beware that it's legal for a query result in SQL to contain duplicate column names, in which case one will * overwrite the other if using this method. If that's the case use {@link #getResults} instead. * * Be aware that column names are defined as returned by the database, this means that even if your SQL statement * is for example:

SELECT a, b FROM table
the column names are not required to be:
a
and *
b
and could be in fact
A
and
B
. * * For cases when there is the need for case insentivitity you should see {@link #getRows(boolean)} * * @return the rows represented as JSON object instances */ public List getRows() { return getRows(false); } /** * Get the rows - each row represented as a JsonObject where the keys are the column names and the values are * the column values. * * Beware that it's legal for a query result in SQL to contain duplicate column names, in which case one will * overwrite the other if using this method. If that's the case use {@link #getResults} instead. * * Special note, when encoding the row JSON to a String or Buffer the column names will be as they returned by the * database server regardless of the case sensitivity chosen on this method call. * * @param caseInsensitive - treat column names as case insensitive, i.e.: FoO equals foo equals FOO * * @return the rows represented as JSON object instances */ public List getRows(boolean caseInsensitive) { if (rows == null) { rows = new ArrayList<>(results.size()); int cols = columnNames.size(); for (JsonArray result: results) { JsonObject row = caseInsensitive ? new JsonObject(new TreeMap<>(String.CASE_INSENSITIVE_ORDER)) : new JsonObject(); for (int i = 0; i < cols; i++) { row.put(columnNames.get(i), result.getValue(i)); } rows.add(row); } } return rows; } /** * Return the number of rows in the result set * * @return the number of rows */ public int getNumRows() { return results.size(); } /** * Return the number of columns in the result set * * @return the number of columns */ public int getNumColumns() { return columnNames.size(); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ResultSet resultSet = (ResultSet) o; if (columnNames != null ? !columnNames.equals(resultSet.columnNames) : resultSet.columnNames != null) return false; if (results != null ? !results.equals(resultSet.results) : resultSet.results != null) return false; if (next != null ? !next.equals(resultSet.next) : resultSet.next != null) return false; return true; } @Override public int hashCode() { int result = columnNames != null ? columnNames.hashCode() : 0; result = 31 * result + (results != null ? results.hashCode() : 0); result = 31 * result + (next != null ? next.hashCode() : 0); return result; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy