110
<refsect1 role="details">
108
<refsect1 id="glib-Relations-and-Tuples.details" role="details">
111
109
<title role="details.title">Details</title>
113
<title><anchor id="GRelation" role="struct"/>GRelation</title>
114
<indexterm><primary>GRelation</primary></indexterm><programlisting>typedef struct _GRelation GRelation;</programlisting>
110
<refsect2 id="GRelation" role="struct">
111
<title>GRelation</title>
112
<indexterm zone="GRelation"><primary sortas="GRelation">GRelation</primary></indexterm><programlisting>typedef struct _GRelation GRelation;</programlisting>
116
114
The <link linkend="GRelation"><type>GRelation</type></link> struct is an opaque data structure to represent a
117
115
<link linkend="glib-Relations-and-Tuples">Relation</link>.
118
116
It should only be accessed via the following functions.
119
117
</para></refsect2>
121
<title><anchor id="g-relation-new" role="function"/>g_relation_new ()</title>
122
<indexterm><primary>g_relation_new</primary></indexterm><programlisting><link linkend="GRelation">GRelation</link>* g_relation_new (<link linkend="gint">gint</link> fields);</programlisting>
118
<refsect2 id="g-relation-new" role="function">
119
<title>g_relation_new ()</title>
120
<indexterm zone="g-relation-new"><primary sortas="g_relation_new">g_relation_new</primary></indexterm><programlisting><link linkend="GRelation">GRelation</link>* g_relation_new (<link linkend="gint">gint</link> fields);</programlisting>
124
122
Creates a new <link linkend="GRelation"><type>GRelation</type></link> with the given number of fields.
125
123
Note that currently the number of fields must be 2.
126
124
</para><variablelist role="params">
127
<varlistentry><term><parameter>fields</parameter> :</term>
125
<varlistentry><term><parameter>fields</parameter> :</term>
128
126
<listitem><simpara>the number of fields.
129
127
</simpara></listitem></varlistentry>
130
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>a new <link linkend="GRelation"><type>GRelation</type></link>.
128
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>a new <link linkend="GRelation"><type>GRelation</type></link>.
133
129
</simpara></listitem></varlistentry>
134
130
</variablelist></refsect2>
136
<title><anchor id="g-relation-index" role="function"/>g_relation_index ()</title>
137
<indexterm><primary>g_relation_index</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_index (<link linkend="GRelation">GRelation</link> *relation,
131
<refsect2 id="g-relation-index" role="function">
132
<title>g_relation_index ()</title>
133
<indexterm zone="g-relation-index"><primary sortas="g_relation_index">g_relation_index</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_index (<link linkend="GRelation">GRelation</link> *relation,
138
134
<link linkend="gint">gint</link> field,
139
135
<link linkend="GHashFunc">GHashFunc</link> hash_func,
140
136
<link linkend="GEqualFunc">GEqualFunc</link> key_equal_func);</programlisting>
142
138
Creates an index on the given field.
143
139
Note that this must be called before any records are added to the <link linkend="GRelation"><type>GRelation</type></link>.
144
140
</para><variablelist role="params">
145
<varlistentry><term><parameter>relation</parameter> :</term>
141
<varlistentry><term><parameter>relation</parameter> :</term>
146
142
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
147
143
</simpara></listitem></varlistentry>
148
<varlistentry><term><parameter>field</parameter> :</term>
144
<varlistentry><term><parameter>field</parameter> :</term>
149
145
<listitem><simpara>the field to index, counting from 0.
150
146
</simpara></listitem></varlistentry>
151
<varlistentry><term><parameter>hash_func</parameter> :</term>
147
<varlistentry><term><parameter>hash_func</parameter> :</term>
152
148
<listitem><simpara>a function to produce a hash value from the field data.
153
149
</simpara></listitem></varlistentry>
154
<varlistentry><term><parameter>key_equal_func</parameter> :</term>
150
<varlistentry><term><parameter>key_equal_func</parameter> :</term>
155
151
<listitem><simpara>a function to compare two values of the given field.
158
152
</simpara></listitem></varlistentry>
159
153
</variablelist></refsect2>
161
<title><anchor id="g-relation-insert" role="function"/>g_relation_insert ()</title>
162
<indexterm><primary>g_relation_insert</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_insert (<link linkend="GRelation">GRelation</link> *relation,
154
<refsect2 id="g-relation-insert" role="function">
155
<title>g_relation_insert ()</title>
156
<indexterm zone="g-relation-insert"><primary sortas="g_relation_insert">g_relation_insert</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_insert (<link linkend="GRelation">GRelation</link> *relation,
163
157
...);</programlisting>
165
159
Inserts a record into a <link linkend="GRelation"><type>GRelation</type></link>.
166
160
</para><variablelist role="params">
167
<varlistentry><term><parameter>relation</parameter> :</term>
161
<varlistentry><term><parameter>relation</parameter> :</term>
168
162
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
169
163
</simpara></listitem></varlistentry>
170
<varlistentry><term><parameter>...</parameter> :</term>
164
<varlistentry><term><parameter>...</parameter> :</term>
171
165
<listitem><simpara>the fields of the record to add. These must match the number of
172
166
fields in the <link linkend="GRelation"><type>GRelation</type></link>, and of type <link linkend="gpointer"><type>gpointer</type></link> or <link linkend="gconstpointer"><type>gconstpointer</type></link>.
175
167
</simpara></listitem></varlistentry>
176
168
</variablelist></refsect2>
178
<title><anchor id="g-relation-exists" role="function"/>g_relation_exists ()</title>
179
<indexterm><primary>g_relation_exists</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> g_relation_exists (<link linkend="GRelation">GRelation</link> *relation,
169
<refsect2 id="g-relation-exists" role="function">
170
<title>g_relation_exists ()</title>
171
<indexterm zone="g-relation-exists"><primary sortas="g_relation_exists">g_relation_exists</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> g_relation_exists (<link linkend="GRelation">GRelation</link> *relation,
180
172
...);</programlisting>
182
Returns <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if a record with the given values exists in a <link linkend="GRelation"><type>GRelation</type></link>.
174
Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if a record with the given values exists in a <link linkend="GRelation"><type>GRelation</type></link>.
183
175
Note that the values are compared directly, so that, for example, two
184
176
copies of the same string will not match.
185
177
</para><variablelist role="params">
186
<varlistentry><term><parameter>relation</parameter> :</term>
178
<varlistentry><term><parameter>relation</parameter> :</term>
187
179
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
188
180
</simpara></listitem></varlistentry>
189
<varlistentry><term><parameter>...</parameter> :</term>
181
<varlistentry><term><parameter>...</parameter> :</term>
190
182
<listitem><simpara>the fields of the record to compare. The number must match the
191
183
number of fields in the <link linkend="GRelation"><type>GRelation</type></link>.
192
184
</simpara></listitem></varlistentry>
193
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara><link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if a record matches.
185
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>%TRUE if a record matches.
196
186
</simpara></listitem></varlistentry>
197
187
</variablelist></refsect2>
199
<title><anchor id="g-relation-count" role="function"/>g_relation_count ()</title>
200
<indexterm><primary>g_relation_count</primary></indexterm><programlisting><link linkend="gint">gint</link> g_relation_count (<link linkend="GRelation">GRelation</link> *relation,
188
<refsect2 id="g-relation-count" role="function">
189
<title>g_relation_count ()</title>
190
<indexterm zone="g-relation-count"><primary sortas="g_relation_count">g_relation_count</primary></indexterm><programlisting><link linkend="gint">gint</link> g_relation_count (<link linkend="GRelation">GRelation</link> *relation,
201
191
<link linkend="gconstpointer">gconstpointer</link> key,
202
192
<link linkend="gint">gint</link> field);</programlisting>
204
194
Returns the number of tuples in a <link linkend="GRelation"><type>GRelation</type></link> that have the given value
205
195
in the given field.
206
196
</para><variablelist role="params">
207
<varlistentry><term><parameter>relation</parameter> :</term>
197
<varlistentry><term><parameter>relation</parameter> :</term>
208
198
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
209
199
</simpara></listitem></varlistentry>
210
<varlistentry><term><parameter>key</parameter> :</term>
200
<varlistentry><term><parameter>key</parameter> :</term>
211
201
<listitem><simpara>the value to compare with.
212
202
</simpara></listitem></varlistentry>
213
<varlistentry><term><parameter>field</parameter> :</term>
203
<varlistentry><term><parameter>field</parameter> :</term>
214
204
<listitem><simpara>the field of each record to match.
215
205
</simpara></listitem></varlistentry>
216
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the number of matches.
206
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the number of matches.
219
207
</simpara></listitem></varlistentry>
220
208
</variablelist></refsect2>
222
<title><anchor id="g-relation-select" role="function"/>g_relation_select ()</title>
223
<indexterm><primary>g_relation_select</primary></indexterm><programlisting><link linkend="GTuples">GTuples</link>* g_relation_select (<link linkend="GRelation">GRelation</link> *relation,
209
<refsect2 id="g-relation-select" role="function">
210
<title>g_relation_select ()</title>
211
<indexterm zone="g-relation-select"><primary sortas="g_relation_select">g_relation_select</primary></indexterm><programlisting><link linkend="GTuples">GTuples</link>* g_relation_select (<link linkend="GRelation">GRelation</link> *relation,
224
212
<link linkend="gconstpointer">gconstpointer</link> key,
225
213
<link linkend="gint">gint</link> field);</programlisting>
228
216
Use <link linkend="g-tuples-index"><function>g_tuples_index()</function></link> to access the returned records.
229
217
The returned records should be freed with <link linkend="g-tuples-destroy"><function>g_tuples_destroy()</function></link>.
230
218
</para><variablelist role="params">
231
<varlistentry><term><parameter>relation</parameter> :</term>
219
<varlistentry><term><parameter>relation</parameter> :</term>
232
220
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
233
221
</simpara></listitem></varlistentry>
234
<varlistentry><term><parameter>key</parameter> :</term>
222
<varlistentry><term><parameter>key</parameter> :</term>
235
223
<listitem><simpara>the value to compare with.
236
224
</simpara></listitem></varlistentry>
237
<varlistentry><term><parameter>field</parameter> :</term>
225
<varlistentry><term><parameter>field</parameter> :</term>
238
226
<listitem><simpara>the field of each record to match.
239
227
</simpara></listitem></varlistentry>
240
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the records (tuples) that matched.
228
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the records (tuples) that matched.
243
229
</simpara></listitem></varlistentry>
244
230
</variablelist></refsect2>
246
<title><anchor id="g-relation-delete" role="function"/>g_relation_delete ()</title>
247
<indexterm><primary>g_relation_delete</primary></indexterm><programlisting><link linkend="gint">gint</link> g_relation_delete (<link linkend="GRelation">GRelation</link> *relation,
231
<refsect2 id="g-relation-delete" role="function">
232
<title>g_relation_delete ()</title>
233
<indexterm zone="g-relation-delete"><primary sortas="g_relation_delete">g_relation_delete</primary></indexterm><programlisting><link linkend="gint">gint</link> g_relation_delete (<link linkend="GRelation">GRelation</link> *relation,
248
234
<link linkend="gconstpointer">gconstpointer</link> key,
249
235
<link linkend="gint">gint</link> field);</programlisting>
251
237
Deletes any records from a <link linkend="GRelation"><type>GRelation</type></link> that have the given key value in
253
239
</para><variablelist role="params">
254
<varlistentry><term><parameter>relation</parameter> :</term>
240
<varlistentry><term><parameter>relation</parameter> :</term>
255
241
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
256
242
</simpara></listitem></varlistentry>
257
<varlistentry><term><parameter>key</parameter> :</term>
243
<varlistentry><term><parameter>key</parameter> :</term>
258
244
<listitem><simpara>the value to compare with.
259
245
</simpara></listitem></varlistentry>
260
<varlistentry><term><parameter>field</parameter> :</term>
246
<varlistentry><term><parameter>field</parameter> :</term>
261
247
<listitem><simpara>the field of each record to match.
262
248
</simpara></listitem></varlistentry>
263
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the number of records deleted.
249
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the number of records deleted.
266
250
</simpara></listitem></varlistentry>
267
251
</variablelist></refsect2>
269
<title><anchor id="g-relation-destroy" role="function"/>g_relation_destroy ()</title>
270
<indexterm><primary>g_relation_destroy</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_destroy (<link linkend="GRelation">GRelation</link> *relation);</programlisting>
252
<refsect2 id="g-relation-destroy" role="function">
253
<title>g_relation_destroy ()</title>
254
<indexterm zone="g-relation-destroy"><primary sortas="g_relation_destroy">g_relation_destroy</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_destroy (<link linkend="GRelation">GRelation</link> *relation);</programlisting>
272
256
Destroys the <link linkend="GRelation"><type>GRelation</type></link>, freeing all memory allocated.
273
257
However, it does not free memory allocated for the
274
258
tuple data, so you should free that first if appropriate.
275
259
</para><variablelist role="params">
276
<varlistentry><term><parameter>relation</parameter> :</term>
260
<varlistentry><term><parameter>relation</parameter> :</term>
277
261
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
280
262
</simpara></listitem></varlistentry>
281
263
</variablelist></refsect2>
283
<title><anchor id="g-relation-print" role="function"/>g_relation_print ()</title>
284
<indexterm><primary>g_relation_print</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_print (<link linkend="GRelation">GRelation</link> *relation);</programlisting>
264
<refsect2 id="g-relation-print" role="function">
265
<title>g_relation_print ()</title>
266
<indexterm zone="g-relation-print"><primary sortas="g_relation_print">g_relation_print</primary></indexterm><programlisting><link linkend="void">void</link> g_relation_print (<link linkend="GRelation">GRelation</link> *relation);</programlisting>
286
268
Outputs information about all records in a <link linkend="GRelation"><type>GRelation</type></link>, as well as the indexes.
287
269
It is for debugging.
288
270
</para><variablelist role="params">
289
<varlistentry><term><parameter>relation</parameter> :</term>
271
<varlistentry><term><parameter>relation</parameter> :</term>
290
272
<listitem><simpara>a <link linkend="GRelation"><type>GRelation</type></link>.
293
273
</simpara></listitem></varlistentry>
294
274
</variablelist></refsect2>
296
<title><anchor id="GTuples" role="struct"/>GTuples</title>
297
<indexterm><primary>GTuples</primary></indexterm><programlisting>typedef struct {
275
<refsect2 id="GTuples" role="struct">
276
<title>GTuples</title>
277
<indexterm zone="GTuples"><primary sortas="GTuples">GTuples</primary></indexterm><programlisting>typedef struct {
300
280
</programlisting>
305
285
To access the matched records, you must use <link linkend="g-tuples-index"><function>g_tuples_index()</function></link>.
306
286
</para><variablelist role="struct">
308
<term><link linkend="guint">guint</link> <structfield>len</structfield>;</term>
288
<term><link linkend="guint">guint</link> <structfield>len</structfield>;</term>
309
289
<listitem><simpara>the number of records that matched.
311
290
</simpara></listitem>
313
292
</variablelist></refsect2>
315
<title><anchor id="g-tuples-destroy" role="function"/>g_tuples_destroy ()</title>
316
<indexterm><primary>g_tuples_destroy</primary></indexterm><programlisting><link linkend="void">void</link> g_tuples_destroy (<link linkend="GTuples">GTuples</link> *tuples);</programlisting>
293
<refsect2 id="g-tuples-destroy" role="function">
294
<title>g_tuples_destroy ()</title>
295
<indexterm zone="g-tuples-destroy"><primary sortas="g_tuples_destroy">g_tuples_destroy</primary></indexterm><programlisting><link linkend="void">void</link> g_tuples_destroy (<link linkend="GTuples">GTuples</link> *tuples);</programlisting>
318
297
Frees the records which were returned by <link linkend="g-relation-select"><function>g_relation_select()</function></link>.
319
298
This should always be called after <link linkend="g-relation-select"><function>g_relation_select()</function></link> when you are
320
299
finished with the records.
321
300
The records are not removed from the <link linkend="GRelation"><type>GRelation</type></link>.
322
301
</para><variablelist role="params">
323
<varlistentry><term><parameter>tuples</parameter> :</term>
302
<varlistentry><term><parameter>tuples</parameter> :</term>
324
303
<listitem><simpara>the tuple data to free.
327
304
</simpara></listitem></varlistentry>
328
305
</variablelist></refsect2>
330
<title><anchor id="g-tuples-index" role="function"/>g_tuples_index ()</title>
331
<indexterm><primary>g_tuples_index</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_tuples_index (<link linkend="GTuples">GTuples</link> *tuples,
306
<refsect2 id="g-tuples-index" role="function">
307
<title>g_tuples_index ()</title>
308
<indexterm zone="g-tuples-index"><primary sortas="g_tuples_index">g_tuples_index</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_tuples_index (<link linkend="GTuples">GTuples</link> *tuples,
332
309
<link linkend="gint">gint</link> index_,
333
310
<link linkend="gint">gint</link> field);</programlisting>
336
313
It returns the given field of the record at the given index.
337
314
The returned value should not be changed.
338
315
</para><variablelist role="params">
339
<varlistentry><term><parameter>tuples</parameter> :</term>
316
<varlistentry><term><parameter>tuples</parameter> :</term>
340
317
<listitem><simpara>the tuple data, returned by <link linkend="g-relation-select"><function>g_relation_select()</function></link>.
341
318
</simpara></listitem></varlistentry>
342
<varlistentry><term><parameter>index_</parameter> :</term>
319
<varlistentry><term><parameter>index_</parameter> :</term>
343
320
<listitem><simpara>the index of the record.
344
321
</simpara></listitem></varlistentry>
345
<varlistentry><term><parameter>field</parameter> :</term>
322
<varlistentry><term><parameter>field</parameter> :</term>
346
323
<listitem><simpara>the field to return.
347
324
</simpara></listitem></varlistentry>
348
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the field of the record.
325
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the field of the record.
351
326
</simpara></listitem></varlistentry>
352
327
</variablelist></refsect2>