All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.xpack.esql.optimizer.rules.ConvertStringToByteRef Maven / Gradle / Ivy

There is a newer version: 8.16.1
Show newest version
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0; you may not use this file except in compliance with the Elastic License
 * 2.0.
 */

package org.elasticsearch.xpack.esql.optimizer.rules;

import org.apache.lucene.util.BytesRef;
import org.elasticsearch.xpack.esql.core.expression.Expression;
import org.elasticsearch.xpack.esql.core.expression.Literal;
import org.elasticsearch.xpack.esql.core.optimizer.OptimizerRules;

import java.util.ArrayList;
import java.util.List;

public final class ConvertStringToByteRef extends OptimizerRules.OptimizerExpressionRule {

    public ConvertStringToByteRef() {
        super(OptimizerRules.TransformDirection.UP);
    }

    @Override
    protected Expression rule(Literal lit) {
        Object value = lit.value();

        if (value == null) {
            return lit;
        }
        if (value instanceof String s) {
            return Literal.of(lit, new BytesRef(s));
        }
        if (value instanceof List l) {
            if (l.isEmpty() || false == l.get(0) instanceof String) {
                return lit;
            }
            List byteRefs = new ArrayList<>(l.size());
            for (Object v : l) {
                byteRefs.add(new BytesRef(v.toString()));
            }
            return Literal.of(lit, byteRefs);
        }
        return lit;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy