v2.1.3 (2014-XX-XX)
-------------------

* fixed datafile debugger

* fixed a bug in arangodump which got the collection name in _from and _to
  attributes of edges wrong (all were "_unknown")

* fixed a bug in arangorestore which did not recognise wrong _from and _to
  attributes of edges

* improved error detection and reporting in arangorestore


v2.1.2 (2014-06-15)
-------------------

* fixed check-version for empty directory

* moved try/catch block to the top of routing chain


v2.1.1 (2014-06-06)
-------------------

* fixed random generation under MacOSX

* fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web 
  does not change to cluster overview

* fixed dfdb: should not start any other V8 threads

* cleanup of version-check, added module org/arangodb/database-version,
  added --check-version option

* fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with 
  "WARNING format string is corrupt" when in non-system DB Dashboard


v2.1.0 (2014-05-29)
-------------------

* implemented upgrade procedure for clusters

* fixed communication issue with agency which prevented reconnect
  after an agent failure

* fixed cluster dashboard in the case that one but not all servers
  in the cluster are down

* fixed a bug with coordinators creating local database objects
  in the wrong order (_system needs to be done successfully first),
  which lead to a coordinator on strike

* improved cluster dashboard


v2.1.0-rc2 (2014-05-25)
-----------------------

* fixed issue #864: Inconsistent behavior of AQL REVERSE(list) function


v2.1.0-rc1 (2014-05-13)
-----------------------

* added server-side periodic task management functions:

  - require("org/arangodb/tasks").register(): registers a periodic task
  - require("org/arangodb/tasks").unregister(): unregisters and removes a 
    periodic task
  - require("org/arangodb/tasks").get(): retrieves a specific tasks or all
    existing tasks

  the previous undocumented function `internal.definePeriodic` is now
  deprecated and will be removed in a future release.

* decrease the size of some seldomly used system collections on creation. 

  This will make these collections use less disk space and mapped memory.

* added AQL date functions

* added AQL FLATTEN() list function

* added index memory statistics to `db.<collection>.figures()` function

  The `figures` function will now return a sub-document `indexes`, which lists
  the number of indexes in the `count` sub-attribute, and the total memory
  usage of the indexes in bytes in the `size` sub-attribute.

* added AQL CURRENT_DATABASE() function

  This function returns the current database's name.

* added AQL CURRENT_USER() function

  This function returns the current user from an AQL query. The current user is the
  username that was specified in the `Authorization` HTTP header of the request. If
  authentication is turned off or the query was executed outside a request context,
  the function will return `null`.

* fixed issue #796: Searching with newline chars broken?

  fixed slightly different handling of backslash escape characters in a few
  AQL functions. Now handling of escape sequences should be consistent, and 
  searching for newline characters should work the same everywhere

* added OpenSSL version check for configure

  It will report all OpenSSL versions < 1.0.1g as being too old.
  `configure` will only complain about an outdated OpenSSL version but not stop.

* require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13)

* less string copying returning JSONified documents from ArangoDB, e.g. via
  HTTP GET `/_api/document/<collection>/<document>`

* issue #798: Lower case http headers from arango
        
  This change allows returning capitalized HTTP headers, e.g.
  `Content-Length` instead of `content-length`.
  The HTTP spec says that headers are case-insensitive, but
  in fact several clients rely on a specific case in response
  headers.
  This change will capitalize HTTP headers if the `X-Arango-Version`
  request header is sent by the client and contains a value of at
  least `20100` (for version 2.1). The default value for the
  compatibility can also be set at server start, using the
  `--server.default-api-compatibility` option.

* simplified usage of `db._createStatement()`

  Previously, the function could not be called with a query string parameter as 
  follows:

      db._createStatement(queryString);

  Calling it as above resulted in an error because the function expected an
  object as its parameter. From now on, it's possible to call the function with 
  just the query string.

* make ArangoDB not send back a `WWW-Authenticate` header to a client in case the
  client sends the `X-Omit-WWW-Authenticate` HTTP header.

  This is done to prevent browsers from showing their built-in HTTP authentication 
  dialog for AJAX requests that require authentication.
  ArangoDB will still return an HTTP 401 (Unauthorized) if the request doesn't
  contain valid credentials, but it will omit the `WWW-Authenticate` header, 
  allowing clients to bypass the browser's authentication dialog.

* added REST API method HTTP GET `/_api/job/job-id` to query the status of an
  async job without potentially fetching it from the list of done jobs

* fixed non-intuitive behaviour in jobs API: previously, querying the status
  of an async job via the API HTTP PUT `/_api/job/job-id` removed a currently 
  executing async job from the list of queryable jobs on the server.
  Now, when querying the result of an async job that is still executing, 
  the job is kept in the list of queryable jobs so its result can be fetched
  by a subsequent request.

* use a new data structure for the edge index of an edge collection. This
  improves the performance for the creation of the edge index and in 
  particular speeds up removal of edges in graphs. Note however that
  this change might change the order in which edges starting at 
  or ending in a vertex are returned. However, this order was never
  guaranteed anyway and it is not sensible to guarantee any particular 
  order.

* provide a size hint to edge and hash indexes when initially filling them
  this will lead to less re-allocations when populating these indexes
    
  this may speed up building indexes when opening an existing collection

* don't requeue identical context methods in V8 threads in case a method is 
  already registered

* removed arangod command line option `--database.remove-on-compacted`

* export the sort attribute for graph traversals to the HTTP interface

* add support for arangodump/arangorestore for clusters


v2.0.8 (XXXX-XX-XX)
-------------------

* fixed too-busy iteration over skiplists

  Even when a skiplist query was restricted by a limit clause, the skiplist
  index was queried without the limit. this led to slower-than-necessary
  execution times.

* fixed timeout overflows on 32 bit systems

  this bug has led to problems when select was called with a high timeout
  value (2000+ seconds) on 32bit systems that don't have a forgiving select
  implementation. when the call was made on these systems, select failed
  so no data would be read or sent over the connection

  this might have affected some cluster-internal operations.

* fixed ETCD issues on 32 bit systems

  ETCD was non-functional on 32 bit systems at all. The first call to the
  watch API crashed it. This was because atomic operations worked on data
  structures that were not properly aligned on 32 bit systems. 

* fixed issue #848: db.someEdgeCollection.inEdge does not return correct 
  value when called the 2nd time after a .save to the edge collection


v2.0.7 (2014-05-05)
-------------------

* issue #839: Foxx Manager missing "unfetch"

* fixed a race condition at startup

  this fixes undefined behavior in case the logger was involved directly at 
  startup, before the logger initialization code was called. This should have
  occurred only for code that was executed before the invocation of main(), 
  e.g. during ctor calls of statically defined objects.


v2.0.6 (2014-04-22)
-------------------

* fixed issue #835: arangosh doesn't show correct database name



v2.0.5 (2014-04-21)
-------------------

* Fixed a caching problem in IE JS Shell

* added cancelation for async jobs

* upgraded to new gyp for V8

* new Windows installer


v2.0.4 (2014-04-14)
-------------------

* fixed cluster authentication front-end issues for Firefox and IE, there are
  still problems with Chrome


v2.0.3 (2014-04-14)
-------------------

* fixed AQL optimizer bug

* fixed front-end issues

* added password change dialog


v2.0.2 (2014-04-06)
-------------------

* during cluster startup, do not log (somewhat expected) connection errors with
  log level error, but with log level info

* fixed dashboard modals

* fixed connection check for cluster planning front end: firefox does 
  not support async:false

* document how to persist a cluster plan in order to relaunch an existing
  cluster later


v2.0.1 (2014-03-31)
-------------------

* make ArangoDB not send back a `WWW-Authenticate` header to a client in case the
  client sends the `X-Omit-WWW-Authenticate` HTTP header.

  This is done to prevent browsers from showing their built-in HTTP authentication 
  dialog for AJAX requests that require authentication.
  ArangoDB will still return an HTTP 401 (Unauthorized) if the request doesn't
  contain valid credentials, but it will omit the `WWW-Authenticate` header, 
  allowing clients to bypass the browser's authentication dialog.

* fixed isses in arango-dfdb:

  the dfdb was not able to unload certain system collections, so these couldn't be
  inspected with the dfdb sometimes. Additionally, it did not truncate corrupt
  markers from datafiles under some circumstances

* added `changePassword` attribute for users

* fixed non-working "save" button in collection edit view of web interface
  clicking the save button did nothing. one had to press enter in one of the input
  fields to send modified form data

* fixed V8 compile error on MacOS X

* prevent `body length: -9223372036854775808` being logged in development mode for
  some Foxx HTTP responses

* fixed several bugs in web interface dashboard

* fixed issue #783: coffee script not working in manifest file

* fixed issue #783: coffee script not working in manifest file

* fixed issue #781: Cant save current query from AQL editor ui

* bumped version in `X-Arango-Version` compatibility header sent by arangosh and other
  client tools from `1.5` to `2.0`.

* fixed startup options for arango-dfdb, added details option for arango-dfdb

* fixed display of missing error messages and codes in arangosh

* when creating a collection via the web interface, the collection type was always 
  "document", regardless of the user's choice


v2.0.0 (2014-03-10)
-------------------

* first 2.0 release


v2.0.0-rc2 (2014-03-07)
-----------------------

* fixed cluster authorization


v2.0.0-rc1 (2014-02-28)
-----------------------

* added sharding :-)

* added collection._dbName attribute to query the name of the database from a collection

  more detailed documentation on the sharding and cluster features can be found in the user 
  manual, section **Sharding**

* INCOMPATIBLE CHANGE: using complex values in AQL filter conditions with operators other
  than equality (e.g. >=, >, <=, <) will disable usage of skiplist indexes for filter 
  evaluation.
  
  For example, the following queries will be affected by change:

      FOR doc IN docs FILTER doc.value < { foo: "bar" } RETURN doc
      FOR doc IN docs FILTER doc.value >= [ 1, 2, 3 ] RETURN doc

  The following queries will not be affected by the change:
      
      FOR doc IN docs FILTER doc.value == 1 RETURN doc
      FOR doc IN docs FILTER doc.value == "foo" RETURN doc
      FOR doc IN docs FILTER doc.value == [ 1, 2, 3 ] RETURN doc
      FOR doc IN docs FILTER doc.value == { foo: "bar" } RETURN doc

* INCOMPATIBLE CHANGE: removed undocumented method `collection.saveOrReplace`
  
  this feature was never advertised nor documented nor tested.

* INCOMPATIBLE CHANGE: removed undocumented REST API method `/_api/simple/BY-EXAMPLE-HASH`

  this feature was never advertised nor documented nor tested.

* added explicit startup parameter `--server.reuse-address`

  This flag can be used to control whether sockets should be acquired with the SO_REUSEADDR 
  flag.
  
  Regardless of this setting, sockets on Windows are always acquired using the
  SO_EXCLUSIVEADDRUSE flag.

* removed undocumented REST API method GET `/_admin/database-name`

* added user validation API at POST `/_api/user/<username>`

* slightly improved users management API in `/_api/user`:

  Previously, when creating a new user via HTTP POST, the username needed to be 
  passed in an attribute `username`. When users were returned via this API,
  the usernames were returned in an attribute named `user`. This was slightly
  confusing and was changed in 2.0 as follows:

  - when adding a user via HTTP POST, the username can be specified in an attribute 
  `user`. If this attribute is not used, the API will look into the attribute `username`
  as before and use that value.
  - when users are returned via HTTP GET, the usernames are still returned in an
    attribute `user`.

  This change should be fully downwards-compatible with the previous version of the API.

* added AQL SLICE function to extract slices from lists

* made module loader more node compatible

* the startup option `--javascript.package-path` for arangosh is now deprecated and does
  nothing. Using it will not cause an error, but the option is ignored.

* added coffee script support

* Several UI improvements.

* Exchanged icons in the graphviewer toolbar

* always start networking and HTTP listeners when starting the server (even in 
  console mode)

* allow vertex and edge filtering with user-defined functions in TRAVERSAL,
  TRAVERSAL_TREE and SHORTEST_PATH AQL functions:

      // using user-defined AQL functions for edge and vertex filtering
      RETURN TRAVERSAL(friends, friendrelations, "friends/john", "outbound", {
        followEdges: "myfunctions::checkedge",
        filterVertices: "myfunctions::checkvertex"
      })

      // using the following custom filter functions
      var aqlfunctions = require("org/arangodb/aql/functions");
      aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { 
        return (edge.type !== 'dislikes'); // don't follow these edges
      }, false);

      aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { 
        if (vertex.isDeleted || ! vertex.isActive) {
          return [ "prune", "exclude" ]; // exclude these and don't follow them
        }
        return [ ]; // include everything else
      }, false);

* fail if invalid `strategy`, `order` or `itemOrder` attribute values
  are passed to the AQL TRAVERSAL function. Omitting these attributes 
  is not considered an error, but specifying an invalid value for any
  of these attributes will make an AQL query fail.

* issue #751: Create database through API should return HTTP status code 201

  By default, the server now returns HTTP 201 (created) when creating a new
  database successfully. To keep compatibility with older ArangoDB versions, the
  startup parameter `--server.default-api-compatibility` can be set to a value
  of `10400` to indicate API compatibility with ArangoDB 1.4. The compatibility
  can also be enforced by setting the `X-Arango-Version` HTTP header in a 
  client request to this API on a per-request basis.

