Skip to content

Commit ebd8dde

Browse files
committed
Squashed commit of the following:
commit 827396261471d151b00a6fdf585beb7be8c29c00 Author: Chris Redinger <redinger@gmail.com> Date: Tue Oct 28 15:55:41 2014 -0400 Use datomic-free commit 0291363db3bdefac22b983ade0d99d4795ca10b0 Author: Chris Redinger <redinger@gmail.com> Date: Mon Oct 27 23:26:25 2014 -0400 Update Datomic dependency to 5052 commit 31c97e0604e3bde7bb86876cc21f9f2d5b16be83 Author: Stuart Halloway <stu@cognitect.com> Date: Sat Oct 25 23:11:31 2014 -0400 finish pull examples commit a735b78771c2e326d0569b9481b676d8d5f12b13 Author: Stuart Halloway <stu@cognitect.com> Date: Sat Oct 25 22:03:14 2014 -0400 pull release update wip
1 parent 3f4d604 commit ebd8dde

8 files changed

Lines changed: 172 additions & 71 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<dependency>
66
<groupId>com.datomic</groupId>
77
<artifactId>datomic-free</artifactId>
8-
<version>0.9.4324</version>
8+
<version>0.9.5052</version>
99
<exclusions>
1010
<exclusion>
1111
<groupId>org.slf4j</groupId>

src/java/datomic/samples/Aggregates.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
import datomic.Database;
55

66
import java.io.IOException;
7-
import java.util.Collection;
87

9-
import static datomic.Peer.q;
10-
import static datomic.samples.Fns.printQueryResult;
8+
import static datomic.Peer.query;
119
import static datomic.samples.Fns.scratchConnection;
1210
import static datomic.samples.IO.transactAllFromResource;
11+
import static datomic.samples.PrettyPrint.print;
1312

