diff options
author | Keith Bostic <keith@wiredtiger.com> | 2013-04-10 13:58:34 -0400 |
---|---|---|
committer | Keith Bostic <keith@wiredtiger.com> | 2013-04-10 13:58:34 -0400 |
commit | 00b0fe3a1da717fccae3b72dffd96b478868b797 (patch) | |
tree | 549c7c995f5fa7061e5561fe754516db9b8e0ab6 /examples | |
parent | 38927b655cfb25f4ad8eb2f696d8ef9aaca9c2ae (diff) | |
download | mongo-00b0fe3a1da717fccae3b72dffd96b478868b797.tar.gz |
Add a new method WT_EXTENSION_API::config that takes a cfg[] and returns
a configuration string's value. Push that method through the KVS code
in test/format.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/c/Makefile.am | 1 | ||||
-rw-r--r-- | examples/c/ex_all.c | 158 | ||||
-rw-r--r-- | examples/c/ex_data_source.c | 270 |
3 files changed, 271 insertions, 158 deletions
diff --git a/examples/c/Makefile.am b/examples/c/Makefile.am index c6cbc697040..ef9b069616a 100644 --- a/examples/c/Makefile.am +++ b/examples/c/Makefile.am @@ -7,6 +7,7 @@ noinst_PROGRAMS = \ ex_call_center \ ex_config \ ex_cursor \ + ex_data_source \ ex_extending \ ex_file \ ex_hello \ diff --git a/examples/c/ex_all.c b/examples/c/ex_all.c index 7bb9a15ab75..fb89713e967 100644 --- a/examples/c/ex_all.c +++ b/examples/c/ex_all.c @@ -43,15 +43,8 @@ #include <wiredtiger.h> -/*! [Declare WT_EXTENSION_API] */ -#include <wiredtiger_ext.h> - -WT_EXTENSION_API *wt_api; -/*! [Declare WT_EXTENSION_API] */ - int add_collator(WT_CONNECTION *conn); int add_compressor(WT_CONNECTION *conn); -int add_data_source(WT_CONNECTION *conn); int add_extractor(WT_CONNECTION *conn); int checkpoint_ops(WT_SESSION *session); int connection_ops(WT_CONNECTION *conn); @@ -653,152 +646,6 @@ transaction_ops(WT_CONNECTION *conn, WT_SESSION *session) return (ret); } -/*! [WT_DATA_SOURCE create] */ -static int -my_create(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, int exclusive, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)exclusive; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE create] */ - -/*! [WT_DATA_SOURCE compact] */ -static int -my_compact(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE compact] */ - -/*! [WT_DATA_SOURCE drop] */ -static int -my_drop(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE drop] */ - -/*! [WT_DATA_SOURCE open_cursor] */ -static int -my_open_cursor(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[], WT_CURSOR **new_cursor) -{ - /* Unused parameters */ - (void)dsrc; - - (void)session; - (void)uri; - (void)cfg; - (void)new_cursor; - - return (0); -} -/*! [WT_DATA_SOURCE open_cursor] */ - -/*! [WT_DATA_SOURCE rename] */ -static int -my_rename(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *newname, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)newname; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE rename] */ - -/*! [WT_DATA_SOURCE salvage] */ -static int -my_salvage(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE salvage] */ - -/*! [WT_DATA_SOURCE truncate] */ -static int -my_truncate(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE truncate] */ - -/*! [WT_DATA_SOURCE verify] */ -static int -my_verify(WT_DATA_SOURCE *dsrc, WT_SESSION *session, - const char *uri, const char *cfg[]) -{ - /* Unused parameters */ - (void)dsrc; - (void)session; - (void)uri; - (void)cfg; - - return (0); -} -/*! [WT_DATA_SOURCE verify] */ - -int -add_data_source(WT_CONNECTION *conn) -{ - int ret; - - /*! [WT_DATA_SOURCE register] */ - static WT_DATA_SOURCE my_dsrc = { - my_create, - my_compact, - my_drop, - my_open_cursor, - my_rename, - my_salvage, - my_truncate, - my_verify - }; - ret = conn->add_data_source(conn, "dsrc:", &my_dsrc, NULL); - /*! [WT_DATA_SOURCE register] */ - - return (ret); -} - /*! [Implement WT_COLLATOR] */ /* * A simple example of the collator API: compare the keys as strings. @@ -988,7 +835,6 @@ connection_ops(WT_CONNECTION *conn) #endif add_collator(conn); - add_data_source(conn); add_extractor(conn); /*! [Reconfigure a connection] */ @@ -1211,10 +1057,6 @@ main(void) (void)conn->close(conn, NULL); #endif - /*! [Initialize WT_EXTENSION_API] */ - wiredtiger_extension_api(&wt_api); - /*! [Initialize WT_EXTENSION_API] */ - /*! [Get the WiredTiger library version #1] */ printf("WiredTiger version %s\n", wiredtiger_version(NULL, NULL, NULL)); /*! [Get the WiredTiger library version #1] */ diff --git a/examples/c/ex_data_source.c b/examples/c/ex_data_source.c new file mode 100644 index 00000000000..df170a70133 --- /dev/null +++ b/examples/c/ex_data_source.c @@ -0,0 +1,270 @@ +/*- + * Public Domain 2008-2013 WiredTiger, Inc. + * + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ex_data_source.c + * demonstrates how to create and access a data source + */ +#include <wiredtiger.h> + +/*! [WT_EXTENSION_API declaration] */ +#include <wiredtiger_ext.h> + +static WT_EXTENSION_API *wt_api; + +void +my_data_source_init() +{ + wiredtiger_extension_api(&wt_api); +} +/*! [WT_EXTENSION_API declaration] */ + +/*! [WT_DATA_SOURCE create] */ +static int +my_create(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, int exclusive, void *config) +/*! [WT_DATA_SOURCE create] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)exclusive; + (void)config; + + return (0); +} + +/*! [WT_DATA_SOURCE compact] */ +static int +my_compact(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, void *config) +/*! [WT_DATA_SOURCE compact] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + + return (0); +} + +/*! [WT_DATA_SOURCE drop] */ +static int +my_drop(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, void *config) +/*! [WT_DATA_SOURCE drop] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + + return (0); +} + +int +data_source_cursor(void) +{ + return (0); +} +const char * +data_source_error(int v) +{ + return (v == 0 ? "one" : "two"); +} + +/*! [WT_DATA_SOURCE open_cursor] */ +static int +my_open_cursor(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, void *config, WT_CURSOR **new_cursor) +/*! [WT_DATA_SOURCE open_cursor] */ +{ + int ret; + + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + (void)new_cursor; + + { + /*! [WT_EXTENSION_CONFIG boolean] */ + WT_EXTENSION_CONFIG value; + int my_data_source_overwrite; + + if ((ret = + wt_api->config(session, "overwrite", config, &value)) != 0) { + (void)wt_api->err_printf(session, + "overwrite configuration: %s", wiredtiger_strerror(ret)); + return (ret); + } + my_data_source_overwrite = value.value != 0; + /*! [WT_EXTENSION_CONFIG boolean] */ + } + + { + /*! [WT_EXTENSION_CONFIG integer] */ + WT_EXTENSION_CONFIG value; + int64_t my_data_source_page_size; + + if ((ret = + wt_api->config(session, "page_size", config, &value)) != 0) { + (void)wt_api->err_printf(session, + "page_size configuration: %s", wiredtiger_strerror(ret)); + return (ret); + } + my_data_source_page_size = value.value; + /*! [WT_EXTENSION_CONFIG integer] */ + } + + { + /*! [WT_EXTENSION_CONFIG string] */ + WT_EXTENSION_CONFIG value; + const char *my_data_source_type; + + if ((ret = + wt_api->config(session, "key_format", config, &value)) != 0) { + (void)wt_api->err_printf(session, + "key_format configuration: %s", wiredtiger_strerror(ret)); + return (ret); + } + + /* + * Strings returned from WT_EXTENSION_API::config are not necessarily + * nul-terminated; the associated length must be used instead. + */ + if (value.len == 1 && value.str[0] == 'r') + my_data_source_type = "integer"; + else + my_data_source_type = "string"; + /*! [WT_EXTENSION_CONFIG string] */ + } + + /*! [WT_DATA_SOURCE error message] */ + /* + * If an underlying function fails, log the error and then return an + * error within WiredTiger's name space. + */ + if ((ret = data_source_cursor()) != 0) { + (void)wt_api->err_printf( + session, "my_open_cursor: %s", data_source_error(ret)); + return (WT_ERROR); + } + /*! [WT_DATA_SOURCE error message] */ + + return (0); +} + +/*! [WT_DATA_SOURCE rename] */ +static int +my_rename(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, const char *newname, void *config) +/*! [WT_DATA_SOURCE rename] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)newname; + (void)config; + + return (0); +} + +/*! [WT_DATA_SOURCE salvage] */ +static int +my_salvage(WT_DATA_SOURCE *dsrc, WT_SESSION *session, + const char *uri, void *config) +/*! [WT_DATA_SOURCE salvage] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + + return (0); +} + +/*! [WT_DATA_SOURCE truncate] */ +static int +my_truncate( + WT_DATA_SOURCE *dsrc, WT_SESSION *session, const char *uri, void *config) +/*! [WT_DATA_SOURCE truncate] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + + return (0); +} + +/*! [WT_DATA_SOURCE verify] */ +static int +my_verify( + WT_DATA_SOURCE *dsrc, WT_SESSION *session, const char *uri, void *config) +/*! [WT_DATA_SOURCE verify] */ +{ + /* Unused parameters */ + (void)dsrc; + (void)session; + (void)uri; + (void)config; + + return (0); +} + +int +main(void) +{ + WT_CONNECTION *conn; + int ret; + + ret = wiredtiger_open(NULL, NULL, "create", &conn); + + /*! [WT_DATA_SOURCE register] */ + static WT_DATA_SOURCE my_dsrc = { + my_create, + my_compact, + my_drop, + my_open_cursor, + my_rename, + my_salvage, + my_truncate, + my_verify + }; + ret = conn->add_data_source(conn, "dsrc:", &my_dsrc, NULL); + /*! [WT_DATA_SOURCE register] */ + + (void)conn->close(conn, NULL); + + return (ret); +} |