Shows how to extend WiredTiger with application-specific collations, extractors and cursor types.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wiredtiger.h>
#ifdef _WIN32
#define strcasecmp stricmp
#endif
static const char *home;
static int
{
const char *s1 = (
const char *)v1->
data;
const char *s2 = (
const char *)v2->
data;
(void)session;
(void)collator;
*cmp = strcasecmp(s1, s2);
return (0);
}
static WT_COLLATOR nocasecoll = { __compare_nocase, NULL, NULL };
typedef struct {
uint32_t maxlen;
} PREFIX_COLLATOR;
static int
{
PREFIX_COLLATOR *pcoll = (PREFIX_COLLATOR *)collator;
const char *s1 = (
const char *)v1->
data;
const char *s2 = (
const char *)v2->
data;
(void)session;
*cmp = strncmp(s1, s2, pcoll->maxlen);
return (0);
}
static PREFIX_COLLATOR pcoll10 = { {__compare_prefixes, NULL, NULL}, 10 };
int
main(void)
{
int ret;
if (getenv("WIREDTIGER_HOME") == NULL) {
home = "WT_HOME";
ret = system("rm -rf WT_HOME && mkdir WT_HOME");
} else
home = NULL;
fprintf(stderr, "Error connecting to %s: %s\n",
ret = conn->
add_collator(conn,
"nocase", &nocasecoll, NULL);
ret = conn->
add_collator(conn,
"prefix10", &pcoll10.iface, NULL);
if ((ret = conn->
open_session(conn, NULL, NULL, &session)) != 0)
fprintf(stderr, "Error opening a session on %s: %s\n",
ret = conn->
close(conn, NULL);
return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}