Search in sources :

Example 1 with Tuple3

use of org.jooq.lambda.tuple.Tuple3 in project torodb by torodb.

the class SqlWriteTorodTransaction method createIndex.

@Override
public boolean createIndex(String dbName, String colName, String indexName, List<IndexFieldInfo> fields, boolean unique) throws UserException {
    if (fields.size() > 1) {
        throw new UnsupportedCompoundIndexException(dbName, colName, indexName);
    }
    MutableMetaDatabase metaDb = getOrCreateMetaDatabase(dbName);
    MutableMetaCollection metaColl = getOrCreateMetaCollection(metaDb, colName);
    List<Tuple3<TableRef, String, FieldIndexOrdering>> indexFieldDefs = new ArrayList<>(fields.size());
    for (IndexFieldInfo field : fields) {
        AttributeReference attRef = field.getAttributeReference();
        FieldIndexOrdering ordering = field.isAscending() ? FieldIndexOrdering.ASC : FieldIndexOrdering.DESC;
        TableRef tableRef = extractTableRef(attRef);
        String lastKey = extractKeyName(attRef.getKeys().get(attRef.getKeys().size() - 1));
        indexFieldDefs.add(new Tuple3<>(tableRef, lastKey, ordering));
    }
    if (unique) {
        TableRef anyIndexTableRef = indexFieldDefs.stream().findAny().get().v1();
        boolean isUniqueIndexWithMutlipleTableRefs = indexFieldDefs.stream().anyMatch(t -> !t.v1().equals(anyIndexTableRef));
        if (isUniqueIndexWithMutlipleTableRefs) {
            throw new UnsupportedUniqueIndexException(dbName, colName, indexName);
        }
    }
    boolean indexExists = metaColl.streamContainedMetaIndexes().anyMatch(index -> index.getName().equals(indexName) || (index.isUnique() == unique && index.size() == indexFieldDefs.size() && Seq.seq(index.iteratorFields()).allMatch(indexField -> {
        Tuple3<TableRef, String, FieldIndexOrdering> indexFieldDef = indexFieldDefs.get(indexField.getPosition());
        return indexFieldDef != null && indexFieldDef.v1().equals(indexField.getTableRef()) && indexFieldDef.v2().equals(indexField.getName()) && indexFieldDef.v3() == indexField.getOrdering();
    })));
    if (!indexExists) {
        MutableMetaIndex metaIndex = metaColl.addMetaIndex(indexName, unique);
        for (Tuple3<TableRef, String, FieldIndexOrdering> indexFieldDef : indexFieldDefs) {
            metaIndex.addMetaIndexField(indexFieldDef.v1(), indexFieldDef.v2(), indexFieldDef.v3());
        }
        getInternalTransaction().getBackendTransaction().createIndex(metaDb, metaColl, metaIndex);
    }
    return !indexExists;
}
Also used : MutableMetaCollection(com.torodb.core.transaction.metainf.MutableMetaCollection) AttributeReference(com.torodb.core.language.AttributeReference) ArrayList(java.util.ArrayList) UnsupportedUniqueIndexException(com.torodb.core.exceptions.user.UnsupportedUniqueIndexException) MutableMetaDatabase(com.torodb.core.transaction.metainf.MutableMetaDatabase) UnsupportedCompoundIndexException(com.torodb.core.exceptions.user.UnsupportedCompoundIndexException) Tuple3(org.jooq.lambda.tuple.Tuple3) MutableMetaIndex(com.torodb.core.transaction.metainf.MutableMetaIndex) IndexFieldInfo(com.torodb.torod.IndexFieldInfo) FieldIndexOrdering(com.torodb.core.transaction.metainf.FieldIndexOrdering) TableRef(com.torodb.core.TableRef)

Example 2 with Tuple3

use of org.jooq.lambda.tuple.Tuple3 in project SimpleFlatMapper by arnaudroger.

the class JoolTupleTest method testCsvParser.

@Test
public void testCsvParser() throws IOException {
    final CsvParser.StaticMapToDSL<Tuple3<Long, Integer, Short>> mapToDSL = CsvParser.mapTo(new TypeReference<Tuple3<Long, Integer, Short>>() {
    }).defaultHeaders();
    final Iterator<Tuple3<Long, Integer, Short>> iterator = mapToDSL.iterator(new StringReader("6,7,3\n7,8,9"));
    final Tuple3<Long, Integer, Short> tuple1 = iterator.next();
    assertEquals(6l, tuple1.v1().longValue());
    assertEquals(7, tuple1.v2().intValue());
    assertEquals((short) 3, tuple1.v3().shortValue());
    final Tuple3<Long, Integer, Short> tuple2 = iterator.next();
    assertEquals(7l, tuple2.v1().longValue());
    assertEquals(8, tuple2.v2().intValue());
    assertEquals((short) 9, tuple2.v3().shortValue());
}
Also used : Tuple3(org.jooq.lambda.tuple.Tuple3) StringReader(java.io.StringReader) CsvParser(org.simpleflatmapper.csv.CsvParser) TypeReference(org.simpleflatmapper.util.TypeReference) Test(org.junit.Test)

