/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.model.impl.local; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.DBPDataKind; import org.jkiss.dbeaver.model.data.DBDValueMeta; import org.jkiss.dbeaver.model.exec.*; import org.jkiss.dbeaver.model.struct.DBSTypedObject; import java.util.ArrayList; import java.util.List; /** * LocalResultSet */ public class LocalResultSet<SOURCE_STMT extends DBCStatement> implements DBCResultSet { protected final DBCSession session; protected final SOURCE_STMT statement; private final List<DBCAttributeMetaData> metaColumns = new ArrayList<>(); protected final List<Object[]> rows = new ArrayList<>(); protected int curPosition = -1; public LocalResultSet(DBCSession session, SOURCE_STMT statement) { this.session = session; this.statement = statement; } @Override public DBCSession getSession() { return session; } @Override public SOURCE_STMT getSourceStatement() { return statement; } @Override public Object getAttributeValue(int index) throws DBCException { Object[] row = rows.get(curPosition); if (index >= row.length) { throw new DBCException("Attribute index out of range (" + index + "/" + row.length + ")"); } return row[index]; } @Nullable @Override public Object getAttributeValue(String name) throws DBCException { for (int i = 0; i < metaColumns.size(); i++) { if (metaColumns.get(i).getName().equals(name)) { return getAttributeValue(i); } } throw new DBCException("Bad attribute name: " + name); } @Override public DBDValueMeta getAttributeValueMeta(int index) throws DBCException { return null; } @Override public DBDValueMeta getRowMeta() throws DBCException { return null; } @Override public boolean nextRow() { if (curPosition + 1 >= rows.size()) { return false; } curPosition++; return true; } @Override public boolean moveTo(int position) throws DBCException { if (position < 0 || position >= rows.size()) { return false; } curPosition = position; return true; } @NotNull @Override public DBCResultSetMetaData getMeta() throws DBCException { return new DBCResultSetMetaData() { @Override public List<DBCAttributeMetaData> getAttributes() { return metaColumns; } }; } @Override public String getResultSetName() throws DBCException { return null; } @Override public void close() { curPosition = -1; rows.clear(); metaColumns.clear(); } public DBCAttributeMetaData addColumn(String label, DBPDataKind dataKind) { LocalResultSetColumn column = new LocalResultSetColumn(this, metaColumns.size(), label, dataKind); metaColumns.add(column); return column; } public DBCAttributeMetaData addColumn(String label, DBSTypedObject typedObject) { LocalResultSetColumn column = new LocalResultSetColumn(this, metaColumns.size(), label, typedObject); metaColumns.add(column); return column; } public void addRow(Object ... values) { rows.add(values); } }