|
| 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 | +} |
0 commit comments