1 kumpf 1.1 //%2006////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
11 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
13 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
20 //
21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 kumpf 1.1 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
34 #ifndef Pegasus_SQLiteStore_h
35 #define Pegasus_SQLiteStore_h
36
37 #include <Pegasus/Common/Config.h>
38 #include <Pegasus/Common/CommonUTF.h>
39 #include <Pegasus/Repository/PersistentStore.h>
40 #include <Pegasus/Repository/Linkage.h>
41
42 #include <sqlite3.h>
43 kumpf 1.1
44 PEGASUS_NAMESPACE_BEGIN
45
46 class PEGASUS_REPOSITORY_LINKAGE SQLiteStore : public PersistentStore
47 {
48 public:
49
50 static Boolean isExistingRepository(const String& repositoryRoot);
51
52 SQLiteStore(
53 const String& repositoryRoot,
54 ObjectStreamer* streamer);
55
56 ~SQLiteStore();
57
58 Boolean storeCompleteClassDefinitions()
59 {
60 return false;
61 }
62
63 Array<NamespaceDefinition> enumerateNameSpaces();
64 kumpf 1.1 void createNameSpace(
65 const CIMNamespaceName& nameSpace,
66 Boolean shareable,
67 Boolean updatesAllowed,
68 const String& parentNameSpace);
69 void modifyNameSpace(
70 const CIMNamespaceName& nameSpace,
71 Boolean shareable,
72 Boolean updatesAllowed);
73 void deleteNameSpace(const CIMNamespaceName& nameSpace);
74 Boolean isNameSpaceEmpty(const CIMNamespaceName& nameSpace);
75
76 Array<CIMQualifierDecl> enumerateQualifiers(
77 const CIMNamespaceName& nameSpace);
78 /**
79 Gets a qualifier declaration for a specified qualifier name in a
80 specified namespace. Returns an uninitialized object if the qualifier
81 is not found.
82 */
83 CIMQualifierDecl getQualifier(
84 const CIMNamespaceName& nameSpace,
85 kumpf 1.1 const CIMName& qualifierName);
86 void setQualifier(
87 const CIMNamespaceName& nameSpace,
88 const CIMQualifierDecl& qualifierDecl);
89 void deleteQualifier(
90 const CIMNamespaceName& nameSpace,
91 const CIMName& qualifierName);
92
93 Array<Pair<String, String> > enumerateClassNames(
94 const CIMNamespaceName& nameSpace);
95 CIMClass getClass(
96 const CIMNamespaceName& nameSpace,
97 const CIMName& className,
98 const CIMName& superClassName);
99 void createClass(
100 const CIMNamespaceName& nameSpace,
101 const CIMClass& newClass,
102 const Array<ClassAssociation>& classAssocEntries);
103 void modifyClass(
104 const CIMNamespaceName& nameSpace,
105 const CIMClass& modifiedClass,
106 kumpf 1.1 const CIMName& oldSuperClassName,
107 Boolean isAssociation,
108 const Array<ClassAssociation>& classAssocEntries);
109 void deleteClass(
110 const CIMNamespaceName& nameSpace,
111 const CIMName& className,
112 const CIMName& superClassName,
113 Boolean isAssociation,
114 const Array<CIMNamespaceName>& dependentNameSpaceNames);
115 Array<CIMObjectPath> enumerateInstanceNamesForClass(
116 const CIMNamespaceName& nameSpace,
117 const CIMName& className);
118 Array<CIMInstance> enumerateInstancesForClass(
119 const CIMNamespaceName& nameSpace,
120 const CIMName& className);
121 CIMInstance getInstance(
122 const CIMNamespaceName& nameSpace,
123 const CIMObjectPath& instanceName);
124 void createInstance(
125 const CIMNamespaceName& nameSpace,
126 const CIMObjectPath& instanceName,
127 kumpf 1.1 const CIMInstance& cimInstance,
128 const Array<InstanceAssociation>& instAssocEntries);
129 void modifyInstance(
130 const CIMNamespaceName& nameSpace,
131 const CIMObjectPath& instanceName,
132 const CIMInstance& cimInstance);
133 void deleteInstance(
134 const CIMNamespaceName& nameSpace,
135 const CIMObjectPath& instanceName);
136 Boolean instanceExists(
137 const CIMNamespaceName& nameSpace,
138 const CIMObjectPath& instanceName);
139
140 void getClassAssociatorNames(
141 const CIMNamespaceName& nameSpace,
142 const Array<CIMName>& classList,
143 const Array<CIMName>& assocClassList,
144 const Array<CIMName>& resultClassList,
145 const String& role,
146 const String& resultRole,
147 Array<String>& associatorNames);
148 kumpf 1.1 void getClassReferenceNames(
149 const CIMNamespaceName& nameSpace,
150 const Array<CIMName>& classList,
151 const Array<CIMName>& resultClassList,
152 const String& role,
153 Array<String>& referenceNames);
154
155 void getInstanceAssociatorNames(
156 const CIMNamespaceName& nameSpace,
157 const CIMObjectPath& instanceName,
158 const Array<CIMName>& assocClassList,
159 const Array<CIMName>& resultClassList,
160 const String& role,
161 const String& resultRole,
162 Array<String>& associatorNames);
163 void getInstanceReferenceNames(
164 const CIMNamespaceName& nameSpace,
165 const CIMObjectPath& instanceName,
166 const Array<CIMName>& resultClassList,
167 const String& role,
168 Array<String>& referenceNames);
169 kumpf 1.1
170 private:
171
172 sqlite3* _openDb(const char* fileName);
173 sqlite3* _openDb(const CIMNamespaceName& nameSpace);
174
175 void _execDbStatement(
176 sqlite3* db,
177 const char* sqlStatement);
178
179 void _initSchema(sqlite3* db);
180
181 void _beginTransaction(sqlite3* db);
182 void _commitTransaction(sqlite3* db);
183
184 String _getNormalizedName(const CIMName& className)
185 {
186 String cn = className.getString();
187 cn.toLower();
188 return cn;
189 }
190 kumpf 1.1
191 String _getDbPath(const CIMNamespaceName& nameSpace)
192 {
193 String dbFileName = nameSpace.getString();
194 dbFileName.toLower();
195
196 for (Uint32 i = 0; i < dbFileName.size(); i++)
197 {
198 if (dbFileName[i] == '/')
199 {
200 dbFileName[i] = '#';
201 }
202 }
203
204 return _repositoryRoot + "/" + escapeStringEncoder(dbFileName) + ".db";
205 }
206
207 void _addClassAssociationEntries(
208 sqlite3* db,
209 const CIMNamespaceName& nameSpace,
210 const Array<ClassAssociation>& classAssocEntries);
211 kumpf 1.1 void _removeClassAssociationEntries(
212 sqlite3* db,
213 const CIMNamespaceName& nameSpace,
214 const CIMName& assocClassName);
215
216 void _addInstanceAssociationEntries(
217 sqlite3* db,
218 const CIMNamespaceName& nameSpace,
219 const Array<InstanceAssociation>& instanceAssocEntries);
220 void _removeInstanceAssociationEntries(
221 sqlite3* db,
222 const CIMNamespaceName& nameSpace,
223 const CIMObjectPath& assocInstanceName);
224
225 String _repositoryRoot;
226 ObjectStreamer* _streamer;
227 };
228
229 PEGASUS_NAMESPACE_END
230
231 #endif /* Pegasus_SQLiteStore_h */
|