You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-30 07:25:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			394 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			394 lines
		
	
	
		
			8.6 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: calpontdmlpackage.h 9210 2013-01-21 14:10:42Z rdempsey $
 | |
|  *
 | |
|  *
 | |
|  ***********************************************************************/
 | |
| /** @file */
 | |
| 
 | |
| #pragma once
 | |
| #include <string>
 | |
| #include <boost/uuid/uuid.hpp>
 | |
| 
 | |
| #include "bytestream.h"
 | |
| #include "dmlpackage.h"
 | |
| #include "dmltable.h"
 | |
| #include "calpontselectexecutionplan.h"
 | |
| #include "we_chunkmanager.h"
 | |
| #define DML_PACKAGE_DEBUG
 | |
| 
 | |
| namespace dmlpackage
 | |
| {
 | |
| /** @brief abstract class that defines the general interface and
 | |
|  * implemetation of a CalpontDMLPackage
 | |
|  */
 | |
| class CalpontDMLPackage
 | |
| {
 | |
|  public:
 | |
|   /** @brief ctor
 | |
|    */
 | |
|   CalpontDMLPackage();
 | |
| 
 | |
|   /** @brief ctor
 | |
|    *
 | |
|    * @param schemaName the schema of the table being operated on
 | |
|    * @param tableName the name of the table being operated on
 | |
|    * @param dmlStatement the dml statement
 | |
|    * @param sessionID the session id
 | |
|    */
 | |
|   CalpontDMLPackage(std::string schemaName, std::string tableName, std::string dmlStatement, int sessionID);
 | |
| 
 | |
|   /** @brief dtor
 | |
|    */
 | |
|   virtual ~CalpontDMLPackage();
 | |
| 
 | |
|   /** @brief write a CalpontDMLPackage to a ByteStream
 | |
|    *
 | |
|    * @param bytestream the ByteStream to write to
 | |
|    */
 | |
|   virtual int write(messageqcpp::ByteStream& bytestream) = 0;
 | |
| 
 | |
|   /** @brief read a CalpontDMLPackage from a ByteStream
 | |
|    *
 | |
|    * @param bytestream the ByteStream to read from
 | |
|    */
 | |
|   virtual int read(messageqcpp::ByteStream& bytestream) = 0;
 | |
| 
 | |
|   /** @brief build a CalpontDMLPackage from a string buffer
 | |
|    *
 | |
|    * @param buffer the row buffer
 | |
|    * @param columns the number of columns in the buffer
 | |
|    * @param rows the number of rows in the buffer
 | |
|    */
 | |
|   virtual int buildFromBuffer(std::string& buffer, int columns, int rows) = 0;
 | |
| 
 | |
|   /** @brief build a CalpontDMLPackage from a parsed SqlStatement
 | |
|    *
 | |
|    * @param sqlStatement the parsed SqlStatement
 | |
|    */
 | |
|   virtual int buildFromSqlStatement(SqlStatement& sqlStatement) = 0;
 | |
| 
 | |
|   /** @brief build a CalpontDMLPackage from valuelist built from mysql table fields
 | |
|    *
 | |
|    * @param tableValuesMap  the value list for each column in the table
 | |
|    * @param colNameList the column name for each column
 | |
|    * @param columns number of columns in the table
 | |
|    * @param rows  number of rows to be touched
 | |
|    */
 | |
|   virtual int buildFromMysqlBuffer(ColNameList& colNameList, TableValuesMap& tableValuesMap, int columns,
 | |
|                                    int rows, NullValuesBitset& nullValues) = 0;
 | |
| 
 | |
|   /** @brief get the table object
 | |
|    */
 | |
|   DMLTable* get_Table()
 | |
|   {
 | |
|     return fTable;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the DML statement (the parsed statement)
 | |
|    *
 | |
|    * @param statement the dml statement to set
 | |
|    */
 | |
|   void set_DMLStatement(const std::string& statement)
 | |
|   {
 | |
|     fDMLStatement = statement;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the DML statement (the parsed statement)
 | |
|    */
 | |
|   const std::string get_DMLStatement() const
 | |
|   {
 | |
|     return fDMLStatement;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the SQL statement (the original SQL statement)
 | |
|    *
 | |
|    * @param statement the SQL statement to set (the original SQL statement with quotes)
 | |
|    */
 | |
|   void set_SQLStatement(const std::string& statement)
 | |
|   {
 | |
|     fSQLStatement = statement;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the SQL statement (the original SQL statement)
 | |
|    */
 | |
|   const std::string get_SQLStatement() const
 | |
|   {
 | |
|     return fSQLStatement;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the logging flag
 | |
|    */
 | |
|   bool get_Logging() const
 | |
|   {
 | |
|     return fLogging;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the logging flag
 | |
|    *
 | |
|    * @param logging the logging flag to set
 | |
|    */
 | |
|   void set_Logging(bool logging)
 | |
|   {
 | |
|     fLogging = logging;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the logending flag
 | |
|    */
 | |
|   bool get_Logending() const
 | |
|   {
 | |
|     return fLogending;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the logending flag
 | |
|    *
 | |
|    * @param logending the logending flag to set
 | |
|    */
 | |
|   void set_Logending(bool logending)
 | |
|   {
 | |
|     fLogending = logending;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the isFromCol flag
 | |
|    */
 | |
|   bool get_IsFromCol() const
 | |
|   {
 | |
|     return fIsFromCol;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the update column from column flag
 | |
|    *
 | |
|    * @param logging the logging flag to set
 | |
|    */
 | |
|   void set_IsFromCol(bool isFromCol)
 | |
|   {
 | |
|     fIsFromCol = isFromCol;
 | |
|   }
 | |
|   /** @brief set the Table name
 | |
|    *
 | |
|    * @param tableName the name to set
 | |
|    */
 | |
|   void set_TableName(std::string& tableName)
 | |
|   {
 | |
|     fTableName = tableName;
 | |
| 
 | |
|     if (fTable != nullptr)
 | |
|       fTable->set_TableName(tableName);
 | |
|   }
 | |
| 
 | |
|   /** @brief get the Table name
 | |
|    */
 | |
|   const std::string get_TableName() const
 | |
|   {
 | |
|     return fTableName;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the Schema name
 | |
|    *
 | |
|    * @param the schema to set
 | |
|    */
 | |
|   void set_SchemaName(std::string& schemaName)
 | |
|   {
 | |
|     fSchemaName = schemaName;
 | |
| 
 | |
|     if (fTable != nullptr)
 | |
|       fTable->set_SchemaName(schemaName);
 | |
|   }
 | |
| 
 | |
|   /** @brief get the Schema name
 | |
|    */
 | |
|   const std::string get_SchemaName() const
 | |
|   {
 | |
|     return fSchemaName;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the timezone
 | |
|    *
 | |
|    * @param the timezone to set
 | |
|    */
 | |
|   void set_TimeZone(const long timeZone)
 | |
|   {
 | |
|     fTimeZone = timeZone;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the timezone
 | |
|    */
 | |
|   long get_TimeZone() const
 | |
|   {
 | |
|     return fTimeZone;
 | |
|   }
 | |
| 
 | |
|   /** @brief does this dml statement have a filter
 | |
|    */
 | |
|   bool HasFilter() const
 | |
|   {
 | |
|     return fHasFilter;
 | |
|   }
 | |
|   void HasFilter(bool hasFilter)
 | |
|   {
 | |
|     fHasFilter = hasFilter;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the filter  statement
 | |
|    */
 | |
|   const std::string get_QueryString() const
 | |
|   {
 | |
|     return fQueryString;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the sessionID associated with this package
 | |
|    */
 | |
|   void set_SessionID(int sessionID)
 | |
|   {
 | |
|     fSessionID = sessionID;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the sessionID associated with this package
 | |
|    */
 | |
|   int get_SessionID() const
 | |
|   {
 | |
|     return fSessionID;
 | |
|   }
 | |
| 
 | |
|   /** @brief set the transaction ID associated with this package
 | |
|    */
 | |
|   void set_TxnID(execplan::CalpontSystemCatalog::SCN txnID)
 | |
|   {
 | |
|     fTxnId = txnID;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the transaction ID associated with this package
 | |
|    */
 | |
|   execplan::CalpontSystemCatalog::SCN get_TxnID() const
 | |
|   {
 | |
|     return fTxnId;
 | |
|   }
 | |
|   /** @brief set the chunkmanager associated with this package
 | |
|    */
 | |
|   void set_ChunkManager(WriteEngine::ChunkManager* cm)
 | |
|   {
 | |
|     fCM = cm;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the chunkmanager associated with this package
 | |
|    */
 | |
|   WriteEngine::ChunkManager* get_ChunkManager() const
 | |
|   {
 | |
|     return fCM;
 | |
|   }
 | |
| 
 | |
|   /** @brief get the ExecutionPlan associated with this package
 | |
|    */
 | |
|   boost::shared_ptr<messageqcpp::ByteStream> get_ExecutionPlan()
 | |
|   {
 | |
|     return fPlan;
 | |
|   }
 | |
| 
 | |
|   bool get_isInsertSelect()
 | |
|   {
 | |
|     return fIsInsertSelect;
 | |
|   }
 | |
|   void set_isInsertSelect(const bool isInsertSelect)
 | |
|   {
 | |
|     fIsInsertSelect = isInsertSelect;
 | |
|   }
 | |
| 
 | |
|   bool get_isBatchInsert()
 | |
|   {
 | |
|     return fIsBatchInsert;
 | |
|   }
 | |
|   void set_isBatchInsert(const bool isBatchInsert)
 | |
|   {
 | |
|     fIsBatchInsert = isBatchInsert;
 | |
|   }
 | |
| 
 | |
|   bool get_isCacheInsert()
 | |
|   {
 | |
|     return fIsCacheInsert;
 | |
|   }
 | |
|   void set_isCacheInsert(const bool isCacheInsert)
 | |
|   {
 | |
|     fIsCacheInsert = isCacheInsert;
 | |
|   }
 | |
| 
 | |
|   bool get_isAutocommitOn()
 | |
|   {
 | |
|     return fIsAutocommitOn;
 | |
|   }
 | |
|   void set_isAutocommitOn(const bool isAutocommitOn)
 | |
|   {
 | |
|     fIsAutocommitOn = isAutocommitOn;
 | |
|   }
 | |
| 
 | |
|   bool get_isWarnToError()
 | |
|   {
 | |
|     return fIsWarnToError;
 | |
|   }
 | |
|   void set_isWarnToError(const bool isWarnToError)
 | |
|   {
 | |
|     fIsWarnToError = isWarnToError;
 | |
|   }
 | |
| 
 | |
|   uint32_t getTableOid()
 | |
|   {
 | |
|     return fTableOid;
 | |
|   }
 | |
|   void setTableOid(const uint32_t tableOid)
 | |
|   {
 | |
|     fTableOid = tableOid;
 | |
|   }
 | |
| 
 | |
|   void uuid(const boost::uuids::uuid& uuid)
 | |
|   {
 | |
|     fUuid = uuid;
 | |
|   }
 | |
|   const boost::uuids::uuid& uuid() const
 | |
|   {
 | |
|     return fUuid;
 | |
|   }
 | |
| 
 | |
|  protected:
 | |
|   void initializeTable();
 | |
| 
 | |
|   std::string fSchemaName;
 | |
|   long fTimeZone;
 | |
|   std::string fTableName;
 | |
|   std::string fDMLStatement;
 | |
|   std::string fSQLStatement;
 | |
|   std::string fQueryString;
 | |
|   int fSessionID;
 | |
|   boost::uuids::uuid fUuid;
 | |
|   execplan::CalpontSystemCatalog::SCN fTxnId;
 | |
|   boost::shared_ptr<messageqcpp::ByteStream> fPlan;
 | |
|   DMLTable* fTable;
 | |
|   bool fHasFilter;
 | |
|   bool fLogging;
 | |
|   bool fLogending;
 | |
|   bool fIsFromCol;
 | |
|   std::string StripLeadingWhitespace(std::string value);
 | |
|   bool fIsInsertSelect;
 | |
|   bool fIsBatchInsert;
 | |
|   bool fIsCacheInsert;
 | |
|   bool fIsAutocommitOn;
 | |
|   bool fIsWarnToError;
 | |
|   uint32_t fTableOid;
 | |
|   WriteEngine::ChunkManager* fCM;
 | |
| };
 | |
| }  // namespace dmlpackage
 |