Skip to content

Commit 231249e

Browse files
add QueryAsData example, reorg
1 parent 45a544f commit 231249e

11 files changed

Lines changed: 1060 additions & 1 deletion

File tree

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target/*
2+
.idea/*

‎pom.xml‎

Lines changed: 9 additions & 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.8.3563</version>
8+
<version>0.8.3595</version>
99
</dependency>
1010
</dependencies>
1111
<version>0.0</version>
@@ -16,6 +16,14 @@
1616
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1717
</properties>
1818
<modelVersion>4.0.0</modelVersion>
19+
<build>
20+
<sourceDirectory>src/java</sourceDirectory>
21+
<resources>
22+
<resource>
23+
<directory>src/resources</directory>
24+
</resource>
25+
</resources>
26+
</build>
1927
<repositories>
2028
<repository>
2129
<id>Sonatype</id>

‎src/java/datomic/samples/IO.java‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package datomic.samples;
2+
3+
import datomic.Connection;
4+
import datomic.Util;
5+
6+
import java.io.Reader;
7+
import java.net.URI;
8+
import java.net.URL;
9+
import java.util.Iterator;
10+
import java.util.List;
11+
12+
public class IO {
13+
public static void transactAll(Connection conn, Reader reader) {
14+
List<List> txes = Util.readAll(reader);
15+
for (java.util.Iterator<List> it = txes.iterator(); it.hasNext(); ) {
16+
List tx = it.next();
17+
conn.transact(tx);
18+
}
19+
}
20+
21+
public static URL resource(String name) {
22+
return Thread.currentThread().getContextClassLoader().getResource(name);
23+
}
24+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package datomic.samples;
2+
3+
import datomic.Connection;
4+
import datomic.Database;
5+
import datomic.Peer;
6+
7+
import java.io.IOException;
8+
import java.io.InputStreamReader;
9+
import java.io.Reader;
10+
import java.net.URI;
11+
import java.net.URL;
12+
import java.util.List;
13+
14+
import static datomic.Peer.q;
15+
import static datomic.Util.*;
16+
import static datomic.samples.IO.*;
17+
import static datomic.samples.Fns.scratchConnection;
18+
19+
public class QueryAsData {
20+
public static Object tempid() {
21+
return Peer.tempid("db.part/user");
22+
}
23+
public static void main(String[] args) throws IOException {
24+
Connection conn = scratchConnection();
25+
26+
URL url = resource("datomic-java-examples/social-news.dtm");
27+
28+
transactAll(conn, new InputStreamReader(url.openStream()));
29+
30+
// tx data is plain lists and maps
31+
conn.transact(
32+
list(map("db/id", tempid(), "user/firstName", "Stewart", "user/lastName", "Brand"),
33+
map("db/id", tempid(), "user/firstName", "Stuart", "user/lastName", "Smalley"),
34+
map("db/id", tempid(), "user/firstName", "John", "user/lastName", "Stewart")));
35+
36+
Database db = conn.db();
37+
38+
// Find all Stewart first names (should return 1 tuple)
39+
System.out.println(q("[:find ?e :in $ ?name :where [?e :user/firstName ?name]]", db, "Stewart"));
40+
41+
// Find all Stewart or Stuart first names (should return 2 tuples)
42+
List names = list("Stewart", "Stuart");
43+
System.out.println(q("[:find ?e :in $ [?name ...] :where [?e :user/firstName ?name]]", db, names));
44+
45+
// Find all [Stewart|Stuart] [first|last] names (should return 3 tuples)
46+
List nameAttributes = list(read(":user/firstName"), read(":user/lastName"));
47+
System.out.println(q("[:find ?e :in $ [?name ...] [?attr ...] :where [?e ?attr ?name]]", db, names, nameAttributes));
48+
49+
// Build a query out of data. You might need this if e.g. writing a query optimizer.
50+
// Do *not* do this if parameterizing inputs (as shown above) is sufficient!
51+
List firstNameQuery = list(read(":find"), read("?e"),
52+
read(":in"), read("$"), read("?name"),
53+
read(":where"), list(read("?e"), read(":user/firstName"), read("?name")));
54+
55+
// Find all Stewart first names (should return 1 tuple)
56+
System.out.println(q(firstNameQuery, db, "Stewart"));
57+
}
58+
}

‎src/resources/datomic-java-examples/seattle-data0.dtm‎

Lines changed: 452 additions & 0 deletions
Large diffs are not rendered by default.

‎src/resources/datomic-java-examples/seattle-data1.dtm‎

Lines changed: 326 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
[
2+
;; community
3+
4+
{:db/id #db/id[:db.part/db]
5+
:db/ident :community/name
6+
:db/valueType :db.type/string
7+
:db/cardinality :db.cardinality/one
8+
:db/fulltext true
9+
:db/doc "A community's name"
10+
:db.install/_attribute :db.part/db}
11+
12+
{:db/id #db/id[:db.part/db]
13+
:db/ident :community/url
14+
:db/valueType :db.type/string
15+
:db/cardinality :db.cardinality/one
16+
:db/doc "A community's url"
17+
:db.install/_attribute :db.part/db}
18+
19+
{:db/id #db/id[:db.part/db]
20+
:db/ident :community/neighborhood
21+
:db/valueType :db.type/ref
22+
:db/cardinality :db.cardinality/one
23+
:db/doc "A community's neighborhood"
24+
:db.install/_attribute :db.part/db}
25+
26+
{:db/id #db/id[:db.part/db]
27+
:db/ident :community/category
28+
:db/valueType :db.type/string
29+
:db/cardinality :db.cardinality/many
30+
:db/fulltext true
31+
:db/doc "All community categories"
32+
:db.install/_attribute :db.part/db}
33+
34+
{:db/id #db/id[:db.part/db]
35+
:db/ident :community/orgtype
36+
:db/valueType :db.type/ref
37+
:db/cardinality :db.cardinality/one
38+
:db/doc "A community orgtype enum value"
39+
:db.install/_attribute :db.part/db}
40+
41+
{:db/id #db/id[:db.part/db]
42+
:db/ident :community/type
43+
:db/valueType :db.type/ref
44+
:db/cardinality :db.cardinality/one
45+
:db/doc "A community type enum value"
46+
:db.install/_attribute :db.part/db}
47+
48+
;; community/org-type enum values
49+
[:db/add #db/id[:db.part/user] :db/ident :community.orgtype/community]
50+
[:db/add #db/id[:db.part/user] :db/ident :community.orgtype/commercial]
51+
[:db/add #db/id[:db.part/user] :db/ident :community.orgtype/nonprofit]
52+
[:db/add #db/id[:db.part/user] :db/ident :community.orgtype/personal]
53+
54+
;; community/type enum values
55+
[:db/add #db/id[:db.part/user] :db/ident :community.type/email-list]
56+
[:db/add #db/id[:db.part/user] :db/ident :community.type/twitter]
57+
[:db/add #db/id[:db.part/user] :db/ident :community.type/facebook-page]
58+
[:db/add #db/id[:db.part/user] :db/ident :community.type/blog]
59+
[:db/add #db/id[:db.part/user] :db/ident :community.type/website]
60+
[:db/add #db/id[:db.part/user] :db/ident :community.type/wiki]
61+
[:db/add #db/id[:db.part/user] :db/ident :community.type/myspace]
62+
[:db/add #db/id[:db.part/user] :db/ident :community.type/ning]
63+
64+
;; neighborhood
65+
{:db/id #db/id[:db.part/db]
66+
:db/ident :neighborhood/name
67+
:db/valueType :db.type/string
68+
:db/cardinality :db.cardinality/one
69+
:db/unique :db.unique/identity
70+
:db/doc "A unique neighborhood name (upsertable)"
71+
:db.install/_attribute :db.part/db}
72+
73+
{:db/id #db/id[:db.part/db]
74+
:db/ident :neighborhood/district
75+
:db/valueType :db.type/ref
76+
:db/cardinality :db.cardinality/one
77+
:db/doc "A neighborhood's district"
78+
:db.install/_attribute :db.part/db}
79+
80+
;; district
81+
{:db/id #db/id[:db.part/db]
82+
:db/ident :district/name
83+
:db/valueType :db.type/string
84+
:db/cardinality :db.cardinality/one
85+
:db/unique :db.unique/identity
86+
:db/doc "A unique district name (upsertable)"
87+
:db.install/_attribute :db.part/db}
88+
89+
{:db/id #db/id[:db.part/db]
90+
:db/ident :district/region
91+
:db/valueType :db.type/ref
92+
:db/cardinality :db.cardinality/one
93+
:db/doc "A district region enum value"
94+
:db.install/_attribute :db.part/db}
95+
96+
;; district/region enum values
97+
[:db/add #db/id[:db.part/user] :db/ident :region/n]
98+
[:db/add #db/id[:db.part/user] :db/ident :region/ne]
99+
[:db/add #db/id[:db.part/user] :db/ident :region/e]
100+
[:db/add #db/id[:db.part/user] :db/ident :region/se]
101+
[:db/add #db/id[:db.part/user] :db/ident :region/s]
102+
[:db/add #db/id[:db.part/user] :db/ident :region/sw]
103+
[:db/add #db/id[:db.part/user] :db/ident :region/w]
104+
[:db/add #db/id[:db.part/user] :db/ident :region/nw]
105+
]

0 commit comments

Comments
 (0)