Skip to content

File method_struct_invoke.hpp

File List > cubrid > src > method > method_struct_invoke.hpp

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.
 *
 */

#ifndef _METHOD_STRUCT_INVOKE_HPP_
#define _METHOD_STRUCT_INVOKE_HPP_

#include <string>

#include "porting.h"

#include "mem_block.hpp"
#include "packable_object.hpp"
#include "sp_constants.hpp"

/*
 * method_struct_invoke.hpp
 */

// thread_entry.hpp
namespace cubthread
{
  class entry;
}

namespace cubmethod
{
  /*
   * request data header
   */
  struct EXPORT_IMPORT header : public cubpacking::packable_object
  {
    header () = delete;
    explicit header (cubpacking::unpacker &unpacker);
    header (uint64_t id, int command);

    void pack (cubpacking::packer &serializator) const override;
    void unpack (cubpacking::unpacker &deserializator) override;
    size_t get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const override;

    uint64_t id;
    int command;
  };

  /*
   * request data to prepare method arguments
   */
  struct prepare_args : public cubpacking::packable_object
  {
    prepare_args () = delete;
    prepare_args (uint64_t id, int tran_id, METHOD_TYPE type, std::vector<std::reference_wrapper<DB_VALUE>> &args);
    ~prepare_args () = default;

    void pack (cubpacking::packer &serializator) const override;
    void unpack (cubpacking::unpacker &deserializator) override;
    size_t get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const override;

    uint64_t group_id;
    int tran_id;
    METHOD_TYPE type;
    std::vector<std::reference_wrapper<DB_VALUE>> &args;
  };
} // namespace cubmethod

#endif