Defining the database definition:
db := MinneStoreDB newOn: 'C:\MyDB\'.
(db addObjectSetNamed: #Parts)
"note: multiple classes can be stored in the same object set"
storesClass: Part;
indexOn: #name domain: String;
indexOn: #number domain: Integer.
(db addObjectSetNamed: #Assemblies)
storesClass: Assembly;
indexOn: #name domain: String;
indexOn: #number domain: Integer;
aspect: #parts holdsMany: #Parts;
aspect: #assemblies holdsMany: #Assemblies.
db save.
Creating and storing the objects:
db := MinneStoreDB openOn: 'C:\MyDB\'.
"The parts in the transaction block will all be committed or rolled back.
(The #transaction: message will not be supported until version 2.1)"
db transaction:
[db store: (Part name: 'spout' number: 101).
db store: (Part name: 'lever' number: 102).
db store: (Part name: 'o-ring' number: 103).
db store: (Part name: 'elbow' number: 104).
db store: (Part name: 'gasket' number: 105).
db store: (Part name: 'seat' number: 106).
db store: (Part name: 'nut' number: 107).
db store: (Part name: 'lift rod' number: 108).
db store: (Part name: 'strap' number: 109).
db store: (Part name: 'pivot rod' number: 110).
db store: (Part name: 'aerator' number: 111).
db store: (Part name: 'hub' number: 112).
].
db store:
((Assembly name: 'Handle' number: 151)
addPart: ((db getOne: #Parts) where: #name eq: 'lever'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'o-ring'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'elbow'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'hub'; execute);
yourself).
db store:
((Assembly name: 'Drain' number: 152)
addPart: ((db getOne: #Parts) where: #name eq: 'seat'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'gasket'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'o-ring'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'nut'; execute);
yourself).
db store:
((Assembly name: 'Lift Rod' number: 153)
addPart: ((db getOne: #Parts) where: #name eq: 'lift rod'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'strap'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'nut'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'pivot rod'; execute);
yourself).
db store:
((Assembly name: 'Faucet' number: 154)
addAssembly: ((db getOne: #Assemblies) where: #name eq: 'Drain'; execute);
addAssembly: ((db getOne: #Assemblies) where: #name eq: 'Lift Rod'; execute);
addAssembly: ((db getOne: #Assemblies) where: #name eq: 'Handle'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'spout'; execute);
addPart: ((db getOne: #Parts) where: #name eq: 'aerator'; execute);
yourself).
db := MinneStoreDB openOn: 'C:\MyDB\'.
(db getAll: #Parts)
where: #number between: 105 and: 110; "inclusive"
execute.
(db getAll: #Parts)
where: #name eq: #('spout' 'aerator'); "either spout or aerator"
or: #number eq: 105;
execute.
(db getAll: #Assemblies)
where: #name startsWith: 'Fa';
execute.