blob: 420bdbaf68381b9bc0d0c588e190c91d32a6c985 [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 @@@
**********************************************************************/
#ifndef CLI_SESSION_DEFAULTS_H
#define CLI_SESSION_DEFAULTS_H
/* -*-C++-*-
*****************************************************************************
*
* File: CliSessionDefaults.h
* Description: Default settings for cli.
*
* Created: 9/8/2005
* Language: C++
*
*
*
*
*****************************************************************************
*/
#include "ex_god.h"
#include "Statement.h"
class CliGlobals;
class AQRInfo;
class AQRStatementAttributes;
#define DEFAULT_RECLAIM_MEMORY_AFTER 800
#define DEFAULT_RECLAIM_FREE_MEMORY_RATIO 25
#define DEFAULT_RECLAIM_FREE_PFS_RATIO 50
class SessionEnvvar : public NABasicObject {
public:
SessionEnvvar(CollHeap * heap, char * envvarName, char * envvarValue);
SessionEnvvar();
~SessionEnvvar();
SessionEnvvar(const SessionEnvvar &other);
NABoolean operator ==(const SessionEnvvar &other) const;
SessionEnvvar& operator =(const SessionEnvvar &other);
char * envvarName() { return envvarName_; }
char * envvarValue() { return envvarValue_; }
private:
CollHeap * heap_;
char * envvarName_;
char * envvarValue_;
};
class SessionDefaults : public NABasicObject {
public:
enum SessionDefaultType
{
SDT_BOOLEAN = 0,
SDT_BINARY_SIGNED = 1,
SDT_ASCII = 2
};
// keep this list in alphabetical order starting at the
// first attr after 'INVALID_SESSION_DEFAULT and LAST_SESSION_DEFAULT_ATTRIBUTE'.
// Keep SessionDefaultMap in SessionDefaults consistent with
// this enum list.
enum SessionDefaultAttribute
{
INVALID_SESSION_DEFAULT = -1,
AQR_ENTRIES,
AUTO_QUERY_RETRY_WARNINGS,
CALL_EMBEDDED_ARKCMP,
CANCEL_ESCALATION_INTERVAL,
CANCEL_ESCALATION_MXOSRVR_INTERVAL,
CANCEL_ESCALATION_SAVEABEND,
CANCEL_LOGGING,
CANCEL_QUERY_ALLOWED,
CANCEL_UNIQUE_QUERY,
CATALOG,
COMPILER_IDLE_TIMEOUT,
DBTR_PROCESS,
ESP_ASSIGN_DEPTH,
ESP_ASSIGN_TIME_WINDOW,
ESP_CLOSE_ERROR_LOGGING,
ESP_FREEMEM_TIMEOUT,
ESP_IDLE_TIMEOUT,
ESP_INACTIVE_TIMEOUT,
ESP_STOP_IDLE_TIMEOUT,
ESP_RELEASE_WORK_TIMEOUT,
INTERNAL_FORMAT_IO,
ISO_MAPPING,
MAX_POLLING_INTERVAL,
PARENT_QID,
PARENT_QID_SYSTEM,
PARSER_FLAGS,
PERSISTENT_OPENS,
RECLAIM_FREE_MEMORY_RATIO,
RECLAIM_FREE_PFS_RATIO,
RECLAIM_MEMORY_AFTER,
ROWSET_ATOMICITY,
RTS_TIMEOUT,
SCHEMA,
STATISTICS_VIEW_TYPE,
SUSPEND_LOGGING,
USE_LIBHDFS,
USER_EXPERIENCE_LEVEL,
WMS_PROCESS,
LAST_SESSION_DEFAULT_ATTRIBUTE // This enum entry should be last always. Add new enums before this entry
};
struct SessionDefaultMap {
public:
SessionDefaultAttribute attribute;
const char * attributeString;
SessionDefaultType attributeType;
NABoolean isCQD;
NABoolean fromDefaultsTable;
NABoolean isSSD;
NABoolean externalized;
};
SessionDefaults(CollHeap * heap);
~SessionDefaults();
void setDbtrProcess(NABoolean v = TRUE)
{
dbtrProcess_ = v;
}
void setJdbcProcess(NABoolean v = TRUE)
{
jdbcProcess_ = v;
}
void setOdbcProcess(NABoolean v = TRUE)
{
odbcProcess_ = v;
}
void setMxciProcess(NABoolean v = TRUE)
{
mxciProcess_ = v;
}
void setNvciProcess(NABoolean v = TRUE)
{
mxciProcess_ = v;
}
void setMariaQuestProcess(NABoolean v = TRUE)
{
mariaQuestProcess_ = v;
}
void setInternalCli(NABoolean v = TRUE)
{
internalCli_ = v;
}
void setWmsProcess(NABoolean v = TRUE)
{
const Int16 DisAmbiguate = 0;
wmsProcess_ = v;
updateDefaultsValueString(WMS_PROCESS, DisAmbiguate, wmsProcess_);
}
void setCompilerIdleTimeout(Lng32 compilerIdleTimeout)
{
compilerIdleTimeout_ = compilerIdleTimeout;
updateDefaultsValueString(COMPILER_IDLE_TIMEOUT, compilerIdleTimeout_);
}
void setIsoMappingName(const char * attrValue, Lng32 attrValueLen);
void setIsoMappingEnum();
void setCatalog(char * attrValue, Lng32 attrValueLen)
{
if (catalog_)
{
NADELETEBASIC(catalog_, heap_);
}
catalog_ = new(heap_) char[attrValueLen + 1];
strncpy(catalog_, attrValue, attrValueLen);
catalog_[attrValueLen] = '\0';
updateDefaultsValueString(CATALOG, catalog_);
}
void setSchema(char * attrValue, Lng32 attrValueLen)
{
if (schema_)
{
NADELETEBASIC(schema_, heap_);
}
schema_ = new(heap_) char[attrValueLen + 1];
strncpy(schema_, attrValue, attrValueLen);
schema_[attrValueLen] = '\0';
updateDefaultsValueString(SCHEMA, schema_);
}
void setUEL(char * attrValue, Lng32 attrValueLen)
{
if (uel_)
{
NADELETEBASIC(uel_, heap_);
}
uel_ = new(heap_) char[attrValueLen + 1];
strncpy(uel_, attrValue, attrValueLen);
uel_[attrValueLen] = '\0';
updateDefaultsValueString(USER_EXPERIENCE_LEVEL, uel_);
}
void setEspAssignDepth(Lng32 espAssignDepth)
{
espAssignDepth_ = espAssignDepth;
updateDefaultsValueString(ESP_ASSIGN_DEPTH, espAssignDepth_);
}
void setEspAssignTimeWindow(Lng32 espAssignTimeWindow)
{
espAssignTimeWindow_ = espAssignTimeWindow;
updateDefaultsValueString(ESP_ASSIGN_TIME_WINDOW, espAssignTimeWindow_);
}
void setEspStopIdleTimeout(Lng32 espStopIdleTimeout)
{
espStopIdleTimeout_ = espStopIdleTimeout;
updateDefaultsValueString(ESP_STOP_IDLE_TIMEOUT, espStopIdleTimeout_);
}
void setEspIdleTimeout(Lng32 espIdleTimeout)
{
espIdleTimeout_ = espIdleTimeout;
updateDefaultsValueString(ESP_IDLE_TIMEOUT, espIdleTimeout_);
}
void setEspInactiveTimeout(Lng32 espInactiveTimeout)
{
espInactiveTimeout_ = espInactiveTimeout;
updateDefaultsValueString(ESP_INACTIVE_TIMEOUT, espInactiveTimeout_);
}
void setEspReleaseWorkTimeout(Lng32 espReleaseWorkTimeout)
{
espReleaseWorkTimeout_ = espReleaseWorkTimeout;
updateDefaultsValueString(ESP_RELEASE_WORK_TIMEOUT, espReleaseWorkTimeout_);
}
void setMaxPollingInterval(Lng32 maxPollingInterval)
{
maxPollingInterval_ = maxPollingInterval;
updateDefaultsValueString(MAX_POLLING_INTERVAL, maxPollingInterval_);
}
void setPersistentOpens(Lng32 persistentOpens)
{
persistentOpens_ = persistentOpens;
updateDefaultsValueString(PERSISTENT_OPENS, persistentOpens_);
}
void setEspCloseErrorLogging(NABoolean espCloseErrorLogging)
{
const Int16 DisAmbiguate = 0;
espCloseErrorLogging_ = espCloseErrorLogging;
updateDefaultsValueString(ESP_CLOSE_ERROR_LOGGING, DisAmbiguate,
espCloseErrorLogging_);
}
void setUseLibHdfs(NABoolean useLibHdfs)
{
const Int16 DisAmbiguate = 0;
useLibHdfs_ = useLibHdfs;
updateDefaultsValueString(USE_LIBHDFS, DisAmbiguate,
useLibHdfs_);
}
void setEspFreeMemTimeout(Lng32 espFreeMemTimeout)
{
espFreeMemTimeout_ = espFreeMemTimeout;
updateDefaultsValueString(ESP_FREEMEM_TIMEOUT, espFreeMemTimeout_);
}
void setInternalFormatIO(NABoolean v)
{
internalFormatIO_ = v;
}
void setRowsetAtomicity(Lng32 rsa)
{
rowsetAtomicity_ = rsa;
}
void setCancelEscalationInterval(Lng32 cei)
{
cancelEscalationInterval_ = cei;
updateDefaultsValueString(CANCEL_ESCALATION_INTERVAL,
cancelEscalationInterval_);
}
void setCancelEscalationMxosrvrInterval(Lng32 cei)
{
cancelEscalationMxosrvrInterval_ = cei;
updateDefaultsValueString(CANCEL_ESCALATION_MXOSRVR_INTERVAL,
cancelEscalationMxosrvrInterval_);
}
void setCancelEscalationSaveabend(NABoolean v)
{
const Int16 DisAmbiguate = 0;
cancelEscalationSaveabend_ = v;
updateDefaultsValueString(CANCEL_ESCALATION_SAVEABEND, DisAmbiguate,
cancelEscalationSaveabend_);
}
void setCancelLogging(NABoolean v)
{
const Int16 DisAmbiguate = 0;
cancelLogging_ = v;
updateDefaultsValueString(CANCEL_LOGGING, DisAmbiguate,
cancelLogging_);
}
void setSuspendLogging(NABoolean v)
{
const Int16 DisAmbiguate = 0;
suspendLogging_ = v;
updateDefaultsValueString(SUSPEND_LOGGING, DisAmbiguate,
cancelLogging_);
}
void setCancelQueryAllowed(NABoolean v)
{
const Int16 DisAmbiguate = 0;
cancelQueryAllowed_ = v;
updateDefaultsValueString(CANCEL_QUERY_ALLOWED, DisAmbiguate,
cancelQueryAllowed_);
}
void setCancelUniqueQuery(NABoolean v)
{
const Int16 DisAmbiguate = 0;
cancelUniqueQuery_ = v;
updateDefaultsValueString(CANCEL_UNIQUE_QUERY, DisAmbiguate,
cancelUniqueQuery_);
}
void setCallEmbeddedArkcmp(NABoolean v)
{
const Int16 DisAmbiguate = 0;
callEmbeddedArkcmp_ = v;
updateDefaultsValueString(CALL_EMBEDDED_ARKCMP, DisAmbiguate,
callEmbeddedArkcmp_);
}
NABoolean getDbtrProcess() { return dbtrProcess_; }
NABoolean getOdbcProcess() { return odbcProcess_; }
NABoolean getJdbcProcess() { return jdbcProcess_; }
NABoolean getMxciProcess() { return mxciProcess_; }
NABoolean getNvciProcess() { return nvciProcess_; }
NABoolean getWmsProcess() { return wmsProcess_; }
NABoolean getMariaQuestProcess() { return mariaQuestProcess_; }
Lng32 getEspAssignDepth(){ return espAssignDepth_; }
Lng32 getEspAssignTimeWindow(){ return espAssignTimeWindow_; }
Lng32 getEspStopIdleTimeout() { return espStopIdleTimeout_; }
Lng32 getEspIdleTimeout() { return espIdleTimeout_; }
Lng32 getCompilerIdleTimeout() { return compilerIdleTimeout_; }
Lng32 getEspInactiveTimeout() { return espInactiveTimeout_; }
Lng32 getEspReleaseWorkTimeout() { return espReleaseWorkTimeout_; }
Lng32 getMaxPollingInterval() { return maxPollingInterval_; }
Lng32 getPersistentOpens() { return persistentOpens_; }
Lng32 getEspFreeMemTimeout() { return espFreeMemTimeout_; }
Lng32 getEspCloseErrorLogging() { return espCloseErrorLogging_; }
NABoolean getInternalFormatIO() { return internalFormatIO_;}
char * getIsoMappingName() { return isoMappingName_; }
Lng32 getIsoMappingEnum() { return isoMappingEnum_; }
Lng32 getRowsetAtomicity() { return rowsetAtomicity_;}
void setCliBulkMove(NABoolean cbm) { cliBulkMove_ = cbm; }
NABoolean getCliBulkMove() { return cliBulkMove_; }
void setAqrEmsEvent(NABoolean aem) { aqrEmsEvent_ = aem; }
NABoolean getAqrEmsEvent() { return aqrEmsEvent_; }
void setAqrType(Lng32 aqrt) { aqrType_ = aqrt; }
NABoolean getAqrType() { return aqrType_; }
void setRtsTimeout(Lng32 rtsTimeout)
{
rtsTimeout_ = rtsTimeout;
updateDefaultsValueString(RTS_TIMEOUT, rtsTimeout_);
}
Lng32 getRtsTimeout(){ return rtsTimeout_; }
NABoolean getCallEmbeddedArkcmp() { return callEmbeddedArkcmp_;}
void setParserFlags(Lng32 parserFlags)
{
parserFlags_ = parserFlags;
updateDefaultsValueString(PARSER_FLAGS, parserFlags_);
}
Lng32 getParserflags(){ return parserFlags_; }
Int32 *userId() { return &userId_; }
void setAQRWarnings(Lng32 v) { aqrWarn_ = v; }
Lng32 aqrWarnings() { return aqrWarn_; }
Lng32 getCancelEscalationInterval() { return cancelEscalationInterval_; }
Lng32 getCancelEscalationMxosrvrInterval()
{ return cancelEscalationMxosrvrInterval_; }
NABoolean getCancelEscalationSaveabend()
{ return cancelEscalationSaveabend_; }
NABoolean getCancelQueryAllowed() { return cancelQueryAllowed_; }
NABoolean getCancelUniqueQuery() { return cancelUniqueQuery_; }
NABoolean getCancelLogging() { return cancelLogging_; }
NABoolean getSuspendLogging() { return suspendLogging_; }
NABoolean getUseLibHdfs() { return useLibHdfs_; }
Lng32 readFromDefaultsTable(CliGlobals * cliGlobals);
Lng32 setIsoMappingDefine();
SessionDefaultMap getSessionDefaultMap
(char * attribute, Lng32 attrLen);
void setSessionDefaultAttributeValue
(SessionDefaultMap sda, char * attrValue, Lng32 attrValueLen);
void initializeSessionDefault
(char * attribute, Lng32 attrLen,
char * attrValue, Lng32 attrValueLen);
void position();
short getNextSessionDefault(char* &attributeString,
char* &attributeValue,
Lng32 &isCQD,
Lng32 &inDefTab,
Lng32 &isSSD,
Lng32 &isExternalized);
void saveSessionDefaults();
void restoreSessionDefaults();
void resetSessionOnlyAttributes();
void setParentQid(char *attrValue, Lng32 attrValueLen);
char * getParentQid() { return parentQid_; }
void setParentQidSystem(char *attrValue, Lng32 attrValueLen);
char * getParentQidSystem() { return parentQidSystem_; }
void beginSession();
NAList<SessionEnvvar> * sessionEnvvars()
{return sessionEnvvars_;}
AQRInfo * aqrInfo() { return aqrInfo_; }
Lng32 getStatisticsViewType() { return statisticsViewType_; }
void setStatisticsViewType(Lng32 type)
{
statisticsViewType_ = type;
updateDefaultsValueString(STATISTICS_VIEW_TYPE, statisticsViewType_);
}
Lng32 getReclaimTotalMemorySize() { return reclaimTotalMemorySize_; }
// Memory Size in MB
void setReclaimTotalMemorySize(Lng32 memorySize)
{
reclaimTotalMemorySize_ = memorySize * 1024 * 1024;
updateDefaultsValueString(RECLAIM_MEMORY_AFTER, memorySize);
}
Lng32 getReclaimFreeMemoryRatio() { return reclaimFreeMemoryRatio_; }
void setReclaimFreeMemoryRatio(Lng32 freeMemoryRatio)
{
reclaimFreeMemoryRatio_ = freeMemoryRatio;
updateDefaultsValueString(RECLAIM_FREE_MEMORY_RATIO, reclaimFreeMemoryRatio_);
}
NABoolean getRedriveCTAS() { return redriveCTAS_; }
void setRedriveCTAS(NABoolean v)
{
redriveCTAS_ = v;
}
// For SeaMonster
char *getExSMTraceFilePrefix() { return exsmTraceFilePrefix_; }
void setExSMTraceFilePrefix(const char *pref, Int32 prefLen);
UInt32 getExSMTraceLevel() { return exsmTraceLevel_; }
void setExSMTraceLevel(UInt32 lvl) { exsmTraceLevel_ = lvl; }
Lng32 getReclaimFreePFSRatio() { return reclaimFreePFSRatio_; }
void setReclaimFreePFSRatio(Lng32 freePFSRatio)
{
reclaimFreePFSRatio_ = freePFSRatio;
updateDefaultsValueString(RECLAIM_FREE_PFS_RATIO, reclaimFreePFSRatio_);
}
NABoolean callEmbeddedArkcmp() { return callEmbeddedArkcmp_;}
private:
void updateDefaultsValueString(SessionDefaultAttribute sda,
const Int16 DisAmbiguate,
NABoolean value);
void updateDefaultsValueString(SessionDefaultAttribute sda,
Lng32 value);
void updateDefaultsValueString(SessionDefaultAttribute sda,
char * value);
private:
CollHeap * heap_;
char ** defaultsValueString_;
char ** savedDefaultsValueString_;
// not set as yet
NABoolean jdbcProcess_;
NABoolean odbcProcess_;
NABoolean dbtrProcess_; //db transporter
NABoolean mxciProcess_;
NABoolean nvciProcess_;
NABoolean internalCli_;
NABoolean mariaQuestProcess_;
// current user id
Int32 userId_;
// cat & sch
char * catalog_;
char * schema_;
// Limit on number of statements with ESPs assigned. When the limit is
// exceeded, releaseSpace() will be called on the closed statement whose
// ESPs were assigned earliest
Lng32 espAssignDepth_;
// ESP won't get assigned to new query if it has this much or less time left
// before idle timed out
Lng32 espAssignTimeWindow_;
// number of seconds that idle esps are kept alive before killed by master
Lng32 espStopIdleTimeout_;
// number of seconds an esp should wait idle before it times out
Lng32 espIdleTimeout_;
// number of seconds the compiler process can remain idle before it is killed by the master
Lng32 compilerIdleTimeout_;
// numcompilerIber of seconds an esp should remain inactive before times out
Lng32 espInactiveTimeout_;
// number of seconds that master waits for release work reply from esps
Lng32 espReleaseWorkTimeout_;
// The maximum priv stack size to request when calling HEADROOM_ENSURE_
Lng32 maxPollingInterval_;
Lng32 persistentOpens_;
// secs after which deallocated memory is freed up and given back to kernel
Lng32 espFreeMemTimeout_;
// Generate an EMS event if a connection is placed in error state due to
// a close message with a request outstanding
NABoolean espCloseErrorLogging_;
// user experience level
char * uel_;
// others
NABoolean cliBulkMove_;
// if set to true, an ems msg is logged when a query is retried.
// Default is TRUE.
NABoolean aqrEmsEvent_;
// type of aqr: 0, none. 1, system. 2, On. 3, All
Lng32 aqrType_;
// input & output of datatypes to be done in sql internal format.
// Currently done for datetime and internal datatypes.
// External string format is returned, if this SSD is not set.
// Used for bulk moves.
NABoolean internalFormatIO_;
// value of isoMapping. Set in defaults table.
char * isoMappingName_;
Lng32 isoMappingEnum_;
//Timeout when requesting run-time stats from the SSMP process, in seconds.
Lng32 rtsTimeout_;
Lng32 parserFlags_;
Lng32 rowsetAtomicity_;
// if warnings should be returned after recompilation/retry.
// 0, no warnings. 1, all warnings.
Lng32 aqrWarn_;
// variable to return default values for display
Lng32 currDef_;
NAList<SessionEnvvar> * sessionEnvvars_;
char *parentQid_; // Parent Query id at session level
char parentQidSystem_[25]; // Parent QueryId system at session level
NABoolean wmsProcess_; // Flag to trigger deallocating StmtStats in the shared segment
// via MXSSMP when RMS stats is collected after the statement has
// been deallocated
Lng32 cancelEscalationInterval_; // canceler's session
Lng32 cancelEscalationMxosrvrInterval_; // canceler's session
NABoolean cancelEscalationSaveabend_; // canceler's session
NABoolean cancelQueryAllowed_; // target query's session
NABoolean cancelUniqueQuery_; // target query's session
NABoolean cancelLogging_; // canceler's session
NABoolean suspendLogging_; // suspended's session
NABoolean callEmbeddedArkcmp_; // call the procedural interface and don't send a message to the arkcmp process.
AQRInfo * aqrInfo_;
Lng32 statisticsViewType_; // Statistics view type which could be different from the collection statistics type
/*
Memory manager will start to reclaim space when the below conditions are met
a) Total memory size in executor segments is above the set value (800 MB)
b) When free to total size memory ratio is less than the set value (25%)
*/
Lng32 reclaimTotalMemorySize_; // Total Memory size after which memory manager might trigger reclaim memory space
Lng32 reclaimFreeMemoryRatio_; // Free to Total memory ratio
NABoolean redriveCTAS_;
// For SeaMonster
char *exsmTraceFilePrefix_;
UInt32 exsmTraceLevel_;
Lng32 reclaimFreePFSRatio_; // 100 - (PFS current use / PFS size))
Lng32 jniDebugPort_; // port to attache JNI debugger, <=0 to disable
Lng32 jniDebugTimeout_; // timeout (msec) to wait for debugger to attach
NABoolean useLibHdfs_;
};
// information, status and other details related to auto-query-retry.
#define AQREntry(sqlcode, nskcode, retries, delay, type, numCQDs, cqdStr, cmpInfo, intAQR) \
{sqlcode, nskcode, retries, delay, type, numCQDs, cqdStr, cmpInfo, intAQR}
class AQRInfo : public NABasicObject {
public:
struct AQRErrorMap {
public:
Lng32 sqlcode;
Lng32 nskcode;
Lng32 retries;
Lng32 delay;
Lng32 type;
Lng32 numCQDs;
const char * cqdStr;
Lng32 cmpInfo;
Lng32 intAQR;
};
enum RetryType
{
// no retry
RETRY_NONE = -1,
// retry immediately. unavailable partition...
RETRY = 0,
RETRY_MIN_VALID_TYPE = RETRY,
// retry, but don't use query cache during recompile.
// Decache all entries. Blown away open, timestamp mismatch, ...
RETRY_WITH_DECACHE = 1,
// retry, but cleanup and verify esps.
// Done after ESP deaths.
RETRY_WITH_ESP_CLEANUP = 2,
// retry but only if there is no user transaction and autocommit is on.
// Invalid transid is an example.
RETRY_NO_XN = 3,
RETRY_MXCMP_KILL=4,
RETRY_DECACHE_HTABLE = 5,
RETRY_MAX_VALID_TYPE = RETRY_DECACHE_HTABLE
};
AQRInfo(CollHeap * heap);
~AQRInfo();
void position();
short getNextAQREntry(Lng32 &sqlcode, Lng32 &nskcode,
Lng32 &retries, Lng32 &delay, Lng32 &type,
Lng32 &intAQR);
void saveAQRErrors();
NABoolean restoreAQRErrors();
short getAQREntry(Lng32 sqlcode, Lng32 nskcode,
Int32 &retries, Int32 &delay, Int32 &type,
Int32 &numCQDs, char* &cqdStr,
Int32 &cmpInfo, Int32 &intAQR);
short setAQREntry(Lng32 task,
Lng32 sqlcode, Lng32 nskcode,
Int32 retries, Int32 delay, Int32 type,
Int32 numCQDs, char * cqdStr,
Int32 cmpInfo, Int32 intAQR);
short setAQREntriesFromInputStr(char * inStr, Lng32 inStrLen);
AQRStatementInfo * aqrStmtInfo() { return aqrStmtInfo_; }
void setAqrStmtInfo(AQRStatementInfo * v) { aqrStmtInfo_ = v; }
void clearRetryInfo();
Lng32 setCQDs(Lng32 numCQDs, char * cqdStr,
ContextCli * context);
Lng32 resetCQDs(Lng32 numCQDs, char * cqdStr,
ContextCli * context);
Lng32 setCompilerInfo(char * queryId,
ComCondition * errCond,
ContextCli * context);
Lng32 resetCompilerInfo(char * queryId,
ComCondition * errCond,
ContextCli * context);
NABoolean xnStartedAtPrepare() { return (flags_ & PREPARE_XN) != 0; ; }
void setXnStartedAtPrepare(NABoolean v)
{ (v ? flags_ |= PREPARE_XN : flags_ &= ~PREPARE_XN); }
NABoolean espCleanup() { return (flags_ & ESP_CLEANUP) != 0; ; }
void setEspCleanup(NABoolean v)
{ (v ? flags_ |= ESP_CLEANUP : flags_ &= ~ESP_CLEANUP); }
NABoolean abortedTransWasImplicit()
{ return (flags_ & ABORTED_TX_WAS_IMPLICIT) != 0; ; }
// Reset in clearRetryInfo().
void setAbortedTransWasImplicit() { flags_ |= ABORTED_TX_WAS_IMPLICIT; }
NABoolean noAQR() { return (flags_ & NO_AQR) != 0; ; }
void setNoAQR(NABoolean v)
{ (v ? flags_ |= NO_AQR : flags_ &= ~NO_AQR); }
private:
enum AQRFlags
{
PREPARE_XN = 0x0001,
ESP_CLEANUP = 0x0002,
ABORTED_TX_WAS_IMPLICIT = 0x0004,
NO_AQR = 0x0008
};
CollHeap * heap_;
LIST(AQRErrorMap) *aqrErrorList_;
LIST(AQRErrorMap) *origAqrErrorList_;
// unused LIST(AQRErrorMap) *savedAqrErrorList_;
// error information set when a retryable error is returned as part
// auto query retry feature.
// Caller must call back to reprepare the query.
AQRStatementInfo * aqrStmtInfo_;
Lng32 currErr_;
UInt32 flags_;
};
class AQRStatementAttributes : public NABasicObject {
public:
AQRStatementAttributes(CollHeap * heap);
~AQRStatementAttributes();
void setAttributesInStatement(Statement *targetStmt);
void getAttributesFromStatement(Statement *fromStmt);
void clear();
CollHeap * heap_;
SQLATTRHOLDABLE_INTERNAL_TYPE holdable_;
Statement::AtomicityType rowsetAtomicity_;
ULng32 inputArrayMaxsize_;
char * uniqueStmtId_;
Lng32 uniqueStmtIdLen_;
char *parentQID_;
char parentQIDSystem_[25];
Int64 exeStartTime_;
};
class AQRStatementInfo : public NABasicObject {
public:
AQRStatementInfo(CollHeap * heap);
~AQRStatementInfo()
{
if (savedStmtAttributes_)
NADELETE(savedStmtAttributes_, AQRStatementAttributes,heap_);
savedStmtAttributes_ = NULL;
}
ULng32 getRetryPrepareFlags() { return retryPrepareFlags_; }
SQLSTMT_ID * getRetryStatementId() { return retryStatementId_; }
SQLDESC_ID * getRetrySqlSource() { return retrySqlSource_; }
SQLDESC_ID * getRetryInputDesc() { return retryInputDesc_; }
SQLDESC_ID * getRetryOutputDesc() { return retryOutputDesc_; }
SQLDESC_ID * getRetryTempInputDesc() { return retryTempInputDesc_; }
SQLDESC_ID * getRetryTempOutputDesc() { return retryTempOutputDesc_; }
AQRStatementAttributes *getAQRStatementAttributes() { return savedStmtAttributes_;}
void saveStatementHandle(SQLSTMT_ID *stmt_id)
{
retryStatementHandle_ = stmt_id->handle;
}
void * getSavedStmtHandle() {return retryStatementHandle_;}
NABoolean retryFirstFetch() { return (retryFlags_ & RETRY_FIRST_FETCH) != 0; ; }
NABoolean retryAfterExec() { return (retryFlags_ & RETRY_AFTER_EXEC) != 0; ; }
void setRetryStatementId(SQLSTMT_ID * v) { retryStatementId_ = v; }
void setRetrySqlSource(SQLDESC_ID * v) { retrySqlSource_ = v; }
void setRetryInputDesc(SQLDESC_ID * v) { retryInputDesc_ = v; }
void setRetryOutputDesc(SQLDESC_ID * v) { retryOutputDesc_ = v; }
void setRetryPrepareFlags(ULng32 v) { retryPrepareFlags_ = v; }
void setRetryTempInputDesc(SQLDESC_ID * v) { retryTempInputDesc_ = v; }
void setRetryTempOutputDesc(SQLDESC_ID * v) { retryTempOutputDesc_ = v; }
void clearRetryInfo();
void setRetryFirstFetch(NABoolean v)
{ (v ? retryFlags_ |= RETRY_FIRST_FETCH : retryFlags_ &= ~RETRY_FIRST_FETCH); }
void setRetryAfterExec(NABoolean v)
{ (v ? retryFlags_ |= RETRY_AFTER_EXEC : retryFlags_ &= ~RETRY_AFTER_EXEC); }
void copySavedStatementhandle(SQLSTMT_ID *stmt_id)
{
stmt_id->handle = retryStatementHandle_;
}
void saveAttributesFromStmt(Statement *stmt);
void copyAttributesToStmt(Statement *stmt);
private:
CollHeap *heap_;
SQLSTMT_ID * retryStatementId_;
SQLDESC_ID * retrySqlSource_;
SQLDESC_ID * retryInputDesc_;
SQLDESC_ID * retryOutputDesc_;
SQLDESC_ID * retryTempInputDesc_;
SQLDESC_ID * retryTempOutputDesc_;
ULng32 retryPrepareFlags_;
UInt32 retryFlags_;
enum RetryFlags
{
// first fetch, stmt could be retried.
RETRY_FIRST_FETCH = 0x0001,
RETRY_AFTER_EXEC = 0x0002
};
void * retryStatementHandle_;
AQRStatementAttributes *savedStmtAttributes_;
};
#endif