org.apache.drill.exec.util.Utilities.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.drill.exec.util.Utilities.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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 org.apache.drill.exec.util;

import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.rex.RexLiteral;
import org.apache.drill.common.expression.PathSegment;
import org.apache.drill.common.expression.SchemaPath;
import org.apache.drill.exec.expr.fn.impl.DateUtility;
import org.apache.drill.exec.ops.FragmentContext;
import org.apache.drill.exec.planner.logical.DrillTable;
import org.apache.drill.exec.planner.logical.DrillTranslatableTable;
import org.apache.drill.exec.proto.BitControl.QueryContextInformation;
import org.apache.drill.exec.proto.ExecProtos;
import org.apache.drill.exec.proto.helper.QueryIdHelper;

import java.util.Collection;

public class Utilities {

    public static final String COL_NULL_ERROR = "Columns cannot be null. Use star column to select all fields.";

    public static String getFileNameForQueryFragment(FragmentContext context, String location, String tag) {
        /*
        * From the context, get the query id, major fragment id, minor fragment id. This will be used as the file name to
        * which we will dump the incoming buffer data
        */
        ExecProtos.FragmentHandle handle = context.getHandle();

        String qid = QueryIdHelper.getQueryId(handle.getQueryId());

        int majorFragmentId = handle.getMajorFragmentId();
        int minorFragmentId = handle.getMinorFragmentId();

        String fileName = String.format("%s//%s_%s_%s_%s", location, qid, majorFragmentId, minorFragmentId, tag);

        return fileName;
    }

    /**
     * Create QueryContextInformation with given <i>defaultSchemaName</i>. Rest of the members of the
     * QueryContextInformation is derived from the current state of the process.
     *
     * @param defaultSchemaName
     * @return
     */
    public static QueryContextInformation createQueryContextInfo(final String defaultSchemaName,
            final String sessionId) {
        final long queryStartTime = System.currentTimeMillis();
        final int timeZone = DateUtility.getIndex(System.getProperty("user.timezone"));
        return QueryContextInformation.newBuilder().setDefaultSchemaName(defaultSchemaName)
                .setQueryStartTime(queryStartTime).setTimeZone(timeZone).setSessionId(sessionId).build();
    }

    /**
     * Read the manifest file and get the Drill version number
     * @return
     */
    public static String getDrillVersion() {
        String v = Utilities.class.getPackage().getImplementationVersion();
        return v;
    }

    /**
     * Return true if list of schema path has star column.
     * @param projected
     * @return
     */
    public static boolean isStarQuery(Collection<SchemaPath> projected) {
        return Iterables
                .tryFind(Preconditions.checkNotNull(projected, COL_NULL_ERROR), new Predicate<SchemaPath>() {
                    @Override
                    public boolean apply(SchemaPath path) {
                        return Preconditions.checkNotNull(path).equals(SchemaPath.STAR_COLUMN);
                    }
                }).isPresent();
    }

    /**
     * Gets {@link DrillTable}, either wrapped in RelOptTable, or DrillTranslatableTable.
     *
     * @param table table instance
     * @return Drill table
     */
    public static DrillTable getDrillTable(RelOptTable table) {
        DrillTable drillTable = table.unwrap(DrillTable.class);
        if (drillTable == null) {
            drillTable = table.unwrap(DrillTranslatableTable.class).getDrillTable();
        }
        return drillTable;
    }

    /**
     * Converts literal into path segment based on its type.
     * For unsupported types, returns null.
     *
     * @param literal literal
     * @return new path segment, null otherwise
     */
    public static PathSegment convertLiteral(RexLiteral literal) {
        switch (literal.getType().getSqlTypeName()) {
        case CHAR:
            return new PathSegment.NameSegment(RexLiteral.stringValue(literal));
        case INTEGER:
            return new PathSegment.ArraySegment(RexLiteral.intValue(literal));
        default:
            return null;
        }
    }
}