* allow direct access from the `db` object to collections whose names start 
  with an underscore (e.g. db._users).

  Previously, access to such collections via the `db` object was possible from
  arangosh, but not from arangod (and thus Foxx and actions). The only way
  to access such collections from these places was via the `db._collection(<name>)`
  workaround.

* allow `\n` (as well as `\r\n`) as line terminator in batch requests sent to 
  `/_api/batch` HTTP API.

* use `--data-binary` instead of `--data` parameter in generated cURL examples

* issue #703: Also show path of logfile for fm.config()

* issue #675: Dropping a collection used in "graph" module breaks the graph

* added "static" Graph.drop() method for graphs API

* fixed issue #695: arangosh server.password error

* use pretty-printing in `--console` mode by default

* simplified ArangoDB startup options

  Some startup options are now superfluous or their usage is simplified. The
  following options have been changed:

  * `--javascript.modules-path`: this option has been removed. The modules paths
    are determined by arangod and arangosh automatically based on the value of 
    `--javascript.startup-directory`.

    If the option is set on startup, it is ignored so startup will not abort with
    an error `unrecognized option`.

  * `--javascript.action-directory`: this option has been removed. The actions
    directory is determined by arangod automatically based on the value of
    `--javascript.startup-directory`.

    If the option is set on startup, it is ignored so startup will not abort with
    an error `unrecognized option`.

  * `--javascript.package-path`: this option is still available but it is not
    required anymore to set the standard package paths (e.g. `js/npm`). arangod
    will automatically use this standard package path regardless of whether it
    was specified via the options.

    It is possible to use this option to add additional package paths to the
    standard value.

  Configuration files included with arangod are adjusted accordingly.

* layout of the graphs tab adapted to better fit with the other tabs

* database selection is moved to the bottom right corner of the web interface

* removed priority queue index type

  this feature was never advertised nor documented nor tested.

* display internal attributes in document source view of web interface

* removed separate shape collections

  When upgrading to ArangoDB 2.0, existing collections will be converted to include
  shapes and attribute markers in the datafiles instead of using separate files for
  shapes.

  When a collection is converted, existing shapes from the SHAPES directory will
  be written to a new datafile in the collection directory, and the SHAPES directory
  will be removed afterwards.

  This saves up to 2 MB of memory and disk space for each collection 
  (savings are higher, the less different shapes there are in a collection). 
  Additionally, one less file descriptor per opened collection will be used.

  When creating a new collection, the amount of sync calls may be reduced. The same
  may be true for documents with yet-unknown shapes. This may help performance
  in these cases.

* added AQL functions `NTH` and `POSITION`

* added signal handler for arangosh to save last command in more cases

* added extra prompt placeholders for arangosh:
  - `%e`: current endpoint
  - `%u`: current user

* added arangosh option `--javascript.gc-interval` to control amount of 
  garbage collection performed by arangosh

* fixed issue #651: Allow addEdge() to take vertex ids in the JS library

* removed command-line option `--log.format`

  In previous versions, this option did not have an effect for most log messages, so
  it got removed.

* removed C++ logger implementation

  Logging inside ArangoDB is now done using the LOG_XXX() macros. The LOGGER_XXX()
  macros are gone.

* added collection status "loading"


v1.4.16 (XXXX-XX-XX)
--------------------

* fixed too eager datafile deletion

  this issue could have caused a crash when the compaction had marked datafiles as obsolete
  and they were removed while "old" temporary query results still pointed to the old datafile
  positions

* fixed issue #826: Replication fails when a collection's configuration changes


v1.4.15 (2014-04-19)
--------------------

* bugfix for AQL query optimiser
       
  the following type of query was too eagerly optimised, leading to errors in code-generation:
              
      LET a = (FOR i IN [] RETURN i) LET b = (FOR i IN [] RETURN i) RETURN 1
                           
  the problem occurred when both lists in the subqueries were empty. In this case invalid code
  was generated and the query couldn't be executed.


v1.4.14 (2014-04-05)
--------------------

* fixed race conditions during shape / attribute insertion

  A race condition could have led to spurios `cannot find attribute #xx` or
  `cannot find shape #xx` (where xx is a number) warning messages being logged 
  by the server. This happened when a new attribute was inserted and at the same 
  time was queried by another thread.

  Also fixed a race condition that may have occurred when a thread tried to
  access the shapes / attributes hash tables while they were resized. In this
  cases, the shape / attribute may have been hashed to a wrong slot.

* fixed a memory barrier / cpu synchronisation problem with libev, affecting
  Windows with Visual Studio 2013 (probably earlier versions are affected, too)
  
  The issue is described in detail here:
  http://lists.schmorp.de/pipermail/libev/2014q1/002318.html


v1.4.13 (2014-03-14)
--------------------

* added diagnostic output for Foxx application upload

* allow dump & restore from ArangoDB 1.4 with an ArangoDB 2.0 server

* allow startup options `temp-path` and `default-language` to be specified from the arangod
  configuration file and not only from the command line

* fixed too eager compaction
  
  The compaction will now wait for several seconds before trying to re-compact the same
  collection. Additionally, some other limits have been introduced for the compaction.
 

v1.4.12 (2014-03-05)
--------------------

* fixed display bug in web interface which caused the following problems:
  - documents were displayed in web interface as being empty
  - document attributes view displayed many attributes with content "undefined"
  - document source view displayed many attributes with name "TYPEOF" and value "undefined"
  - an alert popping up in the browser with message "Datatables warning..."
  
* re-introduced old-style read-write locks to supports Windows versions older than
  Windows 2008R2 and Windows 7. This should re-enable support for Windows Vista and
  Windows 2008.


v1.4.11 (2014-02-27)
--------------------

* added SHORTEST_PATH AQL function 

  this calculates the shortest paths between two vertices, using the Dijkstra
  algorithm, employing a min-heap

  By default, ArangoDB does not know the distance between any two vertices and
  will use a default distance of 1. A custom distance function can be registered
  as an AQL user function to make the distance calculation use any document 
  attributes or custom logic:
    
      RETURN SHORTEST_PATH(cities, motorways, "cities/CGN", "cities/MUC", "outbound", {
        paths: true,
        distance: "myfunctions::citydistance"
      }) 

      // using the following custom distance function
      var aqlfunctions = require("org/arangodb/aql/functions");
      aqlfunctions.register("myfunctions::distance", function (config, vertex1, vertex2, edge) { 
        return Math.sqrt(Math.pow(vertex1.x - vertex2.x) + Math.pow(vertex1.y - vertex2.y));
      }, false);

* fixed bug in Graph.pathTo function

* fixed small memleak in AQL optimiser

* fixed access to potentially uninitialised variable when collection had a cap constraint


v1.4.10 (2014-02-21)
--------------------

* fixed graph constructor to allow graph with some parameter to be used

* added node.js "events" and "stream"

* updated npm packages

* added loading of .json file

* Fixed http return code in graph api with waitForSync parameter.

* Fixed documentation in graph, simple and index api.

* removed 2 tests due to change in ruby library.

* issue #756: set access-control-expose-headers on CORS response

  the following headers are now whitelisted by ArangoDB in CORS responses:
  - etag
  - content-encoding
  - content-length
  - location
  - server
  - x-arango-errors
  - x-arango-async-id


v1.4.9 (2014-02-07)
-------------------

* return a document's current etag in response header for HTTP HEAD requests on
  documents that return an HTTP 412 (precondition failed) error. This allows
  retrieving the document's current revision easily.

* added AQL function `SKIPLIST` to directly access skiplist indexes from AQL
  
  This is a shortcut method to use a skiplist index for retrieving specific documents in 
  indexed order. The function capability is rather limited, but it may be used
  for several cases to speed up queries. The documents are returned in index order if
  only one condition is used.

      /* return all documents with mycollection.created > 12345678 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] })
        RETURN doc

      /* return first document with mycollection.created > 12345678 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }, 0, 1)
        RETURN doc

      /* return all documents with mycollection.created between 12345678 and 123456790 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ], [ '<=', 123456790 ]] })
        RETURN doc

      /* return all documents with mycollection.a equal 1 and .b equal 2 */
      FOR doc IN SKIPLIST(mycollection, { a: [[ '==', 1 ]], b: [[ '==', 2 ]] })
        RETURN doc

  The function requires a skiplist index with the exact same attributes to 
  be present on the specified colelction. All attributes present in the skiplist
  index must be specified in the conditions specified for the `SKIPLIST` function.
  Attribute declaration order is important, too: attributes must be specified in the 
  same order in the condition as they have been declared in the skiplist index.

* added command-line option `--server.disable-authentication-unix-sockets`
  
  with this option, authentication can be disabled for all requests coming
  in via UNIX domain sockets, enabling clients located on the same host as
  the ArangoDB server to connect without authentication.
  Other connections (e.g. TCP/IP) are not affected by this option.
 
  The default value for this option is `false`.
  Note: this option is only supported on platforms that support Unix domain
  sockets.

* call global arangod instance destructor on shutdown

* issue #755: TRAVERSAL does not use strategy, order and itemOrder options

  these options were not honored when configuring a traversal via the AQL
  TRAVERSAL function. Now, these options are used if specified.

* allow vertex and edge filtering with user-defined functions in TRAVERSAL,
  TRAVERSAL_TREE and SHORTEST_PATH AQL functions:

      // using user-defined AQL functions for edge and vertex filtering
      RETURN TRAVERSAL(friends, friendrelations, "friends/john", "outbound", {
        followEdges: "myfunctions::checkedge",
        filterVertices: "myfunctions::checkvertex"
      })

      // using the following custom filter functions
      var aqlfunctions = require("org/arangodb/aql/functions");
      aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { 
        return (edge.type !== 'dislikes'); // don't follow these edges
      }, false);

      aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { 
        if (vertex.isDeleted || ! vertex.isActive) {
          return [ "prune", "exclude" ]; // exclude these and don't follow them
        }
        return [ ]; // include everything else
      }, false);

* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function


v1.4.8 (2014-01-31)
-------------------

* install foxx apps in the web interface

* fixed a segfault in the import API


v1.4.7 (2014-01-23)
-------------------

* issue #744: Add usage example arangoimp from Command line

* issue #738: added __dirname, __filename pseudo-globals. Fixes #733. (@by pluma)

* mount all Foxx applications in system apps directory on startup


v1.4.6 (2014-01-20)
-------------------

* issue #736: AQL function to parse collection and key from document handle

* added fm.rescan() method for Foxx-Manager

* fixed issue #734: foxx cookie and route problem

* added method `fm.configJson` for arangosh

* include `startupPath` in result of API `/_api/foxx/config`


v1.4.5 (2014-01-15)
-------------------

* fixed issue #726: Alternate Windows Install Method

* fixed issue #716: dpkg -P doesn't remove everything

* fixed bugs in description of HTTP API `_api/index`

* fixed issue #732: Rest API GET revision number
 
* added missing documentation for several methods in HTTP API `/_api/edge/...`

* fixed typos in description of HTTP API `_api/document`

* defer evaluation of AQL subqueries and logical operators (lazy evaluation)

* Updated font in WebFrontend, it now contains a version that renders properly on windows

* generally allow function return values as call parameters to AQL functions

* fixed potential deadlock in global context method execution

* added override file "arangod.conf.local" (and co)


v1.4.4 (2013-12-24)
-------------------

* uid and gid are now set in the scripts, there is no longer a separate config file for 
  arangod when started from a script

* foxx-manager is now an alias for arangosh

* arango-dfdb is now an alias for arangod, moved from bin to sbin

* changed from readline to linenoise for Windows

* added --install-service and --uninstall-service for Windows

* removed --daemon and --supervisor for Windows

* arangosh and arangod now uses the config-file which maps the binary name, i. e. if you
  rename arangosh to foxx-manager it will use the config file foxx-manager.conf

* fixed lock file for Windows

* fixed issue #711, #687: foxx-manager throws internal errors

* added `--server.ssl-protocol` option for client tools
  this allows connecting from arangosh, arangoimp, arangoimp etc. to an ArangoDB
  server that uses a non-default value for `--server.ssl-protocol`. The default
  value for the SSL protocol is 4 (TLSv1). If the server is configured to use a
  different protocol, it was not possible to connect to it with the client tools.

* added more detailed request statistics 

  This adds the number of async-executed HTTP requests plus the number of HTTP
  requests per individual HTTP method type.

* added `--force` option for arangorestore
  this option allows continuing a restore operation even if the server reports errors
  in the middle of the restore operation

* better error reporting for arangorestore
  in case the server returned an HTTP error, arangorestore previously reported this
  error as `internal error` without any details only. Now server-side errors are
  reported by arangorestore with the server's error message

* include more system collections in dumps produced by arangodump
  previously some system collections were intentionally excluded from dumps, even if the
  dump was run with `--include-system-collections`. for example, the collections `_aal`,
  `_modules`, `_routing`, and `_users` were excluded. This makes sense in a replication
  context but not always in a dump context.
  When specifying `--include-system-collections`, arangodump will now include the above-
  mentioned collections in the dump, too. Some other system collections are still excluded
  even when the dump is run with `--include-system-collections`, for example `_replication`
  and `_trx`.

* fixed issue #701: ArangoStatement undefined in arangosh

* fixed typos in configuration files


