The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes.ttl 018
META.yml 22
README 113
SIGNATURE 8080
inc/Module/Install/Base.pm 11
inc/Module/Install/Can.pm 11
inc/Module/Install/Fetch.pm 15
inc/Module/Install/Makefile.pm 22
inc/Module/Install/Metadata.pm 3769
inc/Module/Install/Scripts.pm 15
inc/Module/Install/Win32.pm 15
inc/Module/Install/WriteAll.pm 15
inc/Module/Install.pm 1013
lib/RDF/Trine/Error.pm 22
lib/RDF/Trine/Exporter/CSV.pm 22
lib/RDF/Trine/Exporter/RDFPatch.pm 22
lib/RDF/Trine/Graph.pm 22
lib/RDF/Trine/Iterator/Bindings/Materialized.pm 22
lib/RDF/Trine/Iterator/Bindings.pm 1345
lib/RDF/Trine/Iterator/Boolean.pm 22
lib/RDF/Trine/Iterator/Graph/Materialized.pm 22
lib/RDF/Trine/Iterator/Graph.pm 22
lib/RDF/Trine/Iterator/JSONHandler.pm 22
lib/RDF/Trine/Iterator/SAXHandler.pm 22
lib/RDF/Trine/Iterator.pm 22
lib/RDF/Trine/Model/Dataset.pm 22
lib/RDF/Trine/Model/StatementFilter.pm 22
lib/RDF/Trine/Model/Union.pm 22
lib/RDF/Trine/Model.pm 22
lib/RDF/Trine/Namespace.pm 22
lib/RDF/Trine/NamespaceMap.pm 22
lib/RDF/Trine/Node/Blank.pm 22
lib/RDF/Trine/Node/Literal.pm 22
lib/RDF/Trine/Node/Nil.pm 22
lib/RDF/Trine/Node/Resource.pm 22
lib/RDF/Trine/Node/Variable.pm 22
lib/RDF/Trine/Node.pm 22
lib/RDF/Trine/Parser/LineProtocol.pm 22
lib/RDF/Trine/Parser/NQuads.pm 22
lib/RDF/Trine/Parser/NTriples.pm 22
lib/RDF/Trine/Parser/RDFJSON.pm 22
lib/RDF/Trine/Parser/RDFPatch.pm 22
lib/RDF/Trine/Parser/RDFXML.pm 22
lib/RDF/Trine/Parser/RDFa.pm 22
lib/RDF/Trine/Parser/Redland.pm 22
lib/RDF/Trine/Parser/TriG.pm 22
lib/RDF/Trine/Parser/Turtle/Constants.pm 22
lib/RDF/Trine/Parser/Turtle/Lexer.pm 22
lib/RDF/Trine/Parser/Turtle.pm 22
lib/RDF/Trine/Parser.pm 22
lib/RDF/Trine/Pattern.pm 22
lib/RDF/Trine/Serializer/NQuads.pm 22
lib/RDF/Trine/Serializer/NTriples/Canonical.pm 22
lib/RDF/Trine/Serializer/NTriples.pm 22
lib/RDF/Trine/Serializer/RDFJSON.pm 22
lib/RDF/Trine/Serializer/RDFPatch.pm 22
lib/RDF/Trine/Serializer/RDFXML.pm 22
lib/RDF/Trine/Serializer/TSV.pm 22
lib/RDF/Trine/Serializer/TriG.pm 22
lib/RDF/Trine/Serializer/Turtle.pm 22
lib/RDF/Trine/Serializer.pm 22
lib/RDF/Trine/Statement/Quad.pm 22
lib/RDF/Trine/Statement.pm 22
lib/RDF/Trine/Store/DBI/Pg.pm 22
lib/RDF/Trine/Store/DBI/SQLite.pm 22
lib/RDF/Trine/Store/DBI/mysql.pm 22
lib/RDF/Trine/Store/DBI.pm 22
lib/RDF/Trine/Store/Dydra.pm 22
lib/RDF/Trine/Store/Hexastore.pm 2437
lib/RDF/Trine/Store/Memory.pm 33
lib/RDF/Trine/Store/Redis.pm 22
lib/RDF/Trine/Store/Redland.pm 1976
lib/RDF/Trine/Store/SPARQL.pm 22
lib/RDF/Trine/Store.pm 22
lib/RDF/Trine/VariableBindings.pm 22
lib/RDF/Trine.pm 22
lib/Test/RDF/Trine/Store.pm 22
t/iterator-bindings.t 239
78 files changed (This is a version diff) 319539
@@ -10,6 +10,24 @@
         dcterms:references      <http://kasei.us/code/rdf-trine/#project> .
 
 
+<http://kasei.us/code/files/RDF-Trine-1.009.tar.gz>
+        dcterms:isVersionOf <http://kasei.us/code/rdf-trine/#project> ;
+        dcterms:replaces    <http://kasei.us/code/files/RDF-Trine-1.008.tar.gz> ;
+
+        doap:Version    [
+                        doap:revision     "1.009" ;
+                        doap:created      "2014-08-06" ;
+                        ];
+        asc:changes     [
+                        asc:addition    "Adding model sync/bulk ops to redland store (Dorian Taylor)." ;
+                        asc:update      "Optimized use of regular expressions (Dorian Taylor)." ;
+                        asc:update      "Optimized Hexastore store class (Dorian Taylor)." ;
+                        asc:update      "Log an info message if there is a cartesian product (Kjetil Kjernsmo)." ;
+                        asc:update      "Use a base64 encoded digest for Memory store etags (Kjetil Kjernsmo)." ;
+                        asc:update      "Updated RDF::Trine::Iterator::Bindings->as_statements to accept a RDF::Trine::Pattern argument (github issue #104)." ;
+                        ] .
+
+
 <http://kasei.us/code/files/RDF-Trine-1.008.tar.gz>
         dcterms:isVersionOf <http://kasei.us/code/rdf-trine/#project> ;
         dcterms:replaces    <http://kasei.us/code/files/RDF-Trine-1.007.tar.gz> ;
@@ -13,7 +13,7 @@ configure_requires:
   ExtUtils::MakeMaker: 6.59
 distribution_type: module
 dynamic_config: 1
-generated_by: 'Module::Install version 1.08'
+generated_by: 'Module::Install version 1.10'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -62,4 +62,4 @@ resources:
   homepage: http://search.cpan.org/dist/RDF-Trine/
   license: http://dev.perl.org/licenses/
   repository: http://github.com/kasei/perlrdf/
-version: '1.008'
+version: '1.009'
@@ -68,7 +68,19 @@ INSTALLATION
 
 VERSION HISTORY
 
