Introduction
This document lists all changes for the most recent major release (releases with number X.Y) and subsequent minor releases (with numbers X.Y.Z and perhaps further identifiers), including major and important changes and a list of all user-visible modifications. Change History repeats the list of user-visible modifications for this release and includes similar lists for earlier releases.
The release described in the documentation set is 6.1.1.
Release 6.1.1
Release 6.1.1 is a maintenance release which fixes bugs in version 6.1. There are also other improvements and optimizations. The changes are described below.
Database internal format unchanged from version 6.1
The database format is changed from time to time. When the format is changed, databases must be upgraded to the new format before they can be used. Upgrading is discussed in the Database Upgrading document. The format in version 6.1.1 is unchanged from version 6.1. (The format in version 6.1 is changed from the format in earlier versions.) Therefore it is not necessary to upgrade 6.1 databases for them to be used with 6.1.1. Note that backing data up before using in a new version is always recommended. Once a database has been used in a later release, it cannot be used in an earlier release regardless of whether the database format is the same.
Release 6.1
Major Changes
Triple attributes: Triples can now have attributes which can provide fine access control. See Triple Attributes for more information.
Java 8 (or later) is required for the Java client. Earlier versions of Java are no longer supported.
Top Braid Composer (TBC) version 5.1.4 is now supported. See TopBraid Composer Plugin.
Database internal format changed from versions 6.0/6.0.1/6.0.2
The database format is changed from time to time. When the format is changed, databases must be upgraded to the new format before they can be used. Upgrading is discussed in the Database Upgrading document. The format in version 6.1 is changed from versions 6.0.2/6.0.1/6.0. Therefore it is necessary to upgrade all databases created by versions prior to 6.1 for them to be used with 6.1. Note that backing data up before using in a new version is always recommended. Once a database has been used in a later release, it cannot be used in an earlier release regardless of whether the database format is the same.
6.1.1 Programmer notes
See the 6.1 Programmer Notes below if you did not update to 6.1 and thus have not already reviewed them.
Java 8 (or later) is required for the Java client. Earlier versions of Java are no longer supported. This was also true in version 6.1.
6.1 Programmer notes
See the 6.0.1 Programmer Notes below (which also apply to release 6.0.2) if you did not update to 6.0.1/6.0.2 and thus have not already reviewed them.
Java 8 (or later) is required for the Java client. Earlier versions of Java are no longer supported.
Release 6.0.2
Version 6.0.2 is a maintenance release which fixes a security hole associated with Prolog and AllegroGraph. The problem is described below, in the entry for bug23877.
Release 6.0.1
Major Changes
Version 6.0.1 is a maintenance release with some v6.0 bug fixes. See below for information on the fixes.
Database internal format unchanged from version 6.0
The database format is changed from time to time. When the format is changed, databases must be upgraded to the new format before they can be used. Upgrading is discussed in the Database Upgrading document. The format in version 6.0.1 is unchanged from version 6.0. (The format in version 6.0.1, like that version 6.0, is changed from the format in versions 5.1, 5.1.1, and 5.1.2.) Therefore it is not necessary to upgrade 6.0 databases for them to be used with 6.0.1. Note that backing data up before using in a new version is always recommended. Once a database has been used in a later release, it cannot be used in an earlier release regardless of whether the database format is the same.
6.0.1 Programmer notes
- The
:use-extended-sparql-verbs-p
and thepermitted-verbs
arguments to run-sparql (in the Lisp API) no longer have effect. run-sparql now always runs as if:use-extended-sparql-verbs-p
is true (so verbs like SELECT, CONSTRUCT, ASK, DESCRIBE and the various UPDATE commands are all always allowed) and as ifpermitted-verbs
is(:ask :construct :describe :select :update)'. The related variable
use-extended-sparql-verbs-p(which provided a default value for
:use-extended-sparql-verbs-p`) has been removed and setting it has no effect.
Release 6.0
Major Changes
AllegroGraph Federation improvements - Improved and optimized communication between the main server and leaf nodes improves overall performance 2x for most users, and some operations by up to 50x. Federation is discussed in AllegroGraph Introduction.
Query Engine Optimizations include:
- Improved SPARQL Processing efficiency
- Improved support for SPARQL endpoints
- Improved support for SPARQL magic properties
- More efficient use of temporary disk space
- Improved handling of very large result sets
- Storage Layer Operations:
- New Style2 Indices which optimize point queries (see Style2Indices)
- Reduced I/O of some data types
- Improved handling when out of disk space conditions exist
Facility for purging deleted triples from indices. See Purging Deleted Triples.
Improved Auditing (see Auditing for information about auditing)
Improved online backup and restore (see Backup and Restore for information about backup and restore)
Improved operations with freetext indices (see Full-text Indices for information about text indices)
Python 3 Client
Updated Sesame (2.7.11) and Jena (2.11.1), both clients that support Java 1.6.
AllegroGraph is now built with new modern/faster Allegro Common Lisp v10.0.
Database internal format changed from 5.1/5.1.1/5.1.2
The database format is changed from time to time. When the format is changed, databases must be upgraded to the new format before they can be used. Upgrading is discussed in the Database Upgrading document. The format in version 6.0 is changed from the format in versions 5.1, 5.1.1, AND 5.1.2 (it was previously changed in version 5.0). Therefore all databases must be upgraded before use in 6.0. Note that backing data up before using in a new version is always recommended. Once a database has been used in a later release, it cannot be used in an earlier release regardless of whether the database format is the same.
Programmer notes
The fasl (compiled Lisp) file which must be loaded into Allegro CL to be a remote or direct client of AllegroGraph 6.1.1 is now named agraph.fasl. Previously it was agraph5.fasl (the major version number is no longer part of the file name). The require form is now
(require :agraph)
.Lisp clients for AllegroGraph 6.0 run in Allegro CL 10.0 but not in earlier versions of Allegro CL. The direct Lisp client can only be run in Allegro CL 10.0. Remote Lisp clients, which communicate with the AllegroGraph server via HTTP and the REST interface will work with earlier versions of Allegro CL using earlier versions of the remote client functionality (such as the remote client agraph5.fasl loaded into Allegro CL 9.0), but there may be a mismatch between the documented functionality of the remote client and what actually is available in the earlier version. See Lisp Quickstart for more information.
User visible changes
These sections list changes in the current release and in some earlier releases. See the Change History for a list of changes in all earlier releases.
AllegroGraph 6.1.1
AllegroGraph Server: General Changes
Rfe14493 - Print progress messages during long restores.
During a database restore by agraph-backup a progress report is periodically printed to stdout, showing the fraction of the data file which has been processed, the recent processing rate, and an estimate of the completion time. See Backup and Restore.
Bug24168 - Wrong triple count after a delete with duplicate suppression
Deleting an uncommited triple could cause AllegroGraph to report an incorrect triple count (possibly negative) if duplicate suppression was active at commit time.
This has been corrected.
Bug24153 - owl:sameAs interferes with owl:transitiveProperty during materialization
The presence of owl:sameAs assertions could lead to AllegroGraph failing to infer all owl:transitivePropery triples during materialization. This has been corrected. (Note that this problem only occurred using the materializer and not the dynamic RDFS++ reasoner).
Bug24147 - Support "null" as a synonym for the default graph
The remove-graph-uri, insert-graph-uri and using-graph-uri parameters of the SPARQL and Prolog HTTP endpoints now allow the default graph to be referred to by using the string "null" as the URI.
This resolves a problem with the Java client in which SPARQL Update queries issued through the Jena API did not work as expected. Specifically, a WHERE clause would fail to match any triples unless a graph was specified explictly in the query.
HTTP Client
No significant changes.
SPARQL
No significant changes.
AGWebView
Bug24062 - AGWebView uses "Repository" and "Store" interchangeably
In WebView, both "repository" and "store" (and also "triple store) were used to describe repositories. Now, "repository" is used in all places. The documentation has been updated to reflect the change,
Bug24173 - TypeError when going back to query view with saved query result in AGWebView
In AGWebView, going back to a recent query view with cached result caused a harmless error to appear on the browser console. This has been corrected.
Changes to the Lisp API
Bug24179 - Unicode issues in the remote Lisp client.
The remote Lisp client in AllegroGraph 6.1 used to fail in an unpredicatable manner if non-ascii characters were present in query results.
This has been corrected.
Prolog
No significant changes.
Documentation
No significant changes.
Python Client
No significant changes.
Java Client
No significant changes.
nD Geospatial
No significant changes.
AllegroGraph 6.1
Server Changes
Rfe14282 TBC 5.1.4 plugin
AllegroGraph plugin for TopBraid Composer has been updated to be compatible with TBC 5.1.4. See TopBraid Composer Plugin for more information.
Rfe14279 - agraph-backup should shut down instances
Previously, agraph-backup would leave instances open and lingering after performing a backup or restore operation. This could result in hangs due to memory exhaustion when running backup-all or restore-all operations across many repositories. The likelihood of hang would depend on a combination of repository size and the value of the InstanceTimeout directive.
Now, agraph-backup will attempt to shut down the instance process of all repositories it operates on, as soon as the operation has completed. agraph-backup is described in the Backup and Restore document.
Rfe14273 - Reduce repeated query log messages
AllegroGraph was repeating some messages unnecessarily when logging query execution. This repetition has been reduced.
Bug24130 - Access to the system initfile should be protected
It was possible for any user to access the contents of the AllegroGraph init file. This has been corrected. Now only users with superuser
privileges will be allowed to view the file.
Bug24128 - Blank nodes in RDF/XML collections
When parsing an RDF/XML file containing a collection with a blank node as one of its elements, AllegroGraph used to generate an invalid triple (using "li" as the predicate, instead of one of 1, 2, _3, ...).
This has been corrected.
Bug24126 - RDF/XML parser incorrectly handles empty elements.
The RDF/XML parser used to incorrectly handle empty literals encoded as property elements with empty bodies. The parser would generate a blank node instead of an empty literal.
This has been corrected.
Bug24079 - agload with '--error-strategy ignore' and unrecognized file types
agload will now print a warning before ignoring a file of an unrecognized type regardless of the value of the --error-strategy
argument. agload is described in the document Data Loading. Example:
agload --error-strategy ignore repo wrong-file
Cannot guess the format of wrong-file. Use --input to specify it.
Load finished 0 sources in 00:00:01 (1.00 seconds). No triples added.
Terminating agload processes, please wait...
Compare with previous behavior:
agload --error-strategy ignore repo wrong-file
Load finished 0 sources in 00:00:01 (1.00 seconds). No triples added.
Terminating agload processes, please wait...
Bug24066 - Sessions did not close their databases after idle timeout expires
When a session expired after a given timeout, it would not close its database until another session was started. This has been corrected.
Bug23964 - Incorrect escaping of IRIs in Turtle output
AllegroGraph used to incorrectly escape some characters when using the Turtle format. Furthermore, spaces and a few other characters that are not legal in IRIs were not escaped at all. Other characters, such as double quotes, were escaped using an invalid syntax (\" instead of \u0022).
Qualified names were affected by a similar problem.
This has been corrected - all characters are now properly escaped in both IRIs and qualified names.
Bug23960 - gz file import is broken
Importing .gz or .bz2 files using single-threaded import used to cause an error as the file was not correctly uncompressed.
This has been corrected.
Bug23828 - CSRF vulnerability in file upload
The import dialog in AGWebView was not adequately protected against Cross-Site Request Forgery (CSRF) attacks. When a logged-in user visited a malicious web site, an attacker could import arbitrary triples into any store the user can access.
This has been corrected - a CSRF attempt will now result in a password prompt.
Bug23820: Prevent repository access when a restore is in progress
Previously, an attempt to access a repository while it was in the process of being restored could result in random errors and problems, including being unable to close a repository. This change improves the way in which AllegroGraph notes that a repository is being restored, and improves the check for restore-mode so that these issues are prevented.
Bug23705 - A triple-store must be open to define SPIN magic properties
Changes in AllegroGraph 6.0 required that a triple-store be open before any SPIN magic properties could be defined. This has been corrected.
Bug23339 - Canonical escaping in N-Triples
AllegroGraph used to produce invalid escape sequences in URIs when printing triples in the N-Triples format. Some reserved characters, such as double quotes, were escaped with a backslash. Others were not escaped at all.
This has been corrected. All reserved characters are now properly escaped using the \u notation.
In addition, escaping of strings in N-Triples has been modified to make the output match the canonical form described in the standard. The most notable change is that non-ascii characters are no longer escaped.
Bug23181 - Consistency bug when backing up deleted bitmap
If a triple was deleted while backup was in progress, that triple would also be marked as deleted in the restored store. This has been fixed, backup now represents a consistent state of the store at the time it was started.
Bug22115: Fix configure-agraph handling of passwords.
configure-agraph could crash when entering passwords that contain certain non-alphanumeric characters in them. This bug has now been fixed.
Bug21655 - serialize-rdf/xml can emit illegal xml characters
In XML, control characters (e.g. NUL, BEL, STX, ...) cannot be represented in any form. The RDF/XML serializer (with the Lisp function serialize-rdf/xml, used by agexport when passed --output rdfxml
) used to silently output such characters, producing files that could not be parsed.
This has been corrected - if the serialized data contains any invalid characters an error will be reported, as in the following example:
bash-4.2$ agexport -o rdfxml store output.rdf
open the triple-store store on port 10035 and export to ...
Warming up the store
Error Unable to escape character U+0008 (Backspace). occurred during processing
logging error to /.../agexport.log
Bug20220 - Fix bug when validating the --loaders argument to agload
The --loaders
argument to agload accepts as a value a positive integer between 1 and 32. On machines with a large number of cores, agload would default to a number of loaders greater than 32 and then error due to the value being too large. This validation bug is now fixed.
HTTP Client
Rfe14445 - Add REST API for [catalogs/CATNAME]/respositories/REPONAME/exists
AllegroGraph's REST API now includes
[catalogs/CATNAME]/respositories/REPONAME/exists
which can be used to determine whether or not the named repository exists. It will return a 404 code if the repository does not exist and a 200 response with the body true
if it does.
Bug23942 - Handle HTTPS scheme for SPARQL UPDATE LOAD command
The SPARQL UPDATE LOAD command would fail when using the HTTPS URL scheme. This has been corrected.
Bug23817 - Running a query that used MINUS repeatedly via REST could error
Under certain circumstances, if a SPARQL query that used MINUS was evaluated more than once using the HTTP REST API, AllegroGraph could signal an error. This has been corrected.
SPARQL
Rfe14278 - Improve SPARQL SERVICE efficiency for AllegroGraph endpoints
AllegroGraph now uses a more efficient binary data format when communicating with AllegroGraph-based SPARQL endpoints. This can lead to large performance improvements for SPARQL SERVICE calls.
Rfe14257 - DISTINCT|REDUCED mode should be passed on to SERVICE calls
When the main query uses DISTINCT or REDUCED, any use of SPARQL federation will pass on the modifier to endpoints. This can greatly reduce overall IO.
Rfe14254 - SERVICE should remove duplicates from any VALUES it passes along
If the main query is using the DISTINCT or REDUCED modifier, then the SERVICE requests should remove duplicate rows from the list of VALUES that is passed to the endpoint. This can make the query much more efficient.
Rfe14086 - New SPARQL functions for performing haversine calculations.
These SPARQL functions accept various combinations of latitude/longitude coordinates and nD encoded literals. They compute distances on the Earth's surface.
- haversineLatLonLatLon
- haversineLatLonLoc
- haversineLocLoc
The individual names indicate the required argument types: a Lat
or Lon
must be a number interpreted as degrees. A Loc
must be an nD literal that encodes a latitude and a longitude. Its nD encoding must be registered in the open database, but is not needed in any of the function calls themselves.
Each of these functions accepts an optional additional argument specifying the units of the computed result. It may be :km (default) or :miles expressed as a resource in the keyword namespace, i.e., <http://franz.com/ns/keyword#km> or <http://franz.com/ns/keyword#miles>.
See the SPARQL functions list in the SPARQL Magic Properties document for a list of SPARQL function with links to further documentation.
Rfe11390 - Modify SPARQL 1.1 lexer/parser to match changes to standard
The SPARQL parser used to fail when the input contained any:
- Qualified names containing backslash escapes in the local part, such as
ns:something\#\.
- Qualified names containing percent escapes in the local part, such as
ns:something%23%2E
- '.' not followed by whitespace, for example:
?s ?p ?o.filter(?o > 42)
- Some expressions containing longer products, such as:
select ?x {bind (1+1*1*1 as ?x)}
All mentioned cases are now parsed correctly, in accordance with the SPARQL grammar.
Bug24161 - Correct possible segmentation faults during SPARQL DELETE operations
Under some circumstances, a SPARQL DELETE command could cause a segmentation fault. This has been corrected.
Bug24103 - Correct problem in nD magic property SPARQL queries
It was possible to get an error when executing a query that combined nD magic properties and other patterns. This has been corrected.
Bug24030 - An empty IN filter is ignored if there are any other IN filters
If a SPARQL query contained two or more IN filters that were associated with the same triple pattern and one of the IN filters was empty, then both IN filters were ignored. This has been corrected.
Bug24026 - Fix query failure when using DISTINCT, SERVICE and magic predicates
It was possible for a query to fail during planning if it used multiple SERVICE clauses, the service clauses used magic predicates, and the query asked for DISTINCT results. This has been corrected.
Bug24020 - Property path queries in saved plans with Chunk-at-a-Time engine can lose solutions
It was possible for some solutions to be lost on subsequent runs of a saved query plan using the Chunk-at-a-Time execution engine if the query used SPARQL OneOrMorePath or ZeroOrMorePath property path expressions. This bug sometimes appeared when running queries in AGWebView because it directs AllegroGraph to use saved plans. This has been corrected.
Bug23988 - Fix query failure in federations of reasoning and non-reasoning stores
Some queries could fail with an error in a federated triple-store composed of a mix of reasoning and non-reasoning leaf stores. This has been corrected.
Bug23949 - Filtering on multiple language tags could fail
The FILTERing machinery in AllegroGraph's SPARQL engine could fail to correctly process collections of language tag checks. For example, a query with a filter like:
FILTER( lang(?x) = 'fr' || lang(?x) = 'en' )
could fail. This has been corrected.
Bug23897 - Query warnings are incorrectly cached
Query warnings saved in SPARQL plans were not being updated to take account of changes in the underlying store.
Bug23893 - Federated-triple-stores and statistics caching could lead to poor plans
The caching of store statistics could lead to incorrect plans when querying a federated-triple-store. This has been corrected.
Bug23889 - Correct breakage in solR magic property queries
The SPARQL magic properties for solR queries were broken in AllegroGraph 6.0. This has been corrected.
Bug23884 - Constant pattern only CONSTRUCT could fail when executed via a saved plan
If a CONSTRUCT query template contained only constant patterns (i.e., no variables), and there was a limit on the query, and the query was being executed via a saved plan, then only the first execution would return results and subsequent executions would return nothing. This has been corrected.
Bug23882 - Algebraic query combines some BGPs too aggressively
The query planner was sometimes combining BGPs and inadvertently producing cross-products which could lead to slower query performance. This has been corrected.
Bug23881 - FILTER clause could be lost in complex SPARQL queries
It was possible for a FILTER clause to be lost during query planning. This has been corrected.
Bug23873 - Neither limit nor planner should require eval permission
Users without 'eval' permissions were unable to choose a planner or limit for a query. This has been corrected.
Bug23870 - Restriction reasoning could cause error during SPARQL query
Depending on the way it was invoked, a SPAQRL query could signal a error when restriction reasoning was used. This has been corrected.
Bug23841 - Do not allow triples in query results to be deleted
It was possible to remove triples from the database by clicking the X icon next to CONSTRUCT or DESCRIBE query results. This possibility has been disabled. CONSTRUCT and DESCRIBE queries do not return enough information to uniquely identify a triple in the triple-store. Offering to delete them is error prone and ambiguous. To delete triples, either use a SPARQL DELETE statement or the node view (click any part of a triple in the results).
Bug23755 - Problem with alternating property path in sub-queries
A sub-query that used a property path pattern with alternation could incorrectly bind the predicate of matched triples to output variables. An example of the problem would have been:
select ?s ?o {
{ select ?s ?o {
?s :hasChild | :hasParent ?o .
} }
}
This query would bind the predicate of matched triples to ?o
. This has been corrected.
AGWebView
Rfe14371 - Allow the number of loaders to be selected in AGWebView
It is now possible to specify the number of loaders when invoking agload through AGWebView.
Rfe13428 - Display query information for CONSTRUCT, DESCRIBE and ASK queries
The query information tab is now displayed alongside results of CONSTRUCT, DESCRIBE and ASK queries.
Bug24047 - WebView: download duplicates ignores mode
The Export duplicate statement command in Store Control ignored the choice of SPO/SPOG. This has been corrected.
Bug23948: Fixed paged behavior after using the browser's back button
Previously, the Download
and Load more
buttons would function incorrectly if used after clicking the browser's back button. This has been corrected.
Bug23888 - Upload progress indicator not showing
AGWebView will now display progress information when uploading a file. This was previously not visible due to a bug. Progress is reported as a text line similar to this:
Uploading file triples.nt(1475 Kb uploaded)
Bug23887 - Automatic scrolling in the AGWebView view server log pane broken
The server log in AGWebView would not auto-scroll when new log data appeared. This has been corrected.
Bug23857 - Load more does not work in Free Text search
Loading the next page of Free Text search results did not work. This has been corrected.
Bug23856 - Repeated text search breaks navigation
Page navigation would sometimes break when a user entered the same query twice in the Free Text search field. This has been corrected.
Bug23840 - Wrong even/odd row coloring when odd limit chosen
Row coloring could appear incorrect when using an odd limit and paging in the query view. This has been corrected.
Bug23839 - Planner selector grayed-out after language detection
It was possible to disable the planner selector in the query view if language autodetection was used. This has been corrected.
Bug23827 - Process list in WebView crashes on Firefox
The process and job list views of AllegroGraph WebView did not display any processes or jobs on Firefox. This has been corrected.
Bug23811 - AGWebView import fails for RDF/XML
Multi-core file import in AGWebView would fail if the chosen format was RDF/XML. This has been corrected.
Bug23810 - Importing via file upload no longer works in AGWebView
The multi-core file import feature in AGWebView was not working unless the file type was set directly. This has been corrected. In addition, AllegroGraph now recognizes application/n-triples and application/n-quads as media-types for the import of N-Triples and N-Quads (respectively).
Bug23800 - Query progress spinner only appears on every other query in Agwebview
The "Loading..." indicator was not displaying the first time that a new SPARQL query was executed via AGWebView's query editor. Now the loading indicator is shown every time.
Bug23774 - CONSTRUCT queries not displaying results in AGWebView
Results from CONSTRUCT queries were not being displayed in Safari under OS X. This has been corrected.
Bug23752 - Agwebview Lisp editor fails when digits are at the end of a line
The Lisp and Prolog script editors would become unresponsive if the last token on a line was a number. The JavaScript console showed the following error:
TypeError: undefined is not an object (evaluating 'stream.peek().toUpperCase')
This has been fixed.
Bug23141 - AGWebView's CONSTRUCT doesn't show the MORE button
Previously, if the number of results of a CONSTRUCT query exceeded the limit set by the user, there was no way to show more results. Now, there is a MORE button at the bottom of the results which functions similarly to the one used for SELECT queries.
Bug22314 - Federated-triples-stores, encoded IDs and AGWebview don't mix
Attempting to use AGWebView to query a federated triple-store whose leaf nodes used encoded IDs led to an error. This has been corrected. Note: Correct behavior of a federation of stores that use encoded IDs assumes that each leaf node has the same definitions for encoded ID prefixes.
Changes to the Lisp API
Rfe11567 - Support store specifications in the Lisp client
In addition to using the catalog
keyword argument, AllegroGraph now accepts store names in the form CATALOG-NAME/STORE-NAME. E.g.,
(open-triple-store "general/test-data")
would open the store test-data
in the catalog general
.
You can also supply a triple-store specification in calls to open-triple-store. This will build a store instance from the specification, bind it to *db*
and return it. In this case, the store instance will be given a name like store12341
.
Finally, you can query store specifications directly using any of the HTTP clients by using a URL encoded version of the specification in place of a simple store name. E.g.,
curl -X GET -v "http://localhost:11040/repositories/%3Ca%3E%2B%3Cb%3E?query=select%20*%20%7B%20%3Fs%20%3Fp%20%3Fo%20%7D%20limit%205"
would send the query
select * { ?s ?p ?o } limit 5
to the federation of triples stores a
and b
(as specified by <a>+<b>
).
Note that in this case, AllegroGraph will not start a new session so Prolog functors or other things defined in the servers initialization file will not necessarily be present.
Bug24105 - Deprecate serialize-rdf-n3 in favor of serialize-turtle
AllegroGraph can serialize data in turtle format but not in N3 so it is better to use the correct name. The now deprecated function serialize-n3-rdf will be removed in a future release and should no longer be used. serialize-turtle should be used instead.
Bug24006 - pcache Lisp module conflicts with AllegroGraph
A package conflict made it impossible to load AllegroCache and pcache in the same Lisp execution as AllegroGraph (without tiresome package manipulation). The problem has been fixed in this release.
Bug23846 - warmup-triple-store does not work in remote-lisp-client
Calling warmup-triple-store on a remote store used to have no effect. The call did not fail, but no operation was performed. The remote client will now correctly pass the request to the server it is connected to, preparing it for subsequent operations.
Prolog
Bug23877 - Prolog select exposes a security hole
There was a remote code execution vulnerability in Prolog query handling code where users without eval permissions could execute arbitrary code on the server. Executing Prolog queries now requires eval permissions. (This bug was fixed in various maintenance releases including version 6.0.2. We repeat it here because of its importance.)
Documentation
Bug23874 - Documentation search in local AllegroGraph docs doesn't work
The documentation search field in the upper left corner of AllegroGraph documentation pages now uses Google to search for the given phrase within:
franz.com/agraph/support/documentation/<version>/
where <version> is vX.Y[.Z] (v6.1 in the case of the current release). This means that even if you have a local copy of the documentation the search is done in the web copy on the Franz Inc. website.
Python Client
RepositoryConnection.createCoordinate arguments renamed
The lat
and long
arguments of RepositoryConnection.createCoordinate
have been renamed latitude
and longitude
.
Bug23901 - RepositoryResult.asList() always returns None
The asList
method in the RepositoryResult
class was buggy and always returned None. It now correctly returns all statements from the result object.
Java Client
No significant changes.
Geospatial
Rfe12345 - Unnecessary geospatial functions removed
The functions geospatial-subtype-index-in-this-image and geospatial-subtype-index-in-db are neither useful nor necessary in the geospatial API. They have been unexported and removed from the documentation.
Bug23933 - Geospatial subtypes could be mistranslated on remote stores
It was possible for encoded geospatial data to be mistranslated when connecting to AllegroGraph via a remote-triple-store in the Lisp environment. This has been corrected.
Bug23848 - nd:inCircle :units incorrectly defaults to :miles, not :km
The :units
argument to get-triples-nd-within-radius in Lisp and the similarly named functor in Prolog, and nd:inCircle
in SPARQL, incorrectly defaulted to :miles
instead of :km
. This has been fixed so the behavior now agrees with the documentation. Since a kilometer is less than a mile, the change may cause previous queries that did not specify :units
now to return fewer results. The extra results before the change were bogus.
Bug23767 - automate-nd-datatype-mappings could fail under parallel load
Spurious metadata conflict errors could be signaled if a store using automatic nD-datatype mappings was being accessed from multiple clients (for example, via agload). This has been corrected.
Bug23584 - nD query support for ISO6709 time
In an nD query, the min and max limits for a :time type ordinate may be expressed as a real number, as a dateTime UPI, or as a string literal in ISO6709 syntax (either as an xsd:dateTime typed string or an untyped string). These are supported in both SPARQL and Lisp/Prolog queries. Previously ISO6709 was not accepted in all contexts.
AllegroGraph 6.0.2
Prolog
Bug23877 - Prolog select exposes a security hole
There was a remote code execution vulnerability in Prolog query handling code where users without eval permissions could execute arbitrary code on the server. Executing Prolog queries now requires eval permission. User permissions are discussed in the section Managing Users in the WebView document.
AllegroGraph 6.0.1
Server Changes
Bug23796: Disk-chunks-search.*.tmp files leaked when closing database
Starting in v6.0, files matching the pattern disk-chunks-search.*.tmp would remain open after closing a database. If a database was opened and closed frequently, this would eventually exhaust all available file descriptors in the process. This has been fixed.
Bug23715 and Bug23748 - FTI bugs
Bug23715: Creating a text index in which a word occurred in more than two million triples could sometimes crash the server.
This resulted in a log message similar to the following:
Process 'db-name FTI Merger' raised: opening #<...> resulted
in error (code 22): Invalid argument.
Bug23748: Indexing a very long document might cause a crash.
An error would sometimes occur when trying to add a triple with very long text to a text index. The error looked like this:
Error: opening #<mapped-file-simple-stream ...>
resulted in error (code 22): Invalid argument.
Both bugs have been corrected.
Bug23010 - Rolling back a freshly staged text index leaves a file around
When a text index was deleted or its creation rolled back, a relatively large (~5MB) file used to be left behind and only deleted at the next checkpoint. This has been changed. The file is now deleted immediately as long as there are no live sessions that could still "see" the index before deletion.
HTTP Client
Bug23589 - Sending a SPARQL Update command to the Prolog REST API generates a backtrace
Sending a Prolog query that is not a valid list (e.g. because it is actually a SPARQL query) to the Prolog REST API caused the system to produce a backtrace and return error 500 with the following message:
Attempt to take the cdr of db.agraph.query.prolog:select
which is not listp.
This has been corrected: the server now answers with code 400 and the following message:
MALFORMED QUERY: Prolog queries must be lists.
SPARQL
Bug23789, Bug23788 - issues with nD geospatial SPARQL queries
SPARQL n-Dimensional geospatial magic properties were signaling an error when used inside of a GRAPH clause. They were also signaling an error when the magic property was used with no variable bindings (i.e., when all of the arguments in the pattern were fixed). Both of these issues have been corrected. (Repeated under nD Geospatial below.)
AGWebView
Bug22920 - Agwebview result list has dynamic height
The window with SPARQL query results in AGWebView used to have a height of 300 pixels. The height is now dynamically adjusted to fill the available viewport.
Bug22604 - Improve handling of invalid user files
Previously, an invalid user file (e.g., one that was zero length or corrupted) would cause AGWebView to become unusable. This has been corrected. Now, invalid files will be ignored. Note that this means they will not be displayed in AGWebView's user list.
Changes to the Lisp API
Bug21770 - Some old SPARQL functionality now deprecated
Using either of the extendedp
and permitted-verbs
arguments to run-sparql will now signal a warning. These parameters will be dropped completely in a future release of AllegroGraph. This change also removes the special variable sparql:*use-extended-sparql-verbs-p*. See 6.0.1 Programmer Notes for more details.
Prolog
Bug23745 - Improve future-part handling in Prolog select queries
It was possible for a Prolog select query to fail to find results if future-parts were used inside lisp
expressions in the query. This has been corrected.
Bug23726 - Prolog select queries that involved type mapping could fail
Under some circumstances, a Prolog select query that used constants requiring type mapping (e.g., '1234'^^xsd:integer) could fail to return results. This has been corrected.
Documentation
No significant changes.
Python Client
Bug22303 - python-client: missing not-equal method for URIs
Trying to test if two URI objects in the Python API are different used to be impossible (i.e. code such as uri1 != uri2
raised an exception). The missing comparison method has been implemented. In addition, it is now possible to order URIs, literals and BNodes. Comparing values of two different types yields an arbitrary but consistent result under Python 2 and causes an exception under Python 3. This follows conventions established by Python's built-in types.
Java Client
No significant changes.
nD Geospatial
Bug23789, Bug23788 - issues with nD geospatial SPARQL queries
SPARQL n-Dimensional geospatial magic properties were signaling an error when used inside of a GRAPH clause. They were also signaling an error when the magic property was used with no variable bindings (i.e., when all of the arguments in the pattern were fixed). Both of these issues have been corrected. (Repeated under SPARQL above.)
AllegroGraph 6.0
AllegroGraph Server: General Changes
Use agraph for the Lisp client fasl name
AllegroGraph 6.0 now uses agraph.fasl instead of agraph[major-version-number].fasl for the name of the Lisp fasl file. Both the direct Lisp client fasl file and the various remote Lisp client fasl files (on the various platforms suitable for use as remote clients) are named agraph.fasl. Users need to manage the locations of the various individual agraph.fasl files to be sure the correct one is loaded when used.
Rfe13969 - Add HDFS input support to agload
agload now supports loading files from HDFS sources. For this to work, there must be a working "hdfs" program in your PATH and HDFS input files must be specified on the agload command line using the hdfs:// prefix. For example:
agload repo hdfs:///user/bruce/lubm-50.nt.gz
agload is described in the Data Loading document. (This change was also in release 5.1.1, as noted below, but we repeat it here as some users may not have installed version 5.1.1.)
Rfe13826 - Improve estimates on federated remote stores
Cardinality estimation of query result sets on remote stores has been greatly improved which leads to more efficient query plans on federated remote stores.
Rfe13807 - Added deleted triple purge operation
When triples are deleted they are not immediately removed from indices. They must remain in all indices until all transactions which may potentially need to see those triples (such as transactions that started before the triples were deleted) have completed (committed or rolled back). A triple that cannot possibly be accessed by any live transaction is referred to as an inaccessible triple. The existence of inaccessible triples in indices wastes space and impacts query performance. Therefore AllegroGraph now provides a facility to purge these triples from indices. See Purging Deleted Triples.
Rfe13806 - Configuration option to control index style
AllegroGraph v6.0 adds a new style of index. The old style is called style 1 and the new style is called style 2. Style 2 indices are faster than style 1 when performing point queries where all of s/p/o or s/p/o/g are fixed (where the result is typically a single triple), but these indices take longer to construct and to optimize. Style 1 indices are better for queries which end up scanning many triples and typically produce results with many triples.
The Style2Indices catalog configuration directive can be used to control which index flavors should use style 2. The directive value can be a comma- or space-separated list of index flavor names, or the value none. The default value is none. Configuration options are discussed in Server Configuration and Control.
Examples
Style2Indices none
Style2Indices posgi
Style2Indices spogi, posgi
The Lisp API function add-index and the REST interface command PUT /repositories/[name]/indices/[type]
allow for specifying the index style as well.
Rfe13641 - Change default for temporaryFileDiskSpace
AllegroGraph now defaults to using no more than 25% of the available filesystem space for temporary query files (at the time the query begins). This setting can be changed using the temporaryFilesystemSpaceLimit
query option either in the AllegroGraph configuration file or via a PREFIX option to a SPARQL query. If a query attempts to use more space than this limit allows, it will be canceled. temporaryFilesystemSpaceLimit
is a new name for the temporaryFileDiskSpace
option. The old name has been deprecated. See agcontrol.
Rfe12000 - Minor improvements in how typed string literals are stored
AllegroGraph now stores typed string literals like "hello"^^xsd:string more efficiently.
Rfe11116 - Support SHA384 digest function in SPARQL
In addition to MD5, SHA1, SHA256, and SHA512, AllegroGraph's SPARQL engine now supports SHA384.
Rfe11078 - Improve agload verbosity behavior
Previously, passing -v
or --verbose
to agload (see Data Loading) could actually decrease its level of verbosity. This has been fixed. The new verbosity levels are:
0 (-v not supplied): Only report periodic load rate information.
1 (-v) : As above, plus print the job option summary
before starting the operation.
2 (-v -v) : As above, plus print the name of every file
that has been processed.
(This change was also in release 5.1.1, as noted below, but we repeat it here as some users may not have installed version 5.1.1.)
Bug23660 - AuditEventsToEmail parser too strict
Previously the events list in an AuditEventsToEmail configuration directive had to be comma-separated with no intervening whitespace. This has been relaxed.
Bug23654 - agraph-backup restore fails if StringTableSize specified
An error would occur when trying to restore a database if its StringTableSize did not match the one in the catalog into which it was being restored. The error was:
Fetching user information failed: String table configuration mismatch:
Configured number of slots (X) does not match recovered number
of slots (Y).
This has been corrected. agraph-backup is described in Backup and Restore.
Bug23604 - Improve bidirectional search speed when no paths are found
AllegroGraph's bidirectional search algorithm was expanding more nodes than necessary when no paths between the start and end were found. This has been corrected.
Bug23598 - Error when accessing a suspended account
Previously, if an account was suspended but AccountUnsuspendTimeout wasn't configured, the following error would be signaled when accessing the suspended account:
nil is not of the expected type number
This has been corrected.
Bug23585 - Audit dialog not showing any results
It was possible for the Audit Log query in AGWebView to fail to display results. This has been corrected.
Bug23526 - Fixed size deleted triple bitmap
Previously an error would occur if a triple with id greater than 34,359,738,367 was deleted. This has been fixed.
Bug23512 - Signal an error when attempting a freetext query and no freetext indices exist
Previously, AllegroGraph would simply return no results if a freetext query was executed and there were no freetext indices defined. Now, AllegroGraph will signal an error. This also modifies the behavior of list-freetext-indices for federated triple-stores. Previously, a federated store would return the intersection of its freetext indices. Now, it returns the union. This makes it easier to use the freetext indexing facility with them.
Bug23442 - Full filesystems can lead to truncated user files
In some cases a full filesystem could cause AllegroGraph user preference files to be truncated. This has been corrected.
Bug23441 - Retry tlog creation if filesystem is full
Previously, if the filesystem ran out of space while allocating a new tranasction log file during a checkpoint or commit, the instance would crash. Now the affected process will block, log a message to agraph.log, and periodically retry the operation until it succeeds. To avoid confusing hangs, failure to preallocate transaction log files on database creation will still result in an immediate error.
Bug23370 - N-Triple, N-Quad and Turtle parsers should handle UTF8 files with a BOM
AllegroGraph's parsers did not correctly parse UTF8 files that started with a byte order marker (BOM). This has been corrected.
Bug23270 - flush-in-memory-chunks deadlock
Previously, when performing duplicate triple deletion, it was possible for the AllegroGraph instance to become deadlocked and hang. This has been fixed.
Bug23361 - N-Triples parser could incorrectly import non 7-bit ASCII data
Unless a UTF-8 encoding was explicitly specified, the AllegroGraph N-Triples parser could fail to handle Unicode N-Triples data correctly. This has been corrected.
Bug23238 - Fix 'UPI has not been added to string dictionary' bug
Previously, certain queries involving large intermediate result sets could fail with a UPI has not been added to string dictionary
error. This bug has been fixed.
Bug23233 - Fix bug in agraph-backup progress output.
Some garbled output showing a "Printer error" could be produced when running a backup operation using agraph-backup. This has been corrected.
Bug23231 - Prevent spurious output from agraph-replicate
Previously, agraph-replicate would emit spurious output when exiting. This output has been suppressed.
Bug23229 - agraph-replicate --stop would not stop replication.
Previously, agraph-replicate --stop would not actually cause replication to stop. This has been corrected. See Replication for information on agraph-replicate.
Bug22490 - Fix potential deadlock when creating/modifying freetext indexes.
With proper timing, it was possible hang the server when adding or updating a freetext index. This has been corrected.
Bug22489 - agraph-backup fails due to missing tlog file
Under certain circumstances agraph-backup could fail to back up a database due to not finding a transaction log file. This error has been corrected.
Bug22165 - commit-time duplicate suppression does not operate under lock
Previously, commit-time duplicate triple suppression did not properly consider triples that were added in a concurrent transaction, possibly resulting in duplicate triples being added. This has been corrected.
Bug19831 - xsd:booleans are now stored as encoded UPIs
Previously, xsd:booleans were stored as strings. They are now stored as encoded UPIs. This will make some queries slightly more efficient.
HTTP Client
Rfe13941 - Allow specification of chunk style when adding an index
The PUT command
PUT /repositories/[name]/indices/[type]
now accepts a style query parameter which may be 0, 1, or 2. See AllegroGraph Indices for a discussion of index styles.
Rfe13750 - Log errors during writing the HTTP response
While using the REST API, which most clients do, serving a request usually has a computation phase that's followed by an output phase. If an error happens in the computation phase, the appropriate HTTP status code is returned. The tricky case is with chunked encoding (for example, streaming query results back) when some results were already written to the socket. Then upon encountering an error, it is not possible to change the HTTP status code and return a meaningful error message. For this reason, errors should normally be detected during the computation phase.
With this change, any errors (except those caused by the client end of the socket being closed) encountered during the output phase are logged to make debugging easier.
Rfe13711 - Add query PREFIX option to cancel queries when there are warnings
AllegroGraph has a new query PREFIX option: cancelQueryOnWarnings
. If true, then a SPARQL query will cancel itself if it encounters any warnings during query planning or execution. Typical warnings include:
- unknown or out of scope variables in FILTER expressions
SELECT * { ?s ex:Predicate ?o . FILTER( ?missing > 2 ) }
- constants that are not in the underlying store:
SELECT * { ?s ex:Predicate ex:thisResourceIsNotInTheStore . }
- unknown variables in an ORDER BY clause:
SELECT * { ?s ?p ?o } ORDER BY ?age
- cross products:
SELECT * { ?a ?b ?c . ?d ?e ?f }
If the option is set to no
, then warnings will be logged but query execution will continue.
Bug23546 - Problems adding very long objects with JSON upload
An error could occur if triples with very long strings were imported using the REST API and the application/json content-type. This has been corrected. Other content-types were not affected by this bug.
Bug23324 - Some text index properties could not be viewed
If an AllegroGraph freetext index specified that it should only index literals with one or more particular datatypes, then that index would signal an error when its properties were read using the REST API. This has been corrected.
SPARQL
Rfe14076 - Optimize RDF serialization of CONSTRUCT and DESCRIBE queries
RDF serialization formats like RDF/XML or Turtle were spending more time than necessary trying to find namespace abbreviations. This has been improved.
Rfe13998 - agquery can now interact with SPARQL endpoints
AllegroGraph's command-line agquery tool can now send queries to SPARQL endpoints and retrieve the results. agquery is described in the Querying document.
Rfe13975 - Streamline internal AllegroGraph merge operations
Query operations that require merging of multiple result streams have been optimized. Examples include the inference of types and properties in the dynamic reasoner and computing distinct SPARQL results.
Rfe13519 - General low-level SPARQL query optimizations
Modified the low-level cursor operations in the SPARQL query engine so that they perform between 3 and 5% better for most queries.
Rfe13387 - Improve performance of SPARQL replace function
The SPARQL replace function is now significantly faster when called with a constant regular expression.
Rfe13327: Improve parsing of diskChunkRowCount and other query parameters
It is now possible to specify query parameters like diskChunkRowCount
and other query parameters using sizes like 100m
or 1g
rather than needing to write out the numeric value as an integer.
Rfe12143 - Improve analysis of constant BIND and VALUES forms
AllegroGraph now does a better job of analyzing and using constant BIND values and single variable VALUES forms. When possible, these forms are pulled into the triple-patterns in the BGPs rather than being evaluated at run-time. For example, both of these queries will now run much more efficiently:
select * {
bind( 'test' as ?test )
?s :predicate ?test .
}
and
select * {
values ?test { 'test' 'two' 'three' }
?s :predicate ?test .
}
Rfe12131 - Remove support for the old SPARQL 1.0 query engine
AllegroGraph no longer supports the older and long deprecated SPARQL 1.0 query engine. The newer 1.1 engine is to be preferred in all cases. In particular, this means that you can no longer force the use of the 1.0 engine via the queryEngine PREFIX.
Bug23696 - Improve query plan for some property path queries in sub-queries
AllegroGraph could fail to optimize a simple alternation property path query when it appeared inside of a sub-query. This has been corrected.
Bug23653 - Remove spurious cross-product warning for (optional identity A)
AllegroGraph was signaling a cross-product warning for SPARQL queries that contained an OPTIONAL with no left hand side. For example:
select * {
optional { ?s a :Animal }
}
has a query algebra like:
(left-join identity BGP)
Though the warning is technically correct, the construct above is harmless and the warning is unnecessary.
Bug23632 - SPARQL parser has trouble with escaped backslashes at the end of a literal
The SPARQL parser would fail to correctly interpret literals with an escaped backslash as their final character, e.g., 'abc\'. This has been corrected.
Bug23616 - COUNT aggregation counts unbound values from unknown variables
If a COUNT aggregration expression included variables that were not projected from the underlying query, then AllegroGraph was treating them as if they were bound and returning a count. This has been corrected.
Bug23582 - SPARQL could lose results when a sub-query used limit and distinct
It was possible for solutions to be overwritten and lost when a sub-query used both LIMIT and DISTINCT. This has been corrected.
Bug23581 - Optional mis-analysis in sub-queries could drop solutions
It was possible for AllegroGraph to mis-analyze whether a variable in a SPARQL sub-query was optional or not and therefore to lose solutions. This has been corrected.
Bug23524 - Property path queries could lose results when there is circularity
Under some circumstances, a SPARQL query that used property paths could lose results that arose from circular paths through the triple-store. This has been corrected.
Bug23519 - SPARQL sub-query and GRAPH clauses could interact badly
It was possible for a query that used sub-query and GRAPH clauses to lose solutions. This has been corrected.
Bug23489 - Queries that started with a SERVICE clause could lose bindings
If a SPARQL query started with a SERVICE clause and contained a cross-product then it was possible for some bindings to be lost. This has been corrected.
Bug23452 - Some temporal magic properties could fail to produce results
Some of AllegroGraph's temporal magic properties could produce plans that introduced filters that could not succeed. This has been corrected.
Bug23448 - Fix problem with SPARQL t:pointBeforeDatetime and t:pointAfterDatetime
The two SPARQL magic properties t:pointBeforeDatetime
and t:pointAfterDatetime
could fail to find bindings if the dateTime supplied was a constant not present in the triple-store. This has been corrected. SPARQL magic properties are listed here in SPARQL Magic Properties.
Bug23443 - Remote SPARQL queries cannot handle really large results
Returning very large query result sets (i.e., Gigabytes) from remote SPARQL endpoints could lead to resource exhaustion. This has been corrected.
Bug23373 - Improve SPARQL efficiency for small ORDERed or DISTINCT result sets
SPARQL queries with small result sets that use ORDER BY or DISTINCT will now be slightly faster.
Bug23344 - SPIN magic properties don't work if they use other SPARQL functions
A query-time error would be signaled if a SPIN magic property used other SPARQL functions like CONCAT or SUBSTR in its definition. This has been corrected.
Bug23341 - remote-triple-stores handle limit and offset in SPARQL queries incorrectly
If a query specified an OFFSET as part of the query string, then any externally imposed OFFSET (i.e., from the HTTP query parameters) was ignored. This has been corrected. If a query specified a LIMIT as part of the query string, then the smaller of that limit and the externally imposed one would be used instead of just using the external one. This has been corrected. Note that this change means that specifying a limit in a query in AGWebView will have no effect as the limit is controlled via the dropbox selection box.
Bug23329 - Use SPARQL/JSON for SERVICE calls to avoid problems with embedded control characters
AllegroGraph now uses SPARQL/JSON rather than SPARQL/XML to receive results from SPARQL endpoints. This makes it possible to return results that contain control characters like ^Z. The format is also more concise and easier to parse which makes processing the transmissions approximately twice as fast.
Bug23321 - Nested sub-queries and BIND forms can fail to compute correct results
In rare cases, it was possible for a query involving nested SPARQL sub-queries and BIND expressions to fail. This has been corrected.
Bug23311 - Requesting application/nquads from a CONSTRUCT query leads to error
If an application requested application/nquads
from a CONSTRUCT query via the HTTP interface, a string-table lookup error would result. This has been corrected. Although version 1.1 of SPARQL CONSTRUCT can only return triples, it still makes sense to ask for N-Quads. In this case, the N-Quads will simply have the graph place left off.
Bug22674 - DESCRIBE and CONSTRUCT queries on end points could fail
SPARQL CONSTRUCT and DESCRIBE queries against remote SPARQL end points could fail when trying to parse the returned results. This has been corrected.
Bug22672 - Queries where every FROM NAMED graph did not exist could signal an error
If every FROM NAMED graph in the dataset did not exist, then some queries that used the GRAPH clause in their body could signal an error rather than returning results. This has been corrected.
Bug22515 - Increase responsiveness of query canceling during result generation
AllegroGraph did not check for query canceling or timeouts during result post-processing (e.g., while sorting the final result or removing duplicate entries from a DISTINCT result set) or result generation. This has been corrected.
Bug22292 - tripleid magic property should handle fixed triple IDs
The SPARQL magic property for AllegroGraph tripleId-based reification would not function for fixed triple IDs. This has been corrected.
Bug22268 - Sub-queries that used Aggregation and limit could lose solutions
If a sub-query had a limit and used aggregation, then it was possible for some solutions to be lost during processing. This has been corrected.
AGWebView
Bug23690 - Fixed bug breaking the AGWebView View Statements dialog in IE.
A bug in AGWebView that prevented the View Statements dialog from fetching and displaying statements when brought up in Internet Explorer has been fixed. The symptom was a partially loaded page with the spinning "Loading..." icon remaining permanently on the page.
Bug23521 - More... button in AGWebView is broken for Prolog select queries
The button to show additional results in the AGWebView query window was broken for Prolog select
queries. This has been corrected.
Bug23358 - AGWebView doesn't always display Unicode consistently
Under some conditions, AGWebView would display literals and resources containing Unicode using the \u escaping mechanism of the N-Triples syntax rather than just displaying the characters directly. This has been corrected.
Bug23315 - Running backup from within AGWebView does not work
The Backup this Store dialog in AGWebView was broken. This has been corrected.
Changes to the Lisp API
Rfe13941 - Allow specification of chunk style when adding an index
add-index now accepts a style keyword argument which can be 0 or nil (either meaning use the default chunk style for the flavor based on the Style2Indices
configuration parameter), 1, or 2. See AllegroGraph Indices for a discussion of index styles.
Bug23600 - remote-triple-stores CONSTRUCT queries now correctly returns cursors
In the Lisp client, a SPARQL CONSTRUCT query should return a cursor that yields arrays of bindings but the remote-triple-store was instead yielding lists of bindings. This has been corrected.
Bug23597 - remote-triple-store CONSTRUCT queries return nil bindings
Many of the programmatic RDF formats (such as :lists or :arrays) for SPARQL CONSTRUCT queries on remote-triple-stores returned nil
bindings rather than the actual values. This has been corrected. Note that this bug did not effect text based output formats like N-Triples or Turtle.
Bug23510 - remote-triple-stores did not support load-trig
Lisp remote-triple-stores did not support loading the TriG format. This has been corrected.
Bug23509 - Altering restriction-reasoning-enabled-p could lead to an internal error
Altering the value of restriction-reasoning-enabled-p using the setf method after the reasoner had been applied and prepared could lead to an error. This has been corrected.
Bug23404 - It was impossible to create an anonymous remote session
AllegroGraph would signal an error that This session is owned by another user
when trying to create an anonymous remote session in the Lisp client. For example, the following would fail:
(open-triple-store "remote"
:triple-store-class 'remote-triple-store
:server "www.example.com"
:specification "<sp2b-5e4>[rdfs++]"
:port 9002)
This has been corrected.
Bug23320 - The Lisp direct client now ensures that UPIs are interned when calling add-triple
The Lisp direct client was not checking that UPIs were interned which could lead to a UPI-not-in-string-table error when there were bugs in customer code. This has been corrected. The check does add a small cost to programmatic triple insertion. The while-not-validating-that-upis-are-in-string-table
macro can be used to temporarily disable the checks once you are sure that the code is correct.
Bug22844 - The SPARQL datatype function failed to handle nD-geospatial literals
The SPARQL datatype function was unable to handle nD-geospatial literals. This has been corrected.
Bug22793 - Problem with remote-reasoning-triple-stores and SNA
On the Lisp client only, calling Social Networking (SNA) functions on a remote-reasoning-triple-store instance could lead to a stack overflow. This has been corrected.
Bug22791 - get-triple was broken for remote-reasoning-triple-stores
On the Lisp client only, calls to get-triple on a remote-reasoning-triple-store could fail to return results. This has been corrected.
Bug22587 - copy-triples doesn't support remote triple-stores
The copy-triples function did not work on remote-triple-stores. This has been corrected. Note that copy-triples on remote-triple-stores requires that
- the triples are all valid RDF
- no blank nodes are used.
Bug22586 - Improve copy-triples
The copy-triples function was not behaving correctly with respect to the source-db
argument. This has been corrected.
Bug22447 - Fix cursor memory management
Under rare circumstamces, especially in a multi-threaded environment, cursors used in the Lisp client could end up being used in an unsafe way leading to various errors. With the AllegroGraph server, shared backends experiencing high load were at the risk of such failures. This bug has been fixed.
Also, in the Lisp client with a direct connection, any code that involved the creation of cursors (such as queries and calls to get-triples) had to be wrapped in a with-query-environment form. While that's still the recommended approach to take in production, with this change when there is no enclosing with-query-environment, cursors holding critical resources get finalizers which makes it more convenient to experiment at the REPL by reducing the risk of resource exhaustion.
Bug20852 - remote-triple-stores do not support SPARQL update
Lisp remote-triple-stores now support SPARQL update.
Prolog
Rfe13968 - Add :offset to Prolog select
AllegroGraph's Prolog based select query language now supports an :offset option. This can be used to skip the first offset results. For example,
(select (?class)
(:offset 10)
(q ?s !rdf:type ?class))
would skip the first 10 results and return the rest of the bindings for ?class
.
Documentation
No significant changes.
Python Client
Rfe12828 - Support Python 3
AllegroGraph now supports both Python 2 and Python 3. The sources for Python 2 continue to be in the src2 directory whereas those for Python 3 are in the new src3 directory.
Java Client
No significant changes.
nD Geospatial
Rfe13978 - Validate arguments to ndfn:ordinateValue at parse time when possible
AllegroGraph now validates constant arguments to ndfn:ordinateValue at parse time. See the N-dimensional Geospatial Usage Guide and Example document.
AllegroGraph 5.1.2
AllegroGraph Server: General Changes
Bug19296 - AllegroGraph can stop responding because all threads seem busy
Under rare circumstances it was possible for AllegroGraph to stop responding. Such a hang was accompanied by "All threads busy, pause" log messages. This has been corrected.
See Change History for user-visible changes to earlier releases.