com.questdb.SymbolIndexProxy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of questdb-core Show documentation
Show all versions of questdb-core Show documentation
QuestDB is High Performance Time Series Database
/*******************************************************************************
* ___ _ ____ ____
* / _ \ _ _ ___ ___| |_| _ \| __ )
* | | | | | | |/ _ \/ __| __| | | | _ \
* | |_| | |_| | __/\__ \ |_| |_| | |_) |
* \__\_\\__,_|\___||___/\__|____/|____/
*
* Copyright (C) 2014-2016 Appsicle
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*
******************************************************************************/
package com.questdb;
import com.questdb.ex.JournalException;
import com.questdb.factory.configuration.ColumnMetadata;
import com.questdb.factory.configuration.JournalMetadata;
import com.questdb.misc.Misc;
import com.questdb.store.KVIndex;
import java.io.Closeable;
import java.io.File;
class SymbolIndexProxy implements Closeable {
private final Partition partition;
private final int columnIndex;
private KVIndex index;
private long txAddress;
SymbolIndexProxy(Partition partition, int columnIndex, long txAddress) {
this.partition = partition;
this.columnIndex = columnIndex;
this.txAddress = txAddress;
}
public void close() {
index = Misc.free(index);
}
public int getColumnIndex() {
return columnIndex;
}
public void setTxAddress(long txAddress) {
this.txAddress = txAddress;
if (index != null) {
index.setTxAddress(txAddress);
}
}
@Override
public String toString() {
return "SymbolIndexProxy{" +
"index=" + index +
'}';
}
KVIndex getIndex() throws JournalException {
if (index == null) {
openIndex();
}
return index;
}
private void openIndex() throws JournalException {
JournalMetadata meta = partition.getJournal().getMetadata();
ColumnMetadata columnMetadata = meta.getColumnQuick(columnIndex);
if (!columnMetadata.indexed) {
throw new JournalException("There is no index for column: %s", columnMetadata.name);
}
index = new KVIndex(
new File(partition.getPartitionDir(), columnMetadata.name),
columnMetadata.distinctCountHint,
meta.getRecordHint(),
meta.getTxCountHint(),
partition.getJournal().getMode(),
txAddress
);
}
}