com.speedment.runtime.core.component.sql.Metrics Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tool-deploy Show documentation
Show all versions of tool-deploy Show documentation
A Speedment bundle that shades all dependencies into one jar. This is
useful when deploying an application on a server.
The newest version!
/*
*
* Copyright (c) 2006-2019, Speedment, Inc. All Rights Reserved.
*
* Licensed 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 com.speedment.runtime.core.component.sql;
import com.speedment.runtime.core.internal.component.sql.MetricsImpl;
import java.util.Set;
/**
*
*/
public interface Metrics {
/**
* Returns the number of pipeline reductions an optimizer was able to do. If
* an optimizer cannot optimize the pipeline at all, then {@code 0} should
* be returned.
*
* @return The number of pipeline reductions an optimizer was able to do
*/
int getPipelineReductions();
/**
* Returns the number of while predicate expressions in the SQL query.
*
* @return the number of while predicate expressions in the SQL query
*/
int getSqlWhileCount();
/**
* Returns the number of order by columns in the SQL query.
*
* @return the number of order by columns in the SQL query
*/
int getSqlOrderCount();
/**
* Returns the number of skip statements (0 or 1) in the SQL query.
*
* @return the number of skip statements (0 or 1) in the SQL query
*/
int getSqlSkipCount();
/**
* Returns the number of limit statements (0 or 1) in the SQL query.
*
* @return the number of limit statements (0 or 1) in the SQL query
*/
int getSqlLimitCount();
/**
* Returns the sum of {@link #getSqlWhileCount() }, {@link #getSqlOrderCount() }
* , {@link #getSqlSkipCount() } and {@link #getSqlLimitCount() }.
*
*
* @return the sum of {@link #getSqlWhileCount() }, {@link #getSqlOrderCount() }
* , {@link #getSqlSkipCount() } and {@link #getSqlLimitCount() }
*/
default int getSqlCount() {
return getSqlWhileCount() + getSqlOrderCount() + getSqlSkipCount() + getSqlLimitCount();
}
/**
* Creates and returns a new Metrics.
*
* @param pipelineReductions number of pipeline reductions that were made
* @param sqlWhileCount the number of while predicates
* @param sqlOrderCount the number of columns to sort by
* @param sqlSkipCount the number of skip statements (0 or 1)
* @param sqlLimitCount the number of limit statements (0 or 1)
* @return a new Metrics
*/
static Metrics of(
final int pipelineReductions,
final int sqlWhileCount,
final int sqlOrderCount,
final int sqlSkipCount,
final int sqlLimitCount
) {
if (pipelineReductions == 0 && sqlWhileCount == 0 && sqlOrderCount == 0 && sqlSkipCount == 0 && sqlLimitCount == 0) {
return empty();
}
return new MetricsImpl(pipelineReductions, sqlWhileCount, sqlOrderCount, sqlSkipCount, sqlLimitCount);
}
/**
* Returns an empty metrics. This can be used by optimizers that are unable
* to optimize the current stream.
*
* @return Returns an empty metrics
*/
static Metrics empty() {
return MetricsImpl.EMPTY_INSTANCE;
}
}