Changes in 3.4.6
  o Incorporate new filter types for Array (Multi-value text choice) fields
  o Update listToMatrix to handle cases where the list elements are an array of strings, which will return a comma separated string in the response

Changes in 3.4.5
  o Switch to using path first URLs for LabKey server requests.
  o Utilize httr to generate request query parameters.
  o labkey.makeFilter will produce a list of named elements using the asList parameter.

Changes in 3.4.4
  o Issue 53481: additional validation for assay run configurations.
  o Improve validation when a zero-row dataframe is passed to insertRows/updateRows/deleteRows

Changes in 3.4.3
  o Bugfix to labkey.selectRows when group_concat based field has a NULL value. Related to github issue #112
  o Update documentation for experiment.createRun to include an example of inserting run level properties
  o Issue 53043: labkey.webdav.downloadFolder to account for contextPath in file href paths

Changes in 3.4.2
  o Add showProgressBar parameter to labkey.webdav.downloadFolder and labkey.webdav.get

Changes in 3.4.1
  o Issue 51606: labkey.webdav.downloadFolder to match file path prefix to the href values returned in listDir, which are URL encoded paths
  o Note: requires LabKey Server v24.12 or later

Changes in 3.4.0
  o Issue 51160: update jsonEncodeRowsAndParams() to better handle decimal values for toJSON()

Changes in 3.3.0
  o Add labkey.experiment.lineage API to support getting parent/child relationships for exp objects by LSID

Changes in 3.2.3
  o Remove deprecated support for JSON based assay plate metadata

Changes in 3.2.2
  o Issue 50592: labkey.setDefaults to also clear the CSRF token cache when clearing the httr session cookies

Changes in 3.2.1
  o labkey.setDefaults to clear httr session cookies

Changes in 3.2.0
  o Add labkey.moveRows
  o Note: only supported for LabKey Server v24.1 or later

Changes in 3.1.0
  o Issue 48490: Add options parameter to labkey.insertRows, labkey.updateRows, labkey.deleteRows to support
        specifying the "auditBehavior" and "auditUserComment" properties for the action

Changes in 3.0.0
  o Issue 41677: Fix for domain get/save round tripping of domain indices (need to use list() for index columnNames)
  o Encode SQL parameters passed by labkey.executeSql to avoid rejection by web application firewalls
    o Earliest compatible LabKey Server version: 23.9.0
    o This command is no longer compatible with earlier versions of LabKey Server (23.8.x and before) by default,
        however, if targeting an older server, calling labkey.setWafEncoding(FALSE) will restore the previous behavior.

Changes in 2.12.0
  o Issue 48298: Add Lineage filter types to makeFilter

Changes in 2.11.0
  o Add labkey.security.renameContainer
  o Note: only supported for LabKey Server v23.5 or later

Changes in 2.10.0
  o Update documentation to reflect removal of "apikey|" and "session|" prefixes from API keys and session keys
  o Issue 47202: Options to reduce payload of getContainers.api response: includeChildWorkbooks, includeStandardProperties
  o Note: only supported for LabKey Server v23.3 or later

Changes in 2.9.1
  o Freezer Manager API - add Primary Storage option to storage-related action documentation

Changes in 2.9.0
  o Add support for creating Freezer Manager freezer hierarchies
  o New labkey.storage NAMESPACE: labkey.storage.create, labkey.storage.update, labkey.storage.delete
  o Note: only supported for LabKey Server v22.10 or later

Changes in 2.8.4
  o Update labkey.provenance.createProvenanceParams to support custom properties (and standard run step properties)

Changes in 2.8.3
  o Issue 44619: labkey.getFolders() update to account for missing properties if the parent is root

Changes in 2.8.2
  o Issue 44110: Allow specification of a run name in the provenance API.

Changes in 2.8.1
  o Issue 43890: Fix for makeDF rname string concatenation
  o Issue 43853: Update error message for labkey.getModuleProperty() call when user does not have perm to requested container

Changes in 2.8.0
  o Issue 43358: Add support for impersonating users (labkey.security.impersonateUser and labkey.security.stopImpersonating)

Changes in 2.7.0
  o Add ontology filter types to makeFilter
  o Issue 43107: Fix for labkey.domain.createAndLoad to set strictFieldValidation to false for study datasets and data classes
  o Issue 42950: Add param to labkey.webdav.put for setting the file description
  o Issue 42546: Add new labkey.query.import command which uses file import to bulk import rows to a query/table
  o Update labkey.domain.createAndLoad to use the new labkey.query.import command for the bulk data import

Changes in 2.6.0
  o Add labkey.pipeline functions to be able to get pipeline protocol information and start jobs / analysis

Changes in 2.5.5
  o Add labkey.getRequestOptions to NAMESPACE export listing

