/**
 * 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.storm.trident;

/**
 * This enum defines how the output fields of JOIN is constructed.
 *
 * <p>If user specifies COMPACT while calling JOIN, the tuples emitted from the join will contain: First, the list of
 * join fields. Please note that joining fields are exposed only once from emitted tuples. Next, a list of all non-join
 * fields from all streams, in order of how the streams were passed to the join method.
 *
 * <p>If user specifies PRESERVE while calling JOIN, the tuples emitted from the join will contain: a list of all fields
 * from all streams, in order of how the streams were passed to the join method.
 */
public enum JoinOutFieldsMode {
    COMPACT,
    PRESERVE
}