v1.4.3 (2013-11-25)
-------------------

* fixed a segfault in the AQL optimiser, occurring when a constant non-list value was
  used on the right-hand side of an IN operator that had a collection attribute on the
  left-hand side

* issue #662:
 
  Fixed access violation errors (crashes) in the Windows version, occurring under some
  circumstances when accessing databases with multiple clients in parallel

* fixed issue #681: Problem with ArchLinux PKGBUILD configuration


v1.4.2 (2013-11-20)
-------------------

* fixed issue #669: Tiny documentation update

* ported Windows version to use native Windows API SRWLocks (slim read-write locks) 
  and condition variables instead of homemade versions

  MSDN states the following about the compatibility of SRWLocks and Condition Variables:

      Minimum supported client:
      Windows Server 2008 [desktop apps | Windows Store apps]

      Minimum supported server:
      Windows Vista [desktop apps | Windows Store apps]
  
* fixed issue #662: ArangoDB on Windows hanging

  This fixes a deadlock issue that occurred on Windows when documents were written to
  a collection at the same time when some other thread tried to drop the collection.

* fixed file-based logging in Windows
 
  the logger complained on startup if the specified log file already existed

* fixed startup of server in daemon mode (`--daemon` startup option)

* fixed a segfault in the AQL optimiser

* issue #671: Method graph.measurement does not exist

* changed Windows condition variable implementation to use Windows native
  condition variables
  
  This is an attempt to fix spurious Windows hangs as described in issue #662.

* added documentation for JavaScript traversals 

* added --code-page command-line option for Windows version of arangosh

* fixed a problem when creating edges via the web interface.

  The problem only occurred if a collection was created with type "document
  collection" via the web interface, and afterwards was dropped and re-created
  with type "edge collection". If the web interface page was not reloaded,
  the old collection type (document) was cached, making the subsequent creation
  of edges into the (seeming-to-be-document) collection fail.

  The fix is to not cache the collection type in the web interface. Users of
  an older version of the web interface can reload the collections page if they
  are affected.

* fixed a caching problem in arangosh: if a collection was created using the web
  interface, and then removed via arangosh, arangosh did not actually drop the
  collection due to caching.

  Because the `drop` operation was not carried out, this caused misleading error
  messages when trying to re-create the collection (e.g. `cannot create collection:
  duplicate name`).

* fixed ALT-introduced characters for arangosh console input on Windows

  The Windows readline port was not able to handle characters that are built
  using CTRL or ALT keys. Regular characters entered using the CTRL or ALT keys
  were silently swallowed and not passed to the terminal input handler.
  
  This did not seem to cause problems for the US keyboard layout, but was a
  severe issue for keyboard layouts that require the ALT (or ALT-GR) key to 
  construct characters. For example, entering the character `{` with a German
  keyboard layout requires pressing ALT-GR + 9. 

* fixed issue #665: Hash/skiplist combo madness bit my ass

  this fixes a problem with missing/non-deterministic rollbacks of inserts in
  case of a unique constraint violation into a collection with multiple secondary
  indexes (with at least one of them unique)

* fixed issue #664: ArangoDB installer on windows requires drive c:

* partly fixed issue #662: ArangoDB on Windows hanging

  This fixes dropping databases on Windows. In previous 1.4 versions on Windows,
  one shape collection file was not unloaded and removed when dropping a database,
  leaving one directory and one shape collection file in the otherwise-dropped
  database directory.

* fixed issue #660: updated documentation on indexes


v1.4.1 (2013-11-08)
-------------------

* performance improvements for skip-list deletes


v1.4.1-rc1 (2013-11-07)
-----------------------

* fixed issue #635: Web-Interface should have a "Databases" Menu for Management

* fixed issue #624: Web-Interface is missing a Database selector

* fixed segfault in bitarray query

* fixed issue #656: Cannot create unique index through web interface

* fixed issue #654: bitarray index makes server down

* fixed issue #653: Slow query

* fixed issue #650: Randonmess of any() should be improved

* made AQL `DOCUMENT()` function polymorphic and work with just one parameter.

  This allows using the `DOCUMENT` function like this:

      DOCUMENT('users/john') 
      DOCUMENT([ 'users/john', 'users/amy' ]) 

  in addition to the existing use cases:

      DOCUMENT(users, 'users/john')
      DOCUMENT(users, 'john')
      DOCUMENT(users, [ 'users/john' ])
      DOCUMENT(users, [ 'users/john', 'users/amy' ])
      DOCUMENT(users, [ 'john', 'amy' ])

* simplified usage of ArangoDB batch API

  It is not necessary anymore to send the batch boundary in the HTTP `Content-Type`
  header. Previously, the batch API expected the client to send a Content-Type header
  of`multipart/form-data; boundary=<some boundary value>`. This is still supported in
  ArangoDB 2.0, but clients can now also omit this header. If the header is not 
  present in a client request, ArangoDB will ignore the request content type and
  read the MIME boundary from the beginning of the request body.

  This also allows using the batch API with the Swagger "Try it out" feature (which is
  not too good at sending a different or even dynamic content-type request header).

* added API method GET `/_api/database/user` 

  This returns the list of databases a specific user can see without changing the
  username/passwd.

* issue #424: Documentation about IDs needs to be upgraded


v1.4.0 (2013-10-29)
-------------------

* fixed issue #648: /batch API is missing from Web Interface API Docummentation (Swagger)

* fixed issue #647: Icon tooltips missing

* fixed issue #646: index creation in web interface

* fixed issue #645: Allow jumping from edge to linked vertices

* merged PR for issue #643: Some minor corrections and a link to "Downloads"

* fixed issue #642: Completion of error handling

* fixed issue #639: compiling v1.4 on maverick produces warnings on -Wstrict-null-sentinel

* fixed issue #634: Web interface bug: Escape does not always propagate

* fixed issue #620: added startup option `--server.default-api-compatibility`

  This adds the following changes to the ArangoDB server and clients:
  - the server provides a new startup option `--server.default-api-compatibility`.
    This option can be used to determine the compatibility of (some) server API
    return values. The value for this parameter is a server version number,
    calculated as follows: `10000 * major + 100 * minor` (e.g. `10400` for ArangoDB
    1.3). The default value is `10400` (1.4), the minimum allowed value is `10300`
    (1.3).

    When setting this option to a value lower than the current server version,
    the server might respond with old-style results to "old" clients, increasing
    compatibility with "old" (non-up-to-date) clients.

  - the server will on each incoming request check for an HTTP header 
    `x-arango-version`. Clients can optionally set this header to the API
    version number they support. For example, if a client sends the HTTP header
    `x-arango-version: 10300`, the server will pick this up and might send ArangoDB
    1.3-style responses in some situations.

    Setting either the startup parameter or using the HTTP header (or both) allows
    running "old" clients with newer versions of ArangoDB, without having to adjust
    the clients too much.

  - the `location` headers returned by the server for the APIs `/_api/document/...` 
    and `/_api/collection/...` will have different values depending on the used API
    version. If the API compatibility is `10300`, the `location` headers returned
    will look like this:

        location: /_api/document/....

    whereas when an API compatibility of `10400` or higher is used, the `location`
    headers will look like this:

        location: /_db/<database name>/_api/document/...

  Please note that even in the presence of this, old API versions still may not 
  be supported forever by the server. 
  
* fixed issue #643: Some minor corrections and a link to "Downloads" by @frankmayer

* started issue #642: Completion of error handling

* fixed issue #639: compiling v1.4 on maverick produces warnings on 
  -Wstrict-null-sentinel 

* fixed issue #621: Standard Config needs to be fixed

* added function to manage indexes (web interface)

* improved server shutdown time by signalling shutdown to applicationserver,
  logging, cleanup and compactor threads

* added foxx-manager `replace` command

* added foxx-manager `installed` command (a more intuitive alias for `list`) 

* fixed issue #617: Swagger API is missing '/_api/version'

* fixed issue #615: Swagger API: Some commands have no parameter entry forms

* fixed issue #614: API : Typo in : Request URL /_api/database/current

* fixed issue #609: Graph viz tool - different background color 

* fixed issue #608: arangosh config files - eventually missing in the manual

* fixed issue #607: Admin interface: no core documentation

* fixed issue #603: Aardvark Foxx App Manager 

* fixed a bug in type-mapping between AQL user functions and the AQL layer

  The bug caused errors like the following when working with collection documents
  in an AQL user function:

      TypeError: Cannot assign to read only property '_id' of #<ShapedJson>

* create less system collections when creating a new database

  This is achieved by deferring collection creation until the collections are actually
  needed by ArangoDB. The following collections are affected by the change:
  - `_fishbowl`
  - `_structures`


v1.4.0-beta2 (2013-10-14)
-------------------------

* fixed compaction on Windows 

  The compaction on Windows did not ftruncate the cleaned datafiles to a smaller size.
  This has been fixed so not only the content of the files is cleaned but also files
  are re-created with potentially smaller sizes.

* only the following system collections will be excluded from replication from now on:
  - `_replication`
  - `_trx`
  - `_users`
  - `_aal`
  - `_fishbowl`
  - `_modules`
  - `_routing`

  Especially the following system collections will now be included in replication:
  - `_aqlfunctions`
  - `_graphs`
  
  In previous versions of ArangoDB, all system collections were excluded from the 
  replication.

  The change also caused a change in the replication logger and applier:
  in previous versions of ArangoDB, only a collection's id was logged for an operation.
  This has not caused problems for non-system collections but for system collections 
  there ids might differ. In addition to a collection id ArangoDB will now also log the
  name of a collection for each replication event.

  The replication applier will now look for the collection name attribute in logged
  events preferrably.

* added database selection to arango-dfdb

* provide foxx-manager, arangodump, and arangorestore in Windows build

* ArangoDB 1.4 will refuse to start if option `--javascript.app-path` is not set.

* added startup option `--server.allow-method-override`

  This option can be set to allow overriding the HTTP request method in a request using
  one of the following custom headers:

  - x-http-method-override
  - x-http-method
  - x-method-override

  This allows bypassing proxies and tools that would otherwise just let certain types of
  requests pass. Enabling this option may impose a security risk, so it should only be
  used in very controlled environments.

  The default value for this option is `false` (no method overriding allowed).

* added "details" URL parameter for bulk import API
  
  Setting the `details` URL parameter to `true` in a call to POST `/_api/import` will make
  the import return details about non-imported documents in the `details` attribute. If
  `details` is `false` or omitted, no `details` attribute will be present in the response.
  This is the same behavior that previous ArangoDB versions exposed.

* added "complete" option for bulk import API
 
  Setting the `complete` URL parameter to `true` in a call to POST `/_api/import` will make
  the import completely fail if at least one of documents cannot be imported successfully.

  It defaults to `false`, which will make ArangoDB continue importing the other documents
  from the import even if some documents cannot be imported. This is the same behaviour that
  previous ArangoDB versions exposed.

* added missing swagger documentation for `/_api/log`

* calling `/_api/logs` (or `/_admin/logs`) is only permitted from the `_system` database now.
  
  Calling this API method for/from other database will result in an HTTP 400.

' ported fix from https://github.com/novus/nvd3/commit/0894152def263b8dee60192f75f66700cea532cc
  
  This prevents JavaScript errors from occurring in Chrome when in the admin interface, 
  section "Dashboard".

* show current database name in web interface (bottom right corner)

* added missing documentation for /_api/import in swagger API docs 

* allow specification of database name for replication sync command replication applier

  This allows syncing from a master database with a different name than the slave database.

* issue #601: Show DB in prompt

  arangosh now displays the database name as part of the prompt by default.
  
  Can change the prompt by using the `--prompt` option, e.g.

      > arangosh --prompt "my db is named \"%d\"> "


v1.4.0-beta1 (2013-10-01)
-------------------------

* make the Foxx manager use per-database app directories

  Each database now has its own subdirectory for Foxx applications. Each database
  can thus use different Foxx applications if required. A Foxx app for a specific
  database resides in `<app-path>/databases/<database-name>/<app-name>`.

  System apps are shared between all databases. They reside in `<app-path>/system/<app-name>`.

* only trigger an engine reset in development mode for URLs starting with `/dev/`

  This prevents ArangoDB from reloading all Foxx applications when it is not
  actually necessary.

* changed error code from 10 (bad parameter) to 1232 (invalid key generator) for 
  errors that are due to an invalid key generator specification when creating a new
  collection

* automatic detection of content-type / mime-type for Foxx assets based on filenames,
  added possibility to override auto detection

* added endpoint management API at `/_api/endpoint`

* changed HTTP return code of PUT `/_api/cursor` from 400 to 404 in case a
  non-existing cursor is referred to

* issue #360: added support for asynchronous requests

  Incoming HTTP requests with the headers `x-arango-async: true` or 
  `x-arango-async: store` will be answered by the server instantly with a generic 
  HTTP 202 (Accepted) response. 
  
  The actual requests will be queued and processed by the server asynchronously, 
  allowing the client to continue sending other requests without waiting for the
  server to process the actually requested operation.

  The exact point in time when a queued request is executed is undefined. If an
  error occurs during execution of an asynchronous request, the client will not
  be notified by the server.

  The maximum size of the asynchronous task queue can be controlled using the new
  option `--scheduler.maximal-queue-size`. If the queue contains this many number of
  tasks and a new asynchronous request comes in, the server will reject it with an
  HTTP 500 (internal server error) response.
  
  Results of incoming requests marked with header `x-arango-async: true` will be
  discarded by the server immediately. Clients have no way of accessing the result
  of such asynchronously executed request. This is just _fire and forget_.

  To later retrieve the result of an asynchronously executed request, clients can
  mark a request with the header `x-arango-async: keep`. This makes the server
  store the result of the request in memory until explicitly fetched by a client
  via the `/_api/job` API. The `/_api/job` API also provides methods for basic
  inspection of which pending or already finished requests there are on the server,
  plus ways for garbage collecting unneeded results.

