Search in sources :

Example 1 with Pair

use of org.apache.ignite.internal.util.Pair in project ignite-3 by apache.

the class ColumnBindingTest method createMocks.

/**
 * Creates mock pair for {@link Row} and {@link RowAssembler}.
 *
 * @return Pair of mocks.
 */
private Pair<RowAssembler, Row> createMocks() {
    final ArrayList<Object> vals = new ArrayList<>();
    final RowAssembler mockedAsm = Mockito.mock(RowAssembler.class);
    final Row mockedRow = Mockito.mock(Row.class);
    final Answer<Void> asmAnswer = new Answer<>() {

        @Override
        public Void answer(InvocationOnMock invocation) {
            if ("appendNull".equals(invocation.getMethod().getName())) {
                vals.add(null);
            } else {
                vals.add(invocation.getArguments()[0]);
            }
            return null;
        }
    };
    final Answer<Object> rowAnswer = new Answer<>() {

        @Override
        public Object answer(InvocationOnMock invocation) {
            final int idx = invocation.getArgument(0, Integer.class);
            return vals.get(idx);
        }
    };
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendNull();
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendByte(Mockito.anyByte());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendShort(Mockito.anyShort());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendInt(Mockito.anyInt());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendLong(Mockito.anyLong());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendFloat(Mockito.anyFloat());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendDouble(Mockito.anyDouble());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendUuid(Mockito.any(java.util.UUID.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendBitmask(Mockito.any(BitSet.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendString(Mockito.anyString());
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendBytes(Mockito.any(byte[].class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendNumber(Mockito.any(BigInteger.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendDecimal(Mockito.any(BigDecimal.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendDate(Mockito.any(LocalDate.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendDateTime(Mockito.any(LocalDateTime.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendTime(Mockito.any(LocalTime.class));
    Mockito.doAnswer(asmAnswer).when(mockedAsm).appendTimestamp(Mockito.any(Instant.class));
    Mockito.doAnswer(rowAnswer).when(mockedRow).byteValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).byteValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).shortValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).shortValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).intValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).intValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).longValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).longValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).floatValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).floatValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).doubleValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).doubleValueBoxed(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).dateValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).timeValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).dateTimeValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).timestampValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).uuidValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).bitmaskValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).stringValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).bytesValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).numberValue(Mockito.anyInt());
    Mockito.doAnswer(rowAnswer).when(mockedRow).decimalValue(Mockito.anyInt());
    return new Pair<>(mockedAsm, mockedRow);
}
Also used : LocalDateTime(java.time.LocalDateTime) LocalTime(java.time.LocalTime) Instant(java.time.Instant) ArrayList(java.util.ArrayList) BitSet(java.util.BitSet) RowAssembler(org.apache.ignite.internal.schema.row.RowAssembler) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) Answer(org.mockito.stubbing.Answer) InvocationOnMock(org.mockito.invocation.InvocationOnMock) BigInteger(java.math.BigInteger) TestSimpleObject(org.apache.ignite.internal.schema.testobjects.TestSimpleObject) Row(org.apache.ignite.internal.schema.row.Row) UUID(org.apache.ignite.internal.schema.NativeTypes.UUID) Pair(org.apache.ignite.internal.util.Pair)

Example 2 with Pair

use of org.apache.ignite.internal.util.Pair in project ignite-3 by apache.

the class ItInternalTableScanTest method setUp.

/**
 * Prepare test environment.
 * <ol>
 * <li>Start network node.</li>
 * <li>Start raft server.</li>
 * <li>Prepare partitioned raft group.</li>
 * <li>Prepare partitioned raft group service.</li>
 * <li>Prepare internal table as a test object.</li>
 * </ol>
 *
 * @throws Exception If any.
 */
