1/*
2 * Copyright (c) 2004 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25
26#ifndef __DATABASE_H__
27#define __DATABASE_H__
28
29
30#include "AttachedInstance.h"
31
32/*
33	Abstract base class for a database -- provides stubs for CSSM calls
34*/
35
36
37
38class Database
39{
40protected:
41	AttachedInstance *mAttachedInstance;
42
43public:
44	Database (AttachedInstance *ai);
45	virtual ~Database ();
46
47	virtual void DbOpen (const char* DbName,
48						 const CSSM_NET_ADDRESS *dbLocation,
49						 const CSSM_DB_ACCESS_TYPE accessRequest,
50						 const CSSM_ACCESS_CREDENTIALS *accessCredentials,
51						 const void* openParameters);
52
53	virtual void DbClose ();
54
55	virtual void DbCreate (const char* dbName,
56						   const CSSM_NET_ADDRESS *dbLocation,
57						   const CSSM_DBINFO *dbInfo,
58						   const CSSM_DB_ACCESS_TYPE accessRequest,
59						   const CSSM_RESOURCE_CONTROL_CONTEXT *credAndAclEntry,
60						   const void *openParameters);
61
62	virtual void DbCreateRelation (CSSM_DB_RECORDTYPE relationID,
63								   const char* relationName,
64								   uint32 numberOfAttributes,
65								   const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
66								   uint32 numberOfIndexes,
67								   const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);
68
69	virtual void DbDestroyRelation (CSSM_DB_RECORDTYPE relationID);
70
71	virtual void DbAuthenticate (CSSM_DB_ACCESS_TYPE accessRequest,
72								 const CSSM_ACCESS_CREDENTIALS *accessCred);
73
74	virtual void DbGetDbAcl (CSSM_STRING* selectionTag,
75							 uint32 *numberOfAclInfos);
76
77	virtual void DbChangeDbAcl (const CSSM_ACCESS_CREDENTIALS *accessCred,
78								const CSSM_ACL_EDIT *aclEdit);
79
80	virtual void DbGetDbOwner (CSSM_ACL_OWNER_PROTOTYPE_PTR owner);
81
82	virtual void DbChangeDbOwner (const CSSM_ACCESS_CREDENTIALS *accessCred,
83								  const CSSM_ACL_OWNER_PROTOTYPE *newOwner);
84
85	virtual void DbGetDbNameFromHandle (char** dbName);
86
87	virtual void DbDataInsert (CSSM_DB_RECORDTYPE recordType,
88							   const CSSM_DB_RECORD_ATTRIBUTE_DATA *attributes,
89							   const CSSM_DATA *data,
90							   CSSM_DB_UNIQUE_RECORD_PTR *uniqueId);
91
92	virtual void DbDataDelete (const CSSM_DB_UNIQUE_RECORD *uniqueRecordIdentifier);
93
94	virtual void DbDataModify (CSSM_DB_RECORDTYPE recordType,
95							   CSSM_DB_UNIQUE_RECORD_PTR uniqueRecordIdentifier,
96							   const CSSM_DB_RECORD_ATTRIBUTE_DATA attributesToBeModified,
97							   const CSSM_DATA *dataToBeModified,
98							   CSSM_DB_MODIFY_MODE modifyMode);
99
100	virtual CSSM_HANDLE DbDataGetFirst (const CSSM_QUERY *query,
101									    CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
102									    CSSM_DATA_PTR data,
103									    CSSM_DB_UNIQUE_RECORD_PTR *uniqueID);
104
105	virtual bool DbDataGetNext (CSSM_HANDLE resultsHandle,
106							    CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
107							    CSSM_DATA_PTR data,
108							    CSSM_DB_UNIQUE_RECORD_PTR *uniqueID);
109
110	virtual void DbDataAbortQuery (CSSM_HANDLE resultsHandle);
111
112	virtual void DbDataGetFromUniqueRecordID (const CSSM_DB_UNIQUE_RECORD_PTR uniqueRecord,
113											  CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
114											  CSSM_DATA_PTR data);
115
116	virtual void DbFreeUniqueRecord (CSSM_DB_UNIQUE_RECORD_PTR uniqueRecord);
117
118	virtual void DbPassThrough (uint32 passThroughID,
119							    const void* inputParams,
120							    void **outputParams);
121};
122
123#endif
124