Search in sources :

Example 96 with Index

use of herddb.model.Index in project herddb by diennea.

the class TableSpaceRestoreSourceFromFile method nextTable.

@Override
public DumpedTableMetadata nextTable() throws DataStorageManagerException {
    currentTableSize = 0;
    try {
        long dumpLedgerId = in.readLong();
        long dumpOffset = in.readLong();
        byte[] table = in.readArray();
        int numIndexes = in.readInt();
        List<byte[]> indexesData = new ArrayList<>();
        for (int i = 0; i < numIndexes; i++) {
            byte[] index = in.readArray();
            indexesData.add(index);
        }
        List<Index> indexes = indexesData.stream().map(Index::deserialize).collect(Collectors.toList());
        Table tableMetadata = Table.deserialize(table);
        Map<String, Object> data = new HashMap<>();
        data.put("table", tableMetadata.name);
        data.put("dumpLedgerId", dumpLedgerId);
        data.put("dumpOffset", dumpOffset);
        data.put("indexes", indexesData.size());
        listener.log("starttable", "starting table " + tableMetadata.name, data);
        return new DumpedTableMetadata(tableMetadata, new LogSequenceNumber(dumpLedgerId, dumpOffset), indexes);
    } catch (EOFException end) {
        return null;
    } catch (IOException err) {
        throw new DataStorageManagerException(err);
    }
}
Also used : DataStorageManagerException(herddb.storage.DataStorageManagerException) Table(herddb.model.Table) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) LogSequenceNumber(herddb.log.LogSequenceNumber) Index(herddb.model.Index) IOException(java.io.IOException) EOFException(java.io.EOFException)

Example 97 with Index

use of herddb.model.Index in project herddb by diennea.

the class RoutedClientSideConnection method restoreTableSpace.

@Override
public void restoreTableSpace(String tableSpace, TableSpaceRestoreSource source) throws HDBException, ClientSideMetadataProviderException {
    List<DumpedTableMetadata> tables = new ArrayList<>();
    try {
        while (true) {
            String entryType = source.nextEntryType();
            LOGGER.log(Level.FINEST, "restore, entryType:{0}", entryType);
            switch(entryType) {
                case BackupFileConstants.ENTRY_TYPE_START:
                    {
                        break;
                    }
                case BackupFileConstants.ENTRY_TYPE_TABLE:
                    {
                        DumpedTableMetadata table = source.nextTable();
                        Channel channel = ensureOpen();
                        long id = channel.generateRequestId();
                        ByteBuf message_create_table = PduCodec.RequestTableRestore.write(id, tableSpace, table.table.serialize(), table.logSequenceNumber.ledgerId, table.logSequenceNumber.offset);
                        sendMessageAndCheckNoError(channel, id, message_create_table);
                        List<KeyValue> chunk = source.nextTableDataChunk();
                        while (chunk != null) {
                            id = channel.generateRequestId();
                            ByteBuf message = PduCodec.PushTableData.write(id, tableSpace, table.table.name, chunk);
                            sendMessageAndCheckNoError(channel, id, message);
                            chunk = source.nextTableDataChunk();
                        }
                        tables.add(table);
                        break;
                    }
                case BackupFileConstants.ENTRY_TYPE_TXLOGCHUNK:
                    {
                        Channel channel = ensureOpen();
                        List<KeyValue> chunk = source.nextTransactionLogChunk();
                        long id = channel.generateRequestId();
                        ByteBuf message = PduCodec.PushTxLogChunk.write(id, tableSpace, chunk);
                        sendMessageAndCheckNoError(channel, id, message);
                        break;
                    }
                case BackupFileConstants.ENTRY_TYPE_TRANSACTIONS:
                    {
                        Channel channel = ensureOpen();
                        List<byte[]> chunk = source.nextTransactionsBlock();
                        long id = channel.generateRequestId();
                        ByteBuf message = PduCodec.PushTransactionsBlock.write(id, tableSpace, chunk);
                        sendMessageAndCheckNoError(channel, id, message);
                        break;
                    }
                case BackupFileConstants.ENTRY_TYPE_END:
                    {
                        // send a 'table finished' event only at the end of the procedure
                        // the stream of transaction log entries is finished, so the data contained in the table is "final"
                        // we are going to create now all the indexes too
                        Channel channel = ensureOpen();
                        for (DumpedTableMetadata table : tables) {
                            List<byte[]> indexes = table.indexes.stream().map(Index::serialize).collect(Collectors.toList());
                            long id = channel.generateRequestId();
                            ByteBuf message_table_finished = PduCodec.TableRestoreFinished.write(id, tableSpace, table.table.name, indexes);
                            sendMessageAndCheckNoError(channel, id, message_table_finished);
                        }
                        long id = channel.generateRequestId();
                        ByteBuf message_restore_finished = PduCodec.RestoreFinished.write(id, tableSpace);
                        sendMessageAndCheckNoError(channel, id, message_restore_finished);
                        return;
                    }
                default:
                    throw new HDBException("bad entryType " + entryType);
            }
        }
    } catch (InterruptedException err) {
        Thread.currentThread().interrupt();
        throw new HDBException(err);
    } catch (TimeoutException err) {
        throw new HDBException(err);
    }
}
Also used : Channel(herddb.network.Channel) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Index(herddb.model.Index) RawString(herddb.utils.RawString) ByteBuf(io.netty.buffer.ByteBuf) DumpedTableMetadata(herddb.backup.DumpedTableMetadata) HDBOperationTimeoutException(herddb.client.impl.HDBOperationTimeoutException) TimeoutException(java.util.concurrent.TimeoutException)

