#pragma once #include #include #include #include #include #include "protocol_defs.h" #include "datum.h" #include "error.h" #define FOREVER (-1) #define SECOND 1 #define MICROSECOND 0.000001 namespace RethinkDB { class Term; using OptArgs = std::map; // A connection to a RethinkDB server // It contains: // * A socket // * Read and write locks // * A cache of responses that have not been read by the corresponding Cursor class ConnectionPrivate; class Connection { public: Connection() = delete; Connection(const Connection&) noexcept = delete; Connection(Connection&&) noexcept = delete; Connection& operator=(Connection&&) noexcept = delete; Connection& operator=(const Connection&) noexcept = delete; ~Connection(); void close(); private: explicit Connection(ConnectionPrivate *dd); std::unique_ptr d; Cursor start_query(Term *term, OptArgs&& args); void stop_query(uint64_t); void continue_query(uint64_t); friend class Cursor; friend class CursorPrivate; friend class Token; friend class Term; friend std::unique_ptr connect(std::string host, int port, std::string auth_key); }; // $doc(connect) std::unique_ptr connect(std::string host = "localhost", int port = 28015, std::string auth_key = ""); }