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.avatica.remote;
  
  import org.apache.calcite.avatica.proto.Common;
  
  import java.sql.DatabaseMetaData;
  import java.sql.ResultSet;
  
  /**
   * Identifies an operation from {@link DatabaseMetaData} which returns a {@link ResultSet}. This
   * enum is used to allow clients to request the server to re-instantiate a {@link ResultSet} for
   * these operations which do not have a SQL string associated with them as a normal query does.
   */
  public enum MetaDataOperation {
    GET_ATTRIBUTES,
    GET_BEST_ROW_IDENTIFIER,
    GET_CATALOGS,
    GET_CLIENT_INFO_PROPERTIES,
    GET_COLUMN_PRIVILEGES,
    GET_COLUMNS,
    GET_CROSS_REFERENCE,
    GET_EXPORTED_KEYS,
    GET_FUNCTION_COLUMNS,
    GET_FUNCTIONS,
    GET_IMPORTED_KEYS,
    GET_INDEX_INFO,
    GET_PRIMARY_KEYS,
    GET_PROCEDURE_COLUMNS,
    GET_PROCEDURES,
    GET_PSEUDO_COLUMNS,
    GET_SCHEMAS,
    GET_SCHEMAS_WITH_ARGS,
    GET_SUPER_TABLES,
    GET_SUPER_TYPES,
    GET_TABLE_PRIVILEGES,
    GET_TABLES,
    GET_TABLE_TYPES,
    GET_TYPE_INFO,
    GET_UDTS,
    GET_VERSION_COLUMNS;
  
    public Common.MetaDataOperation toProto() {
      switch (this) {
      case GET_ATTRIBUTES:
        return Common.MetaDataOperation.GET_ATTRIBUTES;
      case GET_BEST_ROW_IDENTIFIER:
        return Common.MetaDataOperation.GET_BEST_ROW_IDENTIFIER;
      case GET_CATALOGS:
        return Common.MetaDataOperation.GET_CATALOGS;
      case GET_CLIENT_INFO_PROPERTIES:
        return Common.MetaDataOperation.GET_CLIENT_INFO_PROPERTIES;
      case GET_COLUMNS:
        return Common.MetaDataOperation.GET_COLUMNS;
      case GET_COLUMN_PRIVILEGES:
        return Common.MetaDataOperation.GET_COLUMN_PRIVILEGES;
      case GET_CROSS_REFERENCE:
        return Common.MetaDataOperation.GET_CROSS_REFERENCE;
      case GET_EXPORTED_KEYS:
        return Common.MetaDataOperation.GET_EXPORTED_KEYS;
      case GET_FUNCTIONS:
        return Common.MetaDataOperation.GET_FUNCTIONS;
      case GET_FUNCTION_COLUMNS:
        return Common.MetaDataOperation.GET_FUNCTION_COLUMNS;
      case GET_IMPORTED_KEYS:
        return Common.MetaDataOperation.GET_IMPORTED_KEYS;
      case GET_INDEX_INFO:
        return Common.MetaDataOperation.GET_INDEX_INFO;
      case GET_PRIMARY_KEYS:
        return Common.MetaDataOperation.GET_PRIMARY_KEYS;
      case GET_PROCEDURES:
        return Common.MetaDataOperation.GET_PROCEDURES;
      case GET_PROCEDURE_COLUMNS:
        return Common.MetaDataOperation.GET_PROCEDURE_COLUMNS;
      case GET_PSEUDO_COLUMNS:
        return Common.MetaDataOperation.GET_PSEUDO_COLUMNS;
      case GET_SCHEMAS:
        return Common.MetaDataOperation.GET_SCHEMAS;
      case GET_SCHEMAS_WITH_ARGS:
        return Common.MetaDataOperation.GET_SCHEMAS_WITH_ARGS;
      case GET_SUPER_TABLES:
        return Common.MetaDataOperation.GET_SUPER_TABLES;
      case GET_SUPER_TYPES:
        return Common.MetaDataOperation.GET_SUPER_TYPES;
      case GET_TABLES:
        return Common.MetaDataOperation.GET_TABLES;
      case GET_TABLE_PRIVILEGES:
        return Common.MetaDataOperation.GET_TABLE_PRIVILEGES;
      case GET_TABLE_TYPES:
        return Common.MetaDataOperation.GET_TABLE_TYPES;
      case GET_TYPE_INFO:
        return Common.MetaDataOperation.GET_TYPE_INFO;
      case GET_UDTS:
        return Common.MetaDataOperation.GET_UDTS;
      case GET_VERSION_COLUMNS:
        return Common.MetaDataOperation.GET_VERSION_COLUMNS;
      default:
        throw new RuntimeException("Unknown type: " + this);
      }
    }
  
    public static MetaDataOperation fromProto(Common.MetaDataOperation protoOp) {
      // Null is acceptable
      if (null == protoOp) {
        return null;
      }
  
      switch (protoOp) {
      case GET_ATTRIBUTES:
        return MetaDataOperation.GET_ATTRIBUTES;
      case GET_BEST_ROW_IDENTIFIER:
        return MetaDataOperation.GET_BEST_ROW_IDENTIFIER;
      case GET_CATALOGS:
        return MetaDataOperation.GET_CATALOGS;
      case GET_CLIENT_INFO_PROPERTIES:
        return MetaDataOperation.GET_CLIENT_INFO_PROPERTIES;
      case GET_COLUMNS:
        return MetaDataOperation.GET_COLUMNS;
      case GET_COLUMN_PRIVILEGES:
        return MetaDataOperation.GET_COLUMN_PRIVILEGES;
      case GET_CROSS_REFERENCE:
        return MetaDataOperation.GET_CROSS_REFERENCE;
      case GET_EXPORTED_KEYS:
        return MetaDataOperation.GET_EXPORTED_KEYS;
      case GET_FUNCTIONS:
        return MetaDataOperation.GET_FUNCTIONS;
      case GET_FUNCTION_COLUMNS:
        return MetaDataOperation.GET_FUNCTION_COLUMNS;
      case GET_IMPORTED_KEYS:
        return MetaDataOperation.GET_IMPORTED_KEYS;
      case GET_INDEX_INFO:
        return MetaDataOperation.GET_INDEX_INFO;
      case GET_PRIMARY_KEYS:
        return MetaDataOperation.GET_PRIMARY_KEYS;
      case GET_PROCEDURES:
        return MetaDataOperation.GET_PROCEDURES;
      case GET_PROCEDURE_COLUMNS:
        return MetaDataOperation.GET_PROCEDURE_COLUMNS;
      case GET_PSEUDO_COLUMNS:
        return MetaDataOperation.GET_PSEUDO_COLUMNS;
      case GET_SCHEMAS:
        return MetaDataOperation.GET_SCHEMAS;
      case GET_SCHEMAS_WITH_ARGS:
        return MetaDataOperation.GET_SCHEMAS_WITH_ARGS;
      case GET_SUPER_TABLES:
        return MetaDataOperation.GET_SUPER_TABLES;
      case GET_SUPER_TYPES:
        return MetaDataOperation.GET_SUPER_TYPES;
      case GET_TABLES:
        return MetaDataOperation.GET_TABLES;
      case GET_TABLE_PRIVILEGES:
        return MetaDataOperation.GET_TABLE_PRIVILEGES;
      case GET_TABLE_TYPES:
        return MetaDataOperation.GET_TABLE_TYPES;
      case GET_TYPE_INFO:
        return MetaDataOperation.GET_TYPE_INFO;
      case GET_UDTS:
        return MetaDataOperation.GET_UDTS;
      case GET_VERSION_COLUMNS:
        return MetaDataOperation.GET_VERSION_COLUMNS;
      default:
        throw new RuntimeException("Unknown type: " + protoOp);
      }
    }
  }
  
  // End MetaDataOperation.java
  