* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ---------------------------------------------------------------------------------------
*
* libpqwalreceiver.h
* libpqwalreceiver init for WalreceiverMain.
*
*
* IDENTIFICATION
* src/include/replication/libpqwalreceiver.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef LIBPQWALRECEIVER_H
#define LIBPQWALRECEIVER_H
#include "utils/tuplestore.h"
typedef struct LibpqrcvConnectParam {
char* conninfo;
XLogRecPtr startpoint;
char* slotname;
int channel_identifier;
bool logical;
uint32 protoVersion;
List *publicationNames;
bool binary;
bool useSnapshot;
}LibpqrcvConnectParam;
* Status of walreceiver query execution.
*
* We only define statuses that are currently used.
*/
typedef enum {
WALRCV_ERROR,
WALRCV_OK_COMMAND,
WALRCV_OK_TUPLES,
WALRCV_OK_COPY_IN,
WALRCV_OK_COPY_OUT,
WALRCV_OK_COPY_BOTH,
} WalRcvExecStatus;
* Return value for walrcv_query, returns the status of the execution and
* tuples if any.
*/
typedef struct WalRcvExecResult {
WalRcvExecStatus status;
int sqlstate;
char *err;
Tuplestorestate *tuplestore;
TupleDesc tupledesc;
} WalRcvExecResult;
extern bool libpqrcv_connect_for_TLI(TimeLineID* timeLineID, char* conninfo);
extern bool libpqrcv_connect(char* conninfo, XLogRecPtr* startpoint, char* slotname, int channel_identifier);
extern bool libpqrcv_receive(int timeout, unsigned char* type, char** buffer, int* len);
extern void libpqrcv_send(const char* buffer, int nbytes);
extern void libpqrcv_disconnect(void);
extern void HaSetRebuildRepInfoError(HaRebuildReason reason);
extern void SetObsRebuildReason(HaRebuildReason reason);
extern void libpqrcv_check_conninfo(const char *conninfo);
extern WalRcvExecResult* libpqrcv_exec(const char *cmd, const int nRetTypes, const Oid *retTypes);
extern void IdentifyRemoteSystem(bool checkRemote);
extern void CreateRemoteReplicationSlot(XLogRecPtr startpoint, const char* slotname, bool isLogical, XLogRecPtr *lsn,
bool useSnapshot = false, CommitSeqNo *csn = NULL);
extern void StartRemoteStreaming(const LibpqrcvConnectParam *options);
extern ServerMode IdentifyRemoteMode();
#endif