mirror of https://github.com/citusdata/citus.git
97 lines
3.0 KiB
C
97 lines
3.0 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* multi_client_executor.h
|
|
* Type and function pointer declarations for executing client-side (libpq)
|
|
* logic.
|
|
*
|
|
* Copyright (c) 2012, Citus Data, Inc.
|
|
*
|
|
* $Id$
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef MULTI_CLIENT_EXECUTOR_H
|
|
#define MULTI_CLIENT_EXECUTOR_H
|
|
|
|
|
|
#define INVALID_CONNECTION_ID -1 /* identifies an invalid connection */
|
|
#define CLIENT_CONNECT_TIMEOUT 5 /* connection timeout in seconds */
|
|
#define MAX_CONNECTION_COUNT 2048 /* simultaneous client connection count */
|
|
#define STRING_BUFFER_SIZE 1024 /* buffer size for character arrays */
|
|
#define CONN_INFO_TEMPLATE "host=%s port=%u dbname=%s connect_timeout=%u"
|
|
|
|
|
|
/* Enumeration to track one client connection's status */
|
|
typedef enum
|
|
{
|
|
CLIENT_INVALID_CONNECT = 0,
|
|
CLIENT_CONNECTION_BAD = 1,
|
|
CLIENT_CONNECTION_BUSY = 2,
|
|
CLIENT_CONNECTION_READY = 3
|
|
} ConnectStatus;
|
|
|
|
|
|
/* Enumeration to see if we can read query results without blocking */
|
|
typedef enum
|
|
{
|
|
CLIENT_INVALID_RESULT_STATUS = 0,
|
|
CLIENT_RESULT_UNAVAILABLE = 1,
|
|
CLIENT_RESULT_BUSY = 2,
|
|
CLIENT_RESULT_READY = 3
|
|
} ResultStatus;
|
|
|
|
|
|
/* Enumeration to track one execution query's status on the client */
|
|
typedef enum
|
|
{
|
|
CLIENT_INVALID_QUERY = 0,
|
|
CLIENT_QUERY_FAILED = 1,
|
|
CLIENT_QUERY_DONE = 2,
|
|
CLIENT_QUERY_COPY = 3
|
|
} QueryStatus;
|
|
|
|
|
|
/* Enumeration to track one copy query's status on the client */
|
|
typedef enum
|
|
{
|
|
CLIENT_INVALID_COPY = 0,
|
|
CLIENT_COPY_MORE = 1,
|
|
CLIENT_COPY_FAILED = 2,
|
|
CLIENT_COPY_DONE = 3
|
|
} CopyStatus;
|
|
|
|
|
|
/* Enumeration to track the status of a query in a batch on the client */
|
|
typedef enum
|
|
{
|
|
CLIENT_INVALID_BATCH_QUERY = 0,
|
|
CLIENT_BATCH_QUERY_FAILED = 1,
|
|
CLIENT_BATCH_QUERY_CONTINUE = 2,
|
|
CLIENT_BATCH_QUERY_DONE = 3
|
|
} BatchQueryStatus;
|
|
|
|
|
|
/* Function declarations for executing client-side (libpq) logic. */
|
|
extern int32 MultiClientConnect(const char *nodeName, uint32 nodePort,
|
|
const char *nodeDatabase);
|
|
extern int32 MultiClientConnectStart(const char *nodeName, uint32 nodePort,
|
|
const char *nodeDatabase);
|
|
extern ConnectStatus MultiClientConnectPoll(int32 connectionId);
|
|
extern void MultiClientDisconnect(int32 connectionId);
|
|
extern bool MultiClientConnectionUp(int32 connectionId);
|
|
extern bool MultiClientSendQuery(int32 connectionId, const char *query);
|
|
extern bool MultiClientCancel(int32 connectionId);
|
|
extern ResultStatus MultiClientResultStatus(int32 connectionId);
|
|
extern QueryStatus MultiClientQueryStatus(int32 connectionId);
|
|
extern CopyStatus MultiClientCopyData(int32 connectionId, int32 fileDescriptor);
|
|
extern bool MultiClientQueryResult(int32 connectionId, void **queryResult,
|
|
int *rowCount, int *columnCount);
|
|
extern BatchQueryStatus MultiClientBatchResult(int32 connectionId, void **queryResult,
|
|
int *rowCount, int *columnCount);
|
|
extern char * MultiClientGetValue(void *queryResult, int rowIndex, int columnIndex);
|
|
extern void MultiClientClearResult(void *queryResult);
|
|
|
|
|
|
#endif /* MULTI_CLIENT_EXECUTOR_H */
|