@BeforeEach
public void setUp(TestInfo testInfo) throws Exception {
    NetworkAddress nodeNetworkAddress = new NetworkAddress("localhost", 20_000);
    network = ClusterServiceTestUtils.clusterService(testInfo, 20_000, new StaticNodeFinder(List.of(nodeNetworkAddress)), NETWORK_FACTORY);
    network.start();
    raftSrv = new RaftServerImpl(network, FACTORY);
    raftSrv.start();
    String grpName = "test_part_grp";
    List<Peer> conf = List.of(new Peer(nodeNetworkAddress));
    mockStorage = mock(PartitionStorage.class);
    txManager = new TxManagerImpl(network, new HeapLockManager());
    txManager.start();
    UUID tblId = UUID.randomUUID();
    raftSrv.startRaftGroup(grpName, new PartitionListener(tblId, new VersionedRowStore(mockStorage, txManager) {

        @Override
        protected Pair<BinaryRow, BinaryRow> versionedRow(@Nullable DataRow row, Timestamp timestamp) {
            // Return as is.
            return new Pair<>(new ByteBufferRow(row.valueBytes()), null);
        }
    }), conf);
    executor = new ScheduledThreadPoolExecutor(20, new NamedThreadFactory(Loza.CLIENT_POOL_NAME));
    RaftGroupService raftGrpSvc = RaftGroupServiceImpl.start(RAFT_GRP_ID, network, FACTORY, 10_000, conf, true, 200, executor).get(3, TimeUnit.SECONDS);
    internalTbl = new InternalTableImpl(TEST_TABLE_NAME, tblId, Int2ObjectMaps.singleton(0, raftGrpSvc), 1, NetworkAddress::toString, txManager, mock(TableStorage.class));
}
Also used : VersionedRowStore(org.apache.ignite.internal.table.distributed.storage.VersionedRowStore) StaticNodeFinder(org.apache.ignite.network.StaticNodeFinder) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) NamedThreadFactory(org.apache.ignite.internal.thread.NamedThreadFactory) Peer(org.apache.ignite.raft.client.Peer) ByteBufferRow(org.apache.ignite.internal.schema.ByteBufferRow) RaftGroupService(org.apache.ignite.raft.client.service.RaftGroupService) BinaryRow(org.apache.ignite.internal.schema.BinaryRow) SimpleDataRow(org.apache.ignite.internal.storage.basic.SimpleDataRow) DataRow(org.apache.ignite.internal.storage.DataRow) Timestamp(org.apache.ignite.internal.tx.Timestamp) RaftServerImpl(org.apache.ignite.internal.raft.server.impl.RaftServerImpl) HeapLockManager(org.apache.ignite.internal.tx.impl.HeapLockManager) PartitionListener(org.apache.ignite.internal.table.distributed.raft.PartitionListener) InternalTableImpl(org.apache.ignite.internal.table.distributed.storage.InternalTableImpl) NetworkAddress(org.apache.ignite.network.NetworkAddress) TxManagerImpl(org.apache.ignite.internal.tx.impl.TxManagerImpl) UUID(java.util.UUID) Nullable(org.jetbrains.annotations.Nullable) PartitionStorage(org.apache.ignite.internal.storage.PartitionStorage) Pair(org.apache.ignite.internal.util.Pair) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 3 with Pair

use of org.apache.ignite.internal.util.Pair in project ignite-3 by apache.

the class JdbcMetadataCatalog method getColumnsMeta.

/**
 * See {@link DatabaseMetaData#getColumns(String, String, String, String)} for details.
 *
 * <p>Ignite has only one possible CATALOG_NAME, it is handled on the client (driver) side.
 *
 * @param schemaNamePtrn Schema name java regex pattern.
 * @param tblNamePtrn    Table name java regex pattern.
 * @param colNamePtrn    Column name java regex pattern.
 * @return Future of the list of metadatas about columns that match specified schema/tablename/columnname criterias.
 */
public CompletableFuture<Collection<JdbcColumnMeta>> getColumnsMeta(String schemaNamePtrn, String tblNamePtrn, String colNamePtrn) {
    String schemaNameRegex = translateSqlWildcardsToRegex(schemaNamePtrn);
    String tlbNameRegex = translateSqlWildcardsToRegex(tblNamePtrn);
    String colNameRegex = translateSqlWildcardsToRegex(colNamePtrn);
    return tables.tablesAsync().thenApply(tablesList -> {
        return tablesList.stream().filter(t -> matches(getTblSchema(t.name()), schemaNameRegex)).filter(t -> matches(getTblName(t.name()), tlbNameRegex)).flatMap(tbl -> {
            SchemaDescriptor schema = ((TableImpl) tbl).schemaView().schema();
            List<Pair<String, Column>> tblColPairs = new ArrayList<>();
            for (Column column : schema.keyColumns().columns()) {
                tblColPairs.add(new Pair<>(tbl.name(), column));
            }
            for (Column column : schema.valueColumns().columns()) {
                tblColPairs.add(new Pair<>(tbl.name(), column));
            }
            return tblColPairs.stream();
        }).filter(e -> matches(e.getSecond().name(), colNameRegex)).sorted(bySchemaThenTabNameThenColOrder).map(pair -> createColumnMeta(pair.getFirst(), pair.getSecond())).collect(Collectors.toCollection(LinkedHashSet::new));
    });
}
Also used : JdbcColumnMeta(org.apache.ignite.client.proto.query.event.JdbcColumnMeta) Arrays(java.util.Arrays) SchemaDescriptor(org.apache.ignite.internal.schema.SchemaDescriptor) Pair(org.apache.ignite.internal.util.Pair) SortedSet(java.util.SortedSet) Collection(java.util.Collection) DatabaseMetaData(java.sql.DatabaseMetaData) CompletableFuture(java.util.concurrent.CompletableFuture) JdbcTableMeta(org.apache.ignite.client.proto.query.event.JdbcTableMeta) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) Commons(org.apache.ignite.internal.sql.engine.util.Commons) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) List(java.util.List) Column(org.apache.ignite.internal.schema.Column) TableImpl(org.apache.ignite.internal.table.TableImpl) JdbcPrimaryKeyMeta(org.apache.ignite.client.proto.query.event.JdbcPrimaryKeyMeta) IgniteTables(org.apache.ignite.table.manager.IgniteTables) NativeType(org.apache.ignite.internal.schema.NativeType) Table(org.apache.ignite.table.Table) Comparator(java.util.Comparator) SchemaRegistry(org.apache.ignite.internal.schema.SchemaRegistry) LinkedHashSet(java.util.LinkedHashSet) SchemaDescriptor(org.apache.ignite.internal.schema.SchemaDescriptor) Column(org.apache.ignite.internal.schema.Column) ArrayList(java.util.ArrayList) Pair(org.apache.ignite.internal.util.Pair)

