annotate man/lispref/databases.texi @ 4995:8431b52e43b1

Move the various map* functions to C; add #'map-into. src/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> Move #'mapcar*, #'mapcan, #'mapc, #'map, #'mapl, #'mapcon to C; extend #'mapvector, #'mapconcat, #'mapcar to support more SEQUENCES; have them all error with circular lists. * fns.c (Fsubseq): Call CHECK_SEQUENCE here; Flength can return from the debugger if it errors with a non-sequence, leading to a crash in Fsubseq if sequence really is *not* a sequence. (mapcarX): Rename mapcar1 to mapcarX; rework it comprehensively to take an optional lisp output argument, and a varying number of sequences. Special-case a single list argument, as we used to, saving its elements in the stack space for the results before calling FUNCTION, so FUNCTION can corrupt the list all it wants. dead_wrong_type_argument() in the other cases if we encounter a non-cons where we expected a cons. (Fmapconcat): Accept further SEQUENCES after separator here. Special-case the idiom (mapconcat 'identity SEQUENCE), don't even funcall. (FmapcarX): Rename this from Fmapcar. Accept optional SEQUENCES. (Fmapvector): Accept optional SEQUENCES. (Fmapcan, Fmapc, Fmap): Move these here from cl-extra.el. (Fmap_into): New function, as specified by Common Lisp. (maplist): New function, the guts of the implementation of Fmaplist and Fmapl. (Fmaplist, Fmapl, Fmapcon): Move these from cl-extra.el. (syms_of_fns): Add a few needed symbols here, for the type tests used by #'map. Add the new subrs, with aliases for #'mapc-internal and #'mapcar. * general-slots.h: Declare Qcoerce here, now it's used in both indent.c and fns.c * indent.c (syms_of_indent): Qcoerce is gone from here. * lisp.h: Add ARRAYP(), SEQUENCEP(), and the corresponding CHECK_* macros. Declare Fbit_vector, Fstring, FmapcarX, now other files need to use them. * data.c (Farrayp, Fsequencep): Use ARRAYP and SEQUENCEP, just added to lisp.h * buffer.c (Fbuffer_list): Now Fmapcar has been renamed FmapcarX and takes MANY arguments, update this function to reflect that. lisp/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> * cl.el (mapcar*): Delete; this is now in fns.c. Use #'mapc, not #'mapc-internal in a couple of places. * cl-macs.el (mapc, mapcar*, map): Delete these compiler macros now the corresponding functions are in fns.c; there's no run-time advantage to the macros. * cl-extra.el (coerce): Extend the possible conversions here a little; it's not remotely comprehensive yet, though it does allow running slightly more Common Lisp code than previously. (cl-mapcar-many): Delete. (map, maplist, mapc, mapl, mapcan, mapcon): Move these to fns.c. * bytecomp.el (byte-compile-maybe-mapc): Use #'mapc itself, not #'mapc-internal, now the former is in C. (mapcar*): Use #'byte-compile-maybe-mapc as this function's byte-compile method, now a #'mapc that can take more than one sequence is in C. * obsolete.el (cl-mapc): Move this compatibility alias to this file. * update-elc.el (do-autoload-commands): Use #'mapc, not #'mapc-internal here.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 31 Jan 2010 18:29:48 +0000
parents 576fb035e263
children 9fae6227ede5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @c Copyright (C) 1996 Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/databases.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Databases, Processes, Range Tables, top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Databases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @cindex database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 @defun databasep object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 This function returns non-@code{nil} if @var{object} is a database.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 * Connecting to a Database::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 * Working With a Database::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 * Other Database Functions::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 @node Connecting to a Database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 @section Connecting to a Database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 @defun open-database file &optional type subtype access mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 This function opens database @var{file}, using database method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 @var{type} and @var{subtype}, with access rights @var{access} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 permissions @var{mode}. @var{access} can be any combination of @code{r}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 @code{w} and @code{+}, for read, write, and creation flags.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
29 @var{type} can have the value @code{'dbm} or @code{'berkeley-db} to
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 select the type of database file to use. (Note: XEmacs may not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 support both of these types.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 For a @var{type} of @code{'dbm}, there are no subtypes, so
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
34 @var{subtype} should be @code{nil}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
36 For a @var{type} of @code{'berkeley-db}, the following subtypes are
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 available: @code{'hash}, @code{'btree}, and @code{'recno}. See the
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
38 manpages for the Berkeley DB functions for more information about these
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
42 @defun close-database database
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
43 This function closes database @var{database}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
46 @defun database-live-p object
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
47 This function returns @code{t} if @var{object} is an active database, else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 @node Working With a Database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 @section Working With a Database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
54 @defun get-database key database &optional default
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 This function finds the value for @var{key} in @var{database}. If there is no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 corresponding value, @var{default} is returned (@code{nil} if @var{default} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 omitted).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
60 @defun map-database function database
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 This function maps @var{function} over entries in @var{database},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 calling it with two args, each key and value in the database.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
65 @defun put-database key value database &optional replace
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
66 This function stores @var{key} and @var{value} in @var{database}.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
67 If optional fourth arg @var{replace} is non-@code{nil}, replace any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 existing entry in the database.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
71 @defun remove-database key database
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 This function removes @var{key} from @var{database}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 @node Other Database Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 @section Other Database Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
78 @defun database-file-name database
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
79 This function returns the filename associated with @var{database}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
82 @defun database-last-error &optional database
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
83 This function returns the last error associated with @var{database}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
86 @defun database-subtype database
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
87 This function returns the subtype of @var{database}, if any.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
90 @defun database-type database
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
91 This function returns the type of @var{database}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 @end defun