Files
cpython-source-deps/docs/gsg/CXX/secondaryDelete.html
2017-09-04 13:40:25 -05:00

156 lines
5.9 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Deleting Secondary Database Records</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
<link rel="up" href="indexes.html" title="Chapter 5. Secondary Databases" />
<link rel="previous" href="readSecondary.html" title="Reading Secondary Databases" />
<link rel="next" href="secondaryCursor.html" title="&#10; &#10; Using Cursors with Secondary Databases&#10; " />
</head>
<body>
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Deleting Secondary Database Records</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="readSecondary.html">Prev</a> </td>
<th width="60%" align="center">Chapter 5. Secondary Databases</th>
<td width="20%" align="right"> <a accesskey="n" href="secondaryCursor.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="secondaryDelete"></a>Deleting Secondary Database Records</h2>
</div>
</div>
<div></div>
</div>
<p>
In general, you
<span>will</span>
not modify a secondary database directly. In
order to modify a secondary database, you should modify the primary
database and simply allow DB to manage the secondary modifications for you.
</p>
<p>
However, as a convenience, you can delete
<span>secondary database</span>
records directly. Doing so causes the associated primary key/data pair to be deleted.
This in turn causes DB to delete all
<span>secondary database</span>
records that reference the primary record.
</p>
<p>
You can use the
<tt class="methodname">Db::del()</tt>
method to delete a secondary database record.
<span>Note that if your
<span>secondary database</span>
contains duplicate records, then deleting a record from the set of
duplicates causes all of the duplicates to be deleted as well.
</span>
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
<span>
You can delete a secondary database record using the previously
described mechanism
</span>
only if the primary database is opened for write access.
</p>
</div>
<p>For example:</p>
<a id="cxx_index7"></a>
<pre class="programlisting">#include &lt;db_cxx.h&gt;
#include &lt;string.h&gt;
...
Db my_database(NULL, 0); // Primary
Db my_index(NULL, 0); // Secondary
// Open the primary
my_database.open(NULL, // Transaction pointer
"my_db.db", // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags
0); // File mode (using defaults)
// Setup the secondary to use sorted duplicates.
// This is often desireable for secondary databases.
my_index.set_flags(DB_DUPSORT);
// Open the secondary
my_index.open(NULL, // Transaction pointer
"my_secondary.db", // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags.
0); // File mode (using defaults)
// Now associate the primary and the secondary
my_database.associate(NULL, // Txn id
&amp;my_index, // Associated secondary database
get_sales_rep, // Callback used for key extraction.
0); // Flags
// Name to delete
char *search_name = "John Doe";
// Get a search key
Dbt key(search_name, strlen(search_name) + 1);
// Now delete the secondary record. This causes the associated primary
// record to be deleted. If any other secondary databases have secondary
// records referring to the deleted primary record, then those secondary
// records are also deleted.
my_index.del(NULL, &amp;key, 0); </pre>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="readSecondary.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="indexes.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="secondaryCursor.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Reading Secondary Databases </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> 
Using Cursors with Secondary Databases
</td>
</tr>
</table>
</div>
</body>
</html>