/*
* Copyright (c) 2004, 2005, 2006 TADA AB - Taby Sweden
* Distributed under the terms shown in the file COPYRIGHT
* found in the root folder of this project or at
* http://eng.tada.se/osprojects/COPYRIGHT.html
*
* @author Thomas Hallgren
*/
#ifndef __pljava_Invocation_h
#define __pljava_Invocation_h
#include
#include "pljava/pljava.h"
#ifdef __cplusplus
extern "C" {
#endif
struct CallLocal_;
typedef struct CallLocal_ CallLocal;
struct Invocation_
{
/**
* A Java object representing the current invocation. This
* field will be NULL if no such object has been requested.
*/
jobject invocation;
/**
* The context to use when allocating values that are to be
* returned from the call.
*/
MemoryContext upperContext;
/**
* Set when an SPI_connect is issued. Ensures that SPI_finish
* is called when the function exits.
*/
bool hasConnected;
/**
* Set to true if the call originates from an ExprContextCallback. When
* it does, we should not close any cursors.
*/
bool inExprContextCB;
/**
* Set to true if the executing function is trusted
*/
bool trusted;
/**
* The currently executing Function.
*/
Function function;
/**
* Set to true if an elog with a severity >= ERROR
* has occured. All calls from Java to the backend will
* be prevented until this flag is reset (by a rollback
* of a savepoint or function exit).
*/
bool errorOccured;
/**
* List of call local structures that has been wrapped
* during this invocation.
*/
CallLocal* callLocals;
/**
* The previous call context when nested function calls
* are made or 0 if this call is at the top level.
*/
Invocation* previous;
};
extern Invocation* currentInvocation;
extern void Invocation_assertConnect(void);
extern void Invocation_assertDisconnect(void);
extern void Invocation_pushBootContext(Invocation* ctx);
extern void Invocation_popBootContext(void);
extern void Invocation_pushInvocation(Invocation* ctx, bool trusted);
extern void Invocation_popInvocation(bool wasException);
extern jlong Invocation_createLocalWrapper(void* pointer);
extern void* Invocation_getWrappedPointer(jlong wrapper);
extern void Invocation_freeLocalWrapper(jlong wrapper);
extern jobject Invocation_getTypeMap(void);
/*
* Switch memory context to a context that is durable between calls to
* the call manager but not durable between queries. The old context is
* returned. This method can be used when creating values that will be
* returned from the Pl/Java routines. Once the values have been created
* a call to MemoryContextSwitchTo(oldContext) must follow where oldContext
* is the context returned from this call.
*/
extern MemoryContext Invocation_switchToUpperContext(void);
#ifdef __cplusplus
}
#endif
#endif /* !__pljava_Invocation_h */