-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
unknown
committed
Mar 16, 2012
0 parents
commit 3a0f304
Showing
6 changed files
with
293 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
*~ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
## Description | ||
|
||
In order to learn more about how to create databases in Datomic and write queries against them, | ||
I created this set of scripts just to play around. | ||
|
||
## Installation | ||
|
||
1. Launch the Datomic Beanshell environment | ||
2. Run the load-schema.bsh script | ||
|
||
At this point, you can run the queries.bsh script with the set of queries already prepared there. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
[ | ||
{:db/id #db/id[:db.part/user -1000001], | ||
:supplier/business-key "S1", | ||
:supplier/name "Smith", | ||
:supplier/status :supplier.status/twenty, | ||
:supplier/city "London"} | ||
{:db/id #db/id[:db.part/user -1000002], | ||
:supplier/business-key "S2", | ||
:supplier/name "Jones", | ||
:supplier/status :supplier.status/ten, | ||
:supplier/city "Paris"} | ||
{:db/id #db/id[:db.part/user -1000003], | ||
:supplier/business-key "S3", | ||
:supplier/name "Blake", | ||
:supplier/status :supplier.status/thirty, | ||
:supplier/city "Paris"} | ||
{:db/id #db/id[:db.part/user -1000004], | ||
:supplier/business-key "S4", | ||
:supplier/name "Clark", | ||
:supplier/status :supplier.status/twenty, | ||
:supplier/city "London"} | ||
{:db/id #db/id[:db.part/user -1000005], | ||
:supplier/business-key "S5", | ||
:supplier/name "Adams", | ||
:supplier/status :supplier.status/thirty, | ||
:supplier/city "Athens"} | ||
|
||
{:db/id #db/id[:db.part/user -1000011], | ||
:part/business-key "P1", | ||
:part/name "Nut", | ||
:part/color :part.color/red, | ||
:part/weight 12, | ||
:part/city "London"} | ||
{:db/id #db/id[:db.part/user -1000012], | ||
:part/business-key "P2", | ||
:part/name "Bolt", | ||
:part/color :part.color/green, | ||
:part/weight 17, | ||
:part/city "Paris"} | ||
{:db/id #db/id[:db.part/user -1000013], | ||
:part/business-key "P3", | ||
:part/name "Screw", | ||
:part/color :part.color/blue, | ||
:part/weight 17, | ||
:part/city "Oslo"} | ||
{:db/id #db/id[:db.part/user -1000014], | ||
:part/business-key "P4", | ||
:part/name "Screw", | ||
:part/color :part.color/red, | ||
:part/weight 14, | ||
:part/city "London"} | ||
{:db/id #db/id[:db.part/user -1000015], | ||
:part/business-key "P5", | ||
:part/name "Cam", | ||
:part/color :part.color/blue, | ||
:part/weight 12, | ||
:part/city "Paris"} | ||
{:db/id #db/id[:db.part/user -1000016], | ||
:part/business-key "P6", | ||
:part/name "Cog", | ||
:part/color :part.color/red, | ||
:part/weight 19, | ||
:part/city "London"} | ||
|
||
{:db/id #db/id[:db.part/user -1000101], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000011], | ||
:supplier-part/quantity 300} | ||
{:db/id #db/id[:db.part/user -1000102], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000012], | ||
:supplier-part/quantity 200} | ||
{:db/id #db/id[:db.part/user -1000103], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000013], | ||
:supplier-part/quantity 400} | ||
{:db/id #db/id[:db.part/user -1000104], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000014], | ||
:supplier-part/quantity 200} | ||
{:db/id #db/id[:db.part/user -1000105], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000015], | ||
:supplier-part/quantity 100} | ||
{:db/id #db/id[:db.part/user -1000106], | ||
:supplier-part/supplier #db/id[:db.part/user -1000001], | ||
:supplier-part/part #db/id[:db.part/user -1000016], | ||
:supplier-part/quantity 100} | ||
|
||
{:db/id #db/id[:db.part/user -1000107], | ||
:supplier-part/supplier #db/id[:db.part/user -1000002], | ||
:supplier-part/part #db/id[:db.part/user -1000011], | ||
:supplier-part/quantity 300} | ||
{:db/id #db/id[:db.part/user -1000108], | ||
:supplier-part/supplier #db/id[:db.part/user -1000002], | ||
:supplier-part/part #db/id[:db.part/user -1000012], | ||
:supplier-part/quantity 400} | ||
|
||
{:db/id #db/id[:db.part/user -1000109], | ||
:supplier-part/supplier #db/id[:db.part/user -1000003], | ||
:supplier-part/part #db/id[:db.part/user -1000012], | ||
:supplier-part/quantity 200} | ||
|
||
{:db/id #db/id[:db.part/user -1000110], | ||
:supplier-part/supplier #db/id[:db.part/user -1000004], | ||
:supplier-part/part #db/id[:db.part/user -1000012], | ||
:supplier-part/quantity 200} | ||
{:db/id #db/id[:db.part/user -1000111], | ||
:supplier-part/supplier #db/id[:db.part/user -1000004], | ||
:supplier-part/part #db/id[:db.part/user -1000014], | ||
:supplier-part/quantity 300} | ||
{:db/id #db/id[:db.part/user -1000112], | ||
:supplier-part/supplier #db/id[:db.part/user -1000004], | ||
:supplier-part/part #db/id[:db.part/user -1000015], | ||
:supplier-part/quantity 400} | ||
] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
uri = "datomic:mem://supplier-parts"; | ||
Peer.createDatabase(uri); | ||
conn = Peer.connect(uri); | ||
|
||
void loadFromFile(String fileName) { | ||
br = new BufferedReader(new FileReader(fileName)); | ||
tx = Util.readAll(br).get(0); | ||
txResult = conn.transact(tx).get(); | ||
br.close(); | ||
} | ||
|
||
loadFromFile("./schema.dtm") ; | ||
|
||
loadFromFile("./data.dtm") ; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
db = conn.db(); | ||
|
||
// TODO: Need to be able to pass in a set of attributes | ||
// and dynamically print each one of them | ||
void printSuppliers(Set results) { | ||
for (Object result : results) { | ||
supplier = db.entity(result.get(0)); | ||
System.out.println(supplier.get(":supplier/business-key") + "\t" + | ||
supplier.get(":supplier/name") + "\t" + | ||
supplier.get(":supplier/city")); | ||
} | ||
print(""); | ||
} | ||
|
||
print("All suppliers:") ; | ||
results = Peer.q("[:find ?s :where [?s :supplier/name]]", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers named Blake:"); | ||
results = Peer.q("[:find ?s :where [?s :supplier/name \"Blake\"]]", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers located in Paris:"); | ||
results = Peer.q("[:find ?s :where [?s :supplier/city \"Paris\"]]", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers _not_ named Clark:"); | ||
results = Peer.q("[:find ?s :where [?s :supplier/name ?n] [(!= ?n \"Clark\")]]", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers not named Clark and located in London:"); | ||
results = Peer.q("[:find ?s :where [?s :supplier/name ?n] [(!= ?n \"Clark\")] [?s :supplier/city \"London\"]] ", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers which have at least one part available:") ; | ||
results = Peer.q("[:find ?s :where [?s :supplier/name _][_ :supplier-part/supplier ?s]]", db) ; | ||
printSuppliers(results); | ||
|
||
print("Suppliers who carry P4:") ; | ||
results = Peer.q("[:find ?s :where [?s :supplier/name _][?sp :supplier-part/supplier ?s][?sp :supplier-part/part ?p][?p :part/business-key \"P4\"]]", db) ; | ||
printSuppliers(results); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
[ | ||
;; supplier | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier/business-key | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The business key of the supplier" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier/name | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/fulltext true | ||
:db/doc "A supplier's name" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier/status | ||
:db/valueType :db.type/ref | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "A supplier's status" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier/city | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "A supplier's city" | ||
:db.install/_attribute :db.part/db} | ||
|
||
;; supplier/status enum values | ||
|
||
[:db/add #db/id[:db.part/user] :db/ident :supplier.status/ten] | ||
[:db/add #db/id[:db.part/user] :db/ident :supplier.status/twenty] | ||
[:db/add #db/id[:db.part/user] :db/ident :supplier.status/thirty] | ||
|
||
;; parts | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :part/business-key | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The business key of the part" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :part/name | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/fulltext true | ||
:db/doc "The name of the part" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :part/color | ||
:db/valueType :db.type/ref | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The part's color" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :part/weight | ||
:db/valueType :db.type/long | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The part's weight" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :part/city | ||
:db/valueType :db.type/string | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The city where the part is made" | ||
:db.install/_attribute :db.part/db} | ||
|
||
;; part/color enum values | ||
[:db/add #db/id[:db.part/user] :db/ident :part.color/red] | ||
[:db/add #db/id[:db.part/user] :db/ident :part.color/green] | ||
[:db/add #db/id[:db.part/user] :db/ident :part.color/blue] | ||
|
||
;; supplier-parts | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier-part/supplier | ||
:db/valueType :db.type/ref | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The supplier" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier-part/part | ||
:db/valueType :db.type/ref | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The part" | ||
:db.install/_attribute :db.part/db} | ||
|
||
{:db/id #db/id[:db.part/db] | ||
:db/ident :supplier-part/quantity | ||
:db/valueType :db.type/long | ||
:db/cardinality :db.cardinality/one | ||
:db/doc "The quantity of this part available from this supplier" | ||
:db.install/_attribute :db.part/db} | ||
|
||
] | ||
|