Changes in 2.5.4
  o Fix for labkey.domain.get to handle new "domainKindName" property null check

Changes in 2.5.3
  o Issue 41071: Support connecting to multiple LabKey servers in the same session.

Changes in 2.5.2
  o Fix for labkey.saveBatch URL encoding of assay name parameter, not needed with change to use labkey.post

Changes in 2.5.1
  o Add "donttest" for those man page examples that use internet resources / queries
  o Fix type in filter name for labkey.domain.createConditionalFormatQueryFilter

Changes in 2.5.0
  o Add support for creating provenance runs : createProvenanceParams, startRecording, addRecordingStep, stopRecording
  o Add provenance support to query APIs : insertRows, updateRows, deleteRows
  o Add convenience functions to support creating conditional formats for domains

Changes in 2.4.0
  o Issue 39955: Fix for labkey.saveBatch issue with using GET instead of POST for query to get assay Id from assay name
  o Issue 39955: Add batchPropertyList parameter to labkey.experiment.saveBatch to match behavior from deprecated labkey.saveBatch
  o Issue 39965: Add labkey.domain.createIndices helper and indices parameter to labkey.domain.createDesign
  o Issue 39966: Add labkey.security.getContainers, labkey.security.createContainer, labkey.security.deleteContainer, labkey.security.moveContainer

Changes in 2.3.5
  o Add support for uploading runs for GPAT assays that support plate template metadata via labkey.experiment.createRun and labkey.experiment.saveBatch.

Changes in 2.3.4
  o Issue 38229: Handle newlines better in transform run properties files - run properties configured as multi-line types
  o Issue 39262: Add support for using username/password authentication via labkey.setDefaults
  o Remove outdated vignette and other doc files from package

Changes in version 2.3.3
  o Issue 38841: Rlabkey needs to translate NULL to NA for new GWTDomain "instructions" property

Changes in version 2.3.2
  o Fix typo in labkey.webdav.put for generated Rlabkey.pdf (Issue 37739)
  o Issue 38427: In Rlabkey, labkey.selectRows with colNameOpt="rname" does not sanitize "::"
  o Item 6165: New API for truncating tables (delete all rows)
  o Item 6174: New API for labkey.experiment.saveRuns (similar to saveBatch API usage)

Changes in version 2.3.1
  o Fix for makeFilter URLencode to use reserved = TRUE
  o When using labkey.selectRows, default showHidden to TRUE when using colSelect property

Changes in version 2.3.0
  o WebDav support in Rlabkey with functions like labkey.webdav.get, labkey.webdav.put, labkey.webdav.delete, etc. (from Ben Bimber)

Changes in version 2.2.5
  o Issue 36894: labkey.domain.get fix to translate NULL values for string props to NA
  o Issue 36837: correctly parse GROUP CONCAT response with array of string values

Changes in version 2.2.4
  o New function to set and get module properties
  o allow getting baseUrl using labkey.getBaseUrl
  o allow NA translation behavior to be overridden in insertRows and importRows

Changes in version 2.2.3
  o New helper functions for RStudio integration
  o New helper functions for use with R transform scripts to process run properties from server
  o New function to save experiment runs for an assay or a non-assay backed protocol

Changes in version 2.2.2
  o New APIs for getting, creating, inferring and dropping LabKey domains (requires LabKey server version 18.2 or later)
  o Fix for Issue #18: labkey.executeSql breaks when using the containerFilter option
  o Add labkey.setDebugMode(TRUE) option to output GET/POST raw response info
  o Fix for labkey.selectRows() API support for colSelect=c(*) regression
  o Support for RStudio integration

Changes in version 2.2.1
  o Support for LabKey CSRF tokens (cross site request forgery)

Changes in version 2.2.0
  o Refactor HTTP client library to use httr instead of rcurl

Changes in version 2.1.136
  o Account for colNameOpt = "rname" in the makeDF.R colSelect check
  o Remove call to open empty window on package load
  o Default to POST for labkey.selectRows, with param for method