* Added new option `--scheduler.maximal-queue-size`.

* issue #590: Manifest Lint

* added data dump and restore tools, arangodump and arangorestore.

  arangodump can be used to create a logical dump of an ArangoDB database, or
  just dedicated collections. It can be used to dump both a collection's structure
  (properties and indexes) and data (documents).

  arangorestore can be used to restore data from a dump created with arangodump.
  arangorestore currently does not re-create any indexes, and doesn't yet handle
  referenced documents in edges propertly when doing just partial restores.
  This will be fixed until 1.4 stable.
  
* introduced `--server.database` option for arangosh, arangoimp, and arangob.

  The option allows these client tools to use a certain database for their actions.
  In arangosh, the current database can be switched at any time using the command

      db._useDatabase(<name>);

  When no database is specified, all client tools will assume they should use the
  default database `_system`. This is done for downwards-compatibility reasons.

* added basic multi database support (alpha)

  New databases can be created using the REST API POST `/_api/database` and the
  shell command `db._createDatabase(<name>)`.

  The default database in ArangoDB is called `_system`. This database is always
  present and cannot be deleted by the user. When an older version of ArangoDB is
  upgraded to 1.4, the previously only database will automatically become the
  `_system` database.

  New databases can be created with the above commands, and can be deleted with the
  REST API DELETE `/_api/database/<name>` or the shell command `db._dropDatabase(<name>);`.

  Deleting databases is still unstable in ArangoDB 1.4 alpha and might crash the
  server. This will be fixed until 1.4 stable.

  To access a specific database via the HTTP REST API, the `/_db/<name>/` prefix 
  can be used in all URLs. ArangoDB will check if an incoming request starts with
  this prefix, and will automatically pick the database name from it. If the prefix
  is not there, ArangoDB will assume the request is made for the default database 
  (`_system`). This is done for downwards-compatibility reasons.

  That means, the following URL pathnames are logically identical:

      /_api/document/mycollection/1234
      /_db/_system/document/mycollection/1234

  To access a different database (e.g. `test`), the URL pathname would look like this:

      /_db/test/document/mycollection/1234

  New databases can also be created and existing databases can only be dropped from
  within the default database (`_system`). It is not possible to drop the `_system`
  database itself.

  Cross-database operations are unintended and unsupported. The intention of the
  multi-database feature is to have the possibility to have a few databases managed
  by ArangoDB in parallel, but to only access one database at a time from a connection 
  or a request.

  When accessing the web interface via the URL pathname `/_admin/html/` or `/_admin/aardvark`,
  the web interface for the default database (`_system`) will be displayed.
  To access the web interface for a different database, the database name can be
  put into the URLs as a prefix, e.g. `/_db/test/_admin/html` or 
  `/_db/test/_admin/aardvark`.

  All internal request handlers and also all user-defined request handlers and actions
  (including Foxx) will only get to see the unprefixed URL pathnames (i.e. excluding
  any database name prefix). This is to ensure downwards-compatibility.

  To access the name of the requested database from any action (including Foxx), use
  use `req.database`.

  For example, when calling the URL `/myapp/myaction`, the content of `req.database`
  will be `_system` (the default database because no database got specified) and the
  content of `req.url` will be `/myapp/myaction`.
  
  When calling the URL `/_db/test/myapp/myaction`, the content of `req.database` will be 
  `test`, and the content of `req.url` will still be `/myapp/myaction`.
   
* Foxx now excludes files starting with . (dot) when bundling assets

  This mitigates problems with editor swap files etc.

* made the web interface a Foxx application

  This change caused the files for the web interface to be moved from `html/admin` to
  `js/apps/aardvark` in the file system.

  The base URL for the admin interface changed from `_admin/html/index.html` to
  `_admin/aardvark/index.html`.

  The "old" redirection to `_admin/html/index.html` will now produce a 404 error. 
  
  When starting ArangoDB with the `--upgrade` option, this will automatically be remedied 
  by putting in a redirection from `/` to `/_admin/aardvark/index.html`, and from 
  `/_admin/html/index.html` to `/_admin/aardvark/index.html`.

  This also obsoletes the following configuration (command-line) options:
  - `--server.admin-directory`
  - `--server.disable-admin-interface`

  when using these now obsolete options when the server is started, no error is produced
  for downwards-compatibility.

* changed User-Agent value sent by arangoimp, arangosh, and arangod from "VOC-Agent" to 
  "ArangoDB"

* changed journal file creation behavior as follows:

  Previously, a journal file for a collection was always created when a collection was
  created. When a journal filled up and became full, the current journal was made a
  datafile, and a new (empty) journal was created automatically. There weren't many
  intended situations when a collection did not have at least one journal.

  This is changed now as follows:
  - when a collection is created, no journal file will be created automatically
  - when there is a write into a collection without a journal, the journal will be
    created lazily
  - when there is a write into a collection with a full journal, a new journal will
    be created automatically

  From the end user perspective, nothing should have changed, except that there is now
  less disk usage for empty collections. Disk usage of infrequently updated collections 
  might also be reduced significantly by running the `rotate()` method of a collection, 
  and not writing into a collection subsequently.

* added method `collection.rotate()`

  This allows premature rotation of a collection's current journal file into a (read-only)
  datafile. The purpose of using `rotate()` is to prematurely allow compaction (which is 
  performed on datafiles only) on data, even if the journal was not filled up completely.

  Using `rotate()` may make sense in the following scenario:

      c = db._create("test");
      for (i = 0; i < 1000; ++i) {
        c.save(...); // insert lots of data here
      }

      ...
      c.truncate(); // collection is now empty
      // only data in datafiles will be compacted by following compaction runs
      // all data in the current journal would not be compacted

      // calling rotate will make the current journal a datafile, and thus make it
      // eligible for compaction
      c.rotate(); 

  Using `rotate()` may also be useful when data in a collection is known to not change
  in the immediate future. After having completed all write operations on a collection,
  performing a `rotate()` will reduce the size of the current journal to the actually
  required size (remember that journals are pre-allocated with a specific size) before
  making the journal a datafile. Thus `rotate()` may cause disk space savings, even if
  the datafiles does not qualify for compaction after rotation.

  Note: rotating the journal is asynchronous, so that the actual rotation may be executed
  after `rotate()` returns to the caller.

* changed compaction to merge small datafiles together (up to 3 datafiles are merged in 
  a compaction run)

  In the regular case, this should leave less small datafiles stay around on disk and allow
  using less file descriptors in total.

* added AQL MINUS function

* added AQL UNION_DISTINCT function (more efficient than combination of `UNIQUE(UNION())`)

* updated mruby to 2013-08-22

* issue #587: Add db._create() in help for startup arangosh

* issue #586: Share a link on installation instructions in the User Manual 

* issue #585: Bison 2.4 missing on Mac for custom build

* issue #584: Web interface images broken in devel

* issue #583: Small documentation update

* issue #581: Parameter binding for attributes

* issue #580: Small improvements (by @guidoreina) 

* issue #577: Missing documentation for collection figures in implementor manual

* issue #576: Get disk usage for collections and graphs

  This extends the result of the REST API for /_api/collection/figures with
  the attributes `compactors.count`, `compactors.fileSize`, `shapefiles.count`,
  and `shapefiles.fileSize`.

* issue #575: installing devel version on mac (low prio)

* issue #574: Documentation (POST /_admin/routing/reload)

* issue #558: HTTP cursors, allow count to ignore LIMIT


v1.4.0-alpha1 (2013-08-02)
--------------------------

* added replication. check online manual for details.

* added server startup options `--server.disable-replication-logger` and 
  `--server.disable-replication-applier`

* removed action deployment tool, this now handled with Foxx and its manager or
  by kaerus node utility

* fixed a server crash when using byExample / firstExample inside a transaction
  and the collection contained a usable hash/skiplist index for the example

* defineHttp now only expects a single context

* added collection detail dialog (web interface)

  Shows collection properties, figures (datafiles, journals, attributes, etc.)
  and indexes.

* added documents filter (web interface)

  Allows searching for documents based on attribute values. One or many filter
  conditions can be defined, using comparison operators such as '==', '<=', etc.

* improved AQL editor (web interface)

  Editor supports keyboard shortcuts (Submit, Undo, Redo, Select).
  Editor allows saving and reusing of user-defined queries.
  Added example queries to AQL editor.
  Added comment button.

* added document import (web interface)

  Allows upload of JSON-data from files. Files must have an extension of .json.

* added dashboard (web interface)

  Shows the status of replication and multiple system charts, e.g.
  Virtual Memory Size, Request Time, HTTP Connections etc.

* added API method `/_api/graph` to query all graphs with all properties.

* added example queries in web interface AQL editor

* added arango.reconnect(<host>) method for arangosh to dynamically switch server or
  user name

* added AQL range operator `..`

  The `..` operator can be used to easily iterate over a sequence of numeric
  values. It will produce a list of values in the defined range, with both bounding 
  values included.

  Example:

      2010..2013

  will produce the following result:

      [ 2010, 2011, 2012, 2013 ]

* added AQL RANGE function

* added collection.first(count) and collection.last(count) document access functions
  
  These functions allow accessing the first or last n documents in a collection. The order
  is determined by document insertion/update time.

* added AQL INTERSECTION function

* INCOMPATIBLE CHANGE: changed AQL user function namespace resolution operator from `:` to `::`

  AQL user-defined functions were introduced in ArangoDB 1.3, and the namespace resolution
  operator for them was the single colon (`:`). A function call looked like this:

      RETURN mygroup:myfunc()

  The single colon caused an ambiguity in the AQL grammar, making it indistinguishable from
  named attributes or the ternary operator in some cases, e.g.

      { mygroup:myfunc ? mygroup:myfunc }

  The change of the namespace resolution operator from `:` to `::` fixes this ambiguity.

  Existing user functions in the database will be automatically fixed when starting ArangoDB
  1.4 with the `--upgrade` option. However, queries using user-defined functions need to be
  adjusted on the client side to use the new operator.

* allow multiple AQL LET declarations separated by comma, e.g.
  LET a = 1, b = 2, c = 3

* more useful AQL error messages

  The error position (line/column) is more clearly indicated for parse errors.
  Additionally, if a query references a collection that cannot be found, the error
  message will give a hint on the collection name

* changed return value for AQL `DOCUMENT` function in case document is not found
  
  Previously, when the AQL `DOCUMENT` function was called with the id of a document and
  the document could not be found, it returned `undefined`. This value is not part of the
  JSON type system and this has caused some problems.
  Starting with ArangoDB 1.4, the `DOCUMENT` function will return `null` if the document
  looked for cannot be found.

  In case the function is called with a list of documents, it will continue to return all
  found documents, and will not return `null` for non-found documents. This has not changed.

* added single line comments for AQL

  Single line comments can be started with a double forward slash: `//`.
  They end at the end of the line, or the end of the query string, whichever is first.

* fixed documentation issues #567, #568, #571.

* added collection.checksum(<withData>) method to calculate CRC checksums for
  collections

  This can be used to 
  - check if data in a collection has changed
  - compare the contents of two collections on different ArangoDB instances

* issue #565: add description line to aal.listAvailable()

* fixed several out-of-memory situations when double freeing or invalid memory
  accesses could happen

* less msyncing during the creation of collections

  This is achieved by not syncing the initial (standard) markers in shapes collections.
  After all standard markers are written, the shapes collection will get synced.

* renamed command-line option `--log.filter` to `--log.source-filter` to avoid
  misunderstandings

* introduced new command-line option `--log.content-filter` to optionally restrict 
  logging to just specific log messages (containing the filter string, case-sensitive).
  
  For example, to filter on just log entries which contain `ArangoDB`, use:
  
      --log.content-filter "ArangoDB"

* added optional command-line option `--log.requests-file` to log incoming HTTP
  requests to a file.

  When used, all HTTP requests will be logged to the specified file, containing the
  client IP address, HTTP method, requests URL, HTTP response code, and size of the
  response body.

* added a signal handler for SIGUSR1 signal: 

  when ArangoDB receives this signal, it will respond all further incoming requests
  with an HTTP 503 (Service Unavailable) error. This will be the case until another
  SIGUSR1 signal is caught. This will make ArangoDB start serving requests regularly
  again. Note: this is not implemented on Windows.

* limited maximum request URI length to 16384 bytes:

  Incoming requests with longer request URIs will be responded to with an HTTP
  414 (Request-URI Too Long) error.

* require version 1.0 or 1.1 in HTTP version signature of requests sent by clients:
  
  Clients sending requests with a non-HTTP 1.0 or non-HTTP 1.1 version number will
  be served with an HTTP 505 (HTTP Version Not Supported) error.

* updated manual on indexes:  

  using system attributes such as `_id`, `_key`, `_from`, `_to`, `_rev` in indexes is
  disallowed and will be rejected by the server. This was the case since ArangoDB 1.3,
  but was not properly documented.

* issue #563: can aal become a default object?

  aal is now a prefab object in arangosh

* prevent certain system collections from being renamed, dropped, or even unloaded.

  Which restrictions there are for which system collections may vary from release to
  release, but users should in general not try to modify system collections directly
  anyway. 
  
  Note: there are no such restrictions for user-created collections.

* issue #559: added Foxx documentation to user manual

* added server startup option `--server.authenticate-system-only`. This option can be
  used to restrict the need for HTTP authentication to internal functionality and APIs,
  such as `/_api/*` and `/_admin/*`. 
  Setting this option to `true` will thus force authentication for the ArangoDB APIs 
  and the web interface, but allow unauthenticated requests for other URLs (including
  user defined actions and Foxx applications).
  The default value of this option is `false`, meaning that if authentication is turned
  on, authentication is still required for *all* incoming requests. Only by setting the
  option to `true` this restriction is lifted and authentication becomes required for
  URLs starting with `/_` only.

  Please note that authentication still needs to be enabled regularly by setting the
  `--server.disable-authentication` parameter to `false`. Otherwise no authentication 
  will be required for any URLs as before.

* protect collections against unloading when there are still document barriers around.

* extended cap constraints to optionally limit the active data size in a collection to
  a specific number of bytes.

  The arguments for creating a cap constraint are now:
  `collection.ensureCapConstraint(<count>, <byteSize>);`

  It is supported to specify just a count as in ArangoDB 1.3 and before, to specify 
  just a fileSize, or both. The first met constraint will trigger the automated
  document removal.

* added `db._exists(doc)` and `collection.exists(doc)` for easy document existence checks

* added API `/_api/current-database` to retrieve information about the database the
  client is currently connected to (note: the API `/_api/current-database` has been
  removed in the meantime. The functionality is accessible via `/_api/database/current` 
  now).

* ensure a proper order of tick values in datafiles/journals/compactors.
  any new files written will have the _tick values of their markers in order. for
  older files, there are edge cases at the beginning and end of the datafiles when
  _tick values are not properly in order.

* prevent caching of static pages in PathHandler. 
  whenever a static page is requested that is served by the general PathHandler, the
  server will respond to HTTP GET requests with a "Cache-Control: max-age=86400" header.

* added "doCompact" attribute when creating collections and to collection.properties().
  The attribute controls whether collection datafiles are compacted.

* changed the HTTP return code from 400 to 404 for some cases when there is a referral 
  to a non-existing collection or document.

* introduced error code 1909 `too many iterations` that is thrown when graph traversals
  hit the `maxIterations` threshold.

* optionally limit traversals to a certain number of iterations
  the limitation can be achieved via the traversal API by setting the `maxIterations` 
  attribute, and also via the AQL `TRAVERSAL` and `TRAVERSAL_TREE` functions by setting
  the same attribute. If traversals are not limited by the end user, a server-defined
  limit for `maxIterations` may be used to prevent server-side traversals from running
  endlessly.

* added graph traversal API at `/_api/traversal`

* added "API" link in web interface, pointing to REST API generated with Swagger

* moved "About" link in web interface into "links" menu

* allow incremental access to the documents in a collection from out of AQL
  this allows reading documents from a collection chunks when a full collection scan
  is required. memory usage might be must lower in this case and queries might finish
  earlier if there is an additional LIMIT statement

* changed AQL COLLECT to use a stable sort, so any previous SORT order is preserved

* issue #547: Javascript error in the web interface

* issue #550: Make AQL graph functions support key in addition to id

* issue #526: Unable to escape when an errorneous command is entered into the js shell

* issue #523: Graph and vertex methods for the javascript api
 
* issue #517: Foxx: Route parameters with captial letters fail

* issue #512: Binded Parameters for LIMIT


v1.3.3 (2013-08-01)
-------------------

* issue #570: updateFishbowl() fails once

* updated and fixed generated examples

* issue #559: added Foxx documentation to user manual

* added missing error reporting for errors that happened during import of edges


v1.3.2 (2013-06-21)
-------------------

* fixed memleak in internal.download()

* made the shape-collection journal size adaptive:
  if too big shapes come in, a shape journal will be created with a big-enough size
  automatically. the maximum size of a shape journal is still restricted, but to a 
  very big value that should never be reached in practice.

* fixed a segfault that occurred when inserting documents with a shape size bigger
  than the default shape journal size (2MB)

* fixed a locking issue in collection.truncate()

* fixed value overflow in accumulated filesizes reported by collection.figures()

* issue #545: AQL FILTER unnecessary (?) loop

* issue #549: wrong return code with --daemon


v1.3.1 (2013-05-24)
-------------------

* removed currently unused _ids collection

* fixed usage of --temp-path in aranogd and arangosh

* issue #540: suppress return of temporary internal variables in AQL

* issue #530: ReferenceError: ArangoError is not a constructor

* issue #535: Problem with AQL user functions javascript API

* set --javascript.app-path for test execution to prevent startup error

* issue #532: Graph _edgesCache returns invalid data?

* issue #531: Arangod errors

* issue #529: Really weird transaction issue

* fixed usage of --temp-path in aranogd and arangosh


v1.3.0 (2013-05-10)
-------------------

* fixed problem on restart ("datafile-xxx is not sealed") when server was killed
  during a compaction run

* fixed leak when using cursors with very small batchSize

* issue #508: `unregistergroup` function not mentioned in http interface docs

* issue #507: GET /_api/aqlfunction returns code inside parentheses

* fixed issue #489: Bug in aal.install

* fixed issue 505: statistics not populated on MacOS


v1.3.0-rc1 (2013-04-24)
-----------------------

* updated documentation for 1.3.0

* added node modules and npm packages

* changed compaction to only compact datafiles with more at least 10% of dead
  documents (byte size-wise)

* issue #498: fixed reload of authentication info when using 
  `require("org/arangodb/users").reload()`

* issue #495: Passing an empty array to create a document results in a 
  "phantom" document

* added more precision for requests statistics figures

* added "sum" attribute for individual statistics results in statistics API
  at /_admin/statistics

* made "limit" an optional parameter in AQL function NEAR().
  limit can now be either omitted completely, or set to 0. If so, an internal
  default value (currently 100) will be applied for the limit.

* issue #481

* added "attributes.count" to output of `collection.figures()`
  this also affects the REST API /_api/collection/<name>/figures

* added IndexedPropertyGetter for ShapedJson objects

* added API for user-defined AQL functions

* issue #475: A better error message for deleting a non-existent graph

* issue #474: Web interface problems with the JS Shell
 
* added missing documentation for AQL UNION function

* added transaction support. 
  This provides ACID transactions for ArangoDB. Transactions can be invoked
  using the `db._executeTransaction()` function, or the `/_api/transaction`
  REST API.

* switched to semantic versioning (at least for alpha & alpha naming)

* added saveOrReplace() for server-side JS

v1.3.alpha1 (2013-04-05)
------------------------

* cleanup of Module, Package, ArangoApp and modules "internal", "fs", "console"

* use Error instead of string in throw to allow stack-trace

* issue #454: error while creation of Collection

* make `collection.count()` not recalculate the number of documents on the fly, but
  use some internal document counters.

* issue #457: invalid string value in web interface

* make datafile id (datafile->_fid) identical to the numeric part of the filename.
  E.g. the datafile `journal-123456.db` will now have a datafile marker with the same
  fid (i.e. `123456`) instead of a different value. This change will only affect
  datafiles that are created with 1.3 and not any older files.
  The intention behind this change is to make datafile debugging easier.

* consistently discard document attributes with reserved names (system attributes)
  but without any known meaning, for example `_test`, `_foo`, ...

  Previously, these attributes were saved with the document regularly in some cases,
  but were discarded in other cases. 
  Now these attributes are discarded consistently. "Real" system attributes such as
  `_key`, `_from`, `_to` are not affected and will work as before.
  
  Additionally, attributes with an empty name (``) are discarded when documents are
  saved.

  Though using reserved or empty attribute names in documents was not really and 
  consistently supported in previous versions of ArangoDB, this change might cause 
  an incompatibility for clients that rely on this feature.

* added server startup flag `--database.force-sync-properties` to force syncing of
  collection properties on collection creation, deletion and on property update.
  The default value is true to mimic the behavior of previous versions of ArangoDB.
  If set to false, collection properties are written to disk but no call to sync()
  is made.

* added detailed output of server version and components for REST APIs
  `/_admin/version` and `/_api/version`. To retrieve this extended information,
  call the REST APIs with URL parameter `details=true`.

* issue #443: For git-based builds include commit hash in version

* adjust startup log output to be more compact, less verbose

* set the required minimum number of file descriptors to 256.
  On server start, this number is enforced on systems that have rlimit. If the limit
  cannot be enforced, starting the server will fail.
  Note: 256 is considered to be the absolute minimum value. Depending on the use case
  for ArangoDB, a much higher number of file descriptors should be used.

  To avoid checking & potentially changing the number of maximum open files, use the
  startup option `--server.descriptors-minimum 0`

* fixed shapedjson to json conversion for special numeric values (NaN, +inf, -inf).
  Before, "NaN", "inf", or "-inf" were written into the JSONified output, but these 
  values are not allowed in JSON. Now, "null" is written to the JSONified output as
  required.

* added AQL functions VARIANCE_POPULATION(), VARIANCE_SAMPLE(), STDDEV_POPULATION(),
  STDDEV_SAMPLE(), AVERAGE(), MEDIAN() to calculate stastical values for lists

* added AQL SQRT() function

* added AQL TRIM(), LEFT() and RIGHT() string functions

* fixed issue #436: GET /_api/document on edge
 
* make AQL REVERSE() and LENGTH() functions work on strings, too

* disabled DOT generation in `make doxygen`. this speeds up docs generation

* renamed startup option `--dispatcher.report-intervall` to `--dispatcher.report-interval`

* renamed startup option `--scheduler.report-intervall` to `--scheduler.report-interval`

* slightly changed output of REST API method /_admin/log.
  Previously, the log messages returned also contained the date and log level, now
  they will only contain the log message, and no date and log level information.
  This information can be re-created by API users from the `timestamp` and `level`
  attributes of the result.

* removed configure option `--enable-zone-debug`
  memory zone debugging is now automatically turned on when compiling with ArangoDB
  `--enable-maintainer-mode`

* removed configure option `--enable-arangob`
  arangob is now always included in the build


v1.2.3 (XXXX-XX-XX)
-------------------

* added optional parameter `edgexamples` for AQL function EDGES() and NEIGHBORS()

* added AQL function NEIGHBORS()
 
* added freebsd support

* fixed firstExample() query with `_id` and `_key` attributes

* issue triAGENS/ArangoDB-PHP#55: AQL optimiser may have mis-optimised duplicate 
  filter statements with limit


v1.2.2 (2013-03-26)
-------------------

* fixed save of objects with common sub-objects

* issue #459: fulltext internal memory allocation didn't scale well
  This fix improves loading times for collections with fulltext indexes that have
  lots of equal words indexed.

* issue #212: auto-increment support

  The feature can be used by creating a collection with the extra `keyOptions`
  attribute as follows:

      db._create("mycollection", { keyOptions: { type: "autoincrement", offset: 1, increment: 10, allowUserKeys: true } });

  The `type` attribute will make sure the keys will be auto-generated if no 
  `_key` attribute is specified for a document.

  The `allowUserKeys` attribute determines whether users might still supply own 
  `_key` values with documents or if this is considered an error.

  The `increment` value determines the actual increment value, whereas the `offset` 
  value can be used to seed to value sequence with a specific starting value. 
  This will be useful later in a multi-master setup, when multiple servers can use
  different auto-increment seed values and thus generate non-conflicting auto-increment values.

  The default values currently are:

  - `allowUserKeys`: `true`
  - `offset`: `0`
  - `increment`: `1`

  The only other available key generator type currently is `traditional`. 
  The `traditional` key generator will auto-generate keys in a fashion as ArangoDB 
  always did (some increasing integer value, with a more or less unpredictable
  increment value).

  Note that for the `traditional` key generator there is only the option to disallow 
  user-supplied keys and give the server the sole responsibility for key generation.
  This can be achieved by setting the `allowUserKeys` property to `false`.

  This change also introduces the following errors that API implementors may want to check
  the return values for:

  - 1222: `document key unexpected`: will be raised when a document is created with
    a `_key` attribute, but the underlying collection was set up with the `keyOptions`
    attribute `allowUserKeys: false`.

  - 1225: `out of keys`: will be raised when the auto-increment key generator runs
    out of keys. This may happen when the next key to be generated is 2^64 or higher.
    In practice, this will only happen if the values for `increment` or `offset` are
    not set appropriately, or if users are allowed to supply own keys, those keys
    are near the 2^64 threshold, and later the auto-increment feature kicks in and
    generates keys that cross that threshold.

    In practice it should not occur with proper configuration and proper usage of the
    collections.

  This change may also affect the following REST APIs:
  - POST `/_api/collection`: the server does now accept the optional `keyOptions` 
    attribute in the second parameter
  - GET `/_api/collection/properties`: will return the `keyOptions` attribute as part
    of the collection's properties. The previous optional attribute `createOptions` 
    is now gone.

