dnl $Id: m4.err,v 10.146 2007/10/24 16:06:07 bostic Exp $
dnl
dnl ###################################################################
dnl m4_err_mem_insufficient --
dnl	Inline error for insufficient memory to return a key/data pair.
dnl ###################################################################
define(m4_err_mem_insufficient, [dnl
ifelse(M4EXCEPT, except_only,
[and a m4_ref(DbMemoryException) is thrown],
[and the error DB_BUFFER_SMALL is returned])])
dnl ###################################################################
dnl General errors:
dnl
dnl There are 3 cases: the C API, which just returns errors, the C++ API
dnl which either throws exceptions or returns errors, and the XML API which
dnl just throws exceptions.
dnl
dnl	#1: API name
dnl	#2: Variadic list of errors.
dnl
dnl Some errors are well-known, and can either throw an exception or be
dnl a normal return: buffersmall, deadlock, filenotfound, memory.  In this
dnl case, we immediately output the error for C, and save up the output for
dnl C++, because we list exceptions after the laundry list of error returns.
dnl
dnl If the error isn't well-known, it's expected to be in pairs: the error
dnl followed by the string associated with it.
dnl ###################################################################
define(m4_err, [dnl
define([__m4_errapi], [m4_refT($1)])
define([__m4_errneedheader], yes)
m4_header(Errors)
__m4_errloop(shift($@))
undivert(1)])
define(m4_errstr, [dnl
define([__m4_errapi], [$1])
define([__m4_errneedheader], yes)
m4_header(Errors)
__m4_errloop(shift($@))
undivert(1)])
dnl
dnl ###################################################################
dnl __m4_errheader
dnl	If we need header text, output it, but only once.
dnl ###################################################################
define(__m4_errheader, [ifelse(__m4_errneedheader, yes, [m4_p([dnl
The __m4_errapi
ifelse(M4EXCEPT, except_return,
[may fail and throw
ifelse(M4PRODUCT, XML, m4_ref(XmlException)[,], m4_ref(DbException)[,])
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:],
M4EXCEPT, except_only,
[may fail and throw
ifelse(M4PRODUCT, XML, m4_ref(XmlException)[,], m4_ref(DbException)[,])
encapsulating one of the following non-zero errors:],
[may fail and return one of the following non-zero errors:])])
define([__m4_errneedheader], no)])])
dnl
dnl ###################################################################
dnl __m4_errloop
dnl	Helper macro: loop through exception list.
dnl ###################################################################
define(__m4_errloop, [dnl
ifelse([$1],,,
dnl ###################################################################
dnl Buffer Small
dnl	Requires subsequent argument which is the reason for the failure.
dnl ###################################################################
[$1], buffersmall, [dnl
ifelse(M4EXCEPT, return_only, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_BUFFER_SMALL, [The [$2].])
m4_tagend],[dnl
divert(1)
m4_p([If the [$2], the __m4_errapi will fail and
ifelse(M4EXCEPT, except_return, [either return DB_BUFFER_SMALL or])
throw a m4_ref(DbMemoryException) exception.])
divert(0)])
__m4_errloop(shift(shift($@)))],
dnl ###################################################################
dnl Deadlock.
dnl ###################################################################
[$1], deadlock, [dnl
ifelse(M4EXCEPT, return_only, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_LOCK_DEADLOCK, [dnl
A transactional database environment operation was selected to resolve
a deadlock.])
m4_tag(DB_LOCK_NOTGRANTED, [dnl
A m4_cam database environment configured for lock timeouts was unable
to grant a lock in the allowed time.])
m4_tagend],[dnl
divert(1)
m4_p([If a transactional database environment operation was selected to
resolve a deadlock, the __m4_errapi will fail and
ifelse(M4EXCEPT, except_return, [either return m4_ref(DB_LOCK_DEADLOCK) or])
throw a m4_ref(DbDeadlockException) exception.])
m4_p([If a m4_cam database environment configured for lock timeouts was unable
to grant a lock in the allowed time, the __m4_errapi will fail and
ifelse(M4EXCEPT, except_return, [either return m4_ref(DB_LOCK_NOTGRANTED) or])
throw a m4_ref(DbLockNotGrantedException) exception.])
divert(0)])
__m4_errloop(shift($@))],
dnl ###################################################################
dnl Filenotfound
dnl ###################################################################
[$1], filenotfound, [dnl
m4_tagbegin
m4_tag(ENOENT, [The file or directory does not exist.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl LockNotGranted
dnl ###################################################################
[$1], locknotgranted, [dnl
ifelse(M4EXCEPT, return_only, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_LOCK_NOTGRANTED, [dnl
The $2 lock could not be granted before the wait-time expired.])
m4_tagend],[dnl
divert(1)
m4_p([If the $2 lock could not be granted before the wait-time expired,
the __m4_errapi will fail and
ifelse(M4EXCEPT, except_return, [either return DB_LOCK_NOTGRANTED or])
throw a m4_ref(DbLockNotGrantedException) exception.])
divert(0)])
__m4_errloop(shift(shift($@)))],
dnl ###################################################################
dnl Memory
dnl	Requires subsequent argument which is the reason for the failure.
dnl ###################################################################
[$1], memory, [dnl
ifelse(M4EXCEPT, return_only, [dnl
__m4_errheader
m4_tagbegin
m4_tag(ENOMEM, [The [$2].])
m4_tagend],[dnl
divert(1)
m4_p([If the [$2], the __m4_errapi will fail and
ifelse(M4EXCEPT, except_return, [either return ENOMEM or])
throw a DbMemoryException.])
divert(0)])
__m4_errloop(shift(shift($@)))],
dnl ###################################################################
dnl XML: generic underlying error from the core DB.
dnl ###################################################################
[$1], dberr, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DATABASE_ERROR, [dnl
An error occurred in an underlying m4_db database.  The
m4_refT(xmlexception_getdberror) will return the error code for the
error.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl EACCESS because the database is read-only.
dnl ###################################################################
[$1], readonly, [dnl
__m4_errheader
m4_tagbegin
m4_tag(EACCES, [An attempt was made to modify a read-only database.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl EAGAIN because the region is unavailable.
dnl ###################################################################
[$1], regionagain, [dnl
__m4_errheader
m4_tagbegin
m4_tag(EAGAIN, [dnl
The shared memory region was locked and (repeatedly) unavailable.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl EINVAL
dnl	Requires subsequent argument which is empty or a list of may be
dnl	additional reasons.
dnl ###################################################################
[$1], einval, [dnl
__m4_errheader
m4_tagbegin
m4_tag(EINVAL, [dnl
ifelse([$2],, An, If [$2]; or if an)
invalid flag value or parameter was specified.])
m4_tagend
__m4_errloop(shift(shift($@)))],
dnl ###################################################################
dnl DB_REP_HANDLE_DEAD -- replication rolled back a commit record.
dnl ###################################################################
[$1], rephandle, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_REP_HANDLE_DEAD, [dnl
The database handle has been invalidated because a replication election
unrolled a committed transaction.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl DB_REP_LOCKOUT -- replication blocked by client/master sync-up.
dnl ###################################################################
[$1], replockout, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_REP_LOCKOUT, [dnl
The operation was blocked by client/master synchronization.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl DB_REP_LEASE_EXPIRED -- replication lease expired
dnl ###################################################################
[$1], replease, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_REP_LEASE_EXPIRED, [dnl
The operation failed because the site's replication master lease has expired.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl EPERM because write operation with read-only CDB cursor.
dnl ###################################################################
[$1], cdbperm, [dnl
__m4_errheader
m4_tagbegin
m4_tag(EPERM  , [dnl
Write attempted on read-only cursor when the m4_ref(DB_INIT_CDB) flag was
specified to m4_ref(dbenv_open).])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl Bad secondary.
dnl ###################################################################
[$1], secondary_bad, [dnl
__m4_errheader
m4_tagbegin
m4_tag(DB_SECONDARY_BAD, [dnl
A secondary index references a nonexistent primary key.])
m4_tagend
__m4_errloop(shift($@))],
dnl ###################################################################
dnl Empty entry (to support ifelse() constructs).
dnl ###################################################################
[$1], empty, [__m4_errloop(shift($@))],
dnl ###################################################################
dnl Everything else.
dnl ###################################################################
[dnl
__m4_errheader
m4_tagbegin
m4_tag([$1], [$2])
m4_tagend
__m4_errloop(shift(shift($@)))])])
