2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
20 #define _CPP_DBCONTEXT
22 #include <Security/DbContext.h>
24 #include <Security/Database.h>
26 #include <Security/cssmerr.h>
27 #include <Security/utilities.h>
29 DbContext::DbContext (Database
&inDatabase
,
30 DatabaseSession
&inDatabaseSession
,
31 CSSM_DB_ACCESS_TYPE inAccessRequest
,
32 const CSSM_ACCESS_CREDENTIALS
*inAccessCred
) :
33 mDatabase (inDatabase
),
34 mDatabaseSession (inDatabaseSession
),
35 mAccessRequest (inAccessRequest
)
38 //mAccessCred = inAccessCred;
41 DbContext::~DbContext ()
44 // XXX How do we delete these?
49 DbContext::dataGetFirst(const DLQuery
*inQuery
,
50 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes
,
52 CSSM_DB_UNIQUE_RECORD_PTR
&outUniqueRecord
)
54 auto_ptr
<DbQuery
> aQuery(mDatabase
.makeQuery(const DLQuery
*inQuery
));
57 mDatabase
.dataGetNext(*aQuery
, inoutAttributes
, inoutData
, outUniqueRecord
);
59 StLock
<Mutex
> _(mDbQuerySet
);
60 mDbQuerySet
.insert(aQuery
.get());
64 mDatabase
.dataAbortQuery(*aQuery
);
68 return reinterpret_cast<CSSM_HANDLE
>(aQuery
.release());
72 DbContext::dataGetNext(CSSM_HANDLE inResultsHandle
,
73 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes
,
75 CSSM_DB_UNIQUE_RECORD_PTR
&outUniqueRecord
)
77 DbQuery
*aQuery
= reinterpret_cast<DbQuery
*>(inResultsHandle
);
79 StLock
<Mutex
> _(mDbQuerySet
);
80 DbQuerySet::iterator it
= mDbQuerySet
.find(aQuery
);
81 if (it
== mDbContextMap
.end())
82 CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE
);
87 mDatabase
.dataGetNext(*aQuery
, inoutAttributes
, inoutData
, outUniqueRecord
);
92 StLock
<Mutex
> _(mDbQuerySet
);
93 mDbQuerySet
.erase(aQuery
);
97 mDatabase
.dataAbortQuery(*aQuery
);
106 DbContext::dataAbortQuery(CSSM_HANDLE inResultsHandle
)
108 DbQuery
*aQuery
= reinterpret_cast<DbQuery
*>(inResultsHandle
);
110 StLock
<Mutex
> _(mDbQuerySet
);
111 DbQuerySet::iterator it
= mDbQuerySet
.find(aQuery
);
112 if (it
== mDbContextMap
.end())
113 CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE
);
114 mDbContextMap
.erase(it
);
119 mDatabase
.dataAbortQuery(*aQuery
);