You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2014 InfiniDB, Inc.
 | 
						|
 | 
						|
   This program is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU General Public License
 | 
						|
   as published by the Free Software Foundation; version 2 of
 | 
						|
   the License.
 | 
						|
 | 
						|
   This program is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
   GNU General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | 
						|
   MA 02110-1301, USA. */
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 * $Id: objectreader.h 9633 2013-06-19 13:36:01Z rdempsey $
 | 
						|
 *
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
/** @file
 | 
						|
 * class ObjectReader interface
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <exception>
 | 
						|
#include <string>
 | 
						|
#include <cstdint>
 | 
						|
 | 
						|
namespace messageqcpp
 | 
						|
{
 | 
						|
class ByteStream;
 | 
						|
}
 | 
						|
 | 
						|
namespace execplan
 | 
						|
{
 | 
						|
class TreeNode;
 | 
						|
class ParseTree;
 | 
						|
class CalpontExecutionPlan;
 | 
						|
 | 
						|
/** @brief A class for creating execplan classes from ByteStreams.
 | 
						|
 *
 | 
						|
 * A class currently used for recreating execplan polymorphic classes
 | 
						|
 * and dynamic objects from ByteStreams.
 | 
						|
 */
 | 
						|
 | 
						|
class ObjectReader
 | 
						|
{
 | 
						|
 public:
 | 
						|
  class UnserializeException : public std::exception
 | 
						|
  {
 | 
						|
   public:
 | 
						|
    explicit UnserializeException(std::string) noexcept;
 | 
						|
    ~UnserializeException() noexcept override;
 | 
						|
    const char* what() const noexcept override;
 | 
						|
 | 
						|
   private:
 | 
						|
    std::string fWhat;
 | 
						|
  };
 | 
						|
 | 
						|
  /** @brief Enumerates classes supporting serialization
 | 
						|
   *
 | 
						|
   * This defines one constant for each class that supports
 | 
						|
   * serialization.
 | 
						|
   */
 | 
						|
  enum CLASSID
 | 
						|
  {
 | 
						|
    ZERO,        // an appropriate initializer
 | 
						|
    NULL_CLASS,  // to denote that some member is NULL
 | 
						|
 | 
						|
    /**** TreeNodes */
 | 
						|
    TREENODE,
 | 
						|
    TREENODEIMPL,
 | 
						|
    RETURNEDCOLUMN,
 | 
						|
    AGGREGATECOLUMN,
 | 
						|
    GROUPCONCATCOLUMN,
 | 
						|
    ARITHMETICCOLUMN,
 | 
						|
    CONSTANTCOLUMN,
 | 
						|
    ROLLUPMARKCOLUMN,
 | 
						|
    FUNCTIONCOLUMN,
 | 
						|
    ROWCOLUMN,
 | 
						|
    WINDOWFUNCTIONCOLUMN,
 | 
						|
    PSEUDOCOLUMN,
 | 
						|
 | 
						|
    SIMPLECOLUMN,
 | 
						|
    SIMPLECOLUMN_INT1,
 | 
						|
    SIMPLECOLUMN_INT2,
 | 
						|
    SIMPLECOLUMN_INT4,
 | 
						|
    SIMPLECOLUMN_INT8,
 | 
						|
    SIMPLECOLUMN_UINT1,
 | 
						|
    SIMPLECOLUMN_UINT2,
 | 
						|
    SIMPLECOLUMN_UINT4,
 | 
						|
    SIMPLECOLUMN_UINT8,
 | 
						|
    SIMPLECOLUMN_DECIMAL1,
 | 
						|
    SIMPLECOLUMN_DECIMAL2,
 | 
						|
    SIMPLECOLUMN_DECIMAL4,
 | 
						|
    SIMPLECOLUMN_DECIMAL8,
 | 
						|
 | 
						|
    FILTER,
 | 
						|
    CONDITIONFILTER,
 | 
						|
    EXISTSFILTER,
 | 
						|
    SELECTFILTER,
 | 
						|
    SIMPLEFILTER,
 | 
						|
    SIMPLESCALARFILTER,
 | 
						|
 | 
						|
    OPERATOR,
 | 
						|
    ARITHMETICOPERATOR,
 | 
						|
    PREDICATEOPERATOR,
 | 
						|
    LOGICOPERATOR,
 | 
						|
 | 
						|
    /**** /TreeNodes */
 | 
						|
 | 
						|
    PARSETREE,
 | 
						|
    CALPONTSELECTEXECUTIONPLAN,
 | 
						|
    CONSTANTFILTER,
 | 
						|
    OUTERJOINONFILTER,
 | 
						|
 | 
						|
    /** UDAF SDK */
 | 
						|
    MCSV1_CONTEXT,
 | 
						|
    UDAFCOLUMN,
 | 
						|
 | 
						|
    /** ANALYZE TABLE */
 | 
						|
    MCSANALYZETBLEXECUTIONPLAN,
 | 
						|
  };
 | 
						|
 | 
						|
  typedef uint8_t id_t;  // expand as necessary
 | 
						|
 | 
						|
  /** @brief Creates a new TreeNode object from the ByteStream
 | 
						|
   *
 | 
						|
   * @param b The ByteStream to create it from
 | 
						|
   * @return A newly allocated TreeNode
 | 
						|
   */
 | 
						|
  static TreeNode* createTreeNode(messageqcpp::ByteStream& b);
 | 
						|
 | 
						|
  /** @brief Creates a new ParseTree from the ByteStream
 | 
						|
   *
 | 
						|
   * @param b The ByteStream to create it from
 | 
						|
   * @return A newly allocated ParseTree
 | 
						|
   */
 | 
						|
  static ParseTree* createParseTree(messageqcpp::ByteStream& b);
 | 
						|
 | 
						|
  /** @brief Creates a new CalpontExecutionPlan from the ByteStream
 | 
						|
   *
 | 
						|
   * @param b The ByteStream to create it from
 | 
						|
   * @return A newly allocated CalpontExecutionPlan
 | 
						|
   */
 | 
						|
  static CalpontExecutionPlan* createExecutionPlan(messageqcpp::ByteStream& b);
 | 
						|
 | 
						|
  /** @brief Serialize() for ParseTrees
 | 
						|
   *
 | 
						|
   * This function effectively serializes a ParseTree.
 | 
						|
   * @param tree The ParseTree to write out
 | 
						|
   * @param b The ByteStream to write tree to
 | 
						|
   */
 | 
						|
  static void writeParseTree(const ParseTree* tree, messageqcpp::ByteStream& b);
 | 
						|
 | 
						|
  /** @brief Verify the type of the next object in the ByteStream
 | 
						|
   *
 | 
						|
   * @param b The ByteStream to read from
 | 
						|
   * @param type The type it should be
 | 
						|
   * @throw UnserializeException if the type does not match; this is a fatal error.
 | 
						|
   */
 | 
						|
  static void checkType(messageqcpp::ByteStream& b, const CLASSID type);
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace execplan
 |