gpcontrib/gpmapreduce/include/mapred.h (225 lines of code) (raw):

#ifndef MAPRED_H #define MAPRED_H #include <postgres_fe.h> #ifndef YAML_H #include <yaml.h> #endif #ifndef LIBPQ_FE_H #include <libpq-fe.h> #endif #ifndef true #define true 1 #endif #ifndef false #define false 0 #endif #ifndef boolean #define boolean int #endif typedef enum { ERROR_NONE = 0, /* No error */ ERROR_WARNING, /* Warning message */ ERROR_PARSE_FAILURE, /* YAML parse failure */ ERROR_UNEXPECTED_EVENT, /* YAML parse failure */ ERROR_UNEXPECTED_EOS, /* YAML parse failure */ ERROR_OBJECT_MISMATCH, /* User .yml document problem */ ERROR_UNKNOWN_KEY, /* User .yml document problem */ ERROR_BAD_VALUE, /* User .yml document problem */ ERROR_MEMORY, /* Memory allocation failure */ ERROR_IMPOSSIBLE, /* Internal assertion failure */ } mapred_error_t; typedef struct mapred_object_ mapred_object_t; typedef struct mapred_clist_ mapred_clist_t; typedef struct mapred_plist_ mapred_plist_t; typedef struct mapred_olist_ mapred_olist_t; /* Various Enumerations */ typedef enum { MAPRED_NO_KIND = 0, MAPRED_DOCUMENT = 1, MAPRED_INPUT = 2, MAPRED_OUTPUT = 3, MAPRED_MAPPER = 4, MAPRED_TRANSITION = 5, MAPRED_COMBINER = 6, MAPRED_FINALIZER = 7, MAPRED_REDUCER = 8, MAPRED_TASK = 9, MAPRED_EXECUTION = 10, MAPRED_ADT = 11 /* internal use only */ } mapred_kind_t; #define MAPRED_MAXKIND 11 extern const char *mapred_kind_name[]; extern const char *default_parameter_names[MAPRED_MAXKIND+1][2]; extern const char *default_return_names[MAPRED_MAXKIND+1][2]; typedef enum { MAPRED_MODE_NONE = 0, MAPRED_MODE_SINGLE, MAPRED_MODE_MULTI, MAPRED_MODE_ACCUMULATED, /* not implemented */ MAPRED_MODE_WINDOWED, /* not implemented */ MAPRED_MODE_INVALID } mapred_mode_t; typedef enum { MAPRED_INPUT_NONE = 0, MAPRED_INPUT_FILE, MAPRED_INPUT_GPFDIST, MAPRED_INPUT_TABLE, MAPRED_INPUT_QUERY, MAPRED_INPUT_EXEC, MAPRED_INPUT_INVALID } mapred_input_kind_t; typedef enum { MAPRED_OUTPUT_NONE = 0, MAPRED_OUTPUT_FILE, MAPRED_OUTPUT_TABLE, MAPRED_OUTPUT_INVALID } mapred_output_kind_t; typedef enum { MAPRED_FORMAT_NONE = 0, MAPRED_FORMAT_TEXT, MAPRED_FORMAT_CSV, MAPRED_FORMAT_INVALID } mapred_format_t; typedef enum { MAPRED_OUTPUT_MODE_NONE = 0, MAPRED_OUTPUT_MODE_REPLACE, MAPRED_OUTPUT_MODE_APPEND, MAPRED_OUTPUT_MODE_INVALID } mapred_output_mode_t; /* * Many objects in the map-reduce schema reference other objects by name. * During the parse we store these with just the name and later we hook * up all the references. */ typedef struct mapred_reference_ { char *name; mapred_object_t *object; } mapred_reference_t; /* character list */ struct mapred_clist_ { char *value; mapred_clist_t *next; }; /* parameter list */ struct mapred_plist_ { char *name; char *type; mapred_plist_t *next; }; /* object list */ struct mapred_olist_ { mapred_object_t *object; mapred_olist_t *next; }; /* Object types */ typedef struct { mapred_input_kind_t type; char *desc; mapred_clist_t *files; mapred_plist_t *columns; mapred_format_t format; char *delimiter; char *encoding; char *null; char *quote; char *escape; int error_limit; } mapred_input_t; typedef struct { mapred_output_kind_t type; char *desc; mapred_output_mode_t mode; mapred_format_t format; char *delimiter; char *encoding; } mapred_output_t; typedef struct { char *body; char *language; char *library; mapred_plist_t *parameters; mapred_plist_t *returns; mapred_plist_t *internal_returns; mapred_reference_t rtype; mapred_mode_t mode; int flags; #define mapred_function_strict 0x00000001 #define mapred_function_immutable 0x00000002 #define mapred_function_unordered 0x00000004 int lineno; } mapred_function_t; /* Mappers, Transitions, Combiners, and Finalizers are all just functions */ typedef mapred_function_t mapred_mapper_t; typedef mapred_function_t mapred_transition_t; typedef mapred_function_t mapred_combiner_t; typedef mapred_function_t mapred_finalizer_t; typedef struct { mapred_reference_t transition; mapred_reference_t combiner; mapred_reference_t finalizer; char *initialize; mapred_plist_t *parameters; /* points into transition plist */ mapred_plist_t *returns; mapred_clist_t *keys; mapred_clist_t *ordering; } mapred_reducer_t; typedef struct { mapred_reference_t input; mapred_reference_t mapper; mapred_reference_t reducer; mapred_reference_t output; boolean execute; int flags; #define mapred_task_resolving 0x00000001 #define mapred_task_resolved 0x00000002 /* calculated parameters, setup during resolve_dependencies */ mapred_plist_t *parameters; /* points into input plist */ mapred_plist_t *grouping; mapred_plist_t *returns; } mapred_task_t; /* * Whenever a function returns more than a single column an abstract * data type will be transparently created. */ typedef struct { mapred_plist_t *returns; } mapred_adt_t; typedef struct { char *buffer; size_t bufsize; size_t position; size_t grow; } buffer_t; typedef struct { char *version; char *database; char *user; char *host; int port; mapred_olist_t *objects; mapred_olist_t *execute; int flags; #define mapred_document_defines 0x00000001 #define mapred_document_executes 0x00000002 #define mapred_document_error 0x10000000 int id; char *prefix; buffer_t *errors; } mapred_document_t; /* Union of all mapred object types */ struct mapred_object_ { mapred_kind_t kind; char *name; int line; boolean created; boolean internal; union { mapred_document_t document; mapred_input_t input; mapred_output_t output; mapred_function_t function; mapred_reducer_t reducer; mapred_task_t task; mapred_adt_t adt; } u; }; /* Functions */ void mapred_run_document(PGconn *conn, mapred_document_t *doc); mapred_olist_t* mapred_parse_file(FILE *file); mapred_olist_t* mapred_parse_string(unsigned char *yaml); void mapred_dump_yaml(mapred_object_t *obj); void mapred_destroy_object(mapred_object_t **obj); void mapred_destroy_olist(mapred_olist_t **olist); void mapred_destroy_plist(mapred_plist_t **plisth); void mapred_destroy_clist(mapred_clist_t **clist); /* Global variables, defined in main.c */ extern int global_verbose_flag; extern int global_debug_flag; extern int global_print_flag; extern int global_explain_flag; extern mapred_plist_t *global_plist; /* Flags set in global_explain_flag */ #define global_explain 0x00000001 #define global_analyze 0x00000002 #endif