mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 16:48:27 -05:00
152c1b6802
It was noted by @dvirsky that it is not possible to use string functions when writing the AOF file. This sometimes is critical since the command rewriting may need to be built in the context of the AOF callback, and without access to the context, and the limited types that the AOF production functions will accept, this can be an issue. Moreover there are other needs that we can't anticipate regarding the ability to use Redis Modules APIs using the context in order to build representations to emit AOF / RDB. Because of this a new API was added that allows the user to get a temporary context from the IO context. The context is auto released if obtained when the RDB / AOF callback returns. Calling multiple time the function to get the context, always returns the same one, since it is invalid to have more than a single context.
310 lines
16 KiB
C
310 lines
16 KiB
C
#ifndef REDISMODULE_H
|
|
#define REDISMODULE_H
|
|
|
|
#include <sys/types.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
/* ---------------- 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
|
|
#define REDISMODULE_KEYTYPE_MODULE 6
|
|
|
|
/* 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
|
|
|
|
/* Postponed array length. */
|
|
#define REDISMODULE_POSTPONED_ARRAY_LEN -1
|
|
|
|
/* Expire */
|
|
#define REDISMODULE_NO_EXPIRE -1
|
|
|
|
/* Sorted set API flags. */
|
|
#define REDISMODULE_ZADD_XX (1<<0)
|
|
#define REDISMODULE_ZADD_NX (1<<1)
|
|
#define REDISMODULE_ZADD_ADDED (1<<2)
|
|
#define REDISMODULE_ZADD_UPDATED (1<<3)
|
|
#define REDISMODULE_ZADD_NOP (1<<4)
|
|
|
|
/* Hash API flags. */
|
|
#define REDISMODULE_HASH_NONE 0
|
|
#define REDISMODULE_HASH_NX (1<<0)
|
|
#define REDISMODULE_HASH_XX (1<<1)
|
|
#define REDISMODULE_HASH_CFIELDS (1<<2)
|
|
#define REDISMODULE_HASH_EXISTS (1<<3)
|
|
|
|
/* A special pointer that we can use between the core and the module to signal
|
|
* field deletion, and that is impossible to be a valid pointer. */
|
|
#define REDISMODULE_HASH_DELETE ((RedisModuleString*)(long)1)
|
|
|
|
/* Error messages. */
|
|
#define REDISMODULE_ERRORMSG_WRONGTYPE "WRONGTYPE Operation against a key holding the wrong kind of value"
|
|
|
|
#define REDISMODULE_POSITIVE_INFINITE (1.0/0.0)
|
|
#define REDISMODULE_NEGATIVE_INFINITE (-1.0/0.0)
|
|
|
|
/* ------------------------- End of common defines ------------------------ */
|
|
|
|
#ifndef REDISMODULE_CORE
|
|
|
|
typedef long long mstime_t;
|
|
|
|
/* 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 struct RedisModuleIO RedisModuleIO;
|
|
typedef struct RedisModuleType RedisModuleType;
|
|
typedef struct RedisModuleDigest RedisModuleDigest;
|
|
|
|
typedef int (*RedisModuleCmdFunc) (RedisModuleCtx *ctx, RedisModuleString **argv, int argc);
|
|
|
|
typedef void *(*RedisModuleTypeLoadFunc)(RedisModuleIO *rdb, int encver);
|
|
typedef void (*RedisModuleTypeSaveFunc)(RedisModuleIO *rdb, void *value);
|
|
typedef void (*RedisModuleTypeRewriteFunc)(RedisModuleIO *aof, RedisModuleString *key, void *value);
|
|
typedef void (*RedisModuleTypeDigestFunc)(RedisModuleDigest *digest, void *value);
|
|
typedef void (*RedisModuleTypeFreeFunc)(void *value);
|
|
|
|
#define REDISMODULE_GET_API(name) \
|
|
RedisModule_GetApi("RedisModule_" #name, ((void **)&RedisModule_ ## name))
|
|
|
|
#define REDISMODULE_API_FUNC(x) (*x)
|
|
|
|
|
|
void *REDISMODULE_API_FUNC(RedisModule_Alloc)(size_t bytes);
|
|
void *REDISMODULE_API_FUNC(RedisModule_Realloc)(void *ptr, size_t bytes);
|
|
void REDISMODULE_API_FUNC(RedisModule_Free)(void *ptr);
|
|
void *REDISMODULE_API_FUNC(RedisModule_Calloc)(size_t nmemb, size_t size);
|
|
char *REDISMODULE_API_FUNC(RedisModule_Strdup)(const char *str);
|
|
int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *);
|
|
int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep);
|
|
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);
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromString)(RedisModuleCtx *ctx, const RedisModuleString *str);
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringPrintf)(RedisModuleCtx *ctx, const char *fmt, ...);
|
|
void REDISMODULE_API_FUNC(RedisModule_FreeString)(RedisModuleCtx *ctx, RedisModuleString *str);
|
|
const char *REDISMODULE_API_FUNC(RedisModule_StringPtrLen)(const 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, long len);
|
|
void REDISMODULE_API_FUNC(RedisModule_ReplySetArrayLength)(RedisModuleCtx *ctx, long 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);
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithNull)(RedisModuleCtx *ctx);
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithDouble)(RedisModuleCtx *ctx, double d);
|
|
int REDISMODULE_API_FUNC(RedisModule_ReplyWithCallReply)(RedisModuleCtx *ctx, RedisModuleCallReply *reply);
|
|
int REDISMODULE_API_FUNC(RedisModule_StringToLongLong)(const RedisModuleString *str, long long *ll);
|
|
int REDISMODULE_API_FUNC(RedisModule_StringToDouble)(const RedisModuleString *str, double *d);
|
|
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);
|
|
mstime_t REDISMODULE_API_FUNC(RedisModule_GetExpire)(RedisModuleKey *key);
|
|
int REDISMODULE_API_FUNC(RedisModule_SetExpire)(RedisModuleKey *key, mstime_t expire);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetAdd)(RedisModuleKey *key, double score, RedisModuleString *ele, int *flagsptr);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetIncrby)(RedisModuleKey *key, double score, RedisModuleString *ele, int *flagsptr, double *newscore);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetScore)(RedisModuleKey *key, RedisModuleString *ele, double *score);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetRem)(RedisModuleKey *key, RedisModuleString *ele, int *deleted);
|
|
void REDISMODULE_API_FUNC(RedisModule_ZsetRangeStop)(RedisModuleKey *key);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetFirstInScoreRange)(RedisModuleKey *key, double min, double max, int minex, int maxex);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetLastInScoreRange)(RedisModuleKey *key, double min, double max, int minex, int maxex);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetFirstInLexRange)(RedisModuleKey *key, RedisModuleString *min, RedisModuleString *max);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetLastInLexRange)(RedisModuleKey *key, RedisModuleString *min, RedisModuleString *max);
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_ZsetRangeCurrentElement)(RedisModuleKey *key, double *score);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetRangeNext)(RedisModuleKey *key);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetRangePrev)(RedisModuleKey *key);
|
|
int REDISMODULE_API_FUNC(RedisModule_ZsetRangeEndReached)(RedisModuleKey *key);
|
|
int REDISMODULE_API_FUNC(RedisModule_HashSet)(RedisModuleKey *key, int flags, ...);
|
|
int REDISMODULE_API_FUNC(RedisModule_HashGet)(RedisModuleKey *key, int flags, ...);
|
|
int REDISMODULE_API_FUNC(RedisModule_IsKeysPositionRequest)(RedisModuleCtx *ctx);
|
|
void REDISMODULE_API_FUNC(RedisModule_KeyAtPos)(RedisModuleCtx *ctx, int pos);
|
|
unsigned long long REDISMODULE_API_FUNC(RedisModule_GetClientId)(RedisModuleCtx *ctx);
|
|
void *REDISMODULE_API_FUNC(RedisModule_PoolAlloc)(RedisModuleCtx *ctx, size_t bytes);
|
|
RedisModuleType *REDISMODULE_API_FUNC(RedisModule_CreateDataType)(RedisModuleCtx *ctx, const char *name, int encver, RedisModuleTypeLoadFunc rdb_load, RedisModuleTypeSaveFunc rdb_save, RedisModuleTypeRewriteFunc aof_rewrite, RedisModuleTypeDigestFunc digest, RedisModuleTypeFreeFunc free);
|
|
int REDISMODULE_API_FUNC(RedisModule_ModuleTypeSetValue)(RedisModuleKey *key, RedisModuleType *mt, void *value);
|
|
RedisModuleType *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetType)(RedisModuleKey *key);
|
|
void *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetValue)(RedisModuleKey *key);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveUnsigned)(RedisModuleIO *io, uint64_t value);
|
|
uint64_t REDISMODULE_API_FUNC(RedisModule_LoadUnsigned)(RedisModuleIO *io);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveSigned)(RedisModuleIO *io, int64_t value);
|
|
int64_t REDISMODULE_API_FUNC(RedisModule_LoadSigned)(RedisModuleIO *io);
|
|
void REDISMODULE_API_FUNC(RedisModule_EmitAOF)(RedisModuleIO *io, const char *cmdname, const char *fmt, ...);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveString)(RedisModuleIO *io, RedisModuleString *s);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveStringBuffer)(RedisModuleIO *io, const char *str, size_t len);
|
|
RedisModuleString *REDISMODULE_API_FUNC(RedisModule_LoadString)(RedisModuleIO *io);
|
|
char *REDISMODULE_API_FUNC(RedisModule_LoadStringBuffer)(RedisModuleIO *io, size_t *lenptr);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveDouble)(RedisModuleIO *io, double value);
|
|
double REDISMODULE_API_FUNC(RedisModule_LoadDouble)(RedisModuleIO *io);
|
|
void REDISMODULE_API_FUNC(RedisModule_SaveFloat)(RedisModuleIO *io, float value);
|
|
float REDISMODULE_API_FUNC(RedisModule_LoadFloat)(RedisModuleIO *io);
|
|
void REDISMODULE_API_FUNC(RedisModule_Log)(RedisModuleCtx *ctx, const char *level, const char *fmt, ...);
|
|
void REDISMODULE_API_FUNC(RedisModule_LogIOError)(RedisModuleIO *io, const char *levelstr, const char *fmt, ...);
|
|
int REDISMODULE_API_FUNC(RedisModule_StringAppendBuffer)(RedisModuleCtx *ctx, RedisModuleString *str, const char *buf, size_t len);
|
|
void REDISMODULE_API_FUNC(RedisModule_RetainString)(RedisModuleCtx *ctx, RedisModuleString *str);
|
|
int REDISMODULE_API_FUNC(RedisModule_StringCompare)(RedisModuleString *a, RedisModuleString *b);
|
|
RedisModuleCtx *REDISMODULE_API_FUNC(RM_GetContextFromIO)(RedisModuleIO *io);
|
|
|
|
/* This is included inline inside each Redis module. */
|
|
static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) __attribute__((unused));
|
|
static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) {
|
|
void *getapifuncptr = ((void**)ctx)[0];
|
|
RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr;
|
|
REDISMODULE_GET_API(Alloc);
|
|
REDISMODULE_GET_API(Calloc);
|
|
REDISMODULE_GET_API(Free);
|
|
REDISMODULE_GET_API(Realloc);
|
|
REDISMODULE_GET_API(Strdup);
|
|
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(ReplySetArrayLength);
|
|
REDISMODULE_GET_API(ReplyWithStringBuffer);
|
|
REDISMODULE_GET_API(ReplyWithString);
|
|
REDISMODULE_GET_API(ReplyWithNull);
|
|
REDISMODULE_GET_API(ReplyWithCallReply);
|
|
REDISMODULE_GET_API(ReplyWithDouble);
|
|
REDISMODULE_GET_API(ReplySetArrayLength);
|
|
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(StringToDouble);
|
|
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(CreateStringFromString);
|
|
REDISMODULE_GET_API(CreateStringPrintf);
|
|
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_GET_API(GetExpire);
|
|
REDISMODULE_GET_API(SetExpire);
|
|
REDISMODULE_GET_API(ZsetAdd);
|
|
REDISMODULE_GET_API(ZsetIncrby);
|
|
REDISMODULE_GET_API(ZsetScore);
|
|
REDISMODULE_GET_API(ZsetRem);
|
|
REDISMODULE_GET_API(ZsetRangeStop);
|
|
REDISMODULE_GET_API(ZsetFirstInScoreRange);
|
|
REDISMODULE_GET_API(ZsetLastInScoreRange);
|
|
REDISMODULE_GET_API(ZsetFirstInLexRange);
|
|
REDISMODULE_GET_API(ZsetLastInLexRange);
|
|
REDISMODULE_GET_API(ZsetRangeCurrentElement);
|
|
REDISMODULE_GET_API(ZsetRangeNext);
|
|
REDISMODULE_GET_API(ZsetRangePrev);
|
|
REDISMODULE_GET_API(ZsetRangeEndReached);
|
|
REDISMODULE_GET_API(HashSet);
|
|
REDISMODULE_GET_API(HashGet);
|
|
REDISMODULE_GET_API(IsKeysPositionRequest);
|
|
REDISMODULE_GET_API(KeyAtPos);
|
|
REDISMODULE_GET_API(GetClientId);
|
|
REDISMODULE_GET_API(PoolAlloc);
|
|
REDISMODULE_GET_API(CreateDataType);
|
|
REDISMODULE_GET_API(ModuleTypeSetValue);
|
|
REDISMODULE_GET_API(ModuleTypeGetType);
|
|
REDISMODULE_GET_API(ModuleTypeGetValue);
|
|
REDISMODULE_GET_API(SaveUnsigned);
|
|
REDISMODULE_GET_API(LoadUnsigned);
|
|
REDISMODULE_GET_API(SaveSigned);
|
|
REDISMODULE_GET_API(LoadSigned);
|
|
REDISMODULE_GET_API(SaveString);
|
|
REDISMODULE_GET_API(SaveStringBuffer);
|
|
REDISMODULE_GET_API(LoadString);
|
|
REDISMODULE_GET_API(LoadStringBuffer);
|
|
REDISMODULE_GET_API(SaveDouble);
|
|
REDISMODULE_GET_API(LoadDouble);
|
|
REDISMODULE_GET_API(SaveFloat);
|
|
REDISMODULE_GET_API(LoadFloat);
|
|
REDISMODULE_GET_API(EmitAOF);
|
|
REDISMODULE_GET_API(Log);
|
|
REDISMODULE_GET_API(LogIOError);
|
|
REDISMODULE_GET_API(StringAppendBuffer);
|
|
REDISMODULE_GET_API(RetainString);
|
|
REDISMODULE_GET_API(StringCompare);
|
|
REDISMODULE_GET_API(GetIOContext);
|
|
REDISMODULE_GET_API(FreeIOContext);
|
|
|
|
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 */
|