UNPKG

kyoto-client

Version:

Client for Kyoto Tycoon

875 lines (697 loc) 102 kB
<!DOCTYPE HTML> <html lang="en" class"no-js"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=640" /> <title>kyoto-client - Kyoto Tycoon client for node.js</title> <link rel="stylesheet" type="text/css" href="/screen.css" media="screen" /> <link rel="stylesheet" type="text/css" href="/highlight.css" media="screen" /> <meta name="generator" content="nanoc 3.1.6" /> <meta name="author" content="Wesley Moore" /> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-199609-7']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <script src="/modernizr-1.6.min.js" type="text/javascript" charset="utf-8"></script> <script src="/raphael-min.js" type="text/javascript" charset="utf-8"></script> <script src="/app.js" type="text/javascript" charset="utf-8"></script> </head> <body> <header> <h1><a href="/">kyoto-client</a> <sup>v0.4.0</sup></h1> <nav> <li><a href="#intro">Introduction</a></li> <li><a href="#install">Installation</a></li> <li><a href="#developement">Development</a></li> <li><a href="#licence">Licence</a></li> <li><a href="https://github.com/wezm/kyoto-client" class="git">Source <sup>git</sup></a></li> <li><a href="https://github.com/wezm/kyoto-client/issues">Bug Tracker</a></li> </nav> <h2><a href="#api">API</a></h2> <h3><a href="#db">DB</a></h3> <nav> <li><a href="#new">constructor</a></li> <li><a href="#open">open</a></li> <li><a href="#close">close</a></li> <li><a href="#defaultDatabase">defaultDatabase</a></li> <li><a href="#close">close</a></li> <li><a href="#echo">echo</a></li> <li><a href="#report">report</a></li> <li><a href="#play_script" class="not-implemented">playScript</a></li> <li><a href="#tune_replication" class="not-implemented">tuneReplication</a></li> <li><a href="#status">status</a></li> <li><a href="#clear">clear</a></li> <li><a href="#synchronize" class="not-implemented">synchronize</a></li> <li><a href="#set">set</a></li> <li><a href="#add">add</a></li> <li><a href="#replace">replace</a></li> <li><a href="#append">append</a></li> <li><a href="#increment">increment</a></li> <li><a href="#increment_double">incrementDouble</a></li> <li><a href="#cas">cas</a></li> <li><a href="#remove">remove</a></li> <li><a href="#get">get</a></li> <li><a href="#exists">exists</a></li> <li><a href="#set_bulk">setBulk</a></li> <li><a href="#remove_bulk">removeBulk</a></li> <li><a href="#get_bulk">getBulk</a></li> <li><a href="#vacuum" class="not-implemented">vacuum</a></li> <li><a href="#match_prefix">matchPrefix</a></li> <li><a href="#match_regex">matchRegex</a></li> <li><a href="#get_cursor">getCursor</a></li> </nav> <h3><a href="#cursor" class="class">Cursor</a></h3> <nav> <li><a href="#cur_jump">jump</a></li> <li><a href="#cur_jump_back">jumpBack</a></li> <li><a href="#cur_step">step</a></li> <li><a href="#cur_step_back">stepBack</a></li> <li><a href="#cur_set_value">setValue</a></li> <li><a href="#cur_remove">remove</a></li> <li><a href="#cur_get_key">getKey</a></li> <li><a href="#cur_get_value">getValue</a></li> <li><a href="#cur_get">get</a></li> <li><a href="#cur_delete">delete</a></li> <li><a href="#cur_each">each</a></li> </nav> <h2><a href="#related">Related Projects</a></h2> <nav> <li><a href="#connect-kyoto">connect-kyoto</a></li> </nav> <h2><a href="#changelog">Changelog</a></h2> <nav> <li><a href="#0.2.0">0.2.0</a></li> <li><a href="#0.1.1">0.1.1</a></li> <li><a href="#0.1.0">0.1.0</a></li> </nav> </header> <section id="main"> <h1> <span id="logo"></span> kyoto-client &#8211; Kyoto Tycoon client for node.js</h1> <p><a name="intro"></a></p> <h2>Introduction</h2> <p>kyoto-client is a <a href="http://nodejs.org/">node.js</a> module that acts as a client to a <a href="http://fallabs.com/kyototycoon/">Kyoto Tycoon</a> server. Kyoto Tycoon is the server component of <a href="http://fallabs.com/kyotocabinet/">Kyoto Cabinet</a>, a fast, efficient key-value store developed by <a href="http://fallabs.com/">FAL labs</a>. Records can be stored on disk or in memory using a hash table or B+ tree.</p> <p><a name="install"></a></p> <h2>Installation</h2> <p>Installation via <a href="http://npmjs.org/">npm</a> is recommended:</p> <pre><code>npm install kyoto-client </code></pre> <p><a name="development"></a></p> <h2>Development</h2> <p>kyoto-client is implemented in <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> and uses <a href="https://github.com/caolan/nodeunit">nodeunit</a> for testing. Both are available via npm as <code>coffee-script</code> and <code>nodeunit</code> respectfully. It is developed against the current stable node.js version.</p> <p>The primary documentation for the project is its website, the source of which is also included here. The website is built with <a href="http://nanoc.stoneship.org/">nanoc</a>. To get setup for making documentation changes you&#8217;ll need to install nanoc and some other RubyGems:</p> <ul> <li>From the <a href="https://github.com/wezm/kyoto-client/tree/master/doc">doc</a> directory run <code>bundle install</code> (assumes you have previously installed <a href="http://gembundler.com/">bundler</a>).</li> <li>Start the nanoc autocompiler with <code>bundle exec nanoc aco</code> and navigate to <a href="http://localhost:3000/">http://localhost:3000/</a>.</li> </ul><p>Contributions are welcome and should maintain the existing coding style and be accompanied by tests and documentation. Bugs and desired features are tracked in the <a href="https://github.com/wezm/kyoto-client/issues">issue tracker</a>. The tests can be run via <code>cake test</code>.</p> <p><a name="licence"></a></p> <h2>Licence</h2> <p>kyoto-client is licenced under the BSD licence. Refer to the <a href="https://github.com/wezm/kyoto-client/blob/master/LICENSE">LICENCE</a> in the repository for the full details.</p> <p><a name="api"></a></p> <h2>API</h2> <p><a name="db"></a></p> <h3>DB</h3> <p>The DB class is the primary interface to a Kyoto Tycoon database.</p> <p><a name="new"></a></p> <h4>◆ constructor <code>new(defaultDatabase)</code> </h4> <p>Constructs and returns a new DB object.</p> <ul> <li> <code>defaultDatabase</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; The default Kyoto Tycoon database to operate upon when not expicitly specified in a procedure. See also <a href="#defaultDatabase">defaultDatabase</a>.</li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="kd">var</span> <span class="nx">kt</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'kyoto-client'</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">db</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">kt</span><span class="p">.</span><span class="nx">Db</span><span class="p">();</span> <span class="c1">// With default database</span> <span class="kd">var</span> <span class="nx">db</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">kt</span><span class="p">.</span><span class="nx">Db</span><span class="p">(</span><span class="s1">'default.kct'</span><span class="p">);</span> </code></pre> <p><a name="open"></a></p> <h4>◆ open <code>open(hostname='localhost', port=1978)</code> </h4> <p>Open a connection to the database. Returns the Db object.</p> <ul> <li> <code>hostname</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The hostname of the database.</li> <li> <code>port</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; The port to connect to on the host.</li> </ul><h5>Examples</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">open</span><span class="p">();</span> <span class="c1">// on a different host</span> <span class="nx">db</span><span class="p">.</span><span class="nx">open</span><span class="p">(</span><span class="s1">'kyoto.example.com'</span><span class="p">);</span> </code></pre> <pre class="highlight"><code class="language-js"><span class="kd">var</span> <span class="nx">kyoto</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'kyoto-client'</span><span class="p">);</span> <span class="c1">// Chained with new</span> <span class="kd">var</span> <span class="nx">db</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">kyoto</span><span class="p">.</span><span class="nx">Db</span><span class="p">().</span><span class="nx">open</span><span class="p">(</span><span class="s1">'example.com'</span><span class="p">,</span> <span class="mi">1978</span><span class="p">);</span> </code></pre> <p><a name="close"></a></p> <h4>◆ close <code>close(callback)</code> </h4> <p>Close the connection to the database.</p> <p>Internally kyoto-client uses a persistent connection to the database to make requests faster. However to prevent your node application from hanging you must call <code>db.close</code> when you are done so that this persistent connection is closed.</p> <ul> <li> <code>callback(error)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">close</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Connection is now closed. The db can't be used anymore.</span> <span class="p">});</span> </code></pre> <p><a name="defaultDatabase"></a></p> <h4>◆ defaultDatabase <code>defaultDatabase([database])</code> </h4> <p>Set or get the default database.</p> <p>A Tokyo Tycoon server can host multiple databases. Requests can be directed at a particular database by name or number. E.g. <code>'users.kct'</code> or <code>1</code>.</p> <p>For procedures that accept a database option the value of defaultDatabase will be used if the option isn&#8217;t specified.</p> <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; database to make default. If not specified the current value for the default database is returned.</li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="c1">// Set the default database</span> <span class="nx">db</span><span class="p">.</span><span class="nx">defaultDatabase</span><span class="p">(</span><span class="s1">'example.kct'</span><span class="p">);</span> <span class="c1">// Retrieve the current default database value</span> <span class="nx">db</span><span class="p">.</span><span class="nx">defaultDatabase</span><span class="p">();</span> </code></pre> <p><a name="echo"></a></p> <h4>◆ echo <code>echo(input, callback)</code> </h4> <p>Echo back the input data as the output data</p> <ul> <li> <code>input</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Arbitrary key-value pairs</li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">echo</span><span class="p">({</span><span class="nx">test</span><span class="o">:</span> <span class="s2">"Value"</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// output -&gt; {test: "Value"}</span> <span class="p">});</span> </code></pre> <p><a name="report"></a></p> <h4>◆ report <code>report(callback)</code> </h4> <p>Get a report on the server.</p> <ul> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">report</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="cm">/* output -&gt;</span> <span class="cm"> { conf_kc_features: '(atomic)(zlib)'</span> <span class="cm"> , conf_kc_version: '1.2.30 (7.1)'</span> <span class="cm"> , conf_kt_features: '(kqueue)(lua)'</span> <span class="cm"> , conf_kt_version: '0.9.19 (1.25)'</span> <span class="cm"> , conf_os_name: 'Mac OS X'</span> <span class="cm"> , db_0: 'count=2 size=400128 path=tests.kct'</span> <span class="cm"> , db_total_count: '2'</span> <span class="cm"> , db_total_size: '400128'</span> <span class="cm"> , serv_conn: '1'</span> <span class="cm"> , serv_task: '0'</span> <span class="cm"> , sys_mem_peak: '2777088'</span> <span class="cm"> , sys_mem_rss: '2777088'</span> <span class="cm"> , sys_mem_size: '2777088'</span> <span class="cm"> , sys_proc_id: '70687'</span> <span class="cm"> , sys_ru_stime: '73.651796'</span> <span class="cm"> , sys_ru_utime: '90.519024'</span> <span class="cm"> , sys_time: '351491.752587'</span> <span class="cm"> }</span> <span class="cm">*/</span> <span class="p">});</span> </code></pre> <p><a name="play_script"></a></p> <h4>◆ playScript</h4> <p>Call a procedure of the script language (<a href="http://www.lua.org/">Lua</a>) extension.</p> <p>Not yet implemented.</p> <p><a name="tune_replication"></a></p> <h4>◆ tuneReplication</h4> <p>Configure the replication configuration.</p> <p>Not yet implemented.</p> <p><a name="status"></a></p> <h4>◆ status <code>status([options], callback)</code> </h4> <p>Get miscellaneous status information about a database.</p> <ul> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>test.kct</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="cm">/* output -&gt;</span> <span class="cm"> { apow: '8'</span> <span class="cm"> , bnum: '65536'</span> <span class="cm"> , chksum: '188'</span> <span class="cm"> , count: '2'</span> <span class="cm"> , cusage: '66'</span> <span class="cm"> , dfunit: '0'</span> <span class="cm"> , first: '1'</span> <span class="cm"> , flags: '1'</span> <span class="cm"> , fmtver: '5'</span> <span class="cm"> , fpow: '10'</span> <span class="cm"> , frgcnt: '0'</span> <span class="cm"> , icnt: '0'</span> <span class="cm"> , ktcapcnt: '-1'</span> <span class="cm"> , ktcapsiz: '-1'</span> <span class="cm"> , ktopts: '0'</span> <span class="cm"> , last: '1'</span> <span class="cm"> , lcnt: '1'</span> <span class="cm"> , librev: '1'</span> <span class="cm"> , libver: '7'</span> <span class="cm"> , msiz: '67108864'</span> <span class="cm"> , opts: '0'</span> <span class="cm"> , path: 'tests.kct'</span> <span class="cm"> , pccap: '67108864'</span> <span class="cm"> , pnum: '2'</span> <span class="cm"> , psiz: '8192'</span> <span class="cm"> , rcomp: 'lexical'</span> <span class="cm"> , realsize: '400128'</span> <span class="cm"> , realtype: '49'</span> <span class="cm"> , recovered: '0'</span> <span class="cm"> , reorganized: '0'</span> <span class="cm"> , root: '1'</span> <span class="cm"> , size: '400128'</span> <span class="cm"> , trimmed: '0'</span> <span class="cm"> , type: '49'</span> <span class="cm"> }</span> <span class="cm">*/</span> <span class="p">});</span> <span class="c1">// For a specific database</span> <span class="nx">db</span><span class="p">.</span><span class="nx">status</span><span class="p">({</span><span class="nx">database</span><span class="o">:</span> <span class="s2">"users.kct"</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// output contains status info for the users database</span> <span class="p">});</span> </code></pre> <p><a name="clear"></a></p> <h4>◆ clear <code>clear([options], callback)</code> </h4> <p>Remove all records from the database.</p> <ul> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">clear</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// output -&gt; {}</span> <span class="p">});</span> <span class="c1">// Clear a specific database</span> <span class="nx">db</span><span class="p">.</span><span class="nx">clear</span><span class="p">({</span><span class="nx">database</span><span class="o">:</span> <span class="s2">"test.kct"</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// output -&gt; {}</span> <span class="p">});</span> </code></pre> <p><a name="synchronize"></a></p> <h4>◆ synchronize</h4> <p>Synchronize updated contents with the file and the device</p> <p>Not yet implemented.</p> <p><a name="set"></a></p> <h4>◆ set <code>set(key, value, [options], callback)</code> </h4> <p>Set value of a record.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>value</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The value of the record</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> <li> <code>expiry</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date">Date</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; Set the expiry time of the record. When a date, this value will be when the record expires. When a number the record will expire in the the value specified seconds from now.</li> </ul> </li> <li> <code>callback(error)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> <span class="p">});</span> <span class="c1">// Set a record in a specific database</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="p">{</span><span class="nx">database</span><span class="o">:</span> <span class="s2">"test.kct"</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="p">});</span> <span class="c1">// Set the record to expire in one minute</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="p">{</span><span class="nx">expiry</span><span class="o">:</span> <span class="mi">60</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> <span class="p">});</span> <span class="c1">// Set the record to expire on 1 Jan 2020</span> <span class="kd">var</span> <span class="nx">expires</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">"1 Jan 2020"</span><span class="p">);</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="p">{</span><span class="nx">expiry</span><span class="o">:</span> <span class="nx">expires</span><span class="p">},</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> <span class="p">});</span> </code></pre> <p><a name="add"></a></p> <h4>◆ add <code>add(key, value, [options], callback)</code> </h4> <p>Set value of a record. Returns an error if the record already exists.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>value</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The value of the record</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="p">});</span> <span class="c1">// when value already exists</span> <span class="nx">db</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; Error("Record exists")</span> <span class="c1">// output -&gt; { ERROR: 'DB: 6: record duplication: record duplication' }</span> <span class="p">});</span> <span class="p">});</span> </code></pre> <p><a name="replace"></a></p> <h4>◆ replace <code>replace(key, value, [options], callback)</code> </h4> <p>Replace the value of a record. Returns an error if the record does not exist.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>value</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The value of the record</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Test"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; {}</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// when the record doesn't exist</span> <span class="nx">db</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; Error("Record does not exist")</span> <span class="c1">// output -&gt; { ERROR: 'DB: 7: no record: no record' }</span> <span class="p">});</span> </code></pre> <p><a name="append"></a></p> <h4>◆ append <code>append(key, value, [options], callback)</code> </h4> <p>Append to the value of a record. Sets the record if it does not exist.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>value</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The value to append to the record</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Test"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">" Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; {}</span> <span class="nx">db</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// value -&gt; 'Test Value'</span> <span class="p">})</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// when the record doesn't exist</span> <span class="nx">db</span><span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s2">"Value"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; Error("Record does not exist")</span> <span class="c1">// output -&gt; {}</span> <span class="nx">db</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// value -&gt; 'Value'</span> <span class="p">})</span> <span class="p">});</span> </code></pre> <p><a name="increment"></a></p> <h4>◆ increment <code>increment(key, num, [options], callback)</code> </h4> <p>Increment the integer value of a compatible record. Sets the record if it does not exist.</p> <p><strong>Note:</strong> It appears that Kyoto Tycoon only allows records that were created with <code>increment</code> to be incremented. Attempts to use this procedure on records set by other means results in an error (Kyoto Tycoon 0.9.29 (2.1) on Mac OS X (Kyoto Cabinet 1.2.39)).</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>num</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; The amount to increment the record by. Should be a positive or negative integer.</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Result from the server <ul> <li> <code>num</code> &#8211; the new value of the record</li> </ul> </li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">increment</span><span class="p">(</span><span class="s1">'count'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; { num: '1' }</span> <span class="nx">db</span><span class="p">.</span><span class="nx">increment</span><span class="p">(</span><span class="s1">'count'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; { num: '2' }</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// incrementing an incompatible record</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'incompatible'</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">increment</span><span class="p">(</span><span class="s1">'incompatible'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; Error("The existing record was not compatible")</span> <span class="c1">// output -&gt; { ERROR: 'DB: 8: logical inconsistency: logical inconsistency' }</span> <span class="p">});</span> <span class="p">});</span> </code></pre> <p><a name="increment_double"></a></p> <h4>◆ incrementDouble <code>incrementDouble(key, num, [options], callback)</code> </h4> <p>Increment the double (floating point) value of a compatible record. Sets the record if it does not exist.</p> <p>See note about compatible values in <a href="#increment">increment</a>.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>num</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; The amount to increment the record by. Can be positive or negative.</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Result from the server <ul> <li> <code>num</code> &#8211; the new value of the record</li> </ul> </li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="nx">db</span><span class="p">.</span><span class="nx">incrementDouble</span><span class="p">(</span><span class="s1">'count'</span><span class="p">,</span> <span class="mf">1.5</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; { num: '1.500000' }</span> <span class="nx">db</span><span class="p">.</span><span class="nx">incrementDouble</span><span class="p">(</span><span class="s1">'count'</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.25</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; undefined</span> <span class="c1">// output -&gt; { num: '1.250000' }</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// incrementing an incompatible record</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'incompatible'</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">incrementDouble</span><span class="p">(</span><span class="s1">'incompatible'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// error -&gt; Error("The existing record was not compatible")</span> <span class="c1">// output -&gt; { ERROR: 'DB: 8: logical inconsistency: logical inconsistency' }</span> <span class="p">});</span> <span class="p">});</span> </code></pre> <p><a name="cas"></a></p> <h4>◆ cas <code>cas(key, oval, nval, [options], callback)</code> </h4> <p>Performs a compare-and-swap operation. The value is only updated if the assumed existing value matches.</p> <ul> <li> <code>key</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> &#8211; The key of the record</li> <li> <code>oval</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The assumed old value. Set to <code>null</code> if the record does not currently have a value.</li> <li> <code>nval</code> &#8211; <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="http://nodejs.org/docs/v0.2.6/api.html#buffers-2">Buffer</a> &#8211; The new value. Set to <code>null</code> to remove the record.</li> <li> <code>options</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Options hash <ul> <li> <code>database</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">String</a> or <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number">Number</a> &#8211; A database name or index. For example: <code>'test.kct'</code> or <code>1</code>.</li> </ul> </li> <li> <code>callback(error, output)</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a> &#8211; Callback function <ul> <li> <code>error</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error">Error</a> &#8211; Set if an error occurs, otherwise <code>undefined</code> </li> <li> <code>output</code> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object">Object</a> &#8211; Key-value pairs</li> </ul> </li> </ul><h5>Example</h5> <pre class="highlight"><code class="language-js"><span class="c1">// sets the new value when the old value matches</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'old'</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">cas</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'old'</span><span class="p">,</span> <span class="s1">'new'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// value -&gt; 'new'</span> <span class="p">});</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// doesn't set the new value when the old value differs</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'old'</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">cas</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'not old'</span><span class="p">,</span> <span class="s1">'new'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">output</span><span class="p">)</span> <span class="p">{</span> <span class="nx">db</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// value -&gt; 'old'</span> <span class="p">});</span> <span class="p">});</span> <span class="p">});</span> <span class="c1">// removes the record when the new value is null</span> <span class="nx">db</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">'test'</span><span clas