-  Version 1.008 (2014-05-20)
+  Version 1.009 (2014-08-06)
+
+     * NEW FEATURES
+         	Adding model sync/bulk ops to redland store (Dorian Taylor).
+     * ENHANCEMENTS
+         	Optimized use of regular expressions (Dorian Taylor).
+         	Optimized Hexastore store class (Dorian Taylor).
+         	Use a base64 encoded digest for Memory store etags (Kjetil Kjernsmo).
+         	Updated RDF::Trine::Iterator::Bindings->as_statements to accept a RDF::Trine::Pattern argument (github issue #104).
+     * OTHER
+         	Log an info message if there is a cartesian product (Kjetil Kjernsmo).
+
+  Version 1.009 (2014-05-20)
 
      * BUG FIXES
          	Fixed bug in Turtle lexer that was failing to anchor matches of PNAME_LN (GH issue #96 by Tobias Kuhn).
@@ -14,11 +14,11 @@ not run its Makefile.PL or Build.PL.
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 8a080614aaa51d811d0ce9731d90ce230944803a Changes.ttl
+SHA1 f9f882b60a4a3a580298089c7a3584f9a704f717 Changes.ttl
 SHA1 22a368e748a13b1d961d4b069bb52a470669c637 MANIFEST
-SHA1 d644f39da03bb480f339025b4de95eaa86cc7f5a META.yml
+SHA1 c8bb11ff1bae593509bbe1d6946907833bcdbc1a META.yml
 SHA1 436d1d4da25a99b21fc67b3203bf4f6043616aaf Makefile.PL
-SHA1 8bb548c3a9adfc72bcac3ebab7f3693e0cf595c3 README
+SHA1 d01fd168248b374b0d1022a1e39c674370e9b697 README
 SHA1 de1a886d4a10836f9a9f7bfb07c01df6bc14ce1f bin/cliapi
 SHA1 6b887e866f74e6f823724001c49146ee906c558a bin/graph.pl
 SHA1 6b250506c12423fc465c493af38c65ef5b310274 bin/rdf_init_store.pl
@@ -36,81 +36,81 @@ SHA1 be0338e5e9faea24cd684515c93c58b07d58bde4 bin/turtle_parse.pl
 SHA1 9a8c63f53beb5203aed53d9c28478a13d1ed02d1 bin/turtle_tokenize.pl
 SHA1 54c909523bd47ad798dfc9bc97a64ecd768a51fb examples/foaf_labels.pl
 SHA1 e25f036a2f1cb94b03dd008032109b0bbfbd53f8 extra/mysql.sql
-SHA1 dc13ce0dbb488a5de81c3f6519ee31acda17397a inc/Module/Install.pm
+SHA1 4f7982f7e554df23debce735ab343d88d7355140 inc/Module/Install.pm
 SHA1 d001b4b9a48395a8c4134b234a0e1789138427c5 inc/Module/Install/AuthorTests.pm
-SHA1 91c20cbda8ca41b4e8f9e0390faff635c2ebe839 inc/Module/Install/Base.pm
-SHA1 eaf50ccbacecb797f0527deb0221c8264f6c8bd8 inc/Module/Install/Can.pm
-SHA1 363c8931cc183444907684b71d6a379e4fc8edcb inc/Module/Install/Fetch.pm
-SHA1 26ae1c0f5f352037b560414f216d7e3ac682f936 inc/Module/Install/Makefile.pm
-SHA1 ff97eb025b44c343d026c2a56a73d50c65319e95 inc/Module/Install/Metadata.pm
-SHA1 45b8ad29be4f0108076da44ac8393156d6513be0 inc/Module/Install/Scripts.pm
-SHA1 4c5ce519d404e242418f51dfe761287469e18e3a inc/Module/Install/Win32.pm
-SHA1 47a52cf8719a283c0efa2edab0088b5d67e0f23a inc/Module/Install/WriteAll.pm
-SHA1 fb4ac5b0e96bed114571b367a0218fd6b2c097f0 lib/RDF/Trine.pm
-SHA1 772c8165bc69669aa44ae1a1b028e0b0be15994b lib/RDF/Trine/Error.pm
-SHA1 913d7de5feae431131c0681c51dac576e2193a13 lib/RDF/Trine/Exporter/CSV.pm
-SHA1 c9337b7cf7ae22616b8e191381414ecfe1f9b97e lib/RDF/Trine/Exporter/RDFPatch.pm
-SHA1 1af2a9f3702591eb8c72dc556df38431d6f653ae lib/RDF/Trine/Graph.pm
-SHA1 7237daa1039224ca684da6e631ead5e57f02c9a0 lib/RDF/Trine/Iterator.pm
-SHA1 81de66a4c114b3650d9e40caed8505e21df12f80 lib/RDF/Trine/Iterator/Bindings.pm
-SHA1 0eb3af713ca9bc2332d0e902b4d1e34f80fe9838 lib/RDF/Trine/Iterator/Bindings/Materialized.pm
-SHA1 0a7b5df0b010c2233ca2499a185652c5c775bea2 lib/RDF/Trine/Iterator/Boolean.pm
-SHA1 b3ba51b66fb89af6ee9f3314a1a6b79d0f65ac2c lib/RDF/Trine/Iterator/Graph.pm
-SHA1 b0ef08ffadab74c543e5061f3b5ad73347706291 lib/RDF/Trine/Iterator/Graph/Materialized.pm
-SHA1 ab7b431d2a207162fa4de6304352c48b6f16a7cf lib/RDF/Trine/Iterator/JSONHandler.pm
-SHA1 ad3f62f4bdf46a7dbebaa82fca192017d28de506 lib/RDF/Trine/Iterator/SAXHandler.pm
-SHA1 1ad03114e8197d0149ec7cd2ad6f4a6546727419 lib/RDF/Trine/Model.pm
-SHA1 44fc08d76ebe474e36a2ad462a46703ae6c65a2f lib/RDF/Trine/Model/Dataset.pm
-SHA1 dc7a92d8ea7e259206c741834c6aef5061fd17a7 lib/RDF/Trine/Model/StatementFilter.pm
-SHA1 5d9006c70c61062fb1e0fd74b683e71ab277c178 lib/RDF/Trine/Model/Union.pm
-SHA1 cdccaed0afaf577b09cf1666aedeedad169a36aa lib/RDF/Trine/Namespace.pm
-SHA1 426ca22dc300e539e0696720c4bb94aaa760d795 lib/RDF/Trine/NamespaceMap.pm
-SHA1 19ff9b7b19731bc9554d0c8334f2d0ba0afb1270 lib/RDF/Trine/Node.pm
-SHA1 6b2e110a55238ddea138942cdb3aa95ad4559911 lib/RDF/Trine/Node/Blank.pm
-SHA1 0343de095c7dc76213edaadfa173a56c0f5561b5 lib/RDF/Trine/Node/Literal.pm
-SHA1 736a780f65d343211c24eebe39d613092d5fb78e lib/RDF/Trine/Node/Nil.pm
-SHA1 540355ec95ea2af78d0e0beb5c05e93665069532 lib/RDF/Trine/Node/Resource.pm
-SHA1 e5705a23f9213251cae100e9e8a6107b15d10d11 lib/RDF/Trine/Node/Variable.pm
-SHA1 43ef6e03cdbef13bed361a1390c55519afc4bafe lib/RDF/Trine/Parser.pm
-SHA1 583af1f2b8cd223fa01af6612f29fff7a87ac33f lib/RDF/Trine/Parser/LineProtocol.pm
-SHA1 593a5cc57191a902b26dd8446792444d31230220 lib/RDF/Trine/Parser/NQuads.pm
-SHA1 6b53506166f60a11009d753b3bd0313d562642ec lib/RDF/Trine/Parser/NTriples.pm
-SHA1 264268eff36bfb1caf63854c2d56944f648c41ad lib/RDF/Trine/Parser/RDFJSON.pm
-SHA1 6455fdf587698c61b134a286bf5f966cadd0bd64 lib/RDF/Trine/Parser/RDFPatch.pm
-SHA1 69f64fe578ae1a54a519bbe2f760aef78209d5d5 lib/RDF/Trine/Parser/RDFXML.pm
-SHA1 835fa4efaeaf623bacbadd829a8c414e0f813ef5 lib/RDF/Trine/Parser/RDFa.pm
-SHA1 8115397219ed0d0fcdd531d344e58555dbefcc23 lib/RDF/Trine/Parser/Redland.pm
-SHA1 73843b3561ea3cc03c6cdf993ba78561c65e12c8 lib/RDF/Trine/Parser/TriG.pm
-SHA1 67c388095d347acdac72a536eeb976a457d65df8 lib/RDF/Trine/Parser/Turtle.pm
-SHA1 deec5477d827d94790ad4135de389b4c188d476d lib/RDF/Trine/Parser/Turtle/Constants.pm
-SHA1 94e83937ab68b0215df60edf28f4a4082efa3a9c lib/RDF/Trine/Parser/Turtle/Lexer.pm
+SHA1 c68c85ca62ae30d83f633975cd9af2a0789f59e0 inc/Module/Install/Base.pm
+SHA1 4797fd314e2653a427e725104704b0320993ba8c inc/Module/Install/Can.pm
+SHA1 b771d93af2bfc41273f48fa36082bf1bd6f21dbe inc/Module/Install/Fetch.pm
+SHA1 f4f3258a505a432a58cbcdc1fd030ef5e8e90985 inc/Module/Install/Makefile.pm
+SHA1 100a0dd8572f0b40373350fdd6c0a6f035d9dc39 inc/Module/Install/Metadata.pm
+SHA1 15651618fd1e8d2fdb8da4c020bbd3d829599c42 inc/Module/Install/Scripts.pm
+SHA1 4490fed943f4e556db9fd054b7ec8765ca417f7d inc/Module/Install/Win32.pm
+SHA1 8464ddf690b9f7036a0974ff172ec0ced2f6a329 inc/Module/Install/WriteAll.pm
+SHA1 3b9cb1ac46a1d10f40124bb8f46fd6d4260fb8db lib/RDF/Trine.pm
+SHA1 c5ef5b27376ff2a9380dcf21daf4a1e9005128f3 lib/RDF/Trine/Error.pm
+SHA1 c01b2c1e2de48e8f265216562e1092650c9cc801 lib/RDF/Trine/Exporter/CSV.pm
+SHA1 556099f38cec2f108c89d4da5f7b819937a90e68 lib/RDF/Trine/Exporter/RDFPatch.pm
+SHA1 72e83cd858ba45fa1ae7f9e60e91ae336a63087b lib/RDF/Trine/Graph.pm
+SHA1 b5ee1192ad465215925fe490618f95fda709fb60 lib/RDF/Trine/Iterator.pm
+SHA1 94de0cf8d49c52d3ea281b0c07c6e5fa59154a1a lib/RDF/Trine/Iterator/Bindings.pm
+SHA1 a4ccb30bb879b7904ad1e5f736c29985248073ea lib/RDF/Trine/Iterator/Bindings/Materialized.pm
+SHA1 9ff62863fd6cdf84132e188030e0dca251ba944d lib/RDF/Trine/Iterator/Boolean.pm
+SHA1 5e984379550f38d1b7ec05619a628f661cbebbbc lib/RDF/Trine/Iterator/Graph.pm
+SHA1 5f3308712e6962e92a334e9cdd4354b643eb2075 lib/RDF/Trine/Iterator/Graph/Materialized.pm
+SHA1 19fd0239c74cb1e9f89a113d718a007d32648c05 lib/RDF/Trine/Iterator/JSONHandler.pm
+SHA1 b291d9e990948f768636789a7f7d9e9433c64296 lib/RDF/Trine/Iterator/SAXHandler.pm
+SHA1 97cd820a855f1c73da484a25aecf0068768184b5 lib/RDF/Trine/Model.pm
+SHA1 2e503907718cbf75591f36dbf12d58fefe6ae340 lib/RDF/Trine/Model/Dataset.pm
+SHA1 351ed5973b135e8f52b4182a17f74e23c1c41f8e lib/RDF/Trine/Model/StatementFilter.pm
+SHA1 8519c54963c402f110ea9afc8eb173d1a6da3b42 lib/RDF/Trine/Model/Union.pm
+SHA1 5542c725341361e4cc691cce12d56f09b4d74dfc lib/RDF/Trine/Namespace.pm
+SHA1 a84bae709992ddf58143e49c784e1ff94ec5da64 lib/RDF/Trine/NamespaceMap.pm
+SHA1 9596b07841a836fbcf0447295c2863954c3083f4 lib/RDF/Trine/Node.pm
+SHA1 583ec1b6c16bfe71d657442c2258c79f646d4f28 lib/RDF/Trine/Node/Blank.pm
+SHA1 aa9791753c3ab8460ef3042522a296e564ce42c5 lib/RDF/Trine/Node/Literal.pm
+SHA1 bd803327654c66a4754762d32bc710a5a1e76ac7 lib/RDF/Trine/Node/Nil.pm
+SHA1 5196a74bcfb2fac116e05b981dd1000ff732c468 lib/RDF/Trine/Node/Resource.pm
+SHA1 f3fd933d3635e100e640a1a2e5f5ed9f91291a0c lib/RDF/Trine/Node/Variable.pm
+SHA1 1a598592d6046b418ca08321cb4da0e72e46b45a lib/RDF/Trine/Parser.pm
+SHA1 e0d1e4c33534d27eab92772fe63d3f429e6c9fe0 lib/RDF/Trine/Parser/LineProtocol.pm
+SHA1 25d35bb12e0f702eec5a74a794fc5c464c98fe78 lib/RDF/Trine/Parser/NQuads.pm
+SHA1 3258959ee312f7fe7081a01f24144f25de584521 lib/RDF/Trine/Parser/NTriples.pm
+SHA1 9e7af9ec7d1d2bf9d26c21347c2a65316d0c0659 lib/RDF/Trine/Parser/RDFJSON.pm
+SHA1 db10824e6c67dc539dcb3cf4497e6619315eb3f5 lib/RDF/Trine/Parser/RDFPatch.pm
+SHA1 5d8cb267a9b67fe34e82721f8ea4f704072a0fb6 lib/RDF/Trine/Parser/RDFXML.pm
+SHA1 9f10a13a7ba7b41bf12511997fdcb15ff489bdf8 lib/RDF/Trine/Parser/RDFa.pm
+SHA1 91f698cd28afdddb1b133be243e3cd4d77fd0190 lib/RDF/Trine/Parser/Redland.pm
+SHA1 fc341d7c5a4ec74918c2b771446a3b9278df5b52 lib/RDF/Trine/Parser/TriG.pm
+SHA1 52586038cc1f4f301026034319bfeb232da6cb78 lib/RDF/Trine/Parser/Turtle.pm
+SHA1 b0c858fb5c9d06de547b7d7ba82ad973851576bc lib/RDF/Trine/Parser/Turtle/Constants.pm
+SHA1 b942931cace529a7ec04fc0586ca8e4520dec627 lib/RDF/Trine/Parser/Turtle/Lexer.pm
 SHA1 c210d2369f1be2469fb59ec14dc2749de1e88ff3 lib/RDF/Trine/Parser/Turtle/Token.pm
-SHA1 04f83876fb690b7d2005953108176401c581d96c lib/RDF/Trine/Pattern.pm
-SHA1 94b1a9b13d3ff147941d764bfa3dfc66e8c1326a lib/RDF/Trine/Serializer.pm
-SHA1 46892fd7b0545ff64ae108b44f7b042a552a6950 lib/RDF/Trine/Serializer/NQuads.pm
-SHA1 c3b39f0c32b6bd38ec01989845911b7e0689598d lib/RDF/Trine/Serializer/NTriples.pm
-SHA1 231646d806ad32b75828d6e47d396bcf3cd89654 lib/RDF/Trine/Serializer/NTriples/Canonical.pm
-SHA1 0ee1cd018c2d359b43a13fe6b02094d05a6f01c7 lib/RDF/Trine/Serializer/RDFJSON.pm
-SHA1 23c67317e3020080f067f8229da8c0837cb28f7d lib/RDF/Trine/Serializer/RDFPatch.pm
-SHA1 bd184ee3e762e3048ffedf5f1c5241c5ae5c852d lib/RDF/Trine/Serializer/RDFXML.pm
-SHA1 0b755b803df97407f2d0fcd92fa8a0c26e5107b5 lib/RDF/Trine/Serializer/TSV.pm
-SHA1 48daf42b9cb1e814b8bd0428accf1b3df79b2cdc lib/RDF/Trine/Serializer/TriG.pm
-SHA1 1c9ff00a3406cf44bdac9a67440ba836bc5c03b3 lib/RDF/Trine/Serializer/Turtle.pm
-SHA1 689b7237cd9807db80343b9d4ee9c60c937e07e4 lib/RDF/Trine/Statement.pm
-SHA1 066aca1fb422ad81e1573c3f59312cc2c2305f7f lib/RDF/Trine/Statement/Quad.pm
-SHA1 1a01e4c884f430e7bd50af2fb00ee982f69393ee lib/RDF/Trine/Store.pm
-SHA1 e125a861c34b035abaf22927d5b91f654891055f lib/RDF/Trine/Store/DBI.pm
-SHA1 3b012618f61b7caf3f24aa4a19e52de33989a4d4 lib/RDF/Trine/Store/DBI/Pg.pm
-SHA1 a0feef3272ab79e9b3dfb8d87865e03f040d914a lib/RDF/Trine/Store/DBI/SQLite.pm
-SHA1 a4d67331181d140c3f68edb05bf8ffe8aba5c5bf lib/RDF/Trine/Store/DBI/mysql.pm
-SHA1 c052c27521fb14a46fbe6721d759e6e66cff044a lib/RDF/Trine/Store/Dydra.pm
-SHA1 69b397fa891e85a5ee51db5b6e754904e2d13c5f lib/RDF/Trine/Store/Hexastore.pm
-SHA1 d39aadce6e256a21a35b47766fae6143c6acbfd5 lib/RDF/Trine/Store/Memory.pm
-SHA1 1445fb5705d1831b22edddac447a32fa50bb1e33 lib/RDF/Trine/Store/Redis.pm
-SHA1 0f4ff27a820599d01e9bc12ba05d83f7032935a0 lib/RDF/Trine/Store/Redland.pm
-SHA1 feac9960d968b70e3ff2d1f8f5dafac393fbaff5 lib/RDF/Trine/Store/SPARQL.pm
-SHA1 7dfbe116876f6cb3d69ab39403343f03adb7e27c lib/RDF/Trine/VariableBindings.pm
-SHA1 d8b5c402bb910e92f4d7e260e671553043f7cea8 lib/Test/RDF/Trine/Store.pm
+SHA1 3f7da3f23cb4ebf9c1e2db7f0e21170282a0f8f1 lib/RDF/Trine/Pattern.pm
+SHA1 7bf893871f69601bae0a5284d0bb08e4fa9322fa lib/RDF/Trine/Serializer.pm
+SHA1 a92d96ae45d8dc52ec699d27113c4832637ecd95 lib/RDF/Trine/Serializer/NQuads.pm
+SHA1 56db7c5d62aa540e6409a46480e882e5d29e1485 lib/RDF/Trine/Serializer/NTriples.pm
+SHA1 5c776e90e4a2246b1ef94ebce88a429389a899fe lib/RDF/Trine/Serializer/NTriples/Canonical.pm
+SHA1 13a1a0de980e90e47d9e371da2f1742c6dd595ee lib/RDF/Trine/Serializer/RDFJSON.pm
+SHA1 7f316d56739ce9cb2722267e692d6ce307f3c0a8 lib/RDF/Trine/Serializer/RDFPatch.pm
+SHA1 db12dae0f0428cfde9228871a63f5effc2d79284 lib/RDF/Trine/Serializer/RDFXML.pm
+SHA1 19765b7d8545d0c1c7ef916cd5de1a0c2ed416e9 lib/RDF/Trine/Serializer/TSV.pm
+SHA1 21b7f33582b098d5c00f3b24db8cb253f8e7b5fa lib/RDF/Trine/Serializer/TriG.pm
+SHA1 a163daed83df0b092708c7208e8dd0c34f90a776 lib/RDF/Trine/Serializer/Turtle.pm
+SHA1 2eabf8bf71f0070d34ebb20c8def3bb3c3d4ebbf lib/RDF/Trine/Statement.pm
+SHA1 7fbe40b98839e1b4a4c2340fedef77dcadb5c1c7 lib/RDF/Trine/Statement/Quad.pm
+SHA1 32c6143651c76eb81bb6fd2e0cba45040c62fe81 lib/RDF/Trine/Store.pm
+SHA1 e9afb811a4a6e1e993cc94a1feb24cc9698421ef lib/RDF/Trine/Store/DBI.pm
+SHA1 7261b62a301bbc5b125b3bda6c90bb95f458a96e lib/RDF/Trine/Store/DBI/Pg.pm
+SHA1 3497b0f2365ea4bae56e3cec5a714ba58c3e1cea lib/RDF/Trine/Store/DBI/SQLite.pm
+SHA1 2c219ed13b78cf0f5e7aa7222f816afbc2abf4c0 lib/RDF/Trine/Store/DBI/mysql.pm
+SHA1 1713063e25a9c1d8c39b60baa7bd266a3ec0d97b lib/RDF/Trine/Store/Dydra.pm
+SHA1 b4c8268aced50e600894b23bbe1c3b5fbe508f6b lib/RDF/Trine/Store/Hexastore.pm
+SHA1 686bda06985a4da01bbec5dd5496957d0b06afcd lib/RDF/Trine/Store/Memory.pm
+SHA1 342c753d21216cdabb653e15d27da72d49a105b7 lib/RDF/Trine/Store/Redis.pm
+SHA1 94998a115cfa3d3a5ebd2b3b9d3acf19850ff610 lib/RDF/Trine/Store/Redland.pm
+SHA1 517350c8e4a43f8fd68d7d872856d4232d62acd2 lib/RDF/Trine/Store/SPARQL.pm
+SHA1 90ae35528f7c49b5b6da7739093c255d81fdac89 lib/RDF/Trine/VariableBindings.pm
+SHA1 996022f7c3112cc196ce359a5f28c33666c21687 lib/Test/RDF/Trine/Store.pm
 SHA1 3d6f8b1b1edbb40c4bae20dfc977fcf67d97ff28 t/00.load.t
 SHA1 403973466abf1be3a25ac53e0e4eeaee06e1a669 t/data/bugs/ttl-with-bom.ttl
 SHA1 171b51b6ee76df5df278cd9b8946edbc2dade2b4 t/data/rdfa/test-sd.nt
@@ -1323,7 +1323,7 @@ SHA1 77d3ecc040080e5dc649bd56090b0aeedeceff90 t/graph-subgraphs.t
 SHA1 0155808c901e925f4dd0af99a62ce4988dac6c33 t/graph.t
 SHA1 eeb60d81a3ba5aed1c7bbdfb865e8606a0803c4f t/iterator-bindings-join.t
 SHA1 0434eb1940161be055f80b36976266761db4b1e3 t/iterator-bindings-materialize.t
-SHA1 63c4eeeaca8fda906a89b1ca02faa7a20b27db7b t/iterator-bindings.t
+SHA1 631b98035778a9aebf3cb73a88a928a4c4bde24b t/iterator-bindings.t
 SHA1 6d40cb41c4ba2c1c1fe15e96b6bcf3f54b79cbc7 t/iterator-boolean.t
 SHA1 3c27b9c168a8f53d3339b9f271702cfbe9bec15f t/iterator-graph-materialize.t
 SHA1 29608bb2ceeac144565bd392958962c935ff12d4 t/iterator-graph.t
@@ -1401,7 +1401,7 @@ SHA1 0d59038cf8ba6efd00638de2bcf3c56bbd3e7da1 xt/store-sparql.t
 Version: GnuPG v1
 Comment: GPGTools - http://gpgtools.org
 
-iEYEARECAAYFAlN73UwACgkQhPK6VMqoyC3fHwCfU5tbML8rDmNOl2e58/DmC++r
-SCwAn1hLtcOHETnrBnbyWeD35wzmuC21
-=ILYD
+iEYEARECAAYFAlPib64ACgkQhPK6VMqoyC1FFwCeOxJx/pBlo1Y1/Oop/6mQYrTn
+mI4Anj5539emOz0mdAmzSDJ6nn2oyFS7
+=fLdS
 -----END PGP SIGNATURE-----
@@ -4,7 +4,7 @@ package Module::Install::Base;
 use strict 'vars';
 use vars qw{$VERSION};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 }
 
 # Suspend handler for "redefined" warnings
@@ -8,7 +8,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -91,3 +91,7 @@ END_FTP
 }
 
 1;