1413
public class Aggregates {
1514

@@ -18,25 +17,25 @@ public static void main(String[] args) throws IOException {
1817
transactAllFromResource(conn, "datomic-java-examples/bigger-than-pluto.edn");
1918
Database db = conn.db();
2019

21-
printQueryResult(biggestObjectRadius(db));
22-
printQueryResult(randomObject(db));
23-
printQueryResult(sampleFiveObjects(db));
20+
print(biggestObjectRadius(db));
21+
print(randomObject(db));
22+
print(sampleFiveObjects(db));
2423

2524
}
2625

27-
public static Collection biggestObjectRadius(Database db) {
28-
return q("[:find (max ?radius)" +
29-
" :where [_ :object/meanRadius ?radius]]", db);
26+
public static Object biggestObjectRadius(Database db) {
27+
return query("[:find (max ?radius) ." +
28+
" :where [_ :object/meanRadius ?radius]]", db);
3029
}
3130

32-
public static Collection randomObject(Database db) {
33-
return q("[:find (rand ?name)" +
34-
" :where [?e :object/name ?name]]", db);
31+
public static Object randomObject(Database db) {
32+
return query("[:find (rand ?name) ." +
33+
" :where [?e :object/name ?name]]", db);
3534
}
3635

37-
public static Collection sampleFiveObjects(Database db) {
38-
return q("[:find (sample 5 ?name)" +
39-
" :with ?e" +
40-
" :where [?e :object/name ?name]]", db);
36+
public static Object sampleFiveObjects(Database db) {
37+
return query("[:find (sample 5 ?name) ." +
38+
" :with ?e" +
39+
" :where [?e :object/name ?name]]", db);
4140
}
4241
}

src/java/datomic/samples/BuildingQueries.java

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,43 @@
99
import java.util.Collection;
1010
import java.util.List;
1111

12-
import static datomic.Peer.q;
12+
import static datomic.Peer.query;
1313
import static datomic.Util.list;
14-
import static datomic.samples.Fns.printQueryResult;
1514
import static datomic.samples.Fns.scratchConnection;
1615
import static datomic.samples.IO.resource;
1716
import static datomic.samples.IO.transactAll;
1817
import static datomic.samples.IO.transactAllFromResource;
18+
import static datomic.samples.PrettyPrint.print;
1919

2020
public class BuildingQueries {
2121

2222
public static void queryWithVariableBinding(Database db) {
23-
Collection result = q("[:find ?e" +
24-
" :in $ ?name" +
25-
" :where [?e :user/firstName ?name]]",
26-
db, "Stewart");
27-
printQueryResult(result);
23+
print(query("[:find [?e ...]" +
24+
" :in $ ?name" +
25+
" :where [?e :user/firstName ?name]]",
26+
db, "Stewart"));
2827
}
2928

3029
public static void queryWithCollectionBinding(Database db) {
31-
Collection result = q("[:find ?e" +
32-
" :in $ [?name ...]" +
33-
" :where [?e :user/firstName ?name]]",
34-
db, list("Stewart", "Stuart"));
35-
printQueryResult(result);
30+
print(query("[:find [?e ...]" +
31+
" :in $ [?name ...]" +
32+
" :where [?e :user/firstName ?name]]",
33+
db, list("Stewart", "Stuart")));
3634
}
3735

3836
public static void queryWithMultipleCollectionBindings(Database db) {
39-
Collection result = q("[:find ?e" +
40-
" :in $ [?name ...] [?attr ...]" +
41-
" :where [?e ?attr ?name]]",
42-
db, list("Stuart", "Stewart"), list(":user/firstName", ":user/lastName"));
43-
printQueryResult(result);
37+
print(query("[:find [?e ...]" +
38+
" :in $ [?name ...] [?attr ...]" +
39+
" :where [?e ?attr ?name]]",
40+
db, list("Stuart", "Stewart"), list(":user/firstName", ":user/lastName")));
4441
}
4542

4643
public static void queryWithMapForm(Database db) {
47-
Collection result = q("{:find [?e]" +
48-
" :in [$ ?fname ?lname]" +
49-
" :where [[?e :user/firstName ?fname]" +
50-
" [?e :user/lastName ?lname]]}",
51-
db, "Stuart", "Smalley");
52-
printQueryResult(result);
44+
print(query("{:find [[?e ...]]" +
45+
" :in [$ ?fname ?lname]" +
46+
" :where [[?e :user/firstName ?fname]" +
47+
" [?e :user/lastName ?lname]]}",
48+
db, "Stuart", "Smalley"));
5349
}
5450

5551
public static void main(String[] args) throws IOException {

src/java/datomic/samples/Fns.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,4 @@ public static Connection scratchConnection() {
3232
return Peer.connect(uri);
3333
}
3434

35-
public static void printQueryResult(Collection coll) {
36-
System.out.println(coll);
37-
}
3835
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package datomic.samples;
2+
3+
import clojure.java.api.Clojure;
4+
import clojure.lang.IFn;
5+
6+
public class PrettyPrint {
7+
public static final IFn prettyPrint = Clojure.var("clojure.pprint", "pprint");
8+
public static void print(Object o) {
9+
prettyPrint.invoke(o);
10+
}
11+
}

src/java/datomic/samples/Pull.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package datomic.samples;
2+
3+
import datomic.Connection;
4+
import datomic.Database;
5+
import datomic.Peer;
6+
7+
import java.util.UUID;
8+
9+
import static datomic.Util.list;
10+
import static datomic.samples.PrettyPrint.print;
11+
12+
public class Pull {
13+
public static final Object ledZeppelin = list(":artist/gid", UUID.fromString("678d88b2-87b0-403b-b63d-5da7465aecc3"));
14+
public static final Object mccartney = list(":artist/gid", UUID.fromString("ba550d0e-adac-4864-b88b-407cab5e76af"));
15+
public static final Object darkSideOfTheMoon = list(":release/gid", UUID.fromString("24824319-9bb8-3d1e-a2c5-b8b864dafd1b"));
16+
public static final Object dylanHarrisonSessions = list(":release/gid", UUID.fromString("67bbc160-ac45-4caf-baae-a7e9f5180429"));
17+
public static final Object concertForBanglaDesh = list(":release/gid", UUID.fromString("f3bdff34-9a85-4adc-a014-922eef9cdaa5"));
18+
19+
public static void main(String[] args) {
20+
Connection conn = Peer.connect("datomic:free://localhost:4334/mbrainz-1968-1973");
21+
Database db = conn.db();
22+
23+
System.out.println("\nPull attribute name");
24+
print(db.pull("[:artist/name :artist/startYear]", ledZeppelin));
25+
26+
System.out.println("\nReverse lookup");
27+
print(db.pull("[:artist/_country]", "country/GB"));
28+
29+
System.out.println("\nComponent Defaults");
30+
print(db.pull("[:release/media]", darkSideOfTheMoon));
31+
32+
Object dylanHarrisonCD = Peer.query(
33+
"[:find ?medium ." +
34+
" :in $ ?release" +
35+
" :where [?release :release/media ?medium]]",
36+
db, dylanHarrisonSessions);
37+
38+
System.out.println("\nReverse Component Lookup");
39+
print(db.pull("[:release/_media]", dylanHarrisonCD));
40+
41+
long ghostRiders = (Long) Peer.query(
42+
"[:find ?track ." +
43+
" :in $ ?release ?trackno" +
44+
" :where" +
45+
" [?release :release/media ?medium]" +
46+
" [?medium :medium/tracks ?track]" +
47+
" [?track :track/position ?trackno]]",
48+
db, dylanHarrisonSessions, 11);
49+
50+
System.out.println("\nMap specifications");
51+
print(db.pull("[:track/name {:track/artists [:db/id :artist/name]}]", ghostRiders));
52+
53+
System.out.println("\nNested Map specifications");
54+
print(db.pull(
55+
"[{:release/media" +
56+
" [{:medium/tracks" +
57+
" [:track/name {:track/artists [:artist/name]}]}]}]",
58+
concertForBanglaDesh));
59+
60+
System.out.println("\nWildcard specification");
61+
print(db.pull("[*]",concertForBanglaDesh));
62+
63+
System.out.println("\nWildcard + map specification");
64+
print(db.pull("[* {:track/artists [:artist/name]}]",ghostRiders));
65+
66+
System.out.println("\nDefault expression");
67+
print(db.pull("[:artist/name (default :artist/endYear 0)]",mccartney));
68+
69+
System.out.println("\nDefault expression with different type");
70+
print(db.pull("[:artist/name (default :artist/endYear \"N/A\")]",mccartney));
71+
72+
System.out.println("\nAbsent attributes are omitted from results");
73+
print(db.pull("[:artist/name :died-in-1966?]",mccartney));
74+
75+
System.out.println("\nLimit plus subspec");
76+
print(db.pull("[{(limit :track/_artists 10) [:track/name]}]",ledZeppelin));
77+
78+
System.out.println("\nNo limit");
79+
print(db.pull("[{(limit :track/_artists nil) [:track/name]}]",ledZeppelin));
80+
81+
System.out.println("\nPull expression in query");
82+
print(Peer.query(
83+
"[:find [(pull ?e [:release/name]) ...]" +
84+
" :in $ ?artist" +
85+
" :where [?e :release/artists ?artist]]",
86+
db, ledZeppelin));
87+
88+
System.out.println("\nDynamic pattern input");
89+
print(Peer.query(
90+
"[:find [(pull ?e pattern) ...]" +
91+
" :in $ ?artist pattern" +
92+
" :where [?e :release/artists ?artist]]",
93+
db, ledZeppelin, "[:release/name]"));
94+
Peer.shutdown(true);
95+
}
96+
}

src/java/datomic/samples/Trust.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,19 @@
44
import datomic.Database;
55
import datomic.Datom;
66

7-
import javax.sql.rowset.Predicate;
87
import java.io.IOException;
98
import java.io.InputStreamReader;
109
import java.net.URL;
11-
import java.util.Collection;
1210
import java.util.concurrent.ExecutionException;
1311

14-
import static datomic.Peer.q;
12+
import static datomic.Peer.query;
1513
import static datomic.Peer.tempid;
1614
import static datomic.Util.list;
1715
import static datomic.Util.map;
18-
import static datomic.samples.Fns.printQueryResult;
1916
import static datomic.samples.Fns.scratchConnection;
2017
import static datomic.samples.IO.resource;
2118
import static datomic.samples.IO.transactAll;
19+
import static datomic.samples.PrettyPrint.print;
2220

2321
public class Trust {
2422
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
@@ -41,25 +39,25 @@ public static void main(String[] args) throws IOException, ExecutionException, I
4139
Database db = conn.db();
4240

4341
System.out.println("\nAll stories...");
44-
printQueryResult(allStories(db));
42+
print(allStories(db));
4543

4644
System.out.println("\nStories with 90% confidence, by query...");
47-
printQueryResult(storiesWithHighConfidenceByQuery(db));
45+
print(storiesWithHighConfidenceByQuery(db));
4846

4947
System.out.println("\nStories with 90% confidence, by filter...");
50-
printQueryResult(storiesWithHighConfidenceByFilter(db));
48+
print(storiesWithHighConfidenceByFilter(db));
5149
}
5250

53-
public static Collection allStories(Database db) {
54-
return q("[:find ?title" +
55-
" :where [_ :story/title ?title]]", db);
51+
public static Object allStories(Database db) {
52+
return query("[:find [?title ...]" +
53+
" :where [_ :story/title ?title]]", db);
5654
}
5755

58-
public static Collection storiesWithHighConfidenceByQuery(Database db) {
59-
return q("[:find ?title" +
60-
" :where [_ :story/title ?title ?tx]" +
61-
" [?tx :source/confidence ?conf]" +
62-
" [(<= 90 ?conf)]]", db);
56+
public static Object storiesWithHighConfidenceByQuery(Database db) {
57+
return query("[:find [?title ...]" +
58+
" :where [_ :story/title ?title ?tx]" +
59+
" [?tx :source/confidence ?conf]" +
60+
" [(<= 90 ?conf)]]", db);
6361
}
6462

6563
/**
@@ -75,9 +73,9 @@ public boolean apply(Database db, Datom datom) {
7573
});
7674
}
7775

78-
public static Collection storiesWithHighConfidenceByFilter(Database db) {
79-
return q("[:find ?title" +
80-
" :where [_ :story/title ?title]]", filterByConfidence(db, 90L));
76+
public static Object storiesWithHighConfidenceByFilter(Database db) {
77+
return query("[:find [?title ...]" +
78+
" :where [_ :story/title ?title]]", filterByConfidence(db, 90L));
8179
}
8280

8381
}

src/java/datomic/samples/With.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
11
package datomic.samples;
22

3+
import datomic.Peer;
4+
35
import java.util.Collection;
6+
import java.util.List;
47

5-
import static datomic.Peer.q;
8+
import static datomic.Peer.query;
69
import static datomic.Util.list;
7-
import static datomic.samples.Fns.printQueryResult;
10+
import static datomic.samples.PrettyPrint.print;
811

912
public class With {
10-
public static Collection incorrectHeadCount() {
11-
return q("[:find (sum ?heads)" +
13+
public static Object incorrectHeadCount() {
14+
return query("[:find (sum ?heads) ." +
1215
" :in [[_ ?heads]]]", monsters);
1316
}
1417

15-
public static Collection correctHeadCount() {
16-
return q("[:find (sum ?heads)" +
17-
" :with ?monster" +
18-
" :in [[?monster ?heads]]]", monsters);
18+
public static Object correctHeadCount() {
19+
return query("[:find (sum ?heads) ." +
20+
" :with ?monster" +
21+
" :in [[?monster ?heads]]]", monsters);
1922
}
2023

2124
public static final Collection monsters = list(list("Cerberus", 3),
2225
list("Medusa", 1),
2326
list("Cyclops", 1),
2427
list("Chimera", 1));
2528
public static void main(String[] args) {
26-
printQueryResult(incorrectHeadCount());
27-
printQueryResult(correctHeadCount());
29+
print(incorrectHeadCount());
30+
print(correctHeadCount());
31+
Peer.shutdown(true);
2832
}
2933
}

0 commit comments

Comments
 (0)