Changes in version 2.1.135
  o Change the cast of integers from numeric to integer (Issue #30464)
  o labkey.selectRows updates for colSelect and showHidden properties (Issue #30465)
  o Fix for encoding extended characters in folderPath param (Issue #22034)

Changes in version 2.1.134
  o fix for getQueryDetails to get all column details instead of just default view column list
  o revert previous versions usage of fasttime library for date parsing

Changes in version 2.1.133
  o performance improvements for makeDF, using listToMatrix function
  o update date parser to use fasttime library for POSIXct function

Changes in version 2.1.132
  o fix for Issue 24231: support for date + time
  o add new table search filter param option: Q
  o fix issue with baseUrl parameter being overridden in labkey.saveBatch

Changes in version 2.1.131
  o fix for Issue 26956
  o added labkey.setDefaults support for baseUrl

Changes in version 2.1.130
  o makeFilter() operators may now be either upper or lower case (formerly upper case only)
  o added labkey.setDefaults and support for authentication via an API key

Changes in version 2.1.129
  o add parameter to selectRows for including display values for lookup fields in response

Changes in version 2.1.128
  o allow NA values in insertRows and importRows

Changes in version 2.1.127
  o change sslversion default values in curlOptions to TLSv1
  o fix to handle maxRows and rowOffset for labkey.executeSql
  o fix for labkey.getFolders includeSubfolders for non-Guest access
  o add additional parameters to existing functions (labkey.executeSql: colSort, parameters; labkey.selectRows: parameters; labkey.getFolders: includeEffectivePermissions)
  o updated user guide

Changes in version 2.1.126
  o change ssl.verifyhost default values in curlOptions from boolean to numeric
  o add "containerFilter" parameter to labkey.executeSql function

Changes in version 2.1.125
  o set cainfo for RCurl requests to point to a certificate bundle throught the environment variable RLABKEY_CAINFO_FILE
  o new functions to get and set curl options : labkey.curlOptions, labkey.setCurlOptions

Changes in version 2.1.124
  o replace usage of fromJSON2 with fromJSON
  o add between and not between filter types
  o fix to handle results from multi-valued columns

Changes in version 2.1.123
  o added labkey.importRows
  o performance improvement for labkey.importRows, labkey.insertRows, labkey.deleteRows, labkey.updateRows
  o The following filter types were added to the makeFilter function: MEMBER_OF

Changes in version 2.1.122
  o fix URL-encoding for spaces in parameter names

Changes in version 2.1.121
  o fix to error message on failed API call (deleteRows, insertRows, updateRows, etc.)
  o fix URL encoding of schemaName in executeSql call

Changes in version 2.1.120
  o minor documentation updates
  o fix to error message on failed insertRows call

Changes in version 2.1.119
  o add new labkey.makeRemotePath function 
  o minor documentation fixes

Changes in version 2.1.118
  o convert factors to strings for toJSON usages in labkey.insertRows, labkey.updateRows, and labkey.deleteRows

Changes in version 2.1.117
  o Changes to use curlEscape instead of URLencode for schemaName, queryName, lookupKey, assayName, viewName, and colSelect
  o Add parsing of new JSON date format
  o The following filter types were added to the makeFilter function:
        DATE_GREATER_THAN_OR_EQUAL, DATE_LESS_THAN_OR_EQUAL,
        IN, NOT_IN, EQUALS_NONE_OF, CONTAINS_ONE_OF, and CONTAINS_NONE_OF

Changes in version 2.1.116
  o Minor change to makeFiler.R to use curlEscape instead of URLencode for encoding the colFilter parameters.

Changes in version 2.1.110
  o Major expansion of Rlabkey.  Added metadata functions, session-based access function, much faster rjson parsing on returned data sets, many bug fixes related to null handling.
  o See the Rlabkey Users Guide for an overview of the package.

Changes in Version 0.0.9
  o Misc bug fixes

Changes in Version 0.0.8
  o The following filter names have been added in the makeFilter function:
QC_VALUE
NOT_QC_VALUE

Changes in Version 0.0.7
  o In previous versions this package would only bring labkey data into R that had hidden columns (ie, keys or other identifiers not usually shown to the user). Now any labkey data, with or without hidden columns, can be brought into R.


Changes in Version 0.0.6
  o Replaced the stripAllHidden argument with showHidden. This affects the labkey.selectRows and labkey.executeSql functions and was done for clarity. The old default stripAllHidden=TRUE is replaced by the new default showHidden=FALSE which has the same functionality. See documentation for details.
  o The old stripAllHidden flag was removed from labkey.insertRows, labkey.updateRows and labkey.deleteRows. It served no use in these functions. The stripAllHidden (now replaced by showHidden) is only meaningfull when data are being returned to the user. 
  o The following filter names have been modified in the makeFilter function:
EQUALS -> EQUAL
NOT_EQUALS -> NOT_EQUAL
NOT_EQUAL_OR_NULL -> NOT_EQUAL_OR_MISSING
IS_MISSING -> MISSING
IS_NOT_MISSING -> NOT_MISSING
GREATER_THAN_OR_EQUAL_TO -> GREATER_THAN_OR_EQUAL
LESS_THAN_OR_EQUAL_TO -> LESS_THAN_OR_EQUAL 

The filter name changes were made for clarity and consistency with the other software packages that retrieve data from a Labkey database.


Changes in Version 0.0.5
  o modified the makeDF function to speed up data frame creation from the meta data
  o labkey.deleteRows function now accepts an entire row of data as input instead of just the Key column


Changes in Version 0.0.4
  o first CRAN release of the Rlabkey package



