#ifndef _BINGO_PG_CURSOR_H__
#define _BINGO_PG_CURSOR_H__

#include "base_cpp/array.h"
#include "base_cpp/exception.h"
#include "bingo_postgres.h"

struct ItemPointerData;
class BingoPgText;

class BingoPgCursor
{
public:
    BingoPgCursor(const char* format, ...);
    BingoPgCursor(indigo::Array<char>& query_str);
    virtual ~BingoPgCursor();

    bool next();

    void getId(int arg_idx, ItemPointerData&);
    void getText(int arg_idx, BingoPgText&);
    uintptr_t getDatum(int arg_idx);
    unsigned int getArgOid(int arg_idx);

    DECL_ERROR;

private:
    BingoPgCursor(const BingoPgCursor&); // no implicit copy

    void _init(indigo::Array<char>& query_str);

    indigo::Array<char> _cursorName;
    PG_OBJECT _cursorPtr;
    bool _pushed;
};

#endif /* BINGO_PG_CURSOR_H */