+
+__END__
+
+#line 109
@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -133,7 +133,7 @@ sub makemaker_args {
 	return $args;
 }
 
-# For mm args that take multiple space-seperated args,
+# For mm args that take multiple space-separated args,
 # append an argument to the current list.
 sub makemaker_append {
 	my $self = shift;
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -347,7 +347,7 @@ sub name_from {
 		^ \s*
 		package \s*
 		([\w:]+)
-		\s* ;
+		[\s|;]*
 		/ixms
 	) {
 		my ($name, $module_name) = ($1, $1);
@@ -453,24 +453,40 @@ sub author_from {
 
 #Stolen from M::B
 my %license_urls = (
-    perl         => 'http://dev.perl.org/licenses/',
-    apache       => 'http://apache.org/licenses/LICENSE-2.0',
-    apache_1_1   => 'http://apache.org/licenses/LICENSE-1.1',
-    artistic     => 'http://opensource.org/licenses/artistic-license.php',
-    artistic_2   => 'http://opensource.org/licenses/artistic-license-2.0.php',
-    lgpl         => 'http://opensource.org/licenses/lgpl-license.php',
-    lgpl2        => 'http://opensource.org/licenses/lgpl-2.1.php',
-    lgpl3        => 'http://opensource.org/licenses/lgpl-3.0.html',
-    bsd          => 'http://opensource.org/licenses/bsd-license.php',
-    gpl          => 'http://opensource.org/licenses/gpl-license.php',
-    gpl2         => 'http://opensource.org/licenses/gpl-2.0.php',
-    gpl3         => 'http://opensource.org/licenses/gpl-3.0.html',
-    mit          => 'http://opensource.org/licenses/mit-license.php',
-    mozilla      => 'http://opensource.org/licenses/mozilla1.1.php',
     open_source  => undef,
     unrestricted => undef,
     restrictive  => undef,
     unknown      => undef,
+
+## from Software-License - should we be using S-L instead ?
+# duplicates commeted out, see hack above ^^
+#	open_source  => 'http://www.gnu.org/licenses/agpl-3.0.txt',
+#	apache       => 'http://www.apache.org/licenses/LICENSE-1.1',
+	apache       => 'http://www.apache.org/licenses/LICENSE-2.0.txt',
+	artistic     => 'http://www.perlfoundation.org/artistic_license_1_0',
+	artistic_2   => 'http://www.perlfoundation.org/artistic_license_2_0',
+	bsd          => 'http://opensource.org/licenses/BSD-3-Clause',
+#	unrestricted => 'http://creativecommons.org/publicdomain/zero/1.0/',
+#	open_source  => 'http://www.freebsd.org/copyright/freebsd-license.html',
+#	open_source  => 'http://www.gnu.org/licenses/fdl-1.2.txt',
+#	open_source  => 'http://www.gnu.org/licenses/fdl-1.3.txt',
+#	gpl          => 'http://www.gnu.org/licenses/old-licenses/gpl-1.0.txt',
+#	gpl          => 'http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt',
+	gpl          => 'http://www.gnu.org/licenses/gpl-3.0.txt',
+#	lgpl         => 'http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt',
+	lgpl         => 'http://www.gnu.org/licenses/lgpl-3.0.txt',
+	mit          => 'http://www.opensource.org/licenses/mit-license.php',
+#	mozilla      => 'http://www.mozilla.org/MPL/MPL-1.0.txt',
+#	mozilla      => 'http://www.mozilla.org/MPL/MPL-1.1.txt',
+	mozilla      => 'http://www.mozilla.org/MPL/2.0/index.txt',
+#	restrictive  => '',
+#	open_source  => 'http://www.openssl.org/source/license.html',
+	perl         => 'http://dev.perl.org/licenses/',
+#	open_source  => 'http://www.opensource.org/licenses/postgresql',
+#	open_source  => 'http://trolltech.com/products/qt/licenses/licensing/qpl',
+#	unrestricted => 'http://h71000.www7.hp.com/doc/83final/BA554_90007/apcs02.html',
+#	open_source  => 'http://www.openoffice.org/licenses/sissl_license.html',
+#	open_source  => 'http://www.zlib.net/zlib_license.html',
 );
 
 sub license {
@@ -511,31 +527,43 @@ sub __extract_license {
 	my @phrases      = (
 		'(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1,
 		'(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1,
-		'Artistic and GPL'                   => 'perl',         1,
-		'GNU general public license'         => 'gpl',          1,
-		'GNU public license'                 => 'gpl',          1,
-		'GNU lesser general public license'  => 'lgpl',         1,
-		'GNU lesser public license'          => 'lgpl',         1,
-		'GNU library general public license' => 'lgpl',         1,
-		'GNU library public license'         => 'lgpl',         1,
-		'GNU Free Documentation license'     => 'unrestricted', 1,
-		'GNU Affero General Public License'  => 'open_source',  1,
+
+		# the following are relied on by the test system even if they are wrong :(
 		'(?:Free)?BSD license'               => 'bsd',          1,
 		'Artistic license 2\.0'              => 'artistic_2',   1,
-		'Artistic license'                   => 'artistic',     1,
-		'Apache (?:Software )?license'       => 'apache',       1,
-		'GPL'                                => 'gpl',          1,
 		'LGPL'                               => 'lgpl',         1,
-		'BSD'                                => 'bsd',          1,
-		'Artistic'                           => 'artistic',     1,
 		'MIT'                                => 'mit',          1,
-		'Mozilla Public License'             => 'mozilla',      1,
-		'Q Public License'                   => 'open_source',  1,
-		'OpenSSL License'                    => 'unrestricted', 1,
-		'SSLeay License'                     => 'unrestricted', 1,
-		'zlib License'                       => 'open_source',  1,
-		'proprietary'                        => 'proprietary',  0,
+
+## from Software-License
+		'The GNU Affero General Public License, Version 3, November 2007'   => 'open_source', 1,
+		'The Apache Software License, Version 1.1'                          => 'apache', 1,
+		'The Apache License, Version 2.0, January 2004'                     => 'apache', 1,
+		'The Artistic License 1.0'                                          => 'artistic', 1,
+		'The Artistic License 2.0 (GPL Compatible)'                         => 'artistic_2', 1,
+		'The (three-clause) BSD License'                                    => 'bsd', 1,
+		'CC0 License'														=> 'unrestricted', 1,		
+		'The (two-clause) FreeBSD License'                                  => 'open_source', 1,
+		'GNU Free Documentation License v1.2'                               => 'open_source', 1,
+		'GNU Free Documentation License v1.3'                               => 'open_source', 1,
+		'The GNU General Public License, Version 1, February 1989'          => 'gpl', 1,
+		'The GNU General Public License, Version 2, June 1991'              => 'gpl', 1,
+		'The GNU General Public License, Version 3, June 2007'              => 'gpl', 1,
+		'The GNU Lesser General Public License, Version 2.1, February 1999' => 'lgpl', 1,
+		'The GNU Lesser General Public License, Version 3, June 2007'       => 'lgpl', 1,
+		'The MIT (X11) License'                                             => 'mit', 1,
+		'The Mozilla Public License 1.0'                                    => 'mozilla', 1,
+		'The Mozilla Public License 1.1'                                    => 'mozilla', 1,
+		'Mozilla Public License Version 2.0'								=> 'mozilla', 1,
+		'"No License" License'												=> 'restrictive', 1,
+		'OpenSSL License'                                                   => 'open_source', 1,
+		'the same terms as the perl 5 programming language system itself'   => 'perl', 1,
+		'The PostgreSQL License'											=> 'open_source', 1,
+		'The Q Public License, Version 1.0'                                 => 'open_source', 1,
+		'Original SSLeay License'                                           => 'unrestricted', 1,
+		'Sun Internet Standards Source License (SISSL)'                     => 'open_source', 1,
+		'The zlib License'                                                  => 'open_source', 1,
 	);
+
 	while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) {
 		$pattern =~ s#\s+#\\s+#gs;
 		if ( $license_text =~ /\b$pattern\b/i ) {
@@ -705,7 +733,7 @@ sub _write_mymeta_data {
 	my @yaml = Parse::CPAN::Meta::LoadFile('META.yml');
 	my $meta = $yaml[0];
 
-	# Overwrite the non-configure dependency hashs
+	# Overwrite the non-configure dependency hashes
 	delete $meta->{requires};
 	delete $meta->{build_requires};
 	delete $meta->{recommends};
@@ -720,3 +748,7 @@ sub _write_mymeta_data {
 }
 
 1;
+
+__END__
+
+#line 766
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -27,3 +27,7 @@ sub install_script {
 }
 
 1;
+
+__END__
+
+#line 45
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -62,3 +62,7 @@ END_MESSAGE
 }
 
 1;
+
+__END__
+
+#line 80
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 	@ISA     = qw{Module::Install::Base};
 	$ISCORE  = 1;
 }
@@ -61,3 +61,7 @@ sub WriteAll {
 }
 
 1;
+
+__END__
+
+#line 79
@@ -17,7 +17,7 @@ package Module::Install;
 #     3. The ./inc/ version of Module::Install loads
 # }
 
-use 5.005;
+use 5.006;
 use strict 'vars';
 use Cwd        ();
 use File::Find ();
@@ -31,7 +31,7 @@ BEGIN {
 	# This is not enforced yet, but will be some time in the next few
 	# releases once we can make sure it won't clash with custom
 	# Module::Install extensions.
-	$VERSION = '1.08';
+	$VERSION = '1.10';
 
 	# Storage for the pseudo-singleton
 	$MAIN    = undef;
@@ -156,10 +156,10 @@ END_DIE
 sub autoload {
 	my $self = shift;
 	my $who  = $self->_caller;
-	my $cwd  = Cwd::cwd();
+	my $cwd  = Cwd::getcwd();
 	my $sym  = "${who}::AUTOLOAD";
 	$sym->{$cwd} = sub {
-		my $pwd = Cwd::cwd();
+		my $pwd = Cwd::getcwd();
 		if ( my $code = $sym->{$pwd} ) {
 			# Delegate back to parent dirs
 			goto &$code unless $cwd eq $pwd;
@@ -239,7 +239,7 @@ sub new {
 
 	# ignore the prefix on extension modules built from top level.
 	my $base_path = Cwd::abs_path($FindBin::Bin);
-	unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) {
+	unless ( Cwd::abs_path(Cwd::getcwd()) eq $base_path ) {
 		delete $args{prefix};
 	}
 	return $args{_self} if $args{_self};
@@ -338,7 +338,7 @@ sub find_extensions {
 		if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) {
 			my $content = Module::Install::_read($subpath . '.pm');
 			my $in_pod  = 0;
-			foreach ( split //, $content ) {
+			foreach ( split /\n/, $content ) {
 				$in_pod = 1 if /^=\w/;
 				$in_pod = 0 if /^=cut/;
 				next if ($in_pod || /^=cut/);  # skip pod text
@@ -434,7 +434,7 @@ END_OLD
 
 # _version is for processing module versions (eg, 1.03_05) not
 # Perl versions (eg, 5.8.1).
-sub _version ($) {
+sub _version {
 	my $s = shift || 0;
 	my $d =()= $s =~ /(\.)/g;
 	if ( $d >= 2 ) {
@@ -450,12 +450,12 @@ sub _version ($) {
 	return $l + 0;
 }
 
-sub _cmp ($$) {
+sub _cmp {
 	_version($_[1]) <=> _version($_[2]);
 }
 
 # Cloned from Params::Util::_CLASS
-sub _CLASS ($) {
+sub _CLASS {
 	(
 		defined $_[0]
 		and
@@ -467,4 +467,7 @@ sub _CLASS ($) {
 
 1;
 
-# Copyright 2008 - 2012 Adam Kennedy.
+
+__END__
+
+#line 485
@@ -7,7 +7,7 @@ RDF::Trine::Error - Error classes for RDF::Trine
 
 =head1 VERSION
 
-This document describes RDF::Trine::Error version 1.008
+This document describes RDF::Trine::Error version 1.009
 
 =head1 SYNOPSIS
 
@@ -38,7 +38,7 @@ use base qw(Error);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Exporter::CSV - Export RDF data to CSV
 
 =head1 VERSION
 
-This document describes RDF::Trine::Exporter::CSV version 1.008
+This document describes RDF::Trine::Exporter::CSV version 1.009
 
 =head1 SYNOPSIS
 
@@ -33,7 +33,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =head1 METHODS
@@ -7,7 +7,7 @@ RDF::Trine::Exporter::RDFPatch - RDF-Patch Export
 
 =head1 VERSION
 
-This document describes RDF::Trine::Exporter::RDFPatch version 1.008
+This document describes RDF::Trine::Exporter::RDFPatch version 1.009
 
 =head1 SYNOPSIS
 
@@ -44,7 +44,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Graph - Materialized RDF Graphs for testing isomorphism
 
 =head1 VERSION
 
-This document describes RDF::Trine::Graph version 1.008
+This document describes RDF::Trine::Graph version 1.009
 
 =head1 SYNOPSIS
 
@@ -40,7 +40,7 @@ use Algorithm::Combinatorics qw(permutations);
 our ($VERSION, $debug, $AUTOLOAD);
 BEGIN {
 	$debug		= 0;
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 use overload
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::Bindings::Materialized - Materialized bindings class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::Bindings::Materialized version 1.008
+This document describes RDF::Trine::Iterator::Bindings::Materialized version 1.009
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ use Scalar::Util qw(blessed reftype);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =item C<< new ( \@results, \@names, %args ) >>
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::Bindings - Iterator class for bindings query results
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::Bindings version 1.008
+This document describes RDF::Trine::Iterator::Bindings version 1.009
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ use Carp qw(croak);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =item C<new ( \@results, \@names, %args )>
@@ -483,25 +483,57 @@ sub as_string {
 	}
 }
 
-=item C<< as_statements ( @names ) >>
+=item C<< as_statements ( $pattern | @names ) >>
 
 Returns a L<RDF::Trine::Iterator::Graph> with the statements of the stream.
 
+If C<$pattern>, an RDF::Trine::Pattern object, is given as an argument, each of
+its triples are instantiated with variable bindings from each row of the
+iterator, and returned as RDF::Trine::Statement objects from a new
+RDF::Trine::Iterator::Graph iterator.
+
+If 3 variable C<@names> are supplied, their corresponding variable bindings
+in each row of the iterator are used (in order) as the subject, predicate, and
+object of new RDF::Trine::Statement objects and returned from a new
+RDF::Trine::Iterator::Graph iterator.
+
 =cut
 
 sub as_statements {
 	my $self	= shift;
 	my @names	= @_;
-	my $sub		= sub {
-		my $row	= $self->next;
-		return unless (defined $row);
-		my @values	= @{ $row }{ @names };
-		my $statement	= (scalar(@values) == 3 or not(defined($values[3])))
-						? RDF::Trine::Statement->new( @values[ 0 .. 2 ] )
-						: RDF::Trine::Statement::Quad->new( @values );
-		return $statement;
-	};
-	return RDF::Trine::Iterator::Graph->new( $sub )
+	if (scalar(@names) == 1 and $names[0]->can('triples')) {
+		my $pattern	= shift;
+		my @triples	= $pattern->triples;
+		my @queue;
+		my $sub		= sub {
+			while (1) {
+				if (scalar(@queue)) {
+					return shift(@queue);
+				}
+				my $row	= $self->next;
+				return unless (defined $row);
+				foreach my $t (@triples) {
+					my $st	= $t->bind_variables($row);
+					if ($st->rdf_compatible) {
+						push(@queue, $st);
+					}
+				}
+			}
+		};
+		return RDF::Trine::Iterator::Graph->new( $sub );
+	} else {
+		my $sub		= sub {
+			my $row	= $self->next;
+			return unless (defined $row);
+			my @values	= @{ $row }{ @names };
+			my $statement	= (scalar(@values) == 3 or not(defined($values[3])))
+							? RDF::Trine::Statement->new( @values[ 0 .. 2 ] )
+							: RDF::Trine::Statement::Quad->new( @values );
+			return $statement;
+		};
+		return RDF::Trine::Iterator::Graph->new( $sub );
+	}
 }
 
 =item C<< print_xml ( $fh, $max_size ) >>
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::Boolean - Iterator class for boolean query results
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::Boolean version 1.008
+This document describes RDF::Trine::Iterator::Boolean version 1.009
 
 =head1 SYNOPSIS
 
@@ -38,7 +38,7 @@ use JSON 2.0;
 use base qw(RDF::Trine::Iterator);
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =item C<new ( \@results, %args )>
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::Graph::Materialized - Materialized graph class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::Graph::Materialized version 1.008
+This document describes RDF::Trine::Iterator::Graph::Materialized version 1.009
 
 =head1 SYNOPSIS
 
@@ -48,7 +48,7 @@ use base qw(RDF::Trine::Iterator::Graph);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =item C<< new ( \@results, %args ) >>
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::Graph - Iterator class for graph query results
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::Graph version 1.008
+This document describes RDF::Trine::Iterator::Graph version 1.009
 
 =head1 SYNOPSIS
 
@@ -47,7 +47,7 @@ use base qw(RDF::Trine::Iterator);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::JSONHandler - JSON Handler for parsing SPARQL JSON Results
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::JSONHandler version 1.008
+This document describes RDF::Trine::Iterator::JSONHandler version 1.009
 
 =head1 STATUS
 
@@ -40,7 +40,7 @@ use RDF::Trine::VariableBindings;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 =item C<< new >>
@@ -7,7 +7,7 @@ RDF::Trine::Iterator::SAXHandler - SAX Handler for parsing SPARQL XML Results fo
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator::SAXHandler version 1.008
+This document describes RDF::Trine::Iterator::SAXHandler version 1.009
 
 =head1 STATUS
 
@@ -45,7 +45,7 @@ use RDF::Trine::VariableBindings;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 my %strings;
@@ -7,7 +7,7 @@ RDF::Trine::Iterator - Iterator class for SPARQL query results
 
 =head1 VERSION
 
-This document describes RDF::Trine::Iterator version 1.008.
+This document describes RDF::Trine::Iterator version 1.009.
 
 =head1 SYNOPSIS
 
@@ -43,7 +43,7 @@ use RDF::Trine::Iterator::JSONHandler;
 
 our ($VERSION, @ISA, @EXPORT_OK);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	
 	require Exporter;
 	@ISA		= qw(Exporter);
@@ -7,7 +7,7 @@ RDF::Trine::Model::Dataset - Model for SPARQL datasets
 
 =head1 VERSION
 
-This document describes RDF::Trine::Model::Dataset version 1.008
+This document describes RDF::Trine::Model::Dataset version 1.009
 
 =head1 STATUS
 
@@ -37,7 +37,7 @@ use RDF::Trine::Model;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ################################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Model::StatementFilter - Model for filtering statements based on a u
 
 =head1 VERSION
 
-This document describes RDF::Trine::Model::StatementFilter version 1.008
+This document describes RDF::Trine::Model::StatementFilter version 1.009
 
 =head1 METHODS
 
@@ -33,7 +33,7 @@ use RDF::Trine::Iterator qw(sgrep);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ################################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Model::Union - Union models for joining multiple stores together
 
 =head1 VERSION
 
-This document describes RDF::Trine::Model::Union version 1.008
+This document describes RDF::Trine::Model::Union version 1.009
 
 =head1 METHODS
 
@@ -31,7 +31,7 @@ use RDF::Trine::Store;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ################################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Model - Model class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Model version 1.008
+This document describes RDF::Trine::Model version 1.009
 
 =head1 METHODS
 
@@ -23,7 +23,7 @@ no warnings 'redefine';
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 use Scalar::Util qw(blessed refaddr);
@@ -8,7 +8,7 @@ RDF::Trine::Namespace - Abbreviated syntax for constructing RDF node objects
 
 =head1 VERSION
 
-This document describes RDF::Trine::Namespace version 1.008
+This document describes RDF::Trine::Namespace version 1.009
 
 =head1 SYNOPSIS
 
@@ -44,7 +44,7 @@ use base qw(XML::Namespace);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -8,7 +8,7 @@ RDF::Trine::NamespaceMap - Collection of Namespaces
 
 =head1 VERSION
 
-This document describes RDF::Trine::NamespaceMap version 1.008
+This document describes RDF::Trine::NamespaceMap version 1.009
 
 =head1 SYNOPSIS
 
@@ -43,7 +43,7 @@ use Data::Dumper;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Node::Blank - RDF Node class for blank nodes
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node::Blank version 1.008
+This document describes RDF::Trine::Node::Blank version 1.009
 
 =cut
 
@@ -26,7 +26,7 @@ use Carp qw(carp croak confess);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Node::Literal - RDF Node class for literals
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node::Literal version 1.008
+This document describes RDF::Trine::Node::Literal version 1.009
 
 =cut
 
@@ -27,7 +27,7 @@ use Carp qw(carp croak confess);
 
 our ($VERSION, $USE_XMLLITERALS, $USE_FORMULAE);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	eval "use RDF::Trine::Node::Literal::XML;";	## no critic (ProhibitStringyEval)
 	$USE_XMLLITERALS	= (RDF::Trine::Node::Literal::XML->can('new')) ? 1 : 0;
 	eval "use RDF::Trine::Node::Formula;";	## no critic (ProhibitStringyEval)
@@ -7,7 +7,7 @@ RDF::Trine::Node::Nil - RDF Node class for the nil node
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node::Nil version 1.008
+This document describes RDF::Trine::Node::Nil version 1.009
 
 =cut
 
@@ -27,7 +27,7 @@ use Carp qw(carp croak confess);
 my $NIL_NODE;
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Node::Resource - RDF Node class for IRI resources
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node::Resource version 1.008
+This document describes RDF::Trine::Node::Resource version 1.009
 
 =cut
 
@@ -29,7 +29,7 @@ use Carp qw(carp croak confess);
 
 our ($VERSION, %sse, %ntriples);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Node::Variable - RDF Node class for variables
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node::Variable version 1.008
+This document describes RDF::Trine::Node::Variable version 1.009
 
 =cut
 
@@ -26,7 +26,7 @@ use Carp qw(carp croak confess);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Node - Base class for RDF Nodes
 
 =head1 VERSION
 
-This document describes RDF::Trine::Node version 1.008
+This document describes RDF::Trine::Node version 1.009
 
 =cut
 
@@ -19,7 +19,7 @@ no warnings 'redefine';
 
 our ($VERSION, @ISA, @EXPORT_OK);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	
 	require Exporter;
 	@ISA		= qw(Exporter);
@@ -7,7 +7,7 @@ RDF::Trine::Parser::LineProtocol - RDF LineProtocol Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::LineProtocol version 1.008
+This document describes RDF::Trine::Parser::LineProtocol version 1.009
 
 =head1 SYNOPSIS
 
@@ -36,7 +36,7 @@ use base qw(RDF::Trine::Parser::RDFPatch);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Parser::NQuads - N-Quads Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::NQuads version 1.008
+This document describes RDF::Trine::Parser::NQuads version 1.009
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Parser::parser_names{ 'nquads' }	= __PACKAGE__;
 	$RDF::Trine::Parser::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' }	= __PACKAGE__;
 	foreach my $ext (qw(nq)) {
@@ -7,7 +7,7 @@ RDF::Trine::Parser::NTriples - N-Triples Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::NTriples version 1.008
+This document describes RDF::Trine::Parser::NTriples version 1.009
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Parser::parser_names{ 'ntriples' }	= __PACKAGE__;
 	foreach my $ext (qw(nt)) {
 		$RDF::Trine::Parser::file_extensions{ $ext }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::RDFJSON - RDF/JSON RDF Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::RDFJSON version 1.008
+This document describes RDF::Trine::Parser::RDFJSON version 1.009
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ use JSON;
 our ($VERSION, $rdf, $xsd);
 our ($r_boolean, $r_comment, $r_decimal, $r_double, $r_integer, $r_language, $r_lcharacters, $r_line, $r_nameChar_extra, $r_nameStartChar_minus_underscore, $r_scharacters, $r_ucharacters, $r_booltest, $r_nameStartChar, $r_nameChar, $r_prefixName, $r_qname, $r_resource_test, $r_nameChar_test);
 BEGIN {
-	$VERSION				= '1.008';
+	$VERSION				= '1.009';
 	$RDF::Trine::Parser::parser_names{ 'rdfjson' }	= __PACKAGE__;
 	foreach my $ext (qw(json js)) {
 		$RDF::Trine::Parser::file_extensions{ $ext }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::RDFPatch - RDF-Patch Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::RDFPatch version 1.008
+This document describes RDF::Trine::Parser::RDFPatch version 1.009
 
 =head1 SYNOPSIS
 
@@ -46,7 +46,7 @@ use RDF::Trine::Parser::Turtle::Constants;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Parser::RDFXML - RDF/XML Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::RDFXML version 1.008
+This document describes RDF::Trine::Parser::RDFXML version 1.009
 
 =head1 SYNOPSIS
 
@@ -53,7 +53,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION, $HAS_XML_LIBXML);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Parser::parser_names{ 'rdfxml' }	= __PACKAGE__;
 	foreach my $ext (qw(rdf xrdf rdfx)) {
 		$RDF::Trine::Parser::file_extensions{ $ext }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::RDFa - RDFa Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::RDFa version 1.008
+This document describes RDF::Trine::Parser::RDFa version 1.009
 
 =head1 SYNOPSIS
 
@@ -50,7 +50,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION, $HAVE_RDFA_PARSER);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	if (can_load( modules => { 'RDF::RDFa::Parser' => 0.30 })) {
 		$HAVE_RDFA_PARSER	= 1;
 		$RDF::Trine::Parser::parser_names{ 'rdfa' }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::Redland - RDF Parser using the Redland library
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::Redland version 1.008
+This document describes RDF::Trine::Parser::Redland version 1.009
 
 =head1 SYNOPSIS
 
@@ -85,7 +85,7 @@ BEGIN {
 				],
 	);
 	
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	for my $format (keys %FORMATS) {
 		$RDF::Trine::Parser::parser_names{$format} = $FORMATS{$format}[0];
 		$RDF::Trine::Parser::format_uris{ $FORMATS{$format}[1] } = $FORMATS{$format}[0]
@@ -7,7 +7,7 @@ RDF::Trine::Parser::TriG - TriG RDF Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::TriG version 1.008
+This document describes RDF::Trine::Parser::TriG version 1.009
 
 =head1 SYNOPSIS
 
@@ -41,7 +41,7 @@ use RDF::Trine qw(literal);
 
 our ($VERSION);
 BEGIN {
-	$VERSION				= '1.008';
+	$VERSION				= '1.009';
 	$RDF::Trine::Parser::parser_names{ 'trig' }	= __PACKAGE__;
 	foreach my $ext (qw(trig)) {
 		$RDF::Trine::Parser::file_extensions{ $ext }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::Turtle::Constants - Constant definitions for use in parsing
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::Turtle::Constants version 1.008
+This document describes RDF::Trine::Parser::Turtle::Constants version 1.009
 
 =head1 SYNOPSIS
 
@@ -28,7 +28,7 @@ use 5.010;
 our $VERSION;
 our @EXPORT;
 BEGIN {
-	$VERSION				= '1.008';
+	$VERSION				= '1.009';
 	@EXPORT = qw(
 		LBRACKET
 		RBRACKET
@@ -7,7 +7,7 @@ RDF::Trine::Parser::Turtle::Lexer - Tokenizer for parsing Turtle, TriG, and N-Tr
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::Turtle::Lexer version 1.008
+This document describes RDF::Trine::Parser::Turtle::Lexer version 1.009
 
 =head1 SYNOPSIS
 
@@ -35,7 +35,7 @@ use RDF::Trine::Error;
 
 our $VERSION;
 BEGIN {
-	$VERSION				= '1.008';
+	$VERSION				= '1.009';
 }
 
 my $r_nameChar_extra		= qr'[-0-9\x{B7}\x{0300}-\x{036F}\x{203F}-\x{2040}]'o;
@@ -7,7 +7,7 @@ RDF::Trine::Parser::Turtle - Turtle RDF Parser
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser::Turtle version 1.008
+This document describes RDF::Trine::Parser::Turtle version 1.009
 
 =head1 SYNOPSIS
 
@@ -44,7 +44,7 @@ use RDF::Trine::Parser::Turtle::Token;
 
 our $VERSION;
 BEGIN {
-	$VERSION				= '1.008';
+	$VERSION				= '1.009';
 	foreach my $ext (qw(ttl)) {
 		$RDF::Trine::Parser::file_extensions{ $ext }	= __PACKAGE__;
 	}
@@ -7,7 +7,7 @@ RDF::Trine::Parser - RDF Parser class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Parser version 1.008
+This document describes RDF::Trine::Parser version 1.009
 
 =head1 SYNOPSIS
 
@@ -53,7 +53,7 @@ our %format_uris;
 our %encodings;
 
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	can_load( modules => {
 		'Data::UUID'	=> undef,
 		'UUID::Tiny'	=> undef,
@@ -7,7 +7,7 @@ RDF::Trine::Pattern - Class for basic graph patterns
 
 =head1 VERSION
 
-This document describes RDF::Trine::Pattern version 1.008
+This document describes RDF::Trine::Pattern version 1.009
 
 =cut
 
@@ -27,7 +27,7 @@ use RDF::Trine::Iterator qw(smap);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::NQuads - N-Quads Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::NQuads version 1.008
+This document describes RDF::Trine::Serializer::NQuads version 1.009
 
 =head1 SYNOPSIS
 
@@ -47,7 +47,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'nquads' }	= __PACKAGE__;
 	$RDF::Trine::Serializer::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' }	= __PACKAGE__;
 	foreach my $type (qw(text/x-nquads)) {
@@ -4,7 +4,7 @@ RDF::Trine::Serializer::NTriples::Canonical - Canonical representation of an RDF
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::NTriples::Canonical version 1.008
+This document describes RDF::Trine::Serializer::NTriples::Canonical version 1.009
 
 =head1 SYNOPSIS
 
@@ -64,7 +64,7 @@ use base qw(RDF::Trine::Serializer::NTriples);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'ntriples-canonical' }	= __PACKAGE__;
 # 	foreach my $type (qw(text/plain)) {
 # 		$RDF::Trine::Serializer::media_types{ $type }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::NTriples - N-Triples Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::NTriples version 1.008
+This document describes RDF::Trine::Serializer::NTriples version 1.009
 
 =head1 SYNOPSIS
 
@@ -47,7 +47,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'ntriples' }	= __PACKAGE__;
 	$RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/N-Triples' }	= __PACKAGE__;
 	foreach my $type (qw(text/plain)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::RDFJSON - RDF/JSON Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::RDF/JSON version 1.008
+This document describes RDF::Trine::Serializer::RDF/JSON version 1.009
 
 =head1 SYNOPSIS
 
@@ -48,7 +48,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'rdfjson' }	= __PACKAGE__;
 	foreach my $type (qw(application/json application/x-rdf+json)) {
 		$RDF::Trine::Serializer::media_types{ $type }	= __PACKAGE__;
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::RDFPatch - RDF-Patch Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::RDFPatch version 1.008
+This document describes RDF::Trine::Serializer::RDFPatch version 1.009
 
 =head1 SYNOPSIS
 
@@ -49,7 +49,7 @@ use RDF::Trine::Exporter::RDFPatch;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'rdfpatch' }	= __PACKAGE__;
 # 	$RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/RDF-Patch' }	= __PACKAGE__;
 	foreach my $type (qw(application/rdf-patch)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::RDFXML - RDF/XML Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::RDFXML version 1.008
+This document describes RDF::Trine::Serializer::RDFXML version 1.009
 
 =head1 SYNOPSIS
 
@@ -48,7 +48,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'rdfxml' }	= __PACKAGE__;
 	$RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/RDF_XML' }	= __PACKAGE__;
 	foreach my $type (qw(application/rdf+xml)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::TSV - TSV Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store version 1.008
+This document describes RDF::Trine::Store version 1.009
 
 =head1 SYNOPSIS
 
@@ -47,7 +47,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'tsv' }	= __PACKAGE__;
 	$RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/TSV' }	= __PACKAGE__;
 	foreach my $type (qw(text/tsv)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::TriG - TriG Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::TriG version 1.008
+This document describes RDF::Trine::Serializer::TriG version 1.009
 
 =head1 SYNOPSIS
 
@@ -48,7 +48,7 @@ use RDF::Trine::Error qw(:try);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'trig' }	= __PACKAGE__;
 # 	$RDF::Trine::Serializer::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' }	= __PACKAGE__;
 # 	foreach my $type (qw(text/x-nquads)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer::Turtle - Turtle Serializer
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer::Turtle version 1.008
+This document describes RDF::Trine::Serializer::Turtle version 1.009
 
 =head1 SYNOPSIS
 
@@ -53,7 +53,7 @@ use RDF::Trine::Namespace qw(rdf);
 our ($VERSION, $debug);
 BEGIN {
 	$debug		= 0;
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	$RDF::Trine::Serializer::serializer_names{ 'turtle' }	= __PACKAGE__;
 	$RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/Turtle' }	= __PACKAGE__;
 	foreach my $type (qw(application/x-turtle application/turtle text/turtle text/rdf+n3)) {
@@ -7,7 +7,7 @@ RDF::Trine::Serializer - RDF Serializer class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Serializer version 1.008
+This document describes RDF::Trine::Serializer version 1.009
 
 =head1 SYNOPSIS
 
@@ -34,7 +34,7 @@ our %serializer_names;
 our %format_uris;
 our %media_types;
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 use RDF::Trine::Serializer::NQuads;
@@ -7,7 +7,7 @@ RDF::Trine::Statement::Quad - Class for quads and quad patterns
 
 =head1 VERSION
 
-This document describes RDF::Trine::Statement::Quad version 1.008
+This document describes RDF::Trine::Statement::Quad version 1.009
 
 =cut
 
@@ -25,7 +25,7 @@ use Carp qw(croak);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine::Statement - Class for triples and triple patterns
 
 =head1 VERSION
 
-This document describes RDF::Trine::Statement version 1.008
+This document describes RDF::Trine::Statement version 1.009
 
 =cut
 
@@ -29,7 +29,7 @@ use Encode;
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -4,7 +4,7 @@ RDF::Trine::Store::DBI::Pg - PostgreSQL subclass of DBI store
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::DBI::Pg version 1.008
+This document describes RDF::Trine::Store::DBI::Pg version 1.009
 
 =head1 SYNOPSIS
 
@@ -25,7 +25,7 @@ use Scalar::Util qw(blessed reftype refaddr);
 
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 }
@@ -4,7 +4,7 @@ RDF::Trine::Store::DBI::SQLite - SQLite subclass of DBI store
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::DBI::SQLite version 1.008
+This document describes RDF::Trine::Store::DBI::SQLite version 1.009
 
 =head1 SYNOPSIS
 
@@ -34,7 +34,7 @@ use Scalar::Util qw(blessed reftype refaddr);
 
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 }
@@ -4,7 +4,7 @@ RDF::Trine::Store::DBI::mysql - Mysql subclass of DBI store
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::DBI::mysql version 1.008
+This document describes RDF::Trine::Store::DBI::mysql version 1.009
 
 =head1 SYNOPSIS
 
@@ -25,7 +25,7 @@ use Scalar::Util qw(blessed reftype refaddr);
 
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 }
@@ -4,7 +4,7 @@ RDF::Trine::Store::DBI - Persistent RDF storage based on DBI
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::DBI version 1.008
+This document describes RDF::Trine::Store::DBI version 1.009
 
 =head1 SYNOPSIS
 
@@ -65,7 +65,7 @@ use RDF::Trine::Store::DBI::Pg;
 
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 }
@@ -4,7 +4,7 @@ RDF::Trine::Store::Dydra - RDF Store proxy for a Dydra endpoint
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::Dydra version 1.008
+This document describes RDF::Trine::Store::Dydra version 1.009
 
 =head1 SYNOPSIS
 
@@ -38,7 +38,7 @@ use RDF::Trine::Error qw(:try);
 my @pos_names;
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 	@pos_names	= qw(subject predicate object context);
@@ -4,7 +4,7 @@ RDF::Trine::Store::Hexastore - RDF store implemented with the hexastore index
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::Hexastore version 1.008
+This document describes RDF::Trine::Store::Hexastore version 1.009
 
 =head1 SYNOPSIS
 
@@ -32,6 +32,7 @@ use Scalar::Util qw(refaddr reftype blessed);
 use Storable qw(nstore retrieve);
 use Carp qw(croak);
 use Time::HiRes qw ( time );
+use Log::Log4perl;
 
 use constant NODES		=> qw(subject predicate object);
 use constant NODEMAP	=> { subject => 0, predicate => 1, object => 2, context => 3 };
@@ -45,7 +46,7 @@ use constant OTHERNODES	=> {
 
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 }
@@ -98,25 +99,25 @@ The base URI to be used for a parsed file.
 
 The following example initializes a Hexastore store based on a local file and a remote URL:
 
-  my $store = RDF::Trine::Store->new_with_config(
-                {storetype => 'Hexastore',
-		 sources => [
-			      {
-			       file => 'test-23.ttl',
-			       syntax => 'turtle',
-			      },
-			      {
-			       url => 'http://www.kjetil.kjernsmo.net/foaf',
-			       syntax => 'rdfxml',
-		      	      }
-	        ]});
+  my $store = RDF::Trine::Store->new_with_config( {
+      storetype => 'Hexastore',
+      sources => [
+          {
+              file => 'test-23.ttl',
+              syntax => 'turtle',
+          },
+          {
+              url => 'http://www.kjetil.kjernsmo.net/foaf',
+              syntax => 'rdfxml',
+          }
+  ]});
 
 
 =cut
 
 sub new {
 	my $class	= shift;
-	my $self        = bless({}, $class);
+	my $self	= bless({}, $class);
 	$self->nuke; # nuke resets the store, thus doing the same thing as init should do
 	return $self;
 }
@@ -463,7 +464,8 @@ sub get_pattern {
 			}
 			return RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ] );
 		} else {
-# 			warn 'no shared variable -- cartesian product';
+			my $l		= Log::Log4perl->get_logger("rdf.trine.store.hexastore");
+			$l->info('No shared variable -- cartesian product');
 			# no shared variable -- cartesian product
 			my $i1	= $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t1 ) );
 			my $i2	= $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t2 ) );
@@ -538,14 +540,19 @@ sub add_statement {
 	my $self	= shift;
 	my $st		= shift;
 	my $added	= 0;
+
+	# believe it or not, these calls add up.
+	my %stmt = map { $_ => $st->$_ } NODES;
+	my %ids  = map { $_ => $self->_node2id($stmt{$_}) } NODES;
+
 	foreach my $first (NODES) {
-		my $firstnode	= $st->$first();
-		my $id1			= $self->_node2id( $firstnode );
+		my $firstnode	= $stmt{$first};
+		my $id1			= $ids{$first};
 		my @others		= @{ OTHERNODES->{ $first } };
 		my @orders		= ([@others], [reverse @others]);
 		foreach my $order (@orders) {
 			my ($second, $third)	= @$order;
-			my ($id2, $id3)	= map { $self->_node2id( $st->$_() ) } ($second, $third);
+			my ($id2, $id3) = @ids{$second, $third};
 			my $list	= $self->_get_terminal_list( $first => $id1, $second => $id2 );
 			if ($self->_add_node_to_page( $list, $id3 )) {
 				$added++;
@@ -569,7 +576,7 @@ sub remove_statement {
 	my $st		= shift;
 	my @ids		= map { $self->_node2id( $st->$_() ) } NODES;
 # 	warn "*** removing statement @ids\n";
-	
+
 	my $removed	= 0;
 	foreach my $first (NODES) {
 		my $firstnode	= $st->$first();
@@ -587,7 +594,7 @@ sub remove_statement {
 # 			warn "\t- remaining: [" . join(', ', @$list) . "]\n";
 		}
 	}
-	
+
 	if ($removed) {
 		$self->{ size }--;
 		$self->{etag} = time;
@@ -691,10 +698,16 @@ sub _node2id {
 	my $node	= shift;
 	return unless (blessed($node));
 	return if ($node->isa('RDF::Trine::Node::Variable'));
-	if (exists( $self->{ node2id }{ $node->as_string } )) {
-		return $self->{ node2id }{ $node->as_string };
+
+	# this gets called so much it actually significantly impacts run
+	# time. call it once per invocation of _node2id instead of twice.
+	my $str = $node->as_string;
+	my $id = $self->{ node2id }{ $str };
+
+	if (defined $id) {
+		return $id;
 	} else {
-		my $id	= ($self->{ node2id }{ $node->as_string } = $self->{ next_id }++);
+		$id	= ($self->{ node2id }{ $str } = $self->{ next_id }++);
 		$self->{ id2node }{ $id }	= $node;
 		return $id
 	}
@@ -4,7 +4,7 @@ RDF::Trine::Store::Memory - Simple in-memory RDF store
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::Memory version 1.008
+This document describes RDF::Trine::Store::Memory version 1.009
 
 =head1 SYNOPSIS
 
@@ -39,7 +39,7 @@ use RDF::Trine::Error;
 my @pos_names;
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 	@pos_names	= qw(subject predicate object context);
@@ -616,7 +616,7 @@ change. This token is acceptable for use as an HTTP ETag.
 
 sub etag {
 	my $self	= shift;
-	return $self->{hash}->hexdigest;
+	return $self->{hash}->b64digest;
 }
 
 =item C<< size >>
@@ -4,7 +4,7 @@ RDF::Trine::Store::Redis - RDF Store for Redis
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::Redis version 1.008
+This document describes RDF::Trine::Store::Redis version 1.009
 
 =head1 SYNOPSIS
 
@@ -44,7 +44,7 @@ our $CACHING	= 1;
 my @pos_names;
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 	@pos_names	= qw(subject predicate object context);
@@ -4,7 +4,7 @@ RDF::Trine::Store::Redland - Redland-backed RDF store for RDF::Trine
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::Redland version 1.008
+This document describes RDF::Trine::Store::Redland version 1.009
 
 =head1 SYNOPSIS
 
@@ -37,10 +37,26 @@ use RDF::Trine::Error;
 our $NIL_TAG;
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 	$NIL_TAG	= 'tag:gwilliams@cpan.org,2010-01-01:RT:NIL';
+
+	# XXX THE FOLLOWING IS TO KEEP DATA::DUMPER FROM CRAPPING OUT
+
+	# insert these guys until we can get a fix into redland
+	my $fk = sub { 'DUMMY' };
+	my $nk = sub { undef };
+	my $f  = sub { 'REDLAND PLEASE FIX YOUR API' };
+
+	*_p_librdf_storage_s::FIRSTKEY = $fk;
+	*_p_librdf_storage_s::NEXTKEY  = $nk;
+	*_p_librdf_storage_s::FETCH	= $f;
+	*_p_librdf_model_s::FIRSTKEY   = $fk;
+	*_p_librdf_model_s::NEXTKEY	= $nk;
+	*_p_librdf_model_s::FETCH	  = $f;
+
+	# too bad these aren't implemented, since they could be useful
 }
 
 ######################################################################
@@ -95,6 +111,7 @@ sub new {
 	my $model	= shift;
 	my $self	= bless({
 		model	=> $model,
+		bulk	=> 0,
 	}, $class);
 	return $self;
 }
@@ -110,13 +127,15 @@ sub _new_with_string {
 
 sub _new_with_config {
 	my $class	= shift;
-	my $config	= shift;
-	my $store	= RDF::Redland::Storage->new(
-						     $config->{store_name},
-						     $config->{name},
-						     $config->{options}
-						    );
-	my $model	= RDF::Redland::Model->new( $store, '' );
+	my $config	= shift || { store_name => 'memory' };
+
+	my $store	= RDF::Redland::Storage->new
+		(@{$config}{qw(store_name name options)})
+			or throw RDF::Trine::Error::DatabaseError
+				-text => "Couldn't initialize Redland storage";
+	my $model	= RDF::Redland::Model->new( $store, '' )
+		or throw RDF::Trine::Error::DatabaseError
+			-text => "Couldn't initialize Redland model";
 	return $class->new( $model );
 }
 
@@ -263,7 +282,7 @@ sub add_statement {
 	my $self	= shift;
 	my $st		= shift;
 	my $context	= shift;
-	
+
 	my $nil	= RDF::Trine::Node::Nil->new();
 	if ($st->isa( 'RDF::Trine::Statement::Quad' )) {
 		if (blessed($context)) {
@@ -277,12 +296,18 @@ sub add_statement {
 			$st	= RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil );
 		}
 	}
-	
+
 	my $model	= $self->_model;
 	my @nodes	= $st->nodes;
 	my @rnodes	= map { _cast_to_redland($_) } @nodes;
 	my $rst		= RDF::Redland::Statement->new( @rnodes[0..2] );
-	$model->add_statement( $rst, $rnodes[3] );
+	my $ret	 = $model->add_statement( $rst, $rnodes[3] );
+
+	# redland needs to be synced
+	$model->sync unless $self->{bulk};
+
+	# for any code that was expecting this
+	$ret;
 }
 
 =item C<< remove_statement ( $statement [, $context]) >>
@@ -312,7 +337,14 @@ sub remove_statement {
 
 	my @nodes	= $st->nodes;
 	my @rnodes	= map { _cast_to_redland($_) } @nodes;
-	$self->_model->remove_statement( @rnodes );
+	my $model   = $self->_model;
+	my $ret	 = $model->remove_statement( @rnodes );
+
+	# redland needs to be synced
+	$model->sync unless $self->{bulk};
+
+	# for any code that was expecting this
+	$ret;
 }
 
 =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >>
@@ -323,14 +355,24 @@ Removes the specified C<$statement> from the underlying model.
 
 sub remove_statements {
 	my $self	= shift;
-	my $subj	= shift;
-	my $pred	= shift;
-	my $obj		= shift;
-	my $context	= shift;
-	my $iter	= $self->get_statements( $subj, $pred, $obj, $context );
+	my $iter	= $self->get_statements(@_);
+
+	# temporarily store the value for bulk so we don't sync over and over
+	my $bulk	= $self->{bulk};
+	$self->{bulk} = 1;
+
+	my $count = 0;
 	while (my $st = $iter->next) {
 		$self->remove_statement( $st );
+		$count++;
 	}
+
+	# now put it back
+	$self->{bulk} = $bulk;
+	$self->_model->sync unless $bulk;
+
+	# might as well return how many statements got deleted
+	$count;
 }
 
 =item C<< count_statements ( $subject, $predicate, $object, $context ) >>
@@ -345,9 +387,13 @@ sub count_statements {
 	my $self	= shift;
 	my @nodes	= @_;
 	if (scalar(@nodes) < 4) {
+		# if it isn't 4, then make damn sure it's 3
+		push @nodes, (undef) x (3 - @nodes);
+
 # 		warn "restricting count_statements to triple semantics";
 		my @rnodes	= map { _cast_to_redland($_) } @nodes[0..2];
-		my $st		= RDF::Redland::Statement->new( @rnodes );
+		# force a 3-element list or you'll be sorry
+		my $st		= RDF::Redland::Statement->new( @rnodes[0..2] );
 		my $iter	= $self->_model->find_statements( $st );
 		my $count	= 0;
 		my %seen;
@@ -395,6 +441,16 @@ sub supports {
 	return;
 }
 
+sub _begin_bulk_ops {
+	shift->{bulk} = 1;
+}
+
+sub _end_bulk_ops {
+	my $self = shift;
+	$self->{bulk} = 0;
+	$self->_model->sync;
+}
+
 sub _model {
 	my $self	= shift;
 	return $self->{model};
@@ -447,6 +503,7 @@ sub _cast_to_local {
 	}
 }
 
+
 1;
 
 __END__
@@ -4,7 +4,7 @@ RDF::Trine::Store::SPARQL - RDF Store proxy for a SPARQL endpoint
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store::SPARQL version 1.008
+This document describes RDF::Trine::Store::SPARQL version 1.009
 
 =head1 SYNOPSIS
 
@@ -37,7 +37,7 @@ use RDF::Trine::Error qw(:try);
 my @pos_names;
 our $VERSION;
 BEGIN {
-	$VERSION	= "1.008";
+	$VERSION	= "1.009";
 	my $class	= __PACKAGE__;
 	$RDF::Trine::Store::STORE_CLASSES{ $class }	= $VERSION;
 	@pos_names	= qw(subject predicate object context);
@@ -7,7 +7,7 @@ RDF::Trine::Store - RDF triplestore base class
 
 =head1 VERSION
 
-This document describes RDF::Trine::Store version 1.008
+This document describes RDF::Trine::Store version 1.009
 
 =head1 DESCRIPTION
 
@@ -83,7 +83,7 @@ use RDF::Trine::Store::SPARQL;
 
 our ($VERSION, $HAVE_REDLAND, %STORE_CLASSES);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	if ($RDF::Redland::VERSION) {
 		$HAVE_REDLAND	= 1;
 	}
@@ -7,7 +7,7 @@ RDF::Trine::VariableBindings - Variable bindings
 
 =head1 VERSION
 
-This document describes RDF::Trine::VariableBindings version 1.008
+This document describes RDF::Trine::VariableBindings version 1.009
 
 =head1 SYNOPSIS
 
@@ -53,7 +53,7 @@ use Scalar::Util qw(blessed refaddr);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 ######################################################################
@@ -7,7 +7,7 @@ RDF::Trine - An RDF Framework for Perl
 
 =head1 VERSION
 
-This document describes RDF::Trine version 1.008
+This document describes RDF::Trine version 1.009
 
 =head1 SYNOPSIS
 
@@ -89,7 +89,7 @@ use LWP::UserAgent;
 our ($debug, @ISA, $VERSION, @EXPORT_OK);
 BEGIN {
 	$debug		= 0;
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 	
 	require Exporter;
 	@ISA		= qw(Exporter);
@@ -4,7 +4,7 @@ Test::RDF::Trine::Store - A collection of functions to test RDF::Trine::Stores
 
 =head1 VERSION
 
-This document describes RDF::Trine version 1.008
+This document describes RDF::Trine version 1.009
 
 =head1 SYNOPSIS
 
@@ -58,7 +58,7 @@ use RDF::Trine::Namespace qw(xsd);
 
 our ($VERSION);
 BEGIN {
-	$VERSION	= '1.008';
+	$VERSION	= '1.009';
 }
 
 use Log::Log4perl;
@@ -1,4 +1,4 @@
-use Test::More tests => 10;
+use Test::More;
 use Test::JSON;
 
 use strict;
@@ -7,7 +7,7 @@ no warnings 'redefine';
 
 use URI::file;
 
-use RDF::Trine;
+use RDF::Trine qw(statement iri literal variable);
 use RDF::Trine::Node;
 use_ok( 'RDF::Trine::Iterator::Bindings' );
 
@@ -52,3 +52,40 @@ use_ok( 'RDF::Trine::Iterator::Bindings' );
 	my $expect	= '{"head":{"vars":["a", "b", "c"]},"results":{"bindings":[],"distinct":false,"ordered":false}}';
 	is_json( $iter->as_json, $expect, 'as_json empty bindings iterator with names' );
 }
+
+{
+	my $t1		= statement(variable('subj'), iri('pred1'), literal('foo'));
+	my $t2		= statement(variable('subj'), iri('pred2'), variable('obj'));
+	my $pattern	= RDF::Trine::Pattern->new($t1, $t2);
+	my @bindings	= (
+		{ 'subj' => iri('http://example.org/x1') },
+		{ 'subj' => iri('http://example.org/x2'), 'obj' => literal('bar') },
+	);
+	my $iter	= RDF::Trine::Iterator::Bindings->new( sub { return shift(@bindings) } );
+	my $sts		= $iter->as_statements($pattern);
+	my @triples	= $sts->get_all;
+	is(scalar(@triples), 3, 'expected triple count from as_statements with pattern');
+	
+	ok(
+		$triples[0]->subsumes(
+			statement(iri('http://example.org/x1'), iri('pred1'), literal('foo'))
+		),
+		'expected triple 1/3'
+	);
+	
+	ok(
+		$triples[1]->subsumes(
+			statement(iri('http://example.org/x2'), iri('pred1'), literal('foo'))
+		),
+		'expected triple 2/3'
+	);
+	
+	ok(
+		$triples[2]->subsumes(
+			statement(iri('http://example.org/x2'), iri('pred2'), literal('bar'))
+		),
+		'expected triple 3/3'
+	);
+}
+
+done_testing();