2016-03-06 07:44:24 -05:00
|
|
|
#ifndef REDISMODULE_H
|
|
|
|
#define REDISMODULE_H
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
2016-03-31 11:43:37 -04:00
|
|
|
#include <stdio.h>
|
2016-03-06 07:44:24 -05:00
|
|
|
|
|
|
|
/* ---------------- Defines common between core and modules --------------- */
|
|
|
|
|
|
|
|
/* Error status return values. */
|
|
|
|
#define REDISMODULE_OK 0
|
|
|
|
#define REDISMODULE_ERR 1
|
|
|
|
|
|
|
|
/* API versions. */
|
|
|
|
#define REDISMODULE_APIVER_1 1
|
|
|
|
|
|
|
|
/* API flags and constants */
|
|
|
|
#define REDISMODULE_READ (1<<0)
|
|
|
|
#define REDISMODULE_WRITE (1<<1)
|
|
|
|
|
|
|
|
#define REDISMODULE_LIST_HEAD 0
|
|
|
|
#define REDISMODULE_LIST_TAIL 1
|
|
|
|
|
|
|
|
/* Key types. */
|
|
|
|
#define REDISMODULE_KEYTYPE_EMPTY 0
|
|
|
|
#define REDISMODULE_KEYTYPE_STRING 1
|
|
|
|
#define REDISMODULE_KEYTYPE_LIST 2
|
|
|
|
#define REDISMODULE_KEYTYPE_HASH 3
|
|
|
|
#define REDISMODULE_KEYTYPE_SET 4
|
|
|
|
#define REDISMODULE_KEYTYPE_ZSET 5
|
|
|
|
|
|
|
|
/* Reply types. */
|
|
|
|
#define REDISMODULE_REPLY_UNKNOWN -1
|
|
|
|
#define REDISMODULE_REPLY_STRING 0
|
|
|
|
#define REDISMODULE_REPLY_ERROR 1
|
|
|
|
#define REDISMODULE_REPLY_INTEGER 2
|
|
|
|
#define REDISMODULE_REPLY_ARRAY 3
|
|
|
|
#define REDISMODULE_REPLY_NULL 4
|
|
|
|
|
|
|
|
/* Error messages. */
|
|
|
|
#define REDISMODULE_ERRORMSG_WRONGTYPE "WRONGTYPE Operation against a key holding the wrong kind of value"
|
|
|
|
|
|
|
|
/* ------------------------- End of common defines ------------------------ */
|
|
|
|
|
|
|
|
#ifndef REDISMODULE_CORE
|
|
|
|
|
|
|
|
/* Incomplete structures for compiler checks but opaque access. */
|
|
|
|
typedef struct RedisModuleCtx RedisModuleCtx;
|
|
|
|
typedef struct RedisModuleKey RedisModuleKey;
|
|
|
|
typedef struct RedisModuleString RedisModuleString;
|
|
|
|
typedef struct RedisModuleCallReply RedisModuleCallReply;
|
|
|
|
|
|
|
|
typedef int (*RedisModuleCmdFunc) (RedisModuleCtx *ctx, RedisModuleString **argv, int argc);
|
|
|
|
|
|
|
|
#define REDISMODULE_GET_API(name) \
|
|
|
|
RedisModule_GetApi("RedisModule_" #name, ((void **)&RedisModule_ ## name))
|
|
|
|
|
|
|
|
#define REDISMODULE_API_FUNC(x) (*x)
|
|
|
|
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_SetModuleAttribs)(RedisModuleCtx *ctx, const char *name, int ver, int apiver);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_WrongArity)(RedisModuleCtx *ctx);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithLongLong)(RedisModuleCtx *ctx, long long ll);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_GetSelectedDb)(RedisModuleCtx *ctx);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_SelectDb)(RedisModuleCtx *ctx, int newid);
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_OpenKey)(RedisModuleCtx *ctx, RedisModuleString *keyname, int mode);
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_CloseKey)(RedisModuleKey *kp);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_KeyType)(RedisModuleKey *kp);
|
|
|
|
size_t REDISMODULE_API_FUNC(RedisModule_ValueLength)(RedisModuleKey *kp);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ListPush)(RedisModuleKey *kp, int where, RedisModuleString *ele);
|
|
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_ListPop)(RedisModuleKey *key, int where);
|
|
|
|
RedisModuleCallReply *REDISMODULE_API_FUNC(RedisModule_Call)(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...);
|
|
|
|
const char *REDISMODULE_API_FUNC(RedisModule_CallReplyProto)(RedisModuleCallReply *reply, size_t *len);
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_FreeCallReply)(RedisModuleCallReply *reply);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_CallReplyType)(RedisModuleCallReply *reply);
|
|
|
|
long long REDISMODULE_API_FUNC(RedisModule_CallReplyInteger)(RedisModuleCallReply *reply);
|
|
|
|
size_t REDISMODULE_API_FUNC(RedisModule_CallReplyLength)(RedisModuleCallReply *reply);
|
|
|
|
RedisModuleCallReply *REDISMODULE_API_FUNC(RedisModule_CallReplyArrayElement)(RedisModuleCallReply *reply, size_t idx);
|
|
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateString)(RedisModuleCtx *ctx, const char *ptr, size_t len);
|
|
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromLongLong)(RedisModuleCtx *ctx, long long ll);
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_FreeString)(RedisModuleCtx *ctx, RedisModuleString *str);
|
|
|
|
const char *REDISMODULE_API_FUNC(RedisModule_StringPtrLen)(RedisModuleString *str, size_t *len);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithError)(RedisModuleCtx *ctx, const char *err);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithSimpleString)(RedisModuleCtx *ctx, const char *msg);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithArray)(RedisModuleCtx *ctx, int len);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithStringBuffer)(RedisModuleCtx *ctx, const char *buf, size_t len);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithString)(RedisModuleCtx *ctx, RedisModuleString *str);
|
2016-04-05 09:53:04 -04:00
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithNull)(RedisModuleCtx *ctx);
|
2016-04-11 06:23:04 -04:00
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithCallReply)(RedisModuleCtx *ctx, RedisModuleCallReply *reply);
|
2016-03-06 07:44:24 -05:00
|
|
|
int REDISMODULE_API_FUNC(RedisModule_StringToLongLong)(RedisModuleString *str, long long *ll);
|
|
|
|
void REDISMODULE_API_FUNC(RedisModule_AutoMemory)(RedisModuleCtx *ctx);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_Replicate)(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplicateVerbatim)(RedisModuleCtx *ctx);
|
|
|
|
const char *REDISMODULE_API_FUNC(RedisModule_CallReplyStringPtr)(RedisModuleCallReply *reply, size_t *len);
|
|
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromCallReply)(RedisModuleCallReply *reply);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_DeleteKey)(RedisModuleKey *key);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_StringSet)(RedisModuleKey *key, RedisModuleString *str);
|
|
|
|
char *REDISMODULE_API_FUNC(RedisModule_StringDMA)(RedisModuleKey *key, size_t *len, int mode);
|
|
|
|
int REDISMODULE_API_FUNC(RedisModule_StringTruncate)(RedisModuleKey *key, size_t newlen);
|
|
|
|
|
|
|
|
/* This is included inline inside each Redis module. */
|
|
|
|
static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) {
|
|
|
|
void *getapifuncptr = ((void**)ctx)[0];
|
2016-03-31 11:43:37 -04:00
|
|
|
RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr;
|
2016-03-06 07:44:24 -05:00
|
|
|
REDISMODULE_GET_API(CreateCommand);
|
|
|
|
REDISMODULE_GET_API(SetModuleAttribs);
|
|
|
|
REDISMODULE_GET_API(WrongArity);
|
|
|
|
REDISMODULE_GET_API(ReplyWithLongLong);
|
|
|
|
REDISMODULE_GET_API(ReplyWithError);
|
|
|
|
REDISMODULE_GET_API(ReplyWithSimpleString);
|
|
|
|
REDISMODULE_GET_API(ReplyWithArray);
|
|
|
|
REDISMODULE_GET_API(ReplyWithStringBuffer);
|
|
|
|
REDISMODULE_GET_API(ReplyWithString);
|
2016-04-05 09:53:04 -04:00
|
|
|
REDISMODULE_GET_API(ReplyWithNull);
|
2016-04-11 06:23:04 -04:00
|
|
|
REDISMODULE_GET_API(ReplyWithCallReply);
|
2016-03-06 07:44:24 -05:00
|
|
|
REDISMODULE_GET_API(GetSelectedDb);
|
|
|
|
REDISMODULE_GET_API(SelectDb);
|
|
|
|
REDISMODULE_GET_API(OpenKey);
|
|
|
|
REDISMODULE_GET_API(CloseKey);
|
|
|
|
REDISMODULE_GET_API(KeyType);
|
|
|
|
REDISMODULE_GET_API(ValueLength);
|
|
|
|
REDISMODULE_GET_API(ListPush);
|
|
|
|
REDISMODULE_GET_API(ListPop);
|
|
|
|
REDISMODULE_GET_API(StringToLongLong);
|
|
|
|
REDISMODULE_GET_API(Call);
|
|
|
|
REDISMODULE_GET_API(CallReplyProto);
|
|
|
|
REDISMODULE_GET_API(FreeCallReply);
|
|
|
|
REDISMODULE_GET_API(CallReplyInteger);
|
|
|
|
REDISMODULE_GET_API(CallReplyType);
|
|
|
|
REDISMODULE_GET_API(CallReplyLength);
|
|
|
|
REDISMODULE_GET_API(CallReplyArrayElement);
|
|
|
|
REDISMODULE_GET_API(CallReplyStringPtr);
|
|
|
|
REDISMODULE_GET_API(CreateStringFromCallReply);
|
|
|
|
REDISMODULE_GET_API(CreateString);
|
|
|
|
REDISMODULE_GET_API(CreateStringFromLongLong);
|
|
|
|
REDISMODULE_GET_API(FreeString);
|
|
|
|
REDISMODULE_GET_API(StringPtrLen);
|
|
|
|
REDISMODULE_GET_API(AutoMemory);
|
|
|
|
REDISMODULE_GET_API(Replicate);
|
|
|
|
REDISMODULE_GET_API(ReplicateVerbatim);
|
|
|
|
REDISMODULE_GET_API(DeleteKey);
|
|
|
|
REDISMODULE_GET_API(StringSet);
|
|
|
|
REDISMODULE_GET_API(StringDMA);
|
|
|
|
REDISMODULE_GET_API(StringTruncate);
|
|
|
|
|
|
|
|
RedisModule_SetModuleAttribs(ctx,name,ver,apiver);
|
|
|
|
return REDISMODULE_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
/* Things only defined for the modules core, not exported to modules
|
|
|
|
* including this file. */
|
|
|
|
#define RedisModuleString robj
|
|
|
|
|
|
|
|
#endif /* REDISMODULE_CORE */
|
|
|
|
#endif /* REDISMOUDLE_H */
|