Skip to content

File method_struct_schema_info.cpp

File List > cubrid > src > method > method_struct_schema_info.cpp

Go to the documentation of this file

/*
 *
 * Copyright 2016 CUBRID Corporation
 *
 *  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.
 *
 */

#include "method_struct_schema_info.hpp"

#include "language_support.h"
// XXX: SHOULD BE THE LAST INCLUDE HEADER
#include "memory_wrapper.hpp"

namespace cubmethod
{
  schema_info_request::schema_info_request ()
  {
    //
  }

#define SCHEMA_INFO_REQUEST_PACKER_ARGS() \
  type, arg1, arg2, flag

  void
  schema_info_request::pack (cubpacking::packer &serializator) const
  {
    serializator.pack_all (SCHEMA_INFO_REQUEST_PACKER_ARGS());
  }

  void
  schema_info_request::unpack (cubpacking::unpacker &deserializator)
  {
    deserializator.unpack_all (SCHEMA_INFO_REQUEST_PACKER_ARGS ());
  }

  size_t
  schema_info_request::get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const
  {
    return serializator.get_all_packed_size_starting_offset (start_offset, SCHEMA_INFO_REQUEST_PACKER_ARGS ());
  }

  static std::vector<column_info> get_schema_table_meta ();
  static std::vector<column_info> get_schema_query_spec_meta ();
  static std::vector<column_info> get_schema_attr_meta ();
  static std::vector<column_info> get_schema_method_meta ();
  static std::vector<column_info> get_schema_methodfile_meta ();
  static std::vector<column_info> get_schema_superclasss_meta ();
  static std::vector<column_info> get_schema_constraint_meta ();
  static std::vector<column_info> get_schema_trigger_meta ();
  static std::vector<column_info> get_schema_classpriv_meta ();
  static std::vector<column_info> get_schema_attrpriv_meta ();
  static std::vector<column_info> get_schema_directsuper_meta ();
  static std::vector<column_info> get_schema_primarykey_meta ();
  static std::vector<column_info> get_schema_fk_info_meta ();

  void
  schema_info::set_schema_info (int schema_type)
  {
    switch (schema_type)
      {
      case SCH_CLASS:
      case SCH_VCLASS:
    column_infos = get_schema_table_meta ();
    break;
      case SCH_QUERY_SPEC:
    column_infos = get_schema_query_spec_meta ();
    break;
      case SCH_ATTRIBUTE:
      case SCH_CLASS_ATTRIBUTE:
    column_infos = get_schema_attr_meta ();
    break;
      case SCH_METHOD:
      case SCH_CLASS_METHOD:
    column_infos = get_schema_method_meta ();
    break;
      case SCH_METHOD_FILE:
    column_infos = get_schema_methodfile_meta ();
    break;
      case SCH_SUPERCLASS:
      case SCH_SUBCLASS:
    column_infos = get_schema_superclasss_meta ();
    break;
      case SCH_CONSTRAINT:
    column_infos = get_schema_constraint_meta ();
    break;
      case SCH_TRIGGER:
    column_infos = get_schema_trigger_meta ();
    break;
      case SCH_CLASS_PRIVILEGE:
    column_infos = get_schema_classpriv_meta ();
    break;
      case SCH_ATTR_PRIVILEGE:
    column_infos = get_schema_attrpriv_meta ();
    break;
      case SCH_DIRECT_SUPER_CLASS:
    column_infos = get_schema_directsuper_meta ();
    break;
      case SCH_PRIMARY_KEY:
    column_infos = get_schema_primarykey_meta ();
    break;
      case SCH_IMPORTED_KEYS:
      case SCH_EXPORTED_KEYS:
      case SCH_CROSS_REFERENCE:
    column_infos = get_schema_fk_info_meta ();
    break;
      default:
    /* should never happend */
    assert (false);
    break;
      }
  }

  void
  schema_info::pack (cubpacking::packer &serializator) const
  {
    // TODO: not implemented yet
    assert (false);
  }

  void
  schema_info::unpack (cubpacking::unpacker &deserializator)
  {
    // TODO: not implemented yet
    assert (false);
  }

  size_t
  schema_info::get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const
  {
    size_t size = 0;
    // TODO: not implemented yet
    assert (false);
    return size;
  }