* fixed `ArangoStatement.explain()` method with bind variables

* fixed misleading "cursor not found" error message in arangosh that occurred when
  `count()` was called for client-side cursors

* fixed handling of empty attribute names, which may have crashed the server under
  certain circumstances before

* fixed usage of invalid pointer in error message output when index description could
  not be opened


v1.2.1 (2013-03-14)
-------------------

* issue #444: please darken light color in arangosh

* issue #442: pls update post install info on osx

* fixed conversion of special double values (NaN, -inf, +inf) when converting from 
  shapedjson to JSON

* fixed compaction of markers (location of _key was not updated correctly in memory,
  leading to _keys pointing to undefined memory after datafile rotation)

* fixed edge index key pointers to use document master pointer plus offset instead
  of direct _key address

* fixed case when server could not create any more journal or compactor files. 
  Previously a wrong status code may have been returned, and not being able to create
  a new compactor file may have led to an infinite loop with error message
  "could not create compactor".
 
* fixed value truncation for numeric filename parts when renaming datafiles/journals


v1.2.0 (2013-03-01)
-------------------

* by default statistics are now switch off; in order to enable comment out
  the "disable-statistics = yes" line in "arangod.conf"

* fixed issue #435: csv parser skips data at buffer border

* added server startup option `--server.disable-statistics` to turn off statistics
  gathering without recompilation of ArangoDB.
  This partly addresses issue #432.

* fixed dropping of indexes without collection name, e.g.
  `db.xxx.dropIndex("123456");`
  Dropping an index like this failed with an assertion error.
 
* fixed issue #426: arangoimp should be able to import edges into edge collections

* fixed issue #425: In case of conflict ArangoDB returns HTTP 400 Bad request 
  (with 1207 Error) instead of HTTP 409 Conflict

* fixed too greedy token consumption in AQL for negative values:
  e.g. in the statement `RETURN { a: 1 -2 }` the minus token was consumed as part 
  of the value `-2`, and not interpreted as the binary arithmetic operator


v1.2.beta3 (2013-02-22)
-----------------------

* issue #427: ArangoDB Importer Manual has no navigation links (previous|home|next)

* issue #319: Documentation missing for Emergency console and incomplete for datafile debugger.

* issue #370: add documentation for reloadRouting and flushServerModules

* issue #393: added REST API for user management at /_api/user

* issue #393, #128: added simple cryptographic functions for user actions in module "crypto":
  * require("org/arangodb/crypto").md5()
  * require("org/arangodb/crypto").sha256()
  * require("org/arangodb/crypto").rand()

* added replaceByExample() Javascript and REST API method

* added updateByExample() Javascript and REST API method

* added optional "limit" parameter for removeByExample() Javascript and REST API method

* fixed issue #413

* updated bundled V8 version from 3.9.4 to 3.16.14.1
  Note: the Windows version used a more recent version (3.14.0.1) and was not updated.

* fixed issue #404: keep original request url in request object


v1.2.beta2 (2013-02-15)
-----------------------

* fixed issue #405: 1.2 compile warnings

* fixed issue #333: [debian] Group "arangodb" is not used when starting vie init.d script

* added optional parameter 'excludeSystem' to GET /_api/collection
  This parameter can be used to disable returning system collections in the list
  of all collections.

* added AQL functions KEEP() and UNSET()

* fixed issue #348: "HTTP Interface for Administration and Monitoring" 
  documentation errors.

* fix stringification of specific positive int64 values. Stringification of int64
  values with the upper 32 bits cleared and the 33rd bit set were broken.

* issue #395:  Collection properties() function should return 'isSystem' for 
  Javascript and REST API

* make server stop after upgrade procedure when invoked with `--upgrade option`.
  When started with the `--upgrade` option, the server will perfom
  the upgrade, and then exit with a status code indicating the result of the
  upgrade (0 = success, 1 = failure). To start the server regularly in either 
  daemon or console mode, the `--upgrade` option must not be specified.
  This change was introduced to allow init.d scripts check the result of
  the upgrade procedure, even in case an upgrade was successful.
  this was introduced as part of issue #391.

* added AQL function EDGES()

* added more crash-protection when reading corrupted collections at startup

* added documentation for AQL function CONTAINS()

* added AQL function LIKE()

* replaced redundant error return code 1520 (Unable to open collection) with error code
  1203 (Collection not found). These error codes have the same meanings, but one of
  them was returned from AQL queries only, the other got thrown by other parts of
  ArangoDB. Now, error 1203 (Collection not found) is used in AQL too in case a 
  non-existing collection is used.

v1.2.beta1 (2013-02-01)
-----------------------

* fixed issue #382: [Documentation error] Maschine... should be Machine...
 
* unified history file locations for arangod, arangosh, and arangoirb.
  - The readline history for arangod (emergency console) is now stored in file
    $HOME/.arangod. It was stored in $HOME/.arango before.
  - The readline history for arangosh is still stored in $HOME/.arangosh.
  - The readline history for arangoirb is now stored in $HOME/.arangoirb. It was
    stored in $HOME/.arango-mrb before.

* fixed issue #381: _users user should have a unique constraint

* allow negative list indexes in AQL to access elements from the end of a list,
  e.g. ```RETURN values[-1]``` will return the last element of the `values` list.

* collection ids, index ids, cursor ids, and document revision ids created and 
  returned by ArangoDB are now returned as strings with numeric content inside. 
  This is done to prevent some value overrun/truncation in any part of the
  complete client/server workflow. 
  In ArangoDB 1.1 and before, these values were previously returned as 
  (potentially very big) integer values. This may cause problems (clipping, overrun,
  precision loss) for clients that do not support big integers natively and store 
  such values in IEEE754 doubles internally. This type loses precision after about
  52 bits and is thus not safe to hold an id.
  Javascript and 32 bit-PHP are examples for clients that may cause such problems. 
  Therefore, ids are now returned by ArangoDB as strings, with the string
  content being the integer value as before. 

  Example for documents ("_rev" attribute):
  - Document returned by ArangoDB 1.1: { "_rev": 1234, ... } 
  - Document returned by ArangoDB 1.2: { "_rev": "1234", ... } 
  
  Example for collections ("id" attribute / "_id" property):
  - Collection returned by ArangoDB 1.1: { "id": 9327643, "name": "test", ... } 
  - Collection returned by ArangoDB 1.2: { "id": "9327643", "name": "test", ... }

  Example for cursors ("id" attribute):
  - Collection returned by ArangoDB 1.1: { "id": 11734292, "hasMore": true, ... } 
  - Collection returned by ArangoDB 1.2: { "id": "11734292", "hasMore": true, ... }

* global variables are not automatically available anymore when starting the 
  arangod Javascript emergency console (i.e. ```arangod --console```). 
  
  Especially, the variables `db`, `edges`, and `internal` are not available 
  anymore. `db` and `internal` can be made available in 1.2 by
  ```var db = require("org/arangodb").db;``` and
  ```var internal = require("internal");```, respectively.
  The reason for this change is to get rid of global variables in the server
  because this will allow more specific inclusion of functionality.

  For convenience, the global variable `db` is still available by default in 
  arangosh. The global variable `edges`, which since ArangoDB 1.1 was kind of
  a redundant wrapper of `db`, has been removed in 1.2 completely.
  Please use `db` instead, and if creating an edge collection, use the explicit
  ```db._createEdgeCollection()``` command.

* issue #374: prevent endless redirects when calling admin interface with 
  unexpected URLs

* issue #373: TRAVERSAL() `trackPaths` option does not work. Instead `paths` does work

* issue #358: added support for CORS

* honor optional waitForSync property for document removal, replace, update, and
  save operations in arangosh. The waitForSync parameter for these operations
  was previously honored by the REST API and on the server-side, but not when
  the waitForSync parameter was specified for a document operation in arangosh.

* calls to db.collection.figures() and /_api/collection/<collection>/figures now 
  additionally return the number of shapes used in the collection in the
  extra attribute "shapes.count"

* added AQL TRAVERSAL_TREE() function to return a hierchical result from a traversal

* added AQL TRAVERSAL() function to return the results from a traversal

* added AQL function ATTRIBUTES() to return the attribute names of a document

* removed internal server-side AQL functions from global scope. 

  Now the AQL internal functions can only be accessed via the exports of the 
  ahuacatl module, which can be included via ```require("org/arangodb/ahuacatl")```.
  It shouldn't be necessary for clients to access this module at all, but 
  internal code may use this module.

  The previously global AQL-related server-side functions were moved to the 
  internal namespace. This produced the following function name changes on 
  the server:

     old name              new name
     ------------------------------------------------------
     AHUACATL_RUN       => require("internal").AQL_QUERY
     AHUACATL_EXPLAIN   => require("internal").AQL_EXPLAIN
     AHUACATL_PARSE     => require("internal").AQL_PARSE

  Again, clients shouldn't have used these functions at all as there is the
  ArangoStatement object to execute AQL queries.

* fixed issue #366: Edges index returns strange description

* added AQL function MATCHES() to check a document against a list of examples

* added documentation and tests for db.collection.removeByExample

* added --progress option for arangoimp. This will show the percentage of the input
  file that has been processed by arangoimp while the import is still running. It can
  be used as a rough indicator of progress for the entire import.

* make the server log documents that cannot be imported via /_api/import into the
  logfile using the warning log level. This may help finding illegal documents in big
  import runs.

* check on server startup whether the database directory and all collection directories
  are writable. if not, the server startup will be aborted. this prevents serious
  problems with collections being non-writable and this being detected at some pointer
  after the server has been started

* allow the following AQL constructs: FUNC(...)[...], FUNC(...).attribute

* fixed issue #361: Bug in Admin Interface. Header disappears when clicking new collection

* Added in-memory only collections

  Added collection creation parameter "isVolatile": 
  if set to true, the collection is created as an in-memory only collection, 
  meaning that all document data of that collection will reside in memory only, 
  and will not be stored permanently to disk. 
  This means that all collection data will be lost when the collection is unloaded 
  or the server is shut down.
  As this collection type does not have datafile disk overhead for the regular 
  document operations, it may be faster than normal disk-backed collections. The
  actual performance gains strongly depend on the underlying OS, filesystem, and 
  settings though.
  This collection type should be used for caches only and not for any sensible data
  that cannot be re-created otherwise.
  Some platforms, namely Windows, currently do not support this collection type.
  When creating an in-memory collection on such platform, an error message will be
  returned by ArangoDB telling the user the platform does not support it.

  Note: in-memory collections are an experimental feature. The feature might
  change drastically or even be removed altogether in a future version of ArangoDB.

* fixed issue #353: Please include "pretty print" in Emergency Console

* fixed issue #352: "pretty print" console.log
  This was achieved by adding the dump() function for the "internal" object

* reduced insertion time for edges index
  Inserting into the edges index now avoids costly comparisons in case of a hash 
  collision, reducing the prefilling/loading timer for bigger edge collections

* added fulltext queries to AQL via FULLTEXT() function. This allows search 
  fulltext indexes from an AQL query to find matching documents

* added fulltext index type. This index type allows indexing words and prefixes of
  words from a specific document attribute. The index can be queries using a
  SimpleQueryFull object, the HTTP REST API at /_api/simple/fulltext, or via AQL

* added collection.revision() method to determine whether a collection has changed. 
  The revision method returns a revision string that can be used by client programs
  for equality/inequality comparisons. The value returned by the revision method
  should be treated by clients as an opaque string and clients should not try to
  figure out the sense of the revision id. This is still useful enough to check
  whether data in a collection has changed.

* issue #346: adaptively determine NUMBER_HEADERS_PER_BLOCK

* issue #338: arangosh cursor positioning problems

* issue #326: use limit optimisation with filters

* issue #325: use index to avoid sorting

* issue #324: add limit optimisation to AQL

* removed arango-password script and added Javascript functionality to add/delete
  users instead. The functionality is contained in module `users` and can be invoked
  as follows from arangosh and arangod:
  * require("users").save("name", "passwd");
  * require("users").replace("name", "newPasswd");
  * require("users").remove("name");
  * require("users").reload();
  These functions are intentionally not offered via the web interface.
  This also addresses issue #313

* changed print output in arangosh and the web interface for JSON objects.
  Previously, printing a JSON object in arangosh resulted in the attribute values
  being printed as proper JSON, but attribute names were printed unquoted and
  unescaped. This was fine for the purpose of arangosh, but lead to invalid
  JSON being produced. Now, arangosh will produce valid JSON that can be used
  to send it back to ArangoDB or use it with arangoimp etc.

* fixed issue #300: allow importing documents via the REST /_api/import API 
  from a JSON list, too.
  So far, the API only supported importing from a format that had one JSON object
  on each line. This is sometimes inconvenient, e.g. when the result of an AQL
  query or any other list is to be imported. This list is a JSON list and does not
  necessary have a document per line if pretty-printed.
  arangoimp now supports the JSON list format, too. However, the format requires
  arangoimp and the server to read the entire dataset at once. If the dataset is
  too big (bigger than --max-upload-size) then the import will be rejected. Even if
  increased, the entire list must fit in memory on both the client and the server,
  and this may be more resource-intensive than importing individual lines in chunks.

* removed unused parameter --reuse-ids for arangoimp. This parameter did not have
  any effect in 1.2, was never publicly announced and did evil (TM) things.

