content: /*
   * 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.calcite.sql.babel.postgres;
  
  import org.apache.calcite.sql.Symbolizable;
  
  /**
   * Contains enums convertible to {@link org.apache.calcite.sql.SqlLiteral}, used for
   * {@link org.apache.calcite.sql.SqlSetOption#name} and
   * {@link org.apache.calcite.sql.SqlSetOption#value} fields.
   */
  public class SqlSetOptions {
    private SqlSetOptions() {
    }
  
    /**
     * {@link org.apache.calcite.sql.SqlIdentifier} can not be used
     * as a name parameter. For example, in PostgreSQL, these two SQL commands
     * have different meanings:
     * <ul>
     *   <li><code>RESET ALL</code> resets all settable run-time parameters to default values.</li>
     *   <li><code>RESET "ALL"</code> resets parameter "ALL".</li>
     * </ul>
     * Using only {@link org.apache.calcite.sql.SqlIdentifier} makes
     * it impossible to distinguish which case is being referred to.
     * This enum has been introduced to avoid this problem.
     */
    public enum Names implements Symbolizable {
      ALL,
      TRANSACTION,
      TRANSACTION_SNAPSHOT,
      SESSION_CHARACTERISTICS_AS_TRANSACTION,
      TIME_ZONE,
      ROLE;
  
      @Override public String toString() {
        return super.toString().replace("_", " ");
      }
    }
  
    /**
     * Makes possible to represent NONE, LOCAL as {@link org.apache.calcite.sql.SqlLiteral}.
     * It is needed for the following SQL statements:
     * <ul>
     *   <li><code>SET TIME ZONE LOCAL</code></li>
     *   <li><code>SET ROLE NONE</code></li>
     * </ul>
     *
     * @see <a href="https://www.postgresql.org/docs/current/sql-set.html">
     * PostgreSQL SET documentation</a>
     * @see <a href="https://www.postgresql.org/docs/current/sql-set-role.html">
     * PostgreSQL SET ROLE documentation</a>
     */
    public enum Values implements Symbolizable {
      NONE,
      LOCAL
    }
  }
  