164 lines
5.0 KiB
C
164 lines
5.0 KiB
C
/*---------------------------------------------------------------------------------------*
|
|
* gms_sql.h
|
|
*
|
|
* Definition about gms_sql package.
|
|
*
|
|
* IDENTIFICATION
|
|
* contrib/gms_sql/gms_sql.h
|
|
*
|
|
* ---------------------------------------------------------------------------------------
|
|
*/
|
|
#ifndef GMS_SQL_H
|
|
#define GMS_SQL_H
|
|
|
|
|
|
#include "catalog/pg_type.h"
|
|
#include "executor/spi.h"
|
|
#include "parser/parse_coerce.h"
|
|
#include "utils/memutils.h"
|
|
/*
|
|
* It is used for transformation result data to form
|
|
* generated by column_value procedure or column
|
|
* value function.
|
|
*/
|
|
typedef struct
|
|
{
|
|
bool isvalid; /* true, when this cast can be used */
|
|
bool without_cast; /* true, when cast is not necessary */
|
|
Oid targettypid; /* used for domains */
|
|
Oid array_targettypid; /* used for array domains */
|
|
int32 targettypmod; /* used for strings */
|
|
bool typbyval; /* used for copy result to outer memory context */
|
|
int16 typlen; /* used for copy result to outer memory context */
|
|
bool is_array;
|
|
Oid funcoid;
|
|
Oid funcoid_typmod;
|
|
CoercionPathType path;
|
|
CoercionPathType path_typmod;
|
|
FmgrInfo finfo;
|
|
FmgrInfo finfo_typmod;
|
|
FmgrInfo finfo_out;
|
|
FmgrInfo finfo_in;
|
|
Oid typIOParam;
|
|
} CastCacheData;
|
|
|
|
/*
|
|
* gms_sql cursor definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
int16 cid;
|
|
char *parsed_query;
|
|
char *original_query;
|
|
unsigned int nvariables;
|
|
int max_colpos;
|
|
List *variables;
|
|
List *columns;
|
|
char cursorname[32];
|
|
Portal portal; /* one shot (execute) plan */
|
|
SPIPlanPtr plan;
|
|
MemoryContext cursor_cxt;
|
|
MemoryContext cursor_xact_cxt;
|
|
MemoryContext tuples_cxt;
|
|
MemoryContext result_cxt; /* short life memory context */
|
|
HeapTuple tuples[1000];
|
|
TupleDesc coltupdesc;
|
|
TupleDesc tupdesc;
|
|
CastCacheData *casts;
|
|
uint64 processed;
|
|
uint64 nread;
|
|
uint64 start_read;
|
|
bool assigned;
|
|
bool executed;
|
|
Bitmapset *array_columns; /* set of array columns */
|
|
uint64 batch_rows; /* how much rows should be fetched to fill target arrays */
|
|
} CursorData;
|
|
|
|
typedef struct GmssqlContext
|
|
{
|
|
MemoryContext gms_sql_cxt = NULL;
|
|
CursorData *gms_sql_cursors = NULL;
|
|
}GmssqlContext;
|
|
|
|
/*
|
|
* bind variable data
|
|
*/
|
|
typedef struct
|
|
{
|
|
char *refname;
|
|
int position;
|
|
|
|
Datum value;
|
|
|
|
Oid typoid;
|
|
bool typbyval;
|
|
int16 typlen;
|
|
|
|
bool isnull;
|
|
unsigned int varno; /* number of assigned placeholder of parsed query */
|
|
bool is_array; /* true, when a value is assigned via bind_array */
|
|
Oid typelemid; /* Oid of element of a array */
|
|
bool typelembyval;
|
|
int16 typelemlen;
|
|
int index1;
|
|
int index2;
|
|
} VariableData;
|
|
|
|
/*
|
|
* Query result column definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
int position;
|
|
|
|
Oid typoid;
|
|
bool typbyval;
|
|
int16 typlen;
|
|
int32 typmod;
|
|
bool typisstr;
|
|
Oid typarrayoid; /* oid of requested array output value */
|
|
uint64 rowcount; /* maximal rows of requested array */
|
|
int index1; /* output array should be rewrited from this index */
|
|
} ColumnData;
|
|
|
|
typedef enum
|
|
{
|
|
TOKEN_SPACES,
|
|
TOKEN_COMMENT,
|
|
TOKEN_NUMBER,
|
|
TOKEN_BIND_VAR,
|
|
TOKEN_STR,
|
|
TOKEN_EXT_STR,
|
|
TOKEN_DOLAR_STR,
|
|
TOKEN_IDENTIF,
|
|
TOKEN_QIDENTIF,
|
|
TOKEN_DOUBLE_COLON,
|
|
TOKEN_OTHER,
|
|
TOKEN_NONE
|
|
} ofTokenType;
|
|
|
|
/* from gms_sql.cpp */
|
|
extern "C" Datum gms_sql_is_open(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_open_cursor(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_close_cursor(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_parse(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_bind_variable(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_bind_variable_f(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_bind_array_3(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_bind_array_5(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_define_column(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_define_array(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_execute(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_fetch_rows(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_execute_and_fetch(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_column_value(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_column_value_f(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_last_row_count(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_describe_columns(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_describe_columns_f(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_debug_cursor(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_return_result(PG_FUNCTION_ARGS);
|
|
extern "C" Datum gms_sql_return_result_i(PG_FUNCTION_ARGS);
|
|
|
|
#endif
|