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

com.querydsl.core.QueryFlag Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2015, The Querydsl Team (http://www.querydsl.com/team)
 *
 * 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.querydsl.core;

import com.querydsl.core.types.Expression;
import com.querydsl.core.types.ExpressionUtils;
import java.io.Serializable;
import java.util.Objects;

/**
 * Defines a positioned flag in a Query for customization of query serialization
 *
 * @author tiwe
 */
public class QueryFlag implements Serializable {

  private static final long serialVersionUID = -7131081607441961628L;

  /** The different {@code QueryFlag} positions */
  public enum Position {

    /** WITH part (used in SQL) */
    WITH,

    /** Start of the query */
    START,

    /** Override for the first element (e.g SELECT, INSERT) */
    START_OVERRIDE,

    /** After the first element (after select) */
    AFTER_SELECT,

    /** After the projection (after select ...) */
    AFTER_PROJECTION,

    /** Before the filter conditions (where) */
    BEFORE_FILTERS,

    /** After the filter conditions (where) */
    AFTER_FILTERS,

    /** Before group by */
    BEFORE_GROUP_BY,

    /** After group by */
    AFTER_GROUP_BY,

    /** Before having */
    BEFORE_HAVING,

    /** After having */
    AFTER_HAVING,

    /** Before order (by) */
    BEFORE_ORDER,

    /** After order (by) */
    AFTER_ORDER,

    /** After all other tokens */
    END
  }

  private final Position position;

  private final Expression flag;

  public QueryFlag(Position position, String flag) {
    this(position, ExpressionUtils.template(Object.class, flag));
  }

  public QueryFlag(Position position, Expression flag) {
    this.position = position;
    this.flag = flag;
  }

  public Position getPosition() {
    return position;
  }

  public Expression getFlag() {
    return flag;
  }

  @Override
  public int hashCode() {
    return Objects.hash(position, flag);
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == this) {
      return true;
    } else if (obj instanceof QueryFlag) {
      var other = (QueryFlag) obj;
      return other.position.equals(position) && other.flag.equals(flag);
    } else {
      return false;
    }
  }

  @Override
  public String toString() {
    return position + " : " + flag;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy