blob: 4bd478f68b5c7b93a26c99a229d999a12053ac18 [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// 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.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/* -*-C++-*-
****************************************************************************
*
* File: ComTdbStoredProc.h
* Description:
*
* Created: 5/6/98
* Language: C++
*
*
*
*
****************************************************************************
*/
#ifndef COM_STORED_PROC_H
#define COM_STORED_PROC_H
#include "ComTdb.h"
#include "exp_tuple_desc.h"
#include "exp_clause_derived.h"
#include "RelStoredProc.h"
class ExpTupleDesc;
class ComDiagsArea;
/////////////////////////////////////////////////////////////////
// This class is used to extract fields out of the
// input row and move fields to the output row.
// Used by procs ExSPExtractInputValue and ExSPMoveOutputValue.
/////////////////////////////////////////////////////////////////
class ExSPInputOutput : public NAVersionedObject
{
public:
ExSPInputOutput();
~ExSPInputOutput(){};
void initialize(ExpTupleDesc * tupleDesc,
ULng32 totalLen,
ConvInstruction * caseIndexArray);
// ---------------------------------------------------------------------
// Redefine virtual functions required for Versioning.
//----------------------------------------------------------------------
virtual unsigned char getClassVersionID()
{
return 1;
}
virtual void populateImageVersionIDArray()
{
setImageVersionID(0,getClassVersionID());
}
virtual short getClassSize() { return (short)sizeof(ExSPInputOutput); }
Long pack(void * space);
Lng32 unpack(void * base, void * reallocator);
short inputValue(ULng32 fieldNum, char * inputRow,
char * data, ULng32 datalen, NABoolean casting,
ComDiagsArea * diagsArea = NULL);
short outputValue(ULng32 fieldNum, char * outputRow,
char * data, ULng32 datalen, NABoolean casting,
CollHeap * heap,
ComDiagsArea * diagsArea = NULL);
ULng32 getLength(){return totalLen_;};
ConvInstruction * getCaseIndexArray()
{ return (ConvInstruction *)(short *)caseIndexArray_; }
protected:
// "SPIO"
char eyeCatcher_[4]; // 00-03
UInt32 flags_; // 04-07
// pointer to the record descriptor
ExpTupleDescPtr tupleDesc_; // 08-15
// this is a (enum ConvInstruction *) before.
Int16Ptr caseIndexArray_; // 16-23
// length of ExSPInputOutput starting at 'this'. All classes following
// 'this' are allocated contiguosly.
UInt32 totalLen_; // 24-27
char fillersExSPInputOutput_[36]; // 28-63
};
// ---------------------------------------------------------------------
// Template instantiation to produce a 64-bit pointer emulator class
// for ExSPInputOutput
// ---------------------------------------------------------------------
typedef NAVersionedObjectPtrTempl<ExSPInputOutput> ExSPInputOutputPtr;
class ComTdbStoredProc : public ComTdb
{
friend class ExStoredProcTcb;
friend class ExStoredProcPrivateState;
public:
ComTdbStoredProc()
: ComTdb(ComTdb::ex_STORED_PROC, eye_STORED_PROC)
{};
ComTdbStoredProc(char * spName,
ex_expr * inputExpr,
ULng32 inputRowlen,
ex_expr * outputExpr,
ULng32 outputRowlen,
ex_cri_desc * workCriDesc,
const unsigned short workAtpIndex,
ex_cri_desc * criDescParent,
ex_cri_desc * criDescReturned,
ExSPInputOutput * extractInputExpr,
ExSPInputOutput * moveOutputExpr,
queue_index fromParent,
queue_index toParent,
Cardinality estimatedRowCount,
Lng32 numBuffers,
ULng32 bufferSize,
ex_expr *predExpr = NULL,
UInt16 arkcmpInfo = 0); // constructor
~ComTdbStoredProc();
// ---------------------------------------------------------------------
// Redefine virtual functions required for Versioning.
//----------------------------------------------------------------------
virtual unsigned char getClassVersionID()
{
return 1;
}
virtual void populateImageVersionIDArray()
{
setImageVersionID(1,getClassVersionID());
ComTdb::populateImageVersionIDArray();
}
virtual short getClassSize() { return (short)sizeof(ComTdbStoredProc); }
Long pack(void *);
Lng32 unpack(void *, void * reallocator);
Int32 orderedQueueProtocol() const {return -1;};
void display() const {};
Int32 numChildren() const {return 0;};
const ComTdb *getChild(Int32) const { return NULL; };
const char *getNodeName() const { return "EX_STORED_PROC"; };
Int32 numExpressions() const {return 3;};
virtual ex_expr* getExpressionNode(Int32 pos)
{
if (pos == 0)
return inputExpr_;
else if (pos == 1)
return outputExpr_;
else if (pos == 2)
return predExpr_;
else
return NULL;
}
virtual const char * getExpressionName(Int32 pos) const
{
if (pos == 0)
return "inputExpr_";
else if (pos == 1)
return "outputExpr_";
else if (pos == 2)
return "predExpr_";
else
return NULL;
}
NABasicPtr getSPName() const
{
return spName_;
}
NABoolean getUseExistingArkcmp() const
{
return (arkcmpInfo_ & RelInternalSP::executeInSameArkcmp );
}
NABoolean isExecuteInLocalProcess() const
{
return (arkcmpInfo_ & RelInternalSP::executeInLocalProcess );
}
protected:
// Name of stored procedure
NABasicPtr spName_; // 00-07
ExCriDescPtr workCriDesc_; // 08-15
// describes the input and output rows. Used to extract
// input values from the input row or move in output values
// to the output row by SP.
ExSPInputOutputPtr extractInputExpr_; // 16-23
ExSPInputOutputPtr moveOutputExpr_; // 24-31
// expression to compute the input data row sent to ARKCMP.
ExExprPtr inputExpr_; // 32-39
UInt32 inputRowlen_; // 40-43
UInt32 flags_; // 44-47
// expression to compute the output row returned to parent's up queue.
// The output row is created based on the data returned by ARKCMP.
ExExprPtr outputExpr_; // 48-55
UInt32 outputRowlen_; // 56-59
UInt16 workAtpIndex_; // 60-61
// Bitmap that contains arkcmp-related information passed from the compiler
// to the executor. Internal stored procedures use it to indicate that
// the procedure in execution corresponds to query cache statistics
UInt16 arkcmpInfo_; // 62-63
// expression to evaluate the predicate in the WHERE clause of an
// internal stored procedure
ExExprPtr predExpr_; // 64-71
char fillersComTdbStoredProc_[32]; // 72-103
};
#endif