  std::vector<column_info> get_schema_table_meta ()
  {
    column_info name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "NAME");
    column_info type (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "TYPE");
    column_info remarks (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_CLASS_COMMENT_LENGTH, lang_charset(), "REMARKS");
    return std::vector<column_info> {name, type, remarks};
  }

  std::vector<column_info> get_schema_query_spec_meta ()
  {
    column_info query_spec (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "QUERY_SPEC");
    return std::vector<column_info> {query_spec};
  }

  std::vector<column_info> get_schema_attr_meta ()
  {
    column_info attr_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ATTR_NAME");
    column_info domain (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "DOMAIN");
    column_info scale (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "SCALE");
    column_info precision (DB_TYPE_INTEGER, DB_TYPE_NULL, 0, 0, lang_charset(), "PRECISION");

    column_info indexed (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "INDEXED");
    column_info non_null (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "NON_NULL");
    column_info shared (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "SHARED");
    column_info unique (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "UNIQUE");

    column_info default_ (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "DEFAULT");
    column_info attr_order (DB_TYPE_INTEGER, DB_TYPE_NULL, 0, 0, lang_charset(), "ATTR_ORDER");

    column_info class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CLASS_NAME");
    column_info source_class (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "SOURCE_CLASS");
    column_info is_key (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "IS_KEY");
    column_info remarks (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_CLASS_COMMENT_LENGTH, lang_charset(), "REMARKS");
    return std::vector<column_info> {attr_name, domain, scale, precision, indexed, non_null, shared, unique, default_, attr_order, class_name, source_class, is_key, remarks};
  }

  std::vector<column_info> get_schema_method_meta ()
  {
    column_info name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "NAME");
    column_info ret_domain (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "RET_DOMAIN");
    column_info arg_domain (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ARG_DOMAIN");
    return std::vector<column_info> {name, ret_domain, arg_domain};
  }

  std::vector<column_info> get_schema_methodfile_meta ()
  {
    column_info met_file (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "METHOD_FILE");
    return std::vector<column_info> {met_file};
  }

  std::vector<column_info> get_schema_superclasss_meta ()
  {
    column_info class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CLASS_NAME");
    column_info type (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "TYPE");
    return std::vector<column_info> {class_name, type};
  }

  std::vector<column_info> get_schema_constraint_meta ()
  {
    column_info type (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "TYPE");
    column_info name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "NAME");
    column_info attr_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ATTR_NAME");
    column_info num_pages (DB_TYPE_INTEGER, DB_TYPE_NULL, 0, 0, lang_charset(), "NUM_PAGES");
    column_info num_keys (DB_TYPE_INTEGER, DB_TYPE_NULL, 0, 0, lang_charset(), "NUM_KEYS");
    column_info primary_key (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "PRIMARY_KEY");
    column_info key_order (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "KEY_ORDER");
    column_info asc_desc (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ASC_DESC");
    return std::vector<column_info> {type, name, attr_name, num_pages, num_keys, primary_key, key_order, asc_desc};
  }

  std::vector<column_info> get_schema_trigger_meta ()
  {
    column_info name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "NAME");
    column_info status (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "STATUS");
    column_info event (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "EVENT");
    column_info target_class (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "TARGET_CLASS");
    column_info target_attr (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "TARGET_ATTR");
    column_info action_time (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ACTION_TIME");
    column_info action (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ACTION");
    column_info priority (DB_TYPE_FLOAT, DB_TYPE_NULL, 0, 0, lang_charset(), "PRIORITY");
    column_info condition_time (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(),
                "CONDITION_TIME");
    column_info condition (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CONDITION");
    column_info remarks (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_CLASS_COMMENT_LENGTH, lang_charset(), "REMARKS");
    return std::vector<column_info> {name, status, event, target_class, target_attr, action_time, action, priority, condition_time, condition, remarks};

  }
  std::vector<column_info> get_schema_classpriv_meta ()
  {
    column_info class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CLASS_NAME");
    column_info privilege (DB_TYPE_STRING, DB_TYPE_NULL, 0, 10, lang_charset(), "PRIVILEGE");
    column_info grantable (DB_TYPE_STRING, DB_TYPE_NULL, 0, 5, lang_charset(), "GRANTABLE");
    return std::vector<column_info> {class_name, privilege, grantable};
  }

  std::vector<column_info> get_schema_attrpriv_meta ()
  {
    column_info attr_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ATTR_NAME");
    column_info privilege (DB_TYPE_STRING, DB_TYPE_NULL, 0, 10, lang_charset(), "PRIVILEGE");
    column_info grantable (DB_TYPE_STRING, DB_TYPE_NULL, 0, 5, lang_charset(), "GRANTABLE");
    return std::vector<column_info> {attr_name, privilege, grantable};
  }

  std::vector<column_info> get_schema_directsuper_meta ()
  {
    column_info class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CLASS_NAME");
    column_info super_class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(),
                  "SUPER_CLASS_NAME");
    return std::vector<column_info> {class_name, super_class_name};
  }

  std::vector<column_info> get_schema_primarykey_meta ()
  {
    column_info class_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "CLASS_NAME");
    column_info attr_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "ATTR_NAME");
    column_info num_keys (DB_TYPE_INTEGER, DB_TYPE_NULL, 0, 0, lang_charset(), "KEY_SEQ");
    column_info key_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "KEY_NAME");
    return std::vector<column_info> {class_name, attr_name, num_keys, key_name};
  }

  std::vector<column_info> get_schema_fk_info_meta ()
  {
    column_info pktable_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "PKTABLE_NAME");
    column_info pkcolumn_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "PKCOLUMN_NAME");
    column_info fktable_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "FKTABLE_NAME");
    column_info fkcolumn_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "FKCOLUMN_NAME");
    column_info key_seq (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "KEY_SEQ");
    column_info update_rule (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "UPDATE_RULE");
    column_info delete_rule (DB_TYPE_SHORT, DB_TYPE_NULL, 0, 0, lang_charset(), "DELETE_RULE");
    column_info fk_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "FK_NAME");
    column_info pk_name (DB_TYPE_STRING, DB_TYPE_NULL, 0, DB_MAX_IDENTIFIER_LENGTH, lang_charset(), "PK_NAME");
    return std::vector<column_info> {pktable_name, pkcolumn_name, fktable_name, fkcolumn_name, key_seq, update_rule, delete_rule, fk_name, pk_name};
  }

}