blob: 26d340361ef09e6538d582fb04639efe19ffe4a3 [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: $File$
* RCS: $Id$
* Description:
* Created:
* Language: C++
* Status: $State$
*
*
*
*
******************************************************************************
*/
#include "ComTdbSequence.h"
#include "ComTdbCommon.h"
//////////////////////////////////////////////////////////////////////////////////
//
// TDB procedures
//
//////////////////////////////////////////////////////////////////////////////////
// Constructor
ComTdbSequence::ComTdbSequence()
: ComTdb(ComTdb::ex_SEQUENCE_FUNCTION, eye_SEQUENCE_FUNCTION),
tuppIndex_(0)
{
}
ComTdbSequence::ComTdbSequence
(ex_expr *sequenceExpr,
ex_expr *returnExpr,
ex_expr *postPred,
ex_expr *cancelExpr,
Lng32 minFollowing,
Lng32 reclen,
const unsigned short tupp_index,
ComTdb * child_tdb,
ex_cri_desc * given_cri_desc,
ex_cri_desc * returned_cri_desc,
queue_index down,
queue_index up,
Lng32 num_buffers,
ULng32 buffer_size,
Lng32 OLAP_buffer_size,
Lng32 max_number_of_OLAP_buffers,
Int32 maxHistoryRows,
NABoolean unboundedFollowing,
NABoolean logDiagnostics,
NABoolean possibleMultipleCalls,
short scratchThresholdPct,
unsigned short memUsagePercent,
short pressureThreshold,
Lng32 maxRowsInOLAPBuffer,
Lng32 minNumberOfOLAPBuffers,
Lng32 numberOfWinOLAPBuffers,
NABoolean noOverflow,
ex_expr * partExpr)
: ComTdb(ComTdb::ex_SEQUENCE_FUNCTION, eye_SEQUENCE_FUNCTION,
(Cardinality) 0.0,
given_cri_desc, returned_cri_desc,
down, up,
num_buffers, buffer_size),
sequenceExpr_(sequenceExpr),
postPred_(postPred),
cancelExpr_(cancelExpr),
minFollowing_(minFollowing),
tdbChild_(child_tdb),
recLen_(reclen),
maxHistoryRows_ (maxHistoryRows),
tuppIndex_(tupp_index),
returnExpr_(returnExpr),
checkPartitionChangeExpr_(partExpr),
OLAPBufferSize_(OLAP_buffer_size),
maxNumberOfOLAPBuffers_(max_number_of_OLAP_buffers),
maxRowsInOLAPBuffer_(maxRowsInOLAPBuffer),
minNumberOfOLAPBuffers_(minNumberOfOLAPBuffers),
numberOfWinOLAPBuffers_(numberOfWinOLAPBuffers),
scratchThresholdPct_(scratchThresholdPct),
memUsagePercent_(memUsagePercent),
pressureThreshold_(pressureThreshold),
bmoMinMemBeforePressureCheck_(0),
bmoMaxMemThresholdMB_(0),
OLAPFlags_(0)
{
if ( noOverflow )
{
OLAPFlags_ |= NO_OVERFLOW ;
}
if ( unboundedFollowing )
{
OLAPFlags_ |= UNBOUNDED_FOLLOWING;
}
if ( logDiagnostics )
{
OLAPFlags_ |= LOG_DIAGNOSTICS ;
}
if ( possibleMultipleCalls )
{
OLAPFlags_ |= POSSIBLE_MULTIPLE_CALLS ;
}
}
ComTdbSequence::~ComTdbSequence(){
}
void ComTdbSequence::display() const {};
void ComTdbSequence::displayContents(Space * space,ULng32 flag)
{
ComTdb::displayContents(space,flag & 0xFFFFFFFE);
if(flag & 0x00000008)
{
char buf[100];
str_sprintf(buf, "\nFor ComTdbSequence :");
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
str_sprintf(buf,"recLen_ = %d, maxHistoryRows_ = %d, OLAPFlags_ = %x %s",
recLen_, maxHistoryRows_, OLAPFlags_,
isUnboundedFollowing() ? ", UNBOUNDED_FOLLOWING" : "");
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
str_sprintf(buf,"minFollowing_ = %d, OLAPBufferSize_ = %d, maxNumberOfOLAPBuffers_ = %d",
minFollowing_,OLAPBufferSize_,maxNumberOfOLAPBuffers_);
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
str_sprintf(buf,"maxRowsInOLAPBuffer_ = %d, minNumberOfOLAPBuffers_ = %d",
maxRowsInOLAPBuffer_, minNumberOfOLAPBuffers_);
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
str_sprintf(buf, "numberOfWinOLAPBuffers_ = %d, %s memoryQuotaMB = %d",
numberOfWinOLAPBuffers_,
logDiagnostics() ? "LOG_DIAGNOSTICS," : "",
memoryQuotaMB());
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
str_sprintf(buf,"%s memUsagePercent = %d, pressureThreshold = %d",
isNoOverflow() ? "NO_OVERFLOW," : "",
memUsagePercent_,pressureThreshold_);
space->allocateAndCopyToAlignedSpace(buf, str_len(buf), sizeof(short));
}
if(flag & 0x00000001)
{
displayExpression(space,flag);
displayChildren(space,flag);
}
}
Int32 ComTdbSequence::orderedQueueProtocol() const
{
return -1;
}
Long ComTdbSequence::pack(void * space)
{
tdbChild_.pack(space);
sequenceExpr_.pack(space);
postPred_.pack(space);
cancelExpr_.pack(space);
returnExpr_.pack(space);
checkPartitionChangeExpr_.pack(space);
return ComTdb::pack(space);
}
Lng32 ComTdbSequence::unpack(void * base, void * reallocator)
{
if (tdbChild_.unpack(base, reallocator)) return -1;
if (sequenceExpr_.unpack(base, reallocator)) return -1;
if (postPred_.unpack(base, reallocator)) return -1;
if (cancelExpr_.unpack(base, reallocator)) return -1;
if (returnExpr_.unpack(base, reallocator)) return -1;
if (checkPartitionChangeExpr_.unpack(base, reallocator)) return -1;
return ComTdb::unpack(base, reallocator);
}