Example 98 with Index

use of herddb.model.Index in project herddb by diennea.

the class TableSpaceDumpFileWriter method beginTable.

@Override
public void beginTable(DumpedTableMetadata tableMetadata, Map<String, Object> stats) throws DataStorageManagerException {
    Table table = tableMetadata.table;
    currentTable = table.name;
    listener.log("beginTable", "beginTable " + currentTable + ", stats " + stats, Collections.singletonMap("table", table.name));
    try {
        out.writeUTF(BackupFileConstants.ENTRY_TYPE_TABLE);
    } catch (IOException err) {
        throw new DataStorageManagerException(err);
    }
    tableRecordsCount = 0;
    try {
        out.writeLong(tableMetadata.logSequenceNumber.ledgerId);
        out.writeLong(tableMetadata.logSequenceNumber.offset);
        out.writeArray(table.serialize());
        out.writeInt(tableMetadata.indexes.size());
        for (Index index : tableMetadata.indexes) {
            out.writeArray(index.serialize());
        }
    } catch (IOException err) {
        throw new DataStorageManagerException(err);
    }
}
Also used : DataStorageManagerException(herddb.storage.DataStorageManagerException) Table(herddb.model.Table) Index(herddb.model.Index) IOException(java.io.IOException)

Example 99 with Index

use of herddb.model.Index in project herddb by diennea.

the class RawSQLTest method createDropIndexTest.