* fixed issue #297 (partly): added whitespace between command line and
  command result in arangosh, added shell colors for better usability

* fixed issue #296: system collections not usable from AQL

* fixed issue #295: deadlock on shutdown

* fixed issue #293: AQL queries should exploit edges index

* fixed issue #292: use index when filtering on _key in AQL

* allow user-definable document keys
  users can now define their own document keys by using the _key attribute
  when creating new documents or edges. Once specified, the value of _key is
  immutable.
  The restrictions for user-defined key values are:
  * the key must be at most 254 bytes long
  * it must consist of the letters a-z (lower or upper case), the digits 0-9,
    the underscore (_) or dash (-) characters only
  * any other characters, especially multi-byte sequences, whitespace or
    punctuation characters cannot be used inside key values

  Specifiying a document key is optional when creating new documents. If no
  document key is specified, ArangoDB will create a document key itself.
  There are no guarantees about the format and pattern of auto-generated document
  keys other than the above restrictions.
  Clients should therefore treat auto-generated document keys as opaque values.
  Keys can be used to look up and reference documents, e.g.:
  * saving a document: `db.users.save({ "_key": "fred", ... })`
  * looking up a document: `db.users.document("fred")`
  * referencing other documents: `edges.relations.save("users/fred", "users/john", ...)`

  This change is downwards-compatible to ArangoDB 1.1 because in ArangoDB 1.1 
  users were not able to define their own keys. If the user does not supply a _key
  attribute when creating a document, ArangoDB 1.2 will still generate a key of
  its own as ArangoDB 1.1 did. However, all documents returned by ArangoDB 1.2 will 
  include a _key attribute and clients should be able to handle that (e.g. by
  ignoring it if not needed). Documents returned will still include the _id attribute
  as in ArangoDB 1.1.

* require collection names everywhere where a collection id was allowed in 
  ArangoDB 1.1 & 1.0
  This change requires clients to use a collection name in place of a collection id 
  at all places the client deals with collections.
  Examples:
  * creating edges: the _from and _to attributes must now contain collection names instead
    of collection ids: `edges.relations.save("test/my-key1", "test/my-key2", ...)`
  * retrieving edges: the returned _from and _to attributes now will contain collection
    names instead of ids, too: _from: `test/fred` instead of `1234/3455`
  * looking up documents: db.users.document("fred") or db._document("users/fred")
  
  Collection names must be used in REST API calls instead of collection ids, too.
  This change is thus not completely downwards-compatible to ArangoDB 1.1. ArangoDB 1.1
  required users to use collection ids in many places instead of collection names.
  This was unintuitive and caused overhead in cases when just the collection name was
  known on client-side but not its id. This overhead can now be avoided so clients can
  work with the collection names directly. There is no need to work with collection ids
  on the client side anymore. 
  This change will likely require adjustments to API calls issued by clients, and also
  requires a change in how clients handle the _id value of returned documents. Previously,
  the _id value of returned documents contained the collection id, a slash separator and
  the document number. Since 1.2, _id will contain the collection name, a slash separator
  and the document key. The same applies to the _from and _to attribute values of edges
  that are returned by ArangoDB.

  Also removed (now unnecessary) location header in responses of the collections REST API.
  The location header was previously returned because it was necessary for clients.
  When clients created a collection, they specified the collection name. The collection
  id was generated on the server, but the client needed to use the server-generated
  collection id for further API calls, e.g. when creating edges etc. Therefore, the
  full collection URL, also containing the collection id, was returned by the server in
  responses to the collection API, in the HTTP location header.
  Returning the location header has become unnecessary in ArangoDB 1.2 because users
  can access collections by name and do not need to care about collection ids.


v1.1.3 (2013-XX-XX)
-------------------

* fix case when an error message was looked up for an error code but no error
  message was found. In this case a NULL ptr was returned and not checked everywhere.
  The place this error popped up was when inserting into a non-unique hash index
  failed with a specific, invalid error code.

* fixed issue #381:  db._collection("_users").getIndexes();

* fixed issue #379: arango-password fatal issue javscript.startup-directory 

* fixed issue #372: Command-Line Options for the Authentication and Authorisation


v1.1.2 (2013-01-20)
-------------------

* upgraded to mruby 2013-01-20 583983385b81c21f82704b116eab52d606a609f4

* fixed issue #357: Some spelling and grammar errors

* fixed issue #355: fix quotes in pdf manual
 
* fixed issue #351: Strange arangosh error message for long running query 

* fixed randomly hanging connections in arangosh on MacOS

* added "any" query method: this returns a random document from a collection. It
  is also available via REST HTTP at /_api/simple/any.

* added deployment tool

* added getPeerVertex

* small fix for logging of long messages: the last character of log messages longer
  than 256 bytes was not logged.

* fixed truncation of human-readable log messages for web interface: the trailing \0
  byte was not appended for messages longer than 256 bytes

* fixed issue #341: ArangoDB crashes when stressed with Batch jobs
  Contrary to the issue title, this did not have anything to do with batch jobs but
  with too high memory usage. The memory usage of ArangoDB is now reduced for cases
   when there are lots of small collections with few documents each

* started with issue #317: Feature Request (from Google Groups): DATE handling

* backported issue #300: Extend arangoImp to Allow importing resultset-like 
  (list of documents) formatted files

* fixed issue #337: "WaitForSync" on new collection does not work on Win/X64

* fixed issue #336: Collections REST API docs

* fixed issue #335: mmap errors due to wrong memory address calculation 

* fixed issue #332: arangoimp --use-ids parameter seems to have no impact

* added option '--server.disable-authentication' for arangosh as well. No more passwd
  prompts if not needed

* fixed issue #330: session logging for arangosh

* fixed issue #329: Allow passing script file(s) as parameters for arangosh to run

* fixed issue #328: 1.1 compile warnings

* fixed issue #327: Javascript parse errors in front end


v1.1.1 (2012-12-18)
-------------------

* fixed issue #339: DELETE /_api/cursor/cursor-identifier return incollect errorNum

  The fix for this has led to a signature change of the function actions.resultNotFound().
  The meaning of parameter #3 for This function has changed from the error message string
  to the error code. The error message string is now parameter #4.
  Any client code that uses this function in custom actions must be adjusted.

* fixed issue #321: Problem upgrading arangodb 1.0.4 to 1.1.0 with Homebrew (OSX 10.8.2)

* fixed issue #230: add navigation and search for online documentation

* fixed issue #315: Strange result in PATH

* fixed issue #323: Wrong function returned in error message of AQL CHAR_LENGTH()

* fixed some log errors on startup / shutdown due to pid file handling and changing
  of directories


v1.1.0 (2012-12-05)
-------------------

* WARNING:
  arangod now performs a database version check at startup. It will look for a file
  named "VERSION" in its database directory. If the file is not present, arangod will
  perform an automatic upgrade of the database directory. This should be the normal
  case when upgrading from ArangoDB 1.0 to ArangoDB 1.1.

  If the VERSION file is present but is from an older version of ArangoDB, arangod 
  will refuse to start and ask the user to run a manual upgrade first. A manual upgrade
  can be performed by starting arangod with the option `--upgrade`. 

  This upgrade procedure shall ensure that users have full control over when they 
  perform any updates/upgrades of their data, and can plan backups accordingly. The
  procedure also guarantees that the server is not run without any required system
  collections or with in incompatible data state.

* added AQL function DOCUMENT() to retrieve a document by its _id value

* fixed issue #311: fixed segfault on unload 

* fixed issue #309: renamed stub "import" button from web interface

* fixed issue #307: added WaitForSync column in collections list in in web interface 

* fixed issue #306: naming in web interface 

* fixed issue #304: do not clear AQL query text input when switching tabs in
  web interface

* fixed issue #303: added documentation about usage of var keyword in web interface

* fixed issue #301: PATCH does not work in web interface

# fixed issue #269: fix make distclean & clean

* fixed issue #296: system collections not usable from AQL

* fixed issue #295: deadlock on shutdown

* added collection type label to web interface

* fixed issue #290: the web interface now disallows creating non-edges in edge collections
  when creating collections via the web interface, the collection type must also be
  specified (default is document collection)

* fixed issue #289: tab-completion does not insert any spaces

* fixed issue #282: fix escaping in web interface

* made AQL function NOT_NULL take any number of arguments. Will now return its
  first argument that is not null, or null if all arguments are null. This is downwards
  compatible.

* changed misleading AQL function name NOT_LIST() to FIRST_LIST() and slightly changed
  the behavior. The function will now return its first argument that is a list, or null 
  if none of the arguments are lists.
  This is mostly downwards-compatible. The only change to the previous implementation in
  1.1-beta will happen if two arguments were passed and the 1st and 2nd arguments were 
  both no lists. In previous 1.1, the 2nd argument was returned as is, but now null 
  will be returned.

* add AQL function FIRST_DOCUMENT(), with same behavior as FIRST_LIST(), but working
  with documents instead of lists.

* added UPGRADING help text

* fixed issue #284: fixed Javascript errors when adding edges/vertices without own
  attributes

* fixed issue #283: AQL LENGTH() now works on documents, too

* fixed issue #281: documentation for skip lists shows wrong example

* fixed AQL optimiser bug, related to OR-combined conditions that filtered on the
  same attribute but with different conditions

* fixed issue #277: allow usage of collection names when creating edges
  the fix of this issue also implies validation of collection names / ids passed to
  the REST edge create method. edges with invalid collection ids or names in the
  "from" or "to" values will be rejected and not saved


v1.1.beta2 (2012-11-13)
-----------------------

* fixed arangoirb compilation

* fixed doxygen


v1.1.beta1 (2012-10-24)
-----------------------

* fixed AQL optimiser bug

* WARNING:
  - the user has changed from "arango" to "arangodb", the start script has changed from
    "arangod" to "arangodb", the database directory has changed from "/var/arangodb" to
    "/var/lib/arangodb" to be compliant with various Linux policies

  - In 1.1, we have introduced types for collections: regular documents go into document
    collections, and edges go into edge collections. The prefixing (db.xxx vs. edges.xxx) 
    works slightly different in 1.1: edges.xxx can still be used to access collections, 
    however, it will not determine the type of existing collections anymore. To create an 
    edge collection 1.1, you can use db._createEdgeCollection() or edges._create(). 
    And there's of course also db._createDocumentCollection(). 
    db._create() is also still there and will create a document collection by default, 
    whereas edges._create() will create an edge collection.

  - the admin web interface that was previously available via the simple URL suffix / 
    is now available via a dedicated URL suffix only: /_admin/html
    The reason for this is that routing and URLs are now subject to changes by the end user,
    and only URLs parts prefixed with underscores (e.g. /_admin or /_api) are reserved
    for ArangoDB's internal usage.

* the server now handles requests with invalid Content-Length header values as follows:
  - if Content-Length is negative, the server will respond instantly with HTTP 411
    (length required)

  - if Content-Length is positive but shorter than the supplied body, the server will
    respond with HTTP 400 (bad request)

  - if Content-Length is positive but longer than the supplied body, the server will
    wait for the client to send the missing bytes. The server allows 90 seconds for this
    and will close the connection if the client does not send the remaining data

  - if Content-Length is bigger than the maximum allowed size (512 MB), the server will 
    fail with HTTP 413 (request entitiy too large).

  - if the length of the HTTP headers is greated than the maximum allowed size (1 MB),
    the server will fail with HTTP 431 (request header fields too large)

* issue #265: allow optional base64 encoding/decoding of action response data

* issue #252: create _modules collection using arango-upgrade (note: arango-upgrade was
  finally replaced by the `--upgrade` option for arangod)

* issue #251: allow passing arbitrary options to V8 engine using new command line option:
  --javascript.v8-options. Using this option, the Harmony features or other settings in
  v8 can be enabled if the end user requires them

* issue #248: allow AQL optimiser to pull out completely uncorrelated subqueries to the
  top level, resulting in less repeated evaluation of the subquery

* upgraded to Doxygen 1.8.0

* issue #247: added AQL function MERGE_RECURSIVE

* issue #246: added clear() function in arangosh

* issue #245: Documentation: Central place for naming rules/limits inside ArangoDB

* reduced size of hash index elements by 50 %, allowing more index elements to fit in 
  memory

* issue #235: GUI Shell throws Error:ReferenceError: db is not defined

* issue #229: methods marked as "under construction" 

* issue #228: remove unfinished APIs (/_admin/config/*) 

* having the OpenSSL library installed is now a prerequisite to compiling ArangoDB
  Also removed the --enable-ssl configure option because ssl is always required.

* added AQL functions TO_LIST, NOT_LIST

* issue #224: add optional Content-Id for batch requests

* issue #221: more documentation on AQL explain functionality. Also added
  ArangoStatement.explain() client method

* added db._createStatement() method on server as well (was previously available
  on the client only)

* issue #219: continue in case of "document not found" error in PATHS() function

* issue #213: make waitForSync overridable on specifc actions

* changed AQL optimiser to use indexes in more cases. Previously, indexes might
  not have been used when in a reference expression the inner collection was 
  specified last. Example: FOR u1 IN users FOR u2 IN users FILTER u1._id == u2._id
  Previously, this only checked whether an index could be used for u2._id (not
  possible). It was not checked whether an index on u1._id could be used (possible).
  Now, for expressions that have references/attribute names on both sides of the
  above as above, indexes are checked for both sides.
  