Example 3 with Tuple3

use of org.jooq.lambda.tuple.Tuple3 in project SimpleFlatMapper by arnaudroger.

the class JoolTupleTest method testMetaDataOnJoolTuple.

@Test
public void testMetaDataOnJoolTuple() throws Exception {
    // creates a new tuple allocated on the JVM heap
    System.out.println("super " + Tuple3.class.toString());
    for (Class<?> clazz : Tuple3.class.getInterfaces()) {
        System.out.println("I " + clazz.toString());
    }
    ClassMeta<Tuple3<Long, Integer, Short>> cm = ReflectionService.newInstance().getClassMeta(new TypeReference<Tuple3<Long, Integer, Short>>() {
    }.getType());
    final PropertyFinder<Tuple3<Long, Integer, Short>> propertyFinder = cm.newPropertyFinder(isValidPropertyMeta);
    final PropertyMeta<Tuple3<Long, Integer, Short>, Long> fieldA = propertyFinder.findProperty(new DefaultPropertyNameMatcher("elt0", 0, true, true), new Object[0]);
    final PropertyMeta<Tuple3<Long, Integer, Short>, Integer> fieldB = propertyFinder.findProperty(new DefaultPropertyNameMatcher("elt1", 0, true, true), new Object[0]);
    final PropertyMeta<Tuple3<Long, Integer, Short>, Short> fieldC = propertyFinder.findProperty(new DefaultPropertyNameMatcher("elt2", 0, true, true), new Object[0]);
    final PropertyMeta<Tuple3<Long, Integer, Short>, ?> fieldD = propertyFinder.findProperty(new DefaultPropertyNameMatcher("elt3", 0, true, true), new Object[0]);
    assertNotNull(fieldA);
    assertNotNull(fieldB);
    assertNotNull(fieldC);
    assertNull(fieldD);
    Tuple3<Long, Integer, Short> tuple = new Tuple3<Long, Integer, Short>(6l, 7, (short) 3);
    assertTrue(fieldA instanceof ConstructorPropertyMeta);
    assertTrue(fieldB instanceof ConstructorPropertyMeta);
    assertTrue(fieldC instanceof ConstructorPropertyMeta);
    Assert.assertEquals(6l, fieldA.getGetter().get(tuple).longValue());
    Assert.assertEquals(7, fieldB.getGetter().get(tuple).intValue());
    Assert.assertEquals(3, fieldC.getGetter().get(tuple).shortValue());
}
Also used : DefaultPropertyNameMatcher(org.simpleflatmapper.reflect.meta.DefaultPropertyNameMatcher) Tuple3(org.jooq.lambda.tuple.Tuple3) TypeReference(org.simpleflatmapper.util.TypeReference) ConstructorPropertyMeta(org.simpleflatmapper.reflect.meta.ConstructorPropertyMeta) Test(org.junit.Test)

Example 4 with Tuple3

use of org.jooq.lambda.tuple.Tuple3 in project georocket by georocket.

the class IndexerVerticle method insertDocuments.

/**
 * Insert multiple Elasticsearch documents into the index. Perform a
 * bulk request. This method replies to all messages if the bulk request
 * was successful.
 * @param type Elasticsearch type for documents
 * @param documents a list of tuples containing document IDs, documents to
 * index, and the respective messages from which the documents were created
 * @return an observable that completes when the operation has finished
 */