@Test
public void createDropIndexTest() throws Exception {
    String nodeId = "localhost";
    try (DBManager manager = new DBManager("localhost", new MemoryMetadataStorageManager(), new MemoryDataStorageManager(), new MemoryCommitLogManager(), null, null)) {
        manager.start();
        CreateTableSpaceStatement st1 = new CreateTableSpaceStatement("tblspace1", Collections.singleton(nodeId), nodeId, 1, 0, 0);
        manager.executeStatement(st1, StatementEvaluationContext.DEFAULT_EVALUATION_CONTEXT(), TransactionContext.NO_TRANSACTION);
        manager.waitForTablespace("tblspace1", 10000);
        execute(manager, "CREATE TABLE tblspace1.tsql (k1 string primary key,n1 int,s1 string)", Collections.emptyList());
        execute(manager, "CREATE INDEX ix1 ON tblspace1.tsql(n1)", Collections.emptyList());
        try {
            execute(manager, "CREATE INDEX ix1 ON tblspace1.tsql(n1)", Collections.emptyList());
            fail();
        } catch (IndexAlreadyExistsException ok) {
        }
        execute(manager, "DROP INDEX tblspace1.ix1", Collections.emptyList());
        execute(manager, "CREATE INDEX ix1 ON tblspace1.tsql(n1)", Collections.emptyList());
        execute(manager, "CREATE HASH INDEX ix_hash ON tblspace1.tsql(n1)", Collections.emptyList());
        try {
            execute(manager, "CREATE BADTYPE INDEX ix_bad ON tblspace1.tsql(n1)", Collections.emptyList());
            fail();
        } catch (StatementExecutionException ok) {
            assertTrue(ok.getMessage().contains("badtype"));
        }
        try {
            execute(manager, "DROP INDEX tblspace1.ix2", Collections.emptyList());
            fail();
        } catch (IndexDoesNotExistException ok) {
        }
        try {
            execute(manager, "DROP INDEX ix1", Collections.emptyList());
            fail();
        } catch (IndexDoesNotExistException ok) {
        }
        try {
            execute(manager, "CREATE INDEX ix2 ON tsql(n1)", Collections.emptyList());
            fail();
        } catch (TableDoesNotExistException ok) {
        }
        try {
            execute(manager, "CREATE INDEX duplicatecolumn ON tblspace1.tsql(n1,n1)", Collections.emptyList());
            fail();
        } catch (StatementExecutionException ok) {
        }
        execute(manager, "CREATE UNIQUE INDEX ixu1 ON tblspace1.tsql(n1)", Collections.emptyList());
        Map<String, AbstractIndexManager> indexesOnTable = manager.getTableSpaceManager("tblspace1").getIndexesOnTable("tsql");
        assertTrue(indexesOnTable.values().stream().anyMatch(s -> s.getIndexName().equals("ixu1") && s.isUnique()));
    }
}
Also used : Arrays(java.util.Arrays) RuntimeProjectedDataAccessor(herddb.model.planner.ProjectOp.ZeroCopyProjection.RuntimeProjectedDataAccessor) CommitTransactionStatement(herddb.model.commands.CommitTransactionStatement) Date(java.util.Date) Assert.assertNotSame(org.junit.Assert.assertNotSame) RollbackTransactionStatement(herddb.model.commands.RollbackTransactionStatement) Table(herddb.model.Table) TransactionResult(herddb.model.TransactionResult) CoreMatchers.instanceOf(org.hamcrest.CoreMatchers.instanceOf) Assert.assertThat(org.junit.Assert.assertThat) DuplicatePrimaryKeyException(herddb.model.DuplicatePrimaryKeyException) IndexAlreadyExistsException(herddb.model.IndexAlreadyExistsException) TestUtils.scan(herddb.core.TestUtils.scan) Map(java.util.Map) Assert.fail(org.junit.Assert.fail) DMLStatementExecutionResult(herddb.model.DMLStatementExecutionResult) MapUtils(herddb.utils.MapUtils) RawString(herddb.utils.RawString) Index(herddb.model.Index) ScanResult(herddb.model.ScanResult) DataAccessor(herddb.utils.DataAccessor) DataAccessorForFullRecord(herddb.codec.DataAccessorForFullRecord) TableDoesNotExistException(herddb.model.TableDoesNotExistException) DataScanner(herddb.model.DataScanner) StatementExecutionException(herddb.model.StatementExecutionException) TimeZone(java.util.TimeZone) Timestamp(java.sql.Timestamp) RecordSerializer(herddb.codec.RecordSerializer) ScanStatement(herddb.model.commands.ScanStatement) List(java.util.List) MissingJDBCParameterException(herddb.model.MissingJDBCParameterException) Assert.assertFalse(org.junit.Assert.assertFalse) GetStatement(herddb.model.commands.GetStatement) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) Assume.assumeTrue(org.junit.Assume.assumeTrue) TableSpace(herddb.model.TableSpace) Bytes(herddb.utils.Bytes) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) GetResult(herddb.model.GetResult) SimpleDateFormat(java.text.SimpleDateFormat) PrimaryIndexSeek(herddb.index.PrimaryIndexSeek) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) Assert.assertSame(org.junit.Assert.assertSame) TestUtils(herddb.core.TestUtils) Calendar(java.util.Calendar) TransactionContext(herddb.model.TransactionContext) Transaction(herddb.model.Transaction) Assert.assertArrayEquals(org.junit.Assert.assertArrayEquals) TestUtils.scanKeepReadLocks(herddb.core.TestUtils.scanKeepReadLocks) TestUtils.commitTransaction(herddb.core.TestUtils.commitTransaction) IndexDoesNotExistException(herddb.model.IndexDoesNotExistException) TestUtils.executeUpdate(herddb.core.TestUtils.executeUpdate) Assert.assertNotNull(org.junit.Assert.assertNotNull) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Assert.assertNotEquals(org.junit.Assert.assertNotEquals) DBManager(herddb.core.DBManager) Assert.assertNull(org.junit.Assert.assertNull) StatementEvaluationContext(herddb.model.StatementEvaluationContext) AbstractIndexManager(herddb.core.AbstractIndexManager) TestUtils.execute(herddb.core.TestUtils.execute) Assert(org.junit.Assert) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) AbstractIndexManager(herddb.core.AbstractIndexManager) IndexDoesNotExistException(herddb.model.IndexDoesNotExistException) RawString(herddb.utils.RawString) StatementExecutionException(herddb.model.StatementExecutionException) TableDoesNotExistException(herddb.model.TableDoesNotExistException) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) DBManager(herddb.core.DBManager) IndexAlreadyExistsException(herddb.model.IndexAlreadyExistsException) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) Test(org.junit.Test)

