Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support to HASH and SET datatypes #9

Merged
merged 12 commits into from
Aug 13, 2023
82 changes: 58 additions & 24 deletions api/librdb-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,18 @@ typedef enum RdbRes {
RDB_ERR_NOT_SUPPORTED_RDB_ENCODING_TYPE,
RDB_ERR_UNKNOWN_RDB_ENCODING_TYPE,
RDB_ERR_QUICK_LIST_INTEG_CHECK,
RDB_ERR_ZIP_LIST_INTEG_CHECK,
RDB_ERR_LIST_ZL_INTEG_CHECK,
RDB_ERR_SET_IS_INTEG_CHECK,
RDB_ERR_SET_LP_INTEG_CHECK,
RDB_ERR_HASH_LP_INTEG_CHECK,
RDB_ERR_HASH_ZM_INTEG_CHECK,
RDB_ERR_SSTYPE_INTEG_CHECK,
RDB_ERR_STRING_INVALID_STATE,
RDB_ERR_PLAIN_HASH_INVALID_STATE,
RDB_ERR_PLAIN_LIST_INVALID_STATE,
RDB_ERR_PLAIN_SET_INVALID_STATE,
RDB_ERR_QUICK_LIST_INVALID_STATE,
RDB_ERR_ZIP_LIST_INVALID_STATE,
RDB_ERR_SSTYPE_INVALID_STATE,
RDB_ERR_INVALID_BULK_ALLOC_TYPE,
RDB_ERR_INVALID_BULK_CLONE_REQUEST,
RDB_ERR_INVALID_BULK_LENGTH_REQUEST,
Expand Down Expand Up @@ -109,10 +116,10 @@ typedef enum RdbHandlersLevel {
} RdbHandlersLevel;

typedef enum RdbLogLevel {
RDB_LOG_ERROR,
RDB_LOG_WARNING,
RDB_LOG_INFO,
RDB_LOG_DEBUG
RDB_LOG_ERR,
RDB_LOG_WRN,
RDB_LOG_INF,
RDB_LOG_DBG
} RdbLogLevel;

/* for explanation, read "Memory management" section below */
Expand Down Expand Up @@ -159,7 +166,7 @@ typedef struct RdbStreamConsumerMeta {
} RdbStreamConsumerMeta;

/* misc function pointer typedefs */
typedef RdbStatus (*RdbReaderFunc) (RdbParser *p, void *readerData, void *buf, size_t len);
typedef RdbStatus (*RdbReaderFunc) (void *readerData, void *buf, size_t len);
typedef void (*RdbFreeFunc) (RdbParser *p, void *obj);
typedef void (*RdbLoggerCB) (RdbLogLevel l, const char *msg);

Expand Down Expand Up @@ -192,17 +199,24 @@ typedef struct RdbHandlersRawCallbacks {

typedef struct RdbHandlersStructCallbacks {
HANDLERS_COMMON_CALLBACKS
RdbRes (*handleStringValue)(RdbParser *p, void *userData, RdbBulk str);
RdbRes (*handleListLP)(RdbParser *p, void *userData, RdbBulk listLP);
RdbRes (*handleListZL)(RdbParser *p, void *userData, RdbBulk listZL);
RdbRes (*handleListNode)(RdbParser *p, void *userData, RdbBulk node);

/*** TODO: RdbHandlersStructCallbacks: handlerHashListPack, handleSetIntset, handleZsetListPack, handleFunction ***/
RdbRes (*handlerHashLP)(RdbParser *p, void *userData, RdbBulk hashLp);
RdbRes (*handleSetIntset)(RdbParser *p, void *userData, RdbBulk intSet);
RdbRes (*handleSetLP)(RdbParser *p, void *userData, RdbBulk setLP);
RdbRes (*handleSetZL)(RdbParser *p, void *userData, RdbBulk setZL);
RdbRes (*handleZsetLP)(RdbParser *p, void *userData, RdbBulk zsetLP);
RdbRes (*handleString)(RdbParser *p, void *userData, RdbBulk str);
/* list */
RdbRes (*handleListPlain)(RdbParser *p, void *userData, RdbBulk node);
moticless marked this conversation as resolved.
Show resolved Hide resolved
RdbRes (*handleListZL)(RdbParser *p, void *userData, RdbBulk ziplist);
RdbRes (*handleListLP)(RdbParser *p, void *userData, RdbBulk listpack);
/* hash */
RdbRes (*handleHashPlain)(RdbParser *p, void *userData, RdbBulk field, RdbBulk value);
RdbRes (*handleHashZL)(RdbParser *p, void *userData, RdbBulk ziplist);
RdbRes (*handleHashLP)(RdbParser *p, void *userData, RdbBulk listpack);
RdbRes (*handleHashZM)(RdbParser *p, void *userData, RdbBulk zipmap);
/* set */
RdbRes (*handleSetPlain)(RdbParser *p, void *userData, RdbBulk item);
RdbRes (*handleSetIS)(RdbParser *p, void *userData, RdbBulk intset);
RdbRes (*handleSetLP)(RdbParser *p, void *userData, RdbBulk listpack);

/*** TODO: RdbHandlersStructCallbacks: ***/
RdbRes (*handleZsetZL)(RdbParser *p, void *userData, RdbBulk ziplist);
RdbRes (*handleZsetLP)(RdbParser *p, void *userData, RdbBulk listpack);
RdbRes (*handleFunction)(RdbParser *p, void *userData, RdbBulk func);
/*** TODO: RdbHandlersStructCallbacks: stream stuff ... ***/
RdbRes (*handleStreamLP)(RdbParser *p, void *userData, RdbBulk nodekey, RdbBulk streamLP);
Expand All @@ -212,17 +226,17 @@ typedef struct RdbHandlersStructCallbacks {
typedef struct RdbHandlersDataCallbacks {
HANDLERS_COMMON_CALLBACKS
RdbRes (*handleStringValue)(RdbParser *p, void *userData, RdbBulk str);
RdbRes (*handleListElement)(RdbParser *p, void *userData, RdbBulk str);
RdbRes (*handleListItem)(RdbParser *p, void *userData, RdbBulk item);
RdbRes (*handleHashFieldValue)(RdbParser *p, void *userData, RdbBulk field, RdbBulk value);
moticless marked this conversation as resolved.
Show resolved Hide resolved
RdbRes (*handleSetMember)(RdbParser *p, void *userData, RdbBulk member);

/*** TODO: RdbHandlersDataCallbacks: handleHashElement, handleSetElement, handleZsetElement ***/
RdbRes (*handleHashElement)(RdbParser *p, void *userData, RdbBulk field, RdbBulk elm, uint64_t totalNumElm);
RdbRes (*handleSetElement)(RdbParser *p, void *userData, RdbBulk elm, uint64_t totalNumElm);
RdbRes (*handleZsetElement)(RdbParser *p, void *userData, RdbBulk elm, double score, uint64_t totalNumElm);
/*** TODO: RdbHandlersDataCallbacks: handleZsetElement ***/
RdbRes (*handleZsetMember)(RdbParser *p, void *userData, RdbBulk member, double score);

/*** TODO: RdbHandlersDataCallbacks: stream stuff ... ***/

RdbRes (*handleStreamMetadata)(RdbParser *p, void *userData, RdbStreamMeta *meta);
RdbRes (*handleStreamElement)(RdbParser *p, void *userData, RdbStreamID *id, RdbBulk field, RdbBulk value, uint64_t totalNumElm);
RdbRes (*handleStreamItem)(RdbParser *p, void *userData, RdbStreamID *id, RdbBulk field, RdbBulk value);

RdbRes (*handleStreamNewCGroup)(RdbParser *p, void *userData, RdbBulk grpName, RdbStreamGroupMeta *meta);
RdbRes (*handleStreamCGroupPendingEntry)(RdbParser *p, void *userData, RdbStreamPendingEntry *pendingEntry);
Expand Down Expand Up @@ -250,6 +264,13 @@ _LIBRDB_API RdbStatus RDB_parseBuff(RdbParser *p,

/****************************************************************
* Create Reader
*
* The built-in readers should be sufficient for most purposes. However, if they
* do not meet your specific needs, you can use the `RDB_createReaderRdb()`
* helper function to create a custom reader with its own reader function. The
* built-in reader file (readerFile.c) can serve as a code reference for this
* purpose.
*
* Used by: RDBX_createReaderFile
* <user-defined-reader>
****************************************************************/
Expand Down Expand Up @@ -309,6 +330,19 @@ _LIBRDB_API void RDB_setLogLevel(RdbParser *p, RdbLogLevel l);
_LIBRDB_API void RDB_setLogger(RdbParser *p, RdbLoggerCB f);
_LIBRDB_API void RDB_log(RdbParser *p, RdbLogLevel lvl, const char *format, ...);

/* Following function returns a hint for the total number of items in the current
* parsed key context - to assist with memory allocation or other optimizations.
* Return valid value inside the following callbacks:
moticless marked this conversation as resolved.
Show resolved Hide resolved
* - [RdbHandlersStructCallbacks] handleHashPlain
* - [RdbHandlersStructCallbacks] handleSetPlain
* - [RdbHandlersDataCallbacks] handleHashFieldValue
* - [RdbHandlersDataCallbacks] handleSetMember
* - [RdbHandlersDataCallbacks] handleZsetMember
* - [RdbHandlersDataCallbacks] handleStreamItem
* Otherwise it returns -1.
*/
_LIBRDB_API int64_t RDB_getNumItemsHint(RdbParser *p);

/****************************************************************
* Pause the Parser
*
Expand Down
4 changes: 2 additions & 2 deletions api/librdb-ext-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ typedef struct RdbxToRespConf {
/* TODO: support the option of expire, del, select db */

/* If supportRestore, then data-types will be translated to RESTORE with
* raw data instead of data-types commands. This is a performance, version
* (specific) aligned, optimization */
* raw data instead of data-types commands. This is a performance optimization
* that requires to be version aligned. */
int supportRestore;

/* TODO: support rdb2resp del key before write */
Expand Down
Loading