private Observable<Void> insertDocuments(String type, List<Tuple3<String, JsonObject, Message<JsonObject>>> documents) {
    long startTimeStamp = System.currentTimeMillis();
    List<String> chunkPaths = Seq.seq(documents).map(Tuple3::v1).toList();
    onIndexingStarted(startTimeStamp, chunkPaths);
    List<Tuple2<String, JsonObject>> docsToInsert = Seq.seq(documents).map(Tuple3::limit2).toList();
    List<Message<JsonObject>> messages = Seq.seq(documents).map(Tuple3::v3).toList();
    return client.bulkInsert(type, docsToInsert).flatMap(bres -> {
        JsonArray items = bres.getJsonArray("items");
        for (int i = 0; i < items.size(); ++i) {
            JsonObject jo = items.getJsonObject(i);
            JsonObject item = jo.getJsonObject("index");
            Message<JsonObject> msg = messages.get(i);
            if (client.bulkResponseItemHasErrors(item)) {
                msg.fail(500, client.bulkResponseItemGetErrorMessage(item));
            } else {
                msg.reply(null);
            }
        }
        long stopTimeStamp = System.currentTimeMillis();
        List<String> correlationIds = Seq.seq(messages).map(Message::body).map(d -> d.getString("correlationId")).toList();
        onIndexingFinished(stopTimeStamp - startTimeStamp, correlationIds, chunkPaths, client.bulkResponseGetErrorMessage(bres));
        return Observable.empty();
    });
}
Also used : JsonArray(io.vertx.core.json.JsonArray) MetaIndexer(io.georocket.index.xml.MetaIndexer) GeoJsonChunkMeta(io.georocket.storage.GeoJsonChunkMeta) IndexMeta(io.georocket.storage.IndexMeta) StreamEvent(io.georocket.util.StreamEvent) XMLChunkMeta(io.georocket.storage.XMLChunkMeta) XMLParserOperator(io.georocket.util.XMLParserOperator) ChunkMeta(io.georocket.storage.ChunkMeta) RxStore(io.georocket.storage.RxStore) Tuple2(org.jooq.lambda.tuple.Tuple2) Tuple3(org.jooq.lambda.tuple.Tuple3) JsonParserOperator(io.georocket.util.JsonParserOperator) Map(java.util.Map) JsonObject(io.vertx.core.json.JsonObject) Logger(io.vertx.core.logging.Logger) MetaIndexerFactory(io.georocket.index.xml.MetaIndexerFactory) Message(io.vertx.rxjava.core.eventbus.Message) ServiceLoader(java.util.ServiceLoader) Collectors(java.util.stream.Collectors) Future(io.vertx.core.Future) List(java.util.List) ElasticsearchClientFactory(io.georocket.index.elasticsearch.ElasticsearchClientFactory) Stream(java.util.stream.Stream) Tuple(org.jooq.lambda.tuple.Tuple) MapUtils(io.georocket.util.MapUtils) Buffer(io.vertx.core.buffer.Buffer) MimeTypeUtils.belongsTo(io.georocket.util.MimeTypeUtils.belongsTo) RxHelper(io.vertx.rx.java.RxHelper) AddressConstants(io.georocket.constants.AddressConstants) ChunkReadStream(io.georocket.storage.ChunkReadStream) Operator(rx.Observable.Operator) HashMap(java.util.HashMap) Seq(org.jooq.lambda.Seq) DefaultQueryCompiler(io.georocket.query.DefaultQueryCompiler) LoggerFactory(io.vertx.core.logging.LoggerFactory) ArrayList(java.util.ArrayList) AbstractVerticle(io.vertx.rxjava.core.AbstractVerticle) Observable(rx.Observable) Func1(rx.functions.Func1) ImmutableList(com.google.common.collect.ImmutableList) XMLIndexerFactory(io.georocket.index.xml.XMLIndexerFactory) StoreFactory(io.georocket.storage.StoreFactory) JsonIndexerFactory(io.georocket.index.xml.JsonIndexerFactory) NoStackTraceThrowable(io.vertx.core.impl.NoStackTraceThrowable) ThrowableHelper.throwableToMessage(io.georocket.util.ThrowableHelper.throwableToMessage) StreamIndexer(io.georocket.index.xml.StreamIndexer) TimeUnit(java.util.concurrent.TimeUnit) JsonArray(io.vertx.core.json.JsonArray) ThrowableHelper.throwableToCode(io.georocket.util.ThrowableHelper.throwableToCode) ElasticsearchClient(io.georocket.index.elasticsearch.ElasticsearchClient) RxUtils(io.georocket.util.RxUtils) DefaultMetaIndexerFactory(io.georocket.index.generic.DefaultMetaIndexerFactory) ConfigConstants(io.georocket.constants.ConfigConstants) JsonChunkMeta(io.georocket.storage.JsonChunkMeta) Message(io.vertx.rxjava.core.eventbus.Message) ThrowableHelper.throwableToMessage(io.georocket.util.ThrowableHelper.throwableToMessage) Tuple2(org.jooq.lambda.tuple.Tuple2) JsonObject(io.vertx.core.json.JsonObject)

Aggregations

Tuple3 (org.jooq.lambda.tuple.Tuple3)3 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 TypeReference (org.simpleflatmapper.util.TypeReference)2 ImmutableList (com.google.common.collect.ImmutableList)1 TableRef (com.torodb.core.TableRef)1 UnsupportedCompoundIndexException (com.torodb.core.exceptions.user.UnsupportedCompoundIndexException)1 UnsupportedUniqueIndexException (com.torodb.core.exceptions.user.UnsupportedUniqueIndexException)1 AttributeReference (com.torodb.core.language.AttributeReference)1 FieldIndexOrdering (com.torodb.core.transaction.metainf.FieldIndexOrdering)1 MutableMetaCollection (com.torodb.core.transaction.metainf.MutableMetaCollection)1 MutableMetaDatabase (com.torodb.core.transaction.metainf.MutableMetaDatabase)1 MutableMetaIndex (com.torodb.core.transaction.metainf.MutableMetaIndex)1 IndexFieldInfo (com.torodb.torod.IndexFieldInfo)1 AddressConstants (io.georocket.constants.AddressConstants)1 ConfigConstants (io.georocket.constants.ConfigConstants)1 ElasticsearchClient (io.georocket.index.elasticsearch.ElasticsearchClient)1 ElasticsearchClientFactory (io.georocket.index.elasticsearch.ElasticsearchClientFactory)1 DefaultMetaIndexerFactory (io.georocket.index.generic.DefaultMetaIndexerFactory)1 JsonIndexerFactory (io.georocket.index.xml.JsonIndexerFactory)1