Example 100 with Index

use of herddb.model.Index in project herddb by diennea.

the class RawSQLTest method openJPATest.

@Test
public void openJPATest() throws Exception {
    String nodeId = "localhost";
    try (DBManager manager = new DBManager("localhost", new MemoryMetadataStorageManager(), new MemoryDataStorageManager(), new MemoryCommitLogManager(), null, null)) {
        manager.start();
        assertTrue(manager.waitForBootOfLocalTablespaces(10000));
        execute(manager, "CREATE TABLE `herd`.`parentTable` (`k1` VARCHAR NOT NULL, `p1` INTEGER)", Collections.emptyList());
        execute(manager, "CREATE TABLE `herd`.`childTable` (`k1` VARCHAR NOT NULL, `n1` INTEGER, PRIMARY KEY (`k1`), CONSTRAINT `un1` UNIQUE (`n1`))", Collections.emptyList());
        execute(manager, "ALTER TABLE `herd`.`childTable` ADD CONSTRAINT `fk1` FOREIGN KEY (`n1`) REFERENCES `herd`.`parentTable` (`p1`) ON DELETE CASCADE", Collections.emptyList());
        execute(manager, "ALTER TABLE `herd`.`childTable` DROP CONSTRAINT `fk1`", Collections.emptyList());
        List<Index> availableIndexes = manager.getTableSpaceManager("herd").getTableManager("childtable").getAvailableIndexes();
        assertEquals(1, availableIndexes.size());
        assertEquals("un1", availableIndexes.get(0).name);
        assertTrue(availableIndexes.get(0).unique);
    }
}
Also used : DBManager(herddb.core.DBManager) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) Index(herddb.model.Index) RawString(herddb.utils.RawString) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) Test(org.junit.Test)

Aggregations

Index (herddb.model.Index)101 Table (herddb.model.Table)92 CreateIndexStatement (herddb.model.commands.CreateIndexStatement)71 CreateTableStatement (herddb.model.commands.CreateTableStatement)71 DataScanner (herddb.model.DataScanner)67 ScanStatement (herddb.model.commands.ScanStatement)66 TranslatedQuery (herddb.sql.TranslatedQuery)61 Test (org.junit.Test)61 CreateTableSpaceStatement (herddb.model.commands.CreateTableSpaceStatement)52 SecondaryIndexSeek (herddb.index.SecondaryIndexSeek)51 MemoryCommitLogManager (herddb.mem.MemoryCommitLogManager)39 MemoryDataStorageManager (herddb.mem.MemoryDataStorageManager)39 MemoryMetadataStorageManager (herddb.mem.MemoryMetadataStorageManager)39 InsertStatement (herddb.model.commands.InsertStatement)31 DBManager (herddb.core.DBManager)24 GetStatement (herddb.model.commands.GetStatement)23 GetResult (herddb.model.GetResult)22 TransactionContext (herddb.model.TransactionContext)22 Bytes (herddb.utils.Bytes)22 ServerConfiguration (herddb.server.ServerConfiguration)21