Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions engine/src/main/java/com/arcadedb/database/Binary.java
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,18 @@ public void putLong(final long value) {
buffer.putLong(value);
}

@Override
public void putFloat(final int index, final float value) {
checkForAllocation(index, FLOAT_SERIALIZED_SIZE);
buffer.putFloat(index, value);
}

@Override
public void putFloat(final float value) {
checkForAllocation(buffer.position(), FLOAT_SERIALIZED_SIZE);
buffer.putFloat(value);
}

@Override
public int putString(final int index, final String value) {
return putBytes(index, value.getBytes(DatabaseFactory.getDefaultCharset()));
Expand Down Expand Up @@ -448,6 +460,17 @@ public long getLong(final int index) {
return buffer.getLong(index);
}

@Override
public float getFloat(final int index) {
return buffer.getFloat(index);
}

@Override
public float getFloat() {
checkForFetching(FLOAT_SERIALIZED_SIZE);
return buffer.getFloat();
}

@Override
public String getString() {
return new String(getBytes(), DatabaseFactory.getDefaultCharset());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ public interface BinaryStructure {

void putLong(long value);

float getFloat(int i);

void putFloat(int index, float value);

void putFloat(float value);

int putString(int index, String value);

int putString(String value);
Expand Down Expand Up @@ -104,6 +110,8 @@ public interface BinaryStructure {

long getLong(int index);

float getFloat();

String getString();

String getString(int index);
Expand Down
4 changes: 4 additions & 0 deletions engine/src/main/java/com/arcadedb/engine/BasePage.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ public int readInt(final int index) {
return this.content.getInt(PAGE_HEADER_SIZE + index);
}

public float readFloat(final int index) {
return this.content.getFloat(PAGE_HEADER_SIZE + index);
}

public long readUnsignedInt(final int index) {
return (long) this.content.getInt(PAGE_HEADER_SIZE + index) & 0xffffffffL;
}
Expand Down
26 changes: 23 additions & 3 deletions engine/src/main/java/com/arcadedb/engine/PaginatedComponent.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import com.arcadedb.database.DatabaseInternal;
import com.arcadedb.database.TransactionContext;
import com.arcadedb.index.IndexException;

import java.io.*;
import java.util.concurrent.atomic.*;
Expand All @@ -32,9 +33,10 @@
* @author Luca Garulli (l.garulli@arcadedata.com)
*/
public abstract class PaginatedComponent extends Component {
protected final PaginatedComponentFile file;
protected final int pageSize;
protected final AtomicInteger pageCount = new AtomicInteger();
public static final String TEMP_EXT = "temp_";
protected final PaginatedComponentFile file;
protected final int pageSize;
protected final AtomicInteger pageCount = new AtomicInteger();

protected PaginatedComponent(final DatabaseInternal database, final String name, final String filePath, final String ext,
final ComponentFile.MODE mode,
Expand Down Expand Up @@ -106,4 +108,22 @@ public int getTotalPages() {
}
return pageCount.get();
}

public void removeTempSuffix() {
final String fileName = file.getFilePath();

final int extPos = fileName.lastIndexOf('.');
if (fileName.substring(extPos + 1).startsWith(TEMP_EXT)) {
final String newFileName = fileName.substring(0, extPos) + "." + fileName.substring(extPos + TEMP_EXT.length() + 1);

try {
file.rename(newFileName);
database.getFileManager().renameFile(fileName, newFileName);
} catch (final IOException e) {
throw new IndexException(
"Cannot rename temporary index file '" + file.getFilePath() + "' to '" + newFileName + "' (exists=" + (new File(
file.getFilePath()).exists()) + ")", e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.arcadedb.exception.SchemaException;
import com.arcadedb.exception.TimeoutException;
import com.arcadedb.exception.TransactionException;
import com.arcadedb.index.vector.LSMVectorIndex;
import com.arcadedb.log.LogManager;
import com.arcadedb.utility.LockManager;

Expand Down Expand Up @@ -364,9 +365,14 @@ public boolean applyChanges(final WALFile.WALTransaction tx, final Map<Integer,
database.getPageManager().removePageFromCache(modifiedPage.pageId);

final PaginatedComponent component = (PaginatedComponent) database.getSchema().getFileById(txPage.fileId);
if (component != null)
if (component != null) {
component.updatePageCount(modifiedPage.pageId.getPageNumber() + 1);

final Object mainComponent = component.getMainComponent();
if (mainComponent instanceof LSMVectorIndex idx)
idx.markIndexDirty();
}

if (file.getFileId() == dictionaryId)
involveDictionary = true;

Expand Down
2 changes: 1 addition & 1 deletion engine/src/main/java/com/arcadedb/index/IndexFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void register(final String type, final IndexFactoryHandler handler) {
map.put(type, handler);
}

public IndexInternal createIndex(final IndexBuilder builder) {
public IndexInternal createIndex(final IndexBuilder<?> builder) {
final String indexType = builder.getIndexType().name();
final IndexFactoryHandler handler = map.get(indexType);

Expand Down
9 changes: 6 additions & 3 deletions engine/src/main/java/com/arcadedb/index/IndexInternal.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package com.arcadedb.index;

import com.arcadedb.engine.Component;
import com.arcadedb.schema.IndexMetadata;
import com.arcadedb.schema.Type;
import com.arcadedb.serializer.json.JSONObject;
import com.arcadedb.utility.ExcludeFromJacocoGeneratedReport;
Expand All @@ -37,11 +38,13 @@ enum INDEX_STATUS {UNAVAILABLE, AVAILABLE, COMPACTION_SCHEDULED, COMPACTION_IN_P

boolean compact() throws IOException, InterruptedException;

void setMetadata(String name, String[] propertyNames, int associatedBucketId);
IndexMetadata getMetadata();

boolean setStatus(INDEX_STATUS[] expectedStatuses, INDEX_STATUS newStatus);
void setMetadata(IndexMetadata metadata);

void setMetadata(JSONObject indexJSON);

void applyMetadataFromSchema(JSONObject indexJSON);
boolean setStatus(INDEX_STATUS[] expectedStatuses, INDEX_STATUS newStatus);

void close();

Expand Down
10 changes: 8 additions & 2 deletions engine/src/main/java/com/arcadedb/index/TypeIndex.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.arcadedb.exception.NeedRetryException;
import com.arcadedb.index.lsm.LSMTreeIndexAbstract;
import com.arcadedb.schema.DocumentType;
import com.arcadedb.schema.IndexMetadata;
import com.arcadedb.schema.Schema;
import com.arcadedb.schema.Type;
import com.arcadedb.serializer.BinaryComparator;
Expand All @@ -46,6 +47,7 @@ public class TypeIndex implements RangeIndex, IndexInternal {
private final DocumentType type;
private boolean valid = true;
private IndexInternal associatedIndex;
private IndexMetadata metadata;

public TypeIndex(final String logicName, final DocumentType type) {
this.logicName = logicName;
Expand Down Expand Up @@ -366,12 +368,12 @@ public String toString() {
}

@Override
public void setMetadata(final String name, final String[] propertyNames, final int associatedBucketId) {
public void setMetadata(IndexMetadata metadata) {
throw new UnsupportedOperationException("setMetadata");
}

@Override
public void applyMetadataFromSchema(final JSONObject indexJSON) {
public void setMetadata(final JSONObject indexJSON) {
throw new UnsupportedOperationException("applyMetadataFromSchema");
}

Expand Down Expand Up @@ -510,4 +512,8 @@ private IndexInternal getFirstUnderlyingIndex() {
throw new IndexException("Index '" + getName() + "' is not valid. Probably has been drop or rebuilt");
return indexesOnBuckets.getFirst();
}

Copy link

Copilot AI Nov 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method overrides IndexInternal.getMetadata; it is advisable to add an Override annotation.

Suggested change
@Override

Copilot uses AI. Check for mistakes.
public IndexMetadata getMetadata() {
return metadata;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.arcadedb.index.TempIndexCursor;
import com.arcadedb.index.TypeIndex;
import com.arcadedb.schema.IndexBuilder;
import com.arcadedb.schema.IndexMetadata;
import com.arcadedb.schema.Schema;
import com.arcadedb.schema.Type;
import com.arcadedb.serializer.json.JSONObject;
Expand Down Expand Up @@ -209,6 +210,11 @@ public boolean compact() throws IOException, InterruptedException {
return underlyingIndex.compact();
}

@Override
public IndexMetadata getMetadata() {
return underlyingIndex.getMetadata();
}

@Override
public boolean isCompacting() {
return underlyingIndex.isCompacting();
Expand All @@ -225,8 +231,8 @@ public String getMostRecentFileName() {
}

@Override
public void setMetadata(final String name, final String[] propertyNames, final int associatedBucketId) {
underlyingIndex.setMetadata(name, propertyNames, associatedBucketId);
public void setMetadata(final IndexMetadata metadata) {
underlyingIndex.setMetadata(metadata);
}

@Override
Expand All @@ -235,8 +241,8 @@ public boolean setStatus(final INDEX_STATUS[] expectedStatuses, final INDEX_STAT
}

@Override
public void applyMetadataFromSchema(final JSONObject indexJSON) {
underlyingIndex.applyMetadataFromSchema(indexJSON);
public void setMetadata(final JSONObject indexJSON) {
underlyingIndex.setMetadata(indexJSON);
}

@Override
Expand Down Expand Up @@ -317,7 +323,7 @@ public boolean supportsOrderedIterations() {

@Override
public boolean isAutomatic() {
return underlyingIndex.propertyNames != null;
return underlyingIndex.getPropertyNames() != null;
}

@Override
Expand Down
Loading
Loading