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);
}
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));
}
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));
});
}
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;
}
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);
}
Aggregations