#ifndef DATACUBE_H
#define DATACUBE_H

#include "nodes/parsenodes.h"
#include "lib/stringinfo.h"
#include "access/tupdesc.h"

extern int nCr (int n, int r);
extern int getMaxCombinations(int n);
extern void Combination(char **arr ,int n, int x, int r);
extern int getIndex(char *str);
extern int generateCombinations (void);
extern StringInfo generateQuery(int numSelect, char *aggregateAttrsList);
extern void executeQuery(StringInfo buf, MemoryContext context);
extern char* getTableName(void);
extern void constructCube(Query *querytree, MemoryContext context, char *cubeTable);
extern void dropCubeTable(char *tableName, MemoryContext context);
extern void get_query_def(Query *query, StringInfo buf, List *parentnamespace, TupleDesc resultDesc);
extern char *generate_function_name(Oid funcid, int nargs, Oid *argtypes);

#endif	/* DATACUBE_H */
