File: secondaryDelete.html

package info (click to toggle)
db5.3 5.3.28%2Bdfsg1-0.8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 158,400 kB
  • sloc: ansic: 448,406; java: 111,824; tcl: 80,544; sh: 44,326; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (186 lines) | stat: -rw-r--r-- 6,686 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?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.73.2" />
    <link rel="start" href="index.html" title="Getting Started with Berkeley DB" />
    <link rel="up" href="indexes.html" title="Chapter 5. Secondary Databases" />
    <link rel="prev" href="readSecondary.html" title="Reading Secondary Databases" />
    <link rel="next" href="secondaryCursor.html" title="Using Cursors with Secondary Databases" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 11.2.5.3</p>
      </div>
      <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>
      <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 
            
            <code class="methodname">DB-&gt;del()</code>
            
        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="c_index7"></a>
      <pre class="programlisting">#include &lt;db.h&gt;
#include &lt;string.h&gt;

...

DB *dbp, *sdbp;    /* Primary and secondary DB handles */
DBT key;           /* DBTs used for the delete */
int ret;           /* Function return value */
char *search_name = "John Doe"; /* Name to delete */

/* Primary */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
  /* Error handling goes here */
}

/* Secondary */
ret = db_create(&amp;sdbp, NULL, 0);
if (ret != 0) {
  /* Error handling goes here */
}

/* Usually we want to support duplicates for secondary databases */
ret = sdbp-&gt;set_flags(sdbp, DB_DUPSORT);
if (ret != 0) {
  /* Error handling goes here */
}

/* open the primary database */
ret = dbp-&gt;open(dbp,        /* DB structure pointer */
                NULL,       /* Transaction pointer */
                "my_db.db", /* On-disk file that holds the database.
                             * Required. */
                NULL,       /* Optional logical database name */
                DB_BTREE,   /* Database access method */
                0,          /* Open flags */
                0);         /* File mode (using defaults) */
if (ret != 0) {
  /* Error handling goes here */
}

/* open the secondary database */
ret = sdbp-&gt;open(sdbp,          /* DB structure pointer */
                 NULL,          /* Transaction pointer */
                 "my_secdb.db", /* On-disk file that holds the database.
                                 * Required. */
                 NULL,          /* Optional logical database name */
                 DB_BTREE,      /* Database access method */
                 0,             /* Open flags */
                 0);            /* File mode (using defaults) */
if (ret != 0) {
  /* Error handling goes here */
}

/* Now associate the secondary to the primary */
dbp-&gt;associate(dbp,            /* Primary database */
               NULL,           /* TXN id */
               sdbp,           /* Secondary database */
               get_sales_rep,  /* Callback used for key creation. */
               0);             /* Flags */

/*
 * Zero out the DBT before using it.
 */
memset(&amp;key, 0, sizeof(DBT));

key.data = search_name;
key.size = 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.
 */
 sdbp-&gt;del(sdbp, 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"> 
        
        <span>Using Cursors with Secondary Databases</span>
    </td>
        </tr>
      </table>
    </div>
  </body>
</html>