* issue #204: extend the CSV import by TSV and by user configurable 
  seperator character(s)

* issue #180: added support for batch operations

* added startup option --server.backlog-size
  this allows setting the value of the backlog for the listen() system call.
  the default value is 10, the maximum value is platform-dependent

* introduced new configure option "--enable-maintainer-mode" for
  ArangoDB maintainers. this option replaces the previous compile switches
  --with-boost-test, --enable-bison, --enable-flex and --enable-errors-dependency
  the individual configure options have been removed. --enable-maintainer-mode
  turns them all on.

* removed potentially unused configure option --enable-memfail

* fixed issue #197: HTML web interface calls /_admin/user-manager/session

* fixed issue #195: VERSION file in database directory

* fixed issue #193: REST API HEAD request returns a message body on 404

* fixed issue #188: intermittent issues with 1.0.0
  (server-side cursors not cleaned up in all cases, pthreads deadlock issue)

* issue #189: key store should use ISO datetime format bug 

* issue #187: run arango-upgrade on server start (note: arango-upgrade was finally
  replaced by the `--upgrade` option for arangod)n

* fixed issue #183: strange unittest error

* fixed issue #182: manual pages

* fixed issue #181: use getaddrinfo

* moved default database directory to "/var/lib/arangodb" in accordance with 
  http://www.pathname.com/fhs/pub/fhs-2.3.html

* fixed issue #179: strange text in import manual

* fixed issue #178: test for aragoimp is missing

* fixed issue #177: a misleading error message was returned if unknown variables
  were used in certain positions in an AQL query.

* fixed issue #176: explain how to use AQL from the arangosh

* issue #175: re-added hidden (and deprecated) option --server.http-port. This 
  option is only there to be downwards-compatible to Arango 1.0.

* fixed issue #174: missing Documentation for `within`

* fixed issue #170: add db.<coll_name>.all().toArray() to arangosh help screen

* fixed issue #169: missing argument in Simple Queries

* added program arango-upgrade. This program must be run after installing ArangoDB
  and after upgrading from a previous version of ArangoDB. The arango-upgrade script
  will ensure all system collections are created and present in the correct state.
  It will also perform any necessary data updates.
  Note: arango-upgrade was finally replaced by the `--upgrade` option for arangod.

* issue #153: edge collection should be a flag for a collection
  collections now have a type so that the distinction between document and edge 
  collections can now be done at runtime using a collection's type value.
  A collection's type can be queried in Javascript using the <collection>.type() method. 
  
  When new collections are created using db._create(), they will be document 
  collections by default. When edge._create() is called, an edge collection will be created.
  To explicitly create a collection of a specific/different type, use the methods 
  _createDocumentCollection() or _createEdgeCollection(), which are available for
  both the db and the edges object.
  The Javascript objects ArangoEdges and ArangoEdgesCollection have been removed
  completely.
  All internal and test code has been adjusted for this, and client code
  that uses edges.* should also still work because edges is still there and creates
  edge collections when _create() is called.
  
  INCOMPATIBLE CHANGE: Client code might still need to be changed in the following aspect:
  Previously, collections did not have a type so documents and edges could be inserted
  in the same collection. This is now disallowed. Edges can only be inserted into
  edge collections now. As there were no collection types in 1.0, ArangoDB will perform
  an automatic upgrade when migrating from 1.0 to 1.1.
  The automatic upgrade will check every collection and determine its type as follows:
  - if among the first 50 documents in the collection there are documents with
    attributes "_from" and "_to", the collection is typed as an edge collection
  - if among the first 50 documents in the collection there are no documents with
    attributes "_from" and "_to", the collection is made as a document collection

* issue #150: call V8 garbage collection on server periodically

* issue #110: added support for partial updates

  The REST API for documents now offers an HTTP PATCH method to partially update
  documents. Overwriting/replacing documents is still available via the HTTP PUT method
  as before. The Javascript API in the shell also offers a new update() method in extension to
  the previously existing replace() method.


v1.0.4 (2012-11-12)
-------------------

* issue #275: strange error message in arangosh 1.0.3 at startup


v1.0.3 (2012-11-08)
-------------------

* fixed AQL optimiser bug

* issue #273: fixed segfault in arangosh on HTTP 40x 

* issue #265: allow optional base64 encoding/decoding of action response data

* issue #252: _modules collection not created automatically


v1.0.2 (2012-10-22)
-------------------

* repository CentOS-X.Y moved to CentOS-X, same for Debian

* bugfix for rollback from edges

* bugfix for hash indexes

* bugfix for StringBuffer::erase_front

* added autoload for modules

* added AQL function TO_LIST


v1.0.1 (2012-09-30)
-------------------

* draft for issue #165: front-end application howto

* updated mruby to cf8fdea4a6598aa470e698e8cbc9b9b492319d

* fix for issue #190: install doesn't create log directory

* fix for issue #194: potential race condition between creating and dropping collections

* fix for issue #193: REST API HEAD request returns a message body on 404

* fix for issue #188: intermittent issues with 1.0.0 

* fix for issue #163: server cannot create collection because of abandoned files
  
* fix for issue #150: call V8 garbage collection on server periodically 


v1.0.0 (2012-08-17)
-------------------

* fix for issue #157: check for readline and ncurses headers, not only libraries


v1.0.beta4 (2012-08-15)
-----------------------

* fix for issue #152: fix memleak for barriers


v1.0.beta3 (2012-08-10)
-----------------------

* fix for issue #151: Memleak, collection data not removed

* fix for issue #149: Inconsistent port for admin interface

* fix for issue #163: server cannot create collection because of abandoned files

* fix for issue #157: check for readline and ncurses headers, not only libraries

* fix for issue #108: db.<collection>.truncate() inefficient

* fix for issue #109: added startup note about cached collection names and how to
  refresh them

* fix for issue #156: fixed memleaks in /_api/import

* fix for issue #59: added tests for /_api/import

* modified return value for calls to /_api/import: now, the attribute "empty" is 
  returned as well, stating the number of empty lines in the input. Also changed the
  return value of the error code attribute ("errorNum") from 1100 ("corrupted datafile")
  to 400 ("bad request") in case invalid/unexpected JSON data was sent to the server. 
  This error code is more appropriate as no datafile is broken but just input data is
  incorrect.

* fix for issue #152: Memleak for barriers

* fix for issue #151: Memleak, collection data not removed

* value of --database.maximal-journal-size parameter is now validated on startup. If
  value is smaller than the minimum value (currently 1048576), an error is thrown and
  the server will not start. Before this change, the global value of maximal journal 
  size was not validated at server start, but only on collection level

* increased sleep value in statistics creation loop from 10 to 500 microseconds. This
  reduces accuracy of statistics values somewhere after the decimal points but saves
  CPU time.

* avoid additional sync() calls when writing partial shape data (attribute name data) 
  to disk. sync() will still be called when the shape marker (will be written after
  the attributes) is written to disk 

* issue #147: added flag --database.force-sync-shapes to force synching of shape data
  to disk. The default value is true so it is the same behavior as in version 1.0.
  if set to false, shape data is synched to disk if waitForSync for the collection is
  set to true, otherwise, shape data is not synched.
  
* fix for issue #145: strange issue on Travis: added epsilon for numeric comparion in
  geo index

* fix for issue #136: adjusted message during indexing

* issue #131: added timeout for HTTP keep-alive connections. The default value is 300 
  seconds. There is a startup parameter server.keep-alive-timeout to configure the value. 
  Setting it to 0 will disable keep-alive entirely on the server.

* fix for issue #137: AQL optimizer should use indexes for ref accesses with 
  2 named attributes


v1.0.beta2 (2012-08-03)
-----------------------

* fix for issue #134: improvements for centos RPM

* fixed problem with disable-admin-interface in config file


v1.0.beta1 (2012-07-29)
-----------------------

* fixed issue #118: We need a collection "debugger"

* fixed issue #126: Access-Shaper must be cached

* INCOMPATIBLE CHANGE: renamed parameters "connect-timeout" and "request-timeout" 
  for arangosh and arangoimp to "--server.connect-timeout" and "--server.request-timeout"

* INCOMPATIBLE CHANGE: authorization is now required on the server side
  Clients sending requests without HTTP autorization will be rejected with HTTP 401
  To allow backwards compatibility, the server can be started with the option
  "--server.disable-authentication"

* added options "--server.username" and "--server.password" for arangosh and arangoimp
  These parameters must be used to specify the user and password to be used when
  connecting to the server. If no password is given on the command line, arangosh/
  arangoimp will interactively prompt for a password.
  If no user name is specified on the command line, the default user "root" will be
  used.

* added startup option "--server.ssl-cipher-list" to determine which ciphers to
  use in SSL context. also added SSL_OP_CIPHER_SERVER_PREFERENCE to SSL default 
  options so ciphers are tried in server and not in client order

* changed default SSL protocol to TLSv1 instead of SSLv2

* changed log-level of SSL-related messages

* added SSL connections if server is compiled with OpenSSL support. Use --help-ssl

* INCOMPATIBLE CHANGE: removed startup option "--server.admin-port". 
  The new endpoints feature (see --server.endpoint) allows opening multiple endpoints 
  anyway, and the distinction between admin and "other" endpoints can be emulated 
  later using privileges.

* INCOMPATIBLE CHANGE: removed startup options "--port", "--server.port", and 
  "--server.http-port" for arangod. 
  These options have been replaced by the new "--server.endpoint" parameter
  
* INCOMPATIBLE CHANGE: removed startup option "--server" for arangosh and arangoimp.
  These options have been replaced by the new "--server.endpoint" parameter

* Added "--server.endpoint" option to arangod, arangosh, and arangoimp.
  For arangod, this option allows specifying the bind endpoints for the server
  The server can be bound to one or multiple endpoints at once. For arangosh
  and arangoimp, the option specifies the server endpoint to connect to.
  The following endpoint syntax is currently supported:
  - tcp://host:port or http@tcp://host:port (HTTP over IPv4)
  - tcp://[host]:port or http@tcp://[host]:port (HTTP over IPv6)
  - ssl://host:port or http@tcp://host:port (HTTP over SSL-encrypted IPv4)
  - ssl://[host]:port or http@tcp://[host]:port (HTTP over SSL-encrypted IPv6)
  - unix:///path/to/socket or http@unix:///path/to/socket (HTTP over UNIX socket)

  If no port is specified, the default port of 8529 will be used.

* INCOMPATIBLE CHANGE: removed startup options "--server.require-keep-alive" and 
  "--server.secure-require-keep-alive". 
  The server will now behave as follows which should be more conforming to the 
  HTTP standard:
  * if a client sends a "Connection: close" header, the server will close the
    connection
  * if a client sends a "Connection: keep-alive" header, the server will not
    close the connection
  * if a client does not send any "Connection" header, the server will assume
    "keep-alive" if the request was an HTTP/1.1 request, and "close" if the
    request was an HTTP/1.0 request

* (minimal) internal optimisations for HTTP request parsing and response header 
  handling

* fixed Unicode unescaping bugs for \f and surrogate pairs in BasicsC/strings.c

* changed implementation of TRI_BlockCrc32 algorithm to use 8 bytes at a time

* fixed issue #122: arangod doesn't start if <log.file> cannot be created

* fixed issue #121: wrong collection size reported

* fixed issue #98: Unable to change journalSize

* fixed issue #88: fds not closed

* fixed escaping of document data in HTML admin front end

* added HTTP basic authentication, this is always turned on

* added server startup option --server.disable-admin-interface to turn off the
  HTML admin interface

* honor server startup option --database.maximal-journal-size when creating new
  collections without specific journalsize setting. Previously, these
  collections were always created with journal file sizes of 32 MB and the
  --database.maximal-journal-size setting was ignored

* added server startup option --database.wait-for-sync to control the default
  behavior

* renamed "--unit-tests" to "--javascript.unit-tests"


v1.0.alpha3 (2012-06-30)
------------------------

* fixed issue #116: createCollection=create option doesn't work

* fixed issue #115: Compilation issue under OSX 10.7 Lion & 10.8 Mountain Lion
  (homebrew)

* fixed issue #114: image not found

* fixed issue #111: crash during "make unittests"

* fixed issue #104: client.js -> ARANGO_QUIET is not defined


v1.0.alpha2 (2012-06-24)
------------------------

* fixed issue #112: do not accept document with duplicate attribute names

* fixed issue #103: Should we cleanup the directory structure

* fixed issue #100: "count" attribute exists in cursor response with "count:
  false"

* fixed issue #84 explain command 

* added new MRuby version (2012-06-02)

* added --log.filter

* cleanup of command line options:
** --startup.directory => --javascript.startup-directory
** --quite => --quiet
** --gc.interval => --javascript.gc-interval
** --startup.modules-path => --javascript.modules-path
** --action.system-directory => --javascript.action-directory
** --javascript.action-threads => removed (is now the same pool as --server.threads)

* various bug-fixes

* support for import

* added option SKIP_RANGES=1 for make unittests

* fixed several range-related assertion failures in the AQL query optimiser

* fixed AQL query optimisations for some edge cases (e.g. nested subqueries with
  invalid constant filter expressions)


v1.0.alpha1 (2012-05-28)
------------------------

Alpha Release of ArangoDB 1.0