Example 4 with Pair

use of org.apache.ignite.internal.util.Pair in project ignite-3 by apache.

the class DdlSqlToCommandConverter method convertAddIndex.

/**
 * Converts create index to appropriate wrapper.
 */
private CreateIndexCommand convertAddIndex(IgniteSqlCreateIndex sqlCmd, PlanningContext ctx) {
    CreateIndexCommand createIdxCmd = new CreateIndexCommand();
    createIdxCmd.schemaName(deriveSchemaName(sqlCmd.tableName(), ctx));
    createIdxCmd.tableName(deriveObjectName(sqlCmd.tableName(), ctx, "table name"));
    createIdxCmd.indexName(sqlCmd.indexName().getSimple());
    List<Pair<String, Boolean>> cols = new ArrayList<>(sqlCmd.columnList().size());
    for (SqlNode col : sqlCmd.columnList().getList()) {
        boolean desc = false;
        if (col.getKind() == SqlKind.DESCENDING) {
            col = ((SqlCall) col).getOperandList().get(0);
            desc = true;
        }
        cols.add(new Pair<>(((SqlIdentifier) col).getSimple(), desc));
    }
    createIdxCmd.columns(cols);
    createIdxCmd.ifIndexNotExists(sqlCmd.ifNotExists());
    return createIdxCmd;
}
Also used : SqlCall(org.apache.calcite.sql.SqlCall) ArrayList(java.util.ArrayList) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) Pair(org.apache.ignite.internal.util.Pair) SqlNode(org.apache.calcite.sql.SqlNode)

Example 5 with Pair

use of org.apache.ignite.internal.util.Pair in project ignite-3 by apache.

the class VersionedRowStore method resolve.

/**
 * Resolves a multi-versioned value depending on a viewer's timestamp.
 *
 * @param val        The value.
 * @param timestamp  The timestamp
 * @return New and old rows pair.
 * @see #versionedRow
 */
private Pair<BinaryRow, BinaryRow> resolve(Value val, Timestamp timestamp) {
    if (val.timestamp == null) {
        // New or after reset.
        assert val.oldRow == null : val;
        return new Pair<>(val.newRow, null);
    }
    // Checks "inTx" condition. Will be false if this is a first transactional op.
    if (val.timestamp.equals(timestamp)) {
        return new Pair<>(val.newRow, val.oldRow);
    }
    TxState state = txManager.state(val.timestamp);
    BinaryRow cur;
    if (state == TxState.ABORTED) {
        // Was aborted and had written a temp value.
        cur = val.oldRow;
    } else {
        cur = val.newRow;
    }
    return new Pair<>(cur, cur);
}
Also used : TxState(org.apache.ignite.internal.tx.TxState) BinaryRow(org.apache.ignite.internal.schema.BinaryRow) Pair(org.apache.ignite.internal.util.Pair)

Aggregations

Pair (org.apache.ignite.internal.util.Pair)6 ArrayList (java.util.ArrayList)4 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 BinaryRow (org.apache.ignite.internal.schema.BinaryRow)2 Commons (org.apache.ignite.internal.sql.engine.util.Commons)2 BigDecimal (java.math.BigDecimal)1 BigInteger (java.math.BigInteger)1 DatabaseMetaData (java.sql.DatabaseMetaData)1 Instant (java.time.Instant)1 LocalDate (java.time.LocalDate)1 LocalDateTime (java.time.LocalDateTime)1 LocalTime (java.time.LocalTime)1 Arrays (java.util.Arrays)1 BitSet (java.util.BitSet)1 Collection (java.util.Collection)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedHashSet (java.util.LinkedHashSet)1