io.druid.query.groupby.having.OrHavingSpec Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of druid-processing Show documentation
Show all versions of druid-processing Show documentation
A module that is everything required to understands Druid Segments
/*
* Licensed to Metamarkets Group Inc. (Metamarkets) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Metamarkets licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.druid.query.groupby.having;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
import io.druid.data.input.Row;
import java.nio.ByteBuffer;
import java.util.List;
/**
* The logical "or" operator for the "having" clause.
*/
public class OrHavingSpec implements HavingSpec
{
private static final byte CACHE_KEY = 0x7;
private List havingSpecs;
@JsonCreator
public OrHavingSpec(@JsonProperty("havingSpecs") List havingSpecs)
{
this.havingSpecs = havingSpecs == null ? ImmutableList.of() : havingSpecs;
}
@JsonProperty("havingSpecs")
public List getHavingSpecs()
{
return havingSpecs;
}
@Override
public boolean eval(Row row)
{
for (HavingSpec havingSpec : havingSpecs) {
if (havingSpec.eval(row)) {
return true;
}
}
return false;
}
@Override
public byte[] getCacheKey()
{
final byte[][] havingBytes = new byte[havingSpecs.size()][];
int havingBytesSize = 0;
int index = 0;
for (HavingSpec havingSpec : havingSpecs) {
havingBytes[index] = havingSpec.getCacheKey();
havingBytesSize += havingBytes[index].length;
++index;
}
ByteBuffer buffer = ByteBuffer.allocate(1 + havingBytesSize).put(CACHE_KEY);
for (byte[] havingByte : havingBytes) {
buffer.put(havingByte);
}
return buffer.array();
}
@Override
public boolean equals(Object o)
{
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
OrHavingSpec that = (OrHavingSpec) o;
if (havingSpecs != null ? !havingSpecs.equals(that.havingSpecs) : that.havingSpecs != null) {
return false;
}
return true;
}
@Override
public int hashCode()
{
return havingSpecs != null ? havingSpecs.hashCode() : 0;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append("OrHavingSpec");
sb.append("{havingSpecs=").append(havingSpecs);
sb.append('}');
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy