Search in sources :

Example 21 with RecordSet

use of com.facebook.presto.spi.RecordSet in project presto by prestodb.

the class TestExampleRecordSet method testCursorMixedOrder.

@Test
public void testCursorMixedOrder() {
    RecordSet recordSet = new ExampleRecordSet(new ExampleSplit("test", "schema", "table", dataUri), ImmutableList.of(new ExampleColumnHandle("test", "value", BIGINT, 1), new ExampleColumnHandle("test", "value", BIGINT, 1), new ExampleColumnHandle("test", "text", createUnboundedVarcharType(), 0)));
    RecordCursor cursor = recordSet.cursor();
    Map<String, Long> data = new LinkedHashMap<>();
    while (cursor.advanceNextPosition()) {
        assertEquals(cursor.getLong(0), cursor.getLong(1));
        data.put(cursor.getSlice(2).toStringUtf8(), cursor.getLong(0));
    }
    assertEquals(data, ImmutableMap.<String, Long>builder().put("ten", 10L).put("eleven", 11L).put("twelve", 12L).build());
}
Also used : RecordCursor(com.facebook.presto.spi.RecordCursor) RecordSet(com.facebook.presto.spi.RecordSet) LinkedHashMap(java.util.LinkedHashMap) Test(org.testng.annotations.Test)

Example 22 with RecordSet

use of com.facebook.presto.spi.RecordSet in project presto by prestodb.

the class TestJdbcRecordSetProvider method getCursor.

private RecordCursor getCursor(JdbcTableHandle jdbcTableHandle, List<JdbcColumnHandle> columns, TupleDomain<ColumnHandle> domain) {
    JdbcTableLayoutHandle layoutHandle = new JdbcTableLayoutHandle(SESSION.getSqlFunctionProperties(), jdbcTableHandle, domain, Optional.empty());
    ConnectorSplitSource splits = jdbcClient.getSplits(IDENTITY, layoutHandle);
    JdbcSplit split = (JdbcSplit) getOnlyElement(getFutureValue(splits.getNextBatch(NOT_PARTITIONED, 1000)).getSplits());
    ConnectorTransactionHandle transaction = new JdbcTransactionHandle();
    JdbcRecordSetProvider recordSetProvider = new JdbcRecordSetProvider(jdbcClient);
    RecordSet recordSet = recordSetProvider.getRecordSet(transaction, SESSION, split, columns);
    return recordSet.cursor();
}
Also used : ConnectorTransactionHandle(com.facebook.presto.spi.connector.ConnectorTransactionHandle) ConnectorSplitSource(com.facebook.presto.spi.ConnectorSplitSource) RecordSet(com.facebook.presto.spi.RecordSet)

Example 23 with RecordSet

use of com.facebook.presto.spi.RecordSet in project presto by prestodb.

the class TestJdbcRecordSet method testGetColumnTypes.

@Test
public void testGetColumnTypes() {
    RecordSet recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of(new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR, true, Optional.empty()), new JdbcColumnHandle("test", "text_short", JDBC_VARCHAR, createVarcharType(32), true, Optional.empty()), new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT, true, Optional.empty())));
    assertEquals(recordSet.getColumnTypes(), ImmutableList.of(VARCHAR, createVarcharType(32), BIGINT));
    recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of(new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT, true, Optional.empty()), new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR, true, Optional.empty())));
    assertEquals(recordSet.getColumnTypes(), ImmutableList.of(BIGINT, VARCHAR));
    recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of(new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT, true, Optional.empty()), new JdbcColumnHandle("test", "value", JDBC_BIGINT, BIGINT, true, Optional.empty()), new JdbcColumnHandle("test", "text", JDBC_VARCHAR, VARCHAR, true, Optional.empty())));
    assertEquals(recordSet.getColumnTypes(), ImmutableList.of(BIGINT, BIGINT, VARCHAR));
    recordSet = new JdbcRecordSet(jdbcClient, session, split, ImmutableList.of());
    assertEquals(recordSet.getColumnTypes(), ImmutableList.of());
}
Also used : RecordSet(com.facebook.presto.spi.RecordSet) Test(org.testng.annotations.Test)

Example 24 with RecordSet

use of com.facebook.presto.spi.RecordSet in project presto by prestodb.

the class H2QueryRunner method insertRows.

private static void insertRows(ConnectorTableMetadata tableMetadata, Handle handle, RecordSet data) {
    List<ColumnMetadata> columns = tableMetadata.getColumns().stream().filter(columnMetadata -> !columnMetadata.isHidden()).collect(toImmutableList());
    String vars = Joiner.on(',').join(nCopies(columns.size(), "?"));
    String sql = format("INSERT INTO %s VALUES (%s)", tableMetadata.getTable().getTableName(), vars);
    RecordCursor cursor = data.cursor();
    while (true) {
        // insert 1000 rows at a time
        PreparedBatch batch = handle.prepareBatch(sql);
        for (int row = 0; row < 1000; row++) {
            if (!cursor.advanceNextPosition()) {
                if (batch.size() > 0) {
                    batch.execute();
                }
                return;
            }
            for (int column = 0; column < columns.size(); column++) {
                Type type = columns.get(column).getType();
                if (BOOLEAN.equals(type)) {
                    batch.bind(column, cursor.getBoolean(column));
                } else if (BIGINT.equals(type)) {
                    batch.bind(column, cursor.getLong(column));
                } else if (INTEGER.equals(type)) {
                    batch.bind(column, (int) cursor.getLong(column));
                } else if (DOUBLE.equals(type)) {
                    batch.bind(column, cursor.getDouble(column));
                } else if (type instanceof VarcharType) {
                    batch.bind(column, cursor.getSlice(column).toStringUtf8());
                } else if (DATE.equals(type)) {
                    long millisUtc = TimeUnit.DAYS.toMillis(cursor.getLong(column));
                    // H2 expects dates in to be millis at midnight in the JVM timezone
                    long localMillis = DateTimeZone.UTC.getMillisKeepLocal(DateTimeZone.getDefault(), millisUtc);
                    batch.bind(column, new Date(localMillis));
                } else {
                    throw new IllegalArgumentException("Unsupported type " + type);
                }
            }
            batch.add();
        }
        batch.execute();
    }
}
Also used : DateTimeZone(org.joda.time.DateTimeZone) Arrays(java.util.Arrays) PreparedBatch(org.jdbi.v3.core.statement.PreparedBatch) TpchRecordSet.createTpchRecordSet(com.facebook.presto.tpch.TpchRecordSet.createTpchRecordSet) LINE_ITEM(io.airlift.tpch.TpchTable.LINE_ITEM) Array(java.sql.Array) BigDecimal(java.math.BigDecimal) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) SchemaTableName(com.facebook.presto.spi.SchemaTableName) ParsedSql(org.jdbi.v3.core.statement.ParsedSql) ResultSet(java.sql.ResultSet) Handle(org.jdbi.v3.core.Handle) LocalTime(java.time.LocalTime) Varchars.isVarcharType(com.facebook.presto.common.type.Varchars.isVarcharType) REGION(io.airlift.tpch.TpchTable.REGION) TIME(com.facebook.presto.common.type.TimeType.TIME) DOUBLE(com.facebook.presto.common.type.DoubleType.DOUBLE) MathContext(java.math.MathContext) PART_SUPPLIER(io.airlift.tpch.TpchTable.PART_SUPPLIER) Collections.nCopies(java.util.Collections.nCopies) Timestamp(java.sql.Timestamp) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) VarcharType(com.facebook.presto.common.type.VarcharType) TpchMetadata(com.facebook.presto.tpch.TpchMetadata) TINY_SCHEMA_NAME(com.facebook.presto.tpch.TpchMetadata.TINY_SCHEMA_NAME) String.format(java.lang.String.format) StatementContext(org.jdbi.v3.core.statement.StatementContext) Preconditions.checkState(com.google.common.base.Preconditions.checkState) TpchTable(io.airlift.tpch.TpchTable) RecordCursor(com.facebook.presto.spi.RecordCursor) TpchTableHandle(com.facebook.presto.tpch.TpchTableHandle) List(java.util.List) UNKNOWN(com.facebook.presto.common.type.UnknownType.UNKNOWN) ColumnMetadata(com.facebook.presto.spi.ColumnMetadata) Lists.newArrayList(com.google.common.collect.Lists.newArrayList) INTEGER(com.facebook.presto.common.type.IntegerType.INTEGER) LocalDate(java.time.LocalDate) Optional(java.util.Optional) TIME_WITH_TIME_ZONE(com.facebook.presto.common.type.TimeWithTimeZoneType.TIME_WITH_TIME_ZONE) TimestampType(com.facebook.presto.common.type.TimestampType) ExpectedQueryRunner(com.facebook.presto.testing.ExpectedQueryRunner) Joiner(com.google.common.base.Joiner) Strings.padEnd(com.google.common.base.Strings.padEnd) NATION(io.airlift.tpch.TpchTable.NATION) DecimalType(com.facebook.presto.common.type.DecimalType) Chars.isCharType(com.facebook.presto.common.type.Chars.isCharType) ORDERS(io.airlift.tpch.TpchTable.ORDERS) TIMESTAMP_WITH_TIME_ZONE(com.facebook.presto.common.type.TimestampWithTimeZoneType.TIMESTAMP_WITH_TIME_ZONE) TINYINT(com.facebook.presto.common.type.TinyintType.TINYINT) LocalDateTime(java.time.LocalDateTime) TIMESTAMP(com.facebook.presto.common.type.TimestampType.TIMESTAMP) PART(io.airlift.tpch.TpchTable.PART) DATE(com.facebook.presto.common.type.DateType.DATE) REAL(com.facebook.presto.common.type.RealType.REAL) ArrayList(java.util.ArrayList) SQLException(java.sql.SQLException) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) BOOLEAN(com.facebook.presto.common.type.BooleanType.BOOLEAN) ArrayType(com.facebook.presto.common.type.ArrayType) CharType(com.facebook.presto.common.type.CharType) Type(com.facebook.presto.common.type.Type) TypeWithName(com.facebook.presto.common.type.TypeWithName) RowMapper(org.jdbi.v3.core.mapper.RowMapper) ConnectorTableMetadata(com.facebook.presto.spi.ConnectorTableMetadata) Jdbi(org.jdbi.v3.core.Jdbi) BIGINT(com.facebook.presto.common.type.BigintType.BIGINT) Language(org.intellij.lang.annotations.Language) Session(com.facebook.presto.Session) VARBINARY(com.facebook.presto.common.type.VarbinaryType.VARBINARY) RecordSet(com.facebook.presto.spi.RecordSet) Date(java.sql.Date) TimeUnit(java.util.concurrent.TimeUnit) MaterializedResult(com.facebook.presto.testing.MaterializedResult) SMALLINT(com.facebook.presto.common.type.SmallintType.SMALLINT) MaterializedRow(com.facebook.presto.testing.MaterializedRow) SqlParser(org.jdbi.v3.core.statement.SqlParser) RowType(com.facebook.presto.common.type.RowType) ColumnMetadata(com.facebook.presto.spi.ColumnMetadata) Varchars.isVarcharType(com.facebook.presto.common.type.Varchars.isVarcharType) VarcharType(com.facebook.presto.common.type.VarcharType) TimestampType(com.facebook.presto.common.type.TimestampType) DecimalType(com.facebook.presto.common.type.DecimalType) Chars.isCharType(com.facebook.presto.common.type.Chars.isCharType) ArrayType(com.facebook.presto.common.type.ArrayType) CharType(com.facebook.presto.common.type.CharType) Type(com.facebook.presto.common.type.Type) RowType(com.facebook.presto.common.type.RowType) RecordCursor(com.facebook.presto.spi.RecordCursor) Varchars.isVarcharType(com.facebook.presto.common.type.Varchars.isVarcharType) VarcharType(com.facebook.presto.common.type.VarcharType) PreparedBatch(org.jdbi.v3.core.statement.PreparedBatch) LocalDate(java.time.LocalDate) Date(java.sql.Date)

Example 25 with RecordSet

use of com.facebook.presto.spi.RecordSet in project presto by prestodb.

the class TpchConnectorIndex method lookup.

@Override
public ConnectorPageSource lookup(RecordSet rawInputRecordSet) {
    // convert the input record set from the column ordering in the query to
    // match the column ordering of the index
    RecordSet inputRecordSet = keyFormatter.apply(rawInputRecordSet);
    // lookup the values in the index
    RecordSet rawOutputRecordSet = indexedTable.lookupKeys(inputRecordSet);
    // expect by the query
    return new RecordPageSource(outputFormatter.apply(rawOutputRecordSet));
}
Also used : RecordSet(com.facebook.presto.spi.RecordSet) RecordPageSource(com.facebook.presto.spi.RecordPageSource)

Aggregations

RecordSet (com.facebook.presto.spi.RecordSet)25 Test (org.testng.annotations.Test)14 RecordCursor (com.facebook.presto.spi.RecordCursor)11 LinkedHashMap (java.util.LinkedHashMap)8 Type (com.facebook.presto.common.type.Type)6 ConnectorTransactionHandle (com.facebook.presto.spi.connector.ConnectorTransactionHandle)5 ColumnHandle (com.facebook.presto.spi.ColumnHandle)4 ImmutableList (com.google.common.collect.ImmutableList)4 List (java.util.List)4 Map (java.util.Map)4 Objects.requireNonNull (java.util.Objects.requireNonNull)4 ConnectorSession (com.facebook.presto.spi.ConnectorSession)3 SchemaTableName (com.facebook.presto.spi.SchemaTableName)3 MappedRecordSet (com.facebook.presto.split.MappedRecordSet)3 ImmutableMap (com.google.common.collect.ImmutableMap)3 ImmutableSet.toImmutableSet (com.google.common.collect.ImmutableSet.toImmutableSet)3 ArrayList (java.util.ArrayList)3 Optional (java.util.Optional)3 PageBuilder (com.facebook.presto.common.PageBuilder)2 Block (com.facebook.presto.common.block.Block)2