166 lines
3.2 KiB
C
166 lines
3.2 KiB
C
#include "ecpgtype.h"
|
|
|
|
struct ECPGtype;
|
|
struct ECPGstruct_member
|
|
{
|
|
char *name;
|
|
struct ECPGtype *typ;
|
|
struct ECPGstruct_member *next;
|
|
};
|
|
|
|
struct ECPGtype
|
|
{
|
|
enum ECPGttype typ;
|
|
long size; /* For array it is the number of elements.
|
|
* For varchar it is the maxsize of the
|
|
* area. */
|
|
union
|
|
{
|
|
struct ECPGtype *element; /* For an array this is the type
|
|
* of the element */
|
|
|
|
struct ECPGstruct_member *members;
|
|
/* A pointer to a list of members. */
|
|
} u;
|
|
};
|
|
|
|
/* Everything is malloced. */
|
|
void ECPGmake_struct_member(char *, struct ECPGtype *, struct ECPGstruct_member **);
|
|
struct ECPGtype *ECPGmake_simple_type(enum ECPGttype, long);
|
|
struct ECPGtype *ECPGmake_varchar_type(enum ECPGttype, long);
|
|
struct ECPGtype *ECPGmake_array_type(struct ECPGtype *, long);
|
|
struct ECPGtype *ECPGmake_struct_type(struct ECPGstruct_member *, enum ECPGttype type);
|
|
struct ECPGstruct_member *ECPGstruct_member_dup(struct ECPGstruct_member *);
|
|
|
|
/* Frees a type. */
|
|
void ECPGfree_struct_member(struct ECPGstruct_member *);
|
|
void ECPGfree_type(struct ECPGtype *);
|
|
|
|
/* Dump a type.
|
|
The type is dumped as:
|
|
type-tag <comma> reference-to-variable <comma> arrsize <comma> size <comma>
|
|
Where:
|
|
type-tag is one of the simple types or varchar.
|
|
reference-to-variable can be a reference to a struct element.
|
|
arrsize is the size of the array in case of array fetches. Otherwise 0.
|
|
size is the maxsize in case it is a varchar. Otherwise it is the size of
|
|
the variable (required to do array fetches of structs).
|
|
*/
|
|
void ECPGdump_a_type(FILE *, const char *, struct ECPGtype *, const char *, struct ECPGtype *, const char *, const char *);
|
|
|
|
/* A simple struct to keep a variable and its type. */
|
|
struct ECPGtemp_type
|
|
{
|
|
struct ECPGtype *typ;
|
|
const char *name;
|
|
};
|
|
|
|
extern const char *ECPGtype_name(enum ECPGttype typ);
|
|
|
|
/* some stuff for whenever statements */
|
|
enum WHEN_TYPE
|
|
{
|
|
W_NOTHING,
|
|
W_CONTINUE,
|
|
W_BREAK,
|
|
W_SQLPRINT,
|
|
W_GOTO,
|
|
W_DO,
|
|
W_STOP
|
|
};
|
|
|
|
struct when
|
|
{
|
|
enum WHEN_TYPE code;
|
|
char *command;
|
|
char *str;
|
|
};
|
|
|
|
struct index
|
|
{
|
|
int index1;
|
|
int index2;
|
|
char *str;
|
|
};
|
|
|
|
struct this_type
|
|
{
|
|
enum ECPGttype type_enum;
|
|
char *type_str;
|
|
int type_dimension;
|
|
int type_index;
|
|
};
|
|
|
|
struct _include_path
|
|
{
|
|
char *path;
|
|
struct _include_path *next;
|
|
};
|
|
|
|
struct cursor
|
|
{
|
|
char *name;
|
|
char *command;
|
|
char *connection;
|
|
struct arguments *argsinsert;
|
|
struct arguments *argsresult;
|
|
struct cursor *next;
|
|
};
|
|
|
|
struct typedefs
|
|
{
|
|
char *name;
|
|
struct this_type *type;
|
|
struct ECPGstruct_member *struct_member_list;
|
|
struct typedefs *next;
|
|
};
|
|
|
|
struct _defines
|
|
{
|
|
char *old;
|
|
char *new;
|
|
int pertinent;
|
|
struct _defines *next;
|
|
};
|
|
|
|
/* This is a linked list of the variable names and types. */
|
|
struct variable
|
|
{
|
|
char *name;
|
|
struct ECPGtype *type;
|
|
int brace_level;
|
|
struct variable *next;
|
|
};
|
|
|
|
struct arguments
|
|
{
|
|
struct variable *variable;
|
|
struct variable *indicator;
|
|
struct arguments *next;
|
|
};
|
|
|
|
struct descriptor
|
|
{
|
|
char *name;
|
|
char *connection;
|
|
struct descriptor *next;
|
|
};
|
|
|
|
struct assignment
|
|
{
|
|
char *variable;
|
|
enum ECPGdtype value;
|
|
struct assignment *next;
|
|
};
|
|
|
|
enum errortype
|
|
{
|
|
ET_WARN, ET_ERROR, ET_FATAL
|
|
};
|
|
|
|
struct fetch_desc
|
|
{
|
|
char *str;
|
|
char *name;
|
|
};
|