Qore 2.2.1
- Release Summary
- Minor bugfix release including compatibility with GCC 16; see below for more information
Bug Fixes in Qore
- DataProvider module
- fixed the bulk record interface to allow implementations to return NOTHING or an empty hash at the end of iteration
- added the missing
field and all entries to the expression role code map
- GmailDataProvider module
- allow message event objects to be created when optional email headers are missing
- MewsRestDataProvider module
- use an absolute 90-day default query interval to ensure that DST transitions cannot produce requests longer than the Mews API limit
- RestClient module
- fixed parsing URL-encoded OAuth2 token responses and
Content-Type parameters in non-blocking pings (issue 4993)
- SqlUtil module
- fixed PostgreSQL table discovery and description support for partitioned tables
- WebSocketHandler module
- removed a debug logging call from the message send path that could cause an infinite loop
- fixed a crash when destroying uninitialized thread-local storage on Alpine Linux
- fixed an infinite loop with a memory leak caused by a missing break statement in internal Socket SSL error-handling code (issue 4994)
- fixed a scanner macro collision that prevented Qore from being compiled with GCC 16 (issue 5391)
Qore 2.2.0
- Release Summary
- Minor new features and minor bugfixes; see below for more information
New Features in Qore
- ProviderIndex module
- added to allow for on-demand initialization of data providers (issue 4960)
- ProviderIndexUtil module
- added to allow for on-demand initialization of data providers (issue 4960)
- Util module
- added
Util::is_ip_private()
Util::is_ip_private_ex()
Util::ip_address_type()
Util::ip_address_type_ex()
(issue 4966)
Class objects from the reflection module are now serializable
- new functions:
- new variants
Bug Fixes in Qore
Fixes That Can Affect Backwards-Compatibility
- DataProvider module
- the
AbstractDataProviderType::getAcceptTypeHash(*bool) and AbstractDataProviderType::getReturnTypeHash(*bool) abstract methods now take an optional argument; classes inheriting this class and reimplementing these methods must add the argument and the logic to respect it
- fixed the list range operator to no longer return NOTHING values for out of range elements
- implemented the following parse options:
- implemented the following new constant:
- Subtracting NOTHING from any value will result in the same value; previously this would result in NOTHING
Bug Fixes in Qore
- BulkSqlUtil module
- fixed a bug executing bulk upsert operations with constant data (issue 4902)
- ConnectionProvider module
- fixed a bug where the I/O thread could stall and no longer ping any connection (issue 4896)
- fixed a bug where control characters in URLs were silently accepted (issue 4866)
- HttpServer module
- fixed a deadlock due to lock starvation in the HttpServer regarding reloading HTTP certificate info (issue 4887)
- fixed a bug where the HTTP server did not disconnect idle connections (issue 4878)
- OracleSqlUtil module
- SqlUtil module
- eliminated locking from DML operations (issue 4886)
- fixed a bug where
SqlUtil::AbstractTable::getDropAllConstraintsAndIndexesOnColumnSql() did not work on foreign constraints (issue 4875)
- Swagger module
- fixed validating Swagger schemas with objects that declare no properties (issue 4906)
- fixed JSON and YAML parsing from HTTP messages without charset=utf-8 in the headers (issue 4895)
- fixed a bug converting arguments to fit the Swagger schema to avoid spurious and very difficult to debug type errors (issue 4825)
- fixed a bug where any additionalProperties would cause all properties to be accepted (issue 4823)
- fixed a bug where Qore could crash due to excess usage of pthread thread-local keys (issue 4927)
- fixed a bug where copy methods were passed the new object as an argument instead of the old object
- fixed a bug where a
RUNTIME-TYPE-ERROR exception could be raised with valid calls at runtime (issue 4920)
- fixed a bug calculating relative date/time values against absolute dates on macOS (issue 4919)
- fixed a bug where control characters were not percent-encoded by encode_url() (issue 4917)
- fixed a crash in Qore::pow(number, number) when y was
0n (issue 4916)
- improved the weak assignment operator to allow weak references to hashes and list containers (issue 4909)
- fixed a bug in deterministic garbage collection with class copy() methods (issue 4905)
- fixed a bug where Qore would raise recusive constant exceptions when parsing in cases where values were not in a reference loop (issue 4903)
- fixed a bug resolving static class variables that could cause spurious errors (issue 4894)
- allow the persistent flag to be cleared without disconnecting in the HTTPClient class (issue 4882)
- reconnect HTTP client objects if already connected and a send/receive operation immediately gets disconnected (issue 4879)
- fixed a bug with the -= operator and lvalues with *hash types (issue 4873)
- fixed a bug where outputting complex data structures with deleted objects would cause spurious exceptions (issue 4862)
- fixed a bug where sockets could be prematurely closed due to I/O timeouts in some cases (issue 4858)
- fixed a bug with the cast<>() operator and compatible typed hashes (issue 4840)
- fixed a bug where a hash subtracted by NOTHING resulted in NOTHING instead of the same hash (issue 4834)
Qore 1.19.2
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- ConnectionProvider module
- added the
encode_chars HTTP / REST connection option (issue 4869)
- fixed a deadlock issue with connection updates in code using this module (issue 4860)
- do not change the connection status based on whether or not a connection can be made (issue 4852)
- allow connections to be added, updated, and removed while already holding the connection lock (issue 4849)
- CsvUtil module
- fixed the CSV writer to automatically detect headers (issue 4838)
- DataProvider module
- fixed conversion of soft binary, bool, float, int, and number "or nothing" types from an empty string to NOTHING (issue 4836)
- Logger
- Fixed a bug where file rotate could result in logging exceptions; removed explicit atomic lock operations and implemented low-level atomic file handling instead (issue 4842)
- Mapper
- fixed a bug handling default values for output fields with required (not-null) types (issue 4847)
- fixed a bug handling the
trunc option in mappers when bulk processing (issue 4845)
- RestClient
- fixed a bug where the OAUth2 refresh token was sometimes dropped when an access token was acquired (issue 4821)
- fixed a bug returning the token URL (issue 4809)
- SalesforceRestClient
- fixed a bug where the REST headers were not set up to accept JSON responses when the REST client was used with a token, this also caused breakage in the SalesforceRestDataProvider module (issue 4813)
- SqlUtil module
- set the column size in the type when creating types for
VARCHAR columns (issue 4832)
- Swagger module
- fixed support of nullable object properties (issue 4854)
- fixed bugs handling base64-URL-encoded strings (issue 4871)
- fixed a bug where Qore would crash if an on_error statement referred to the active exception when erroneously called after a thread_exit statement (issue 4864)
- fixed a bug where the HTTP connection path would be silently overwritten when processing redirects (issue 4841)
- fixed a bug setting the local time zone on macOS Sonoma (issue 4818)
- fixed a bug where Qore could characters with the incorrect character encoding to strings while processing HTTP headers in HTTP calls (issue 4810)
Qore 1.19.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- HttpServer
- allow context info to be cleared after handling each request to ensure that context info (like thread-local data) does not leak into other connections on the same thread (issue 4802)
- RestClient
- do not try to get another OAuth2 token if the token was just retrieved (issue 4796)
- fixed a bug where user variants would not always set the varargs flags from ellipses (issue 4804)
- fixed an extraneous
SOCKET-NOT-OPEN exception when running socket callbacks after a socket was closed (issue 4795)
Qore 1.19.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- New user modules:
- ConnectionProvider module
- added a logger interface to the abstract base connection class (issue 4776)
- added a connection-defined feature list to connection info (issue 4771)
- FileLocationHandler module
- implemented support for non-blocking I/O from file handlers (issue 4764)
- Logger module
- added
LoggerInterface and LoggerWrapper classes (issue 4776)
- added the following function and methods to support base64-url encoding of data:
- added the following class and new methods to support OAuth2 and non-blocking polling functionality:
- added the
encode_chars option to the HTTPClient class (issue 4773)
Bug Fixes in Qore
- ConnectionProvider module
- assume connections are up until they are proven to be down (issue 4789)
- fixed a bug where the
ConnectionProvider::InvalidConnection class would report an invalid url hash (issue 4785)
- RestClient module
- implemented consistent support for OAuth2 authorization flows including for OAuth2 with non-blocking I/O and non-blocking retrieval of Swagger schemas for REST clients (issue 4766)
- fixed a bug where polling pings did not respect connection options or the validator (issue 4764)
- fixed a bugs handling the signal mask that could cause hard-to-debug problems such as deadlocks in JIT in the JVM on macOS aarch64 (issue 4793)
- fixed a bug handling non-blocking I/O for socket connections on Darwin / macOS (issue 4791)
- fixed a bug where function and method variants did not report varargs in the signature (issue 4787)
- fixed a bug where an access exception could be raised when a reference to a private member was used in a static class method (issue 4778)
- fixed a bug where the stack guard was not properly enforced when the JVM assumed enforcement responsibility; in addition, due to the fact that thread stacks are allocated from overcommitted memory, reducing the thread stack size to 512KB had no effect on the memory size of Qore programs but did affect Qore, Java, and Python programs, therefore the stack limit for all threads was reset to 8MB as of this release (issue 4768)
Qore 1.18.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.18.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
Bug Fixes in Qore
- ConnectionProvider module
- fixed a bug where the
HttpConnection scheme could not be used (issue 4753)
- fixed a bug where invalid connection options were silently accepted (issue 4751)
- fixed date subtraction when the RHS is 1970-01-01Z (issue 4747)
- set the default connect timeout for HTTP connections to 60 seconds (issue 4743)
Qore 1.17.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- implemented support for explicitly declaring variable argument support with ellipses; this resolves a serious issue importing Qore abstract functions and methods in Java where abstract methods could not explicitly declare their support for variable arguments. In case of compatibility issues; use the %broken-varargs parse option or the PO_BROKEN_VARARGS constant when setting up a Program object (issue 4738)
- implemented the following parse options:
- implemented the following new constant:
- ElasticSearchDataProvider module
- Added a DataProvider API for ElasticSearch servers (issue 4729)
Bug Fixes in Qore
- DataProvider module
- added missing
base64binary and hexbinary type support (issue 4732)
- Swagger module
- ensure that URI paths are created without duplicated slashes by handling the base path consistently (issue 4728)
- fixed a bug where TIDs would be reassigned immediately to other threads once all TIDs in the thread list had been assigned; now TIDs are assigned in a cyclic order based on which TIDs are free in all cases (issue 4735)
- fixed a bug where it was not possible to declare methods as accepting varargs with ellipses; this caused problems with importing abstract Qore methods into Java, for example (issue 4738)
Qore 1.16.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.16.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- ConnectionProvider module
- added a transaction capability flag for data providers to the connection info hash (issue 4722)
- WebSocketClient module
- new API data provider child to allow WebSocket messages to be received from a WebSocketClient data provider (issue 4716)
Bug Fixes in Qore
Qore 1.15
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
Bug Fixes in Qore
Qore 1.14.2
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.14.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.14
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- New user modules:
- Added a DBI method to determine the actual DB driver name for wrapper drivers like ODBC and JDBC (issue 4690)
- Added new methods to allow the actual DB driver name to be determined when using the
odbc and jdbc DBI drivers:
Bug Fixes in Qore
Qore 1.13
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- FileLocationHandler module
- added support for
rest:// and rests:// locations (issue 4669)
- added support for runtime extensibility from an environment variable (
QORE_FILE_LOCATION_HANDLERS) (issue 4667)
- RestSchemaValidator module
- parse and report path arguments when processing REST requests on the server side (issue 4661)
- Swagger module
- parse and report path arguments when processing REST requests on the server side (issue 4661)
- Util module
- added a
path_params element to the UriQueryInfo typed hash to allow for reporting path arguments in calls supported by REST schemas (issue 4661)
- added the get_safe_url() function to avoid exposing passwords in URLs (issue 4671)
Bug Fixes in Qore
Qore 1.12.4
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- ConnectionProvider module
- added support for the
pre_encoded_urls option in the HttpConnection class (issue 4656)
- HttpClientDataProvider module
- added support for the
pre_encoded_urls option in the HttpConnection class (issue 4656)
- RestClientDataProvider module
- added support for the
pre_encoded_urls option in the HttpConnection class (issue 4656)
- fixed a race condition in deadlock detection where a deadlock could occur due to the lack of atomic reads of a critical attribute (issue 4658)
- added the
pre_encoded_urls option to the HTTPClient class as well as the following methods:
- fixed building and stack guard on s390x and ppc64 architectures (issue 4655)
Qore 1.12.3
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DebugUtil module
- RestHandler module
- implemented
"RestHandler::errorResponseHeaders()" to allow subclasses to return custom headers in error responses, such as when a request cannot be deserialized (issue 4646)
- RestSchemaValidator module
- REST handlers must throw a
DESERIALIZATION-ERROR when deserialization errors occur, so that a 400 Bad Request response is returned (issue 4647)
- allow for the client's time zone locale to be set for data serialization / deserialization (issue 4639)
- Schema module
- allow the user to determine if a schema alignment operation was a first-time creation or an update (issue 4637)
- Swagger module
- REST handlers must throw a
DESERIALIZATION-ERROR when deserialization errors occur, so that a 400 Bad Request response is returned (issue 4647)
- do not reserialize already deserialized data when processing responses (issue 4640)
- allow for the client's time zone locale to be set for data serialization / deserialization (issue 4639)
- WebSocketHandler module
- fixed a bug in
WebSocketHandler::sendOne() (issue 4634)
- fixed crashes in set_signal_handler() and remove_signal_handler() with negative signal values (issue 4643)
Qore 1.12.2
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module
- added
DataProvider::getFactoryObjectWithTemplate() and AbstractDataProviderFactory::createWithTemplate() to allow data providers to be created from factories with template arguments (issue 4624)
AbstractDataProvider::search*() fails with record-based data providers that do not provide a record definition (issue 4624)
AbstractDataProvider::search*() methods fail with an empty where hash argument (issue 4622)
- FileLocationHandler module
- added support for immediate data:// locations (issue 4626)
- DbDataProvider module
- fixed
sequence and sequence_currval mapper options in DbTableDataProvider (issue 4628)
- Mapper module
- fixed
Mapper::mapAuto() to accept an iterator argument (issue 4629)
- SqlUtil module
- fixed a bug serializing and deserializing
Table objects using the odbc driver (issue 4620)
- Util module
- fixed a bug in
substitute_env_vars() where an exception would be thrown if any referenced environment variable was not set (issue 4632)
- Release Summary
Qore 1.12.1
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- OdbcFirebirdSqlUtil module
- added the
OdbcFirebirdSqlUtil module to enable Firebird databases to be used with SqlUtil
Bug Fixes in Qore
- fixed a bug in the cast<> operator where class casts would not enforce the specified class at runtime (issue 4610)
- fixed a bug in the cast<> operator where it could not be used on lvalues (issue 4609)
- fixed a bug where the unreferenced-variable warning was raised in situations where it was not warranted, such as when a local variable is assigned a new object and the destructor performs resource cleanup when the local variable goes out of scope (issue 4607)
- fixed a bug where methodGate() and memberGate() methods were not respected in some cases when referring to undeclared members or methods of a class with the method in question defined as an abstract method (issue 4605)
Qore 1.12.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- ConnectionProvider module
- allow multiple connections to be polled from a single thread (issue 4595)
- DataProvider module
- added child capability support to data provider summary info (issue 4576)
- QUnit module
- added a variant to
Test::assertThrows() to allow exception arg values to be verified (issue 4590)
- RestClient module
- enable the deserialized body to be returned in REST exception info when possible (issue 4591)
- RestHandler module
- added request arguments to the
RestHandler::unknownSubClassError() and RestHandler::doGetPossibleSubClasses() methods (issue 4578)
- new classes:
- new I/O methods:
Bug Fixes in Qore
- ConnectionProvider module
- fixed a bug acquiring a data provider object from connection objects (issue 4584)
- DataProvider module
- fixed a bug accepting the element type in
SoftListDataType (issue 4603)
- Logger module
- fixed a race condition handling log file rotation with active logs (issue 4583)
- PgsqlSqlUtil module
- fixed bugs handling table objects in schemas other than
public (issue 4602)
- SwaggerDataProvider module
- fixed a bug where HTTP method names were not accepted as wildcard values in URI paths (issue 4598)
- fixed a bug setting the data provider name in Swagger schemas provided by files (issue 4587)
- fixed bugs handling
CONNECT messages to HTTP proxies for HTTPS connections to the target server (issue 4601)
- fixed a bug handling redirect messages with message bodies (issue 4600)
Qore 1.11.0
- Release Summary
- Bugfix release with minor new features in user modules; see below for more information
New Features in Qore
- DataProvider module
- added child capability support to data provider info (issue 4572)
- HttpServer module
- implemented support for reloading X.509 certificate information without manually restarting listeners (issue 4574)
- HttpServerUtil module
- implemented support for reloading X.509 certificate information without manually restarting listeners (issue 4574)
- added the following method:
Qore 1.10.0
- Release Summary
- Bugfix release with minor new features in user modules; see below for more information
New Features in Qore
Bug Fixes in Qore
Qore 1.9.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- SwaggerDataProvider module updates:
- fixed a bug where data providers could return local names as paths with
"/" characters in them, breaking some clients traversing the data provider hierarchy (issue 4555)
- WebUtil module updates:
- fixed a bug where files outside the root directory could be served with specially-formatted requests (issue 4550)
- fixed a bug building with openssl 3+ that could cause a runtime crash when encryption is used (issue 4553)
- fixed a bug where it was not possible to set the minimum TLS level to v1.3 for encrypted connections (issue 4551)
Qore 1.9.0
- Release Summary
- Bugfix release with minor new features in user modules; see below for more information
Bug Fixes in Qore
- FreetdsSqlUtil module
- fixed the prepend and append column operators (issue 4548)
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- MysqlSqlUtil module
- fixed the prepend and append column operators (issue 4548)
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- PgsqlSqlUtil module
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- OraclelSqlUtil module
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- Sqlite3SqlUtil module
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- SqlUtil module
- implemented support for generating queries based on generic expressions using the DataProvider module's generic expression support (issue 4538)
- DataProvider module
- allow data providers to be introspected with additional information about children (issue 4543)
- Swagger module
- fixed a bug where empty definitions could be ignored (issue 4545)
Qore 1.8.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- fixed a bug building documentation with autotools (issue 4542)
- fixed bugs in C++ QoreSocket::send*() methods not used in the Qore language but exposed in the public C++ API that could cause a crash in case of errors (issue 4541)
- fixed a bug building documentation with release files created from the autotools makefile target, as well as bugs in the cmake configuration generating documentation for builtin modules (issue 4540)
Qore 1.8.0
- Release Summary
- Bugfix release with minor new features in user modules; see below for more information
Bug Fixes in Qore
- CsvUtil module
- updated with initial support for generic expressions for searches (issue 4538)
- DataProvider module
- updated with initial support for generic expressions for searches (issue 4538)
- addded support for data provider options to support default values (issue 4532)
- addded
search_operators to the data provider response to report supported search operators (issue 4528)
- fixed a type error in
DataProvider::search*() calls with an empty where hash argument (issue 4511)
- FixedLengthUtil module
- updated with initial support for generic expressions for searches (issue 4538)
- RestClient module
- fixed a bug where REST schema validation was not applied in all contexts with specialized REST clients; this was enabled by refactoring the internal code that allowed the validation to be applied (issue 4518)
- RestHandler module
- do not raise a validation error when a response with an unknown code has a message body; this hides the true error message from the caller in case of error messages (issue 4534)
- allow a logger to be set in validators (issue 4509)
- RestSchemaValidator module
- allow a logger to be set in validators (issue 4509)
- ServiceNowRestDataProvider module
- fixed bugs handling the
orderby, orderbydesc, and groupby search options (issue 4536)
- Sqlite3SqlUtil module
- Swagger module
- allow a logger to be set in validators (issue 4509)
- SwaggerDataProvider module
- fixed a bug where array types failed due to missing item definitions (issue 4526)
- fixed a bug where
object types in Swagger schemas could be converted directly to object types in Qore instead of hash (issue 4520)
- fixed a bug where the cast<>() operator threw parse-time exceptions with hashdecls that could succeed at runtime (issue 4531)
- fixed a bug handling types at parse time with the minus operator and complex hash operands (issue 4529)
- fixed a static memory leak in libqore shutting down the library when built with openssl 3+ (issue 4522)
- fixed a bug where HTTP redirect messages were encoded twice causing redirect failures in cases where the redirect URI path had encoded elements (issue 4515)
- fixed a crash related to stack exhaustion resolving deeply-nested references (issue 4513)
Qore 1.7.2
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.7.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module
- made it possible to determine the default field type in
HashDataType (issue 4491)
- FsUtil module
- fixed join_paths() to handle an arbitrary number of paths as arguments (the most common use case) (issue 4495)
- RestHandler module
- improved error handling and sending error messages when exceptions contain non-serializable objects (issue 4501)
- Swagger module
- fixed a bug where global
consumes and produces declarations were not respected (issue 4494)
- Fixed a bug handling reference assignments and calculating matches with overloaded functions and methods (issue 4503)
- Fixed a bug with compilers that do not guarantee left to right argument execution order such as g++ 12+; note that the C++ standard does not guarantee this in any case (issue 4493)
- Fixed cast<> operator handling of "or nothing" types at parse and runtime (issue 4497)
- Load the
default provider with OpenSSL3+ to make it work on platforms where this provider is not automatically loaded (ex: Fedora 36) (issue 4394)
Qore 1.7.0
- Release Summary
- Bugfix release with minor new features; see below for more information
New Features in Qore
- DataProvider module
- added an attribute to factories to indicate if any children can support the request-response pattern (issue 4486)
- added the
DTT_ClientOnly type tag constant (issue 4477)
- RestHandler module
- implemented support for allowing alternate REST method dispatch approaches to be implemented (issue 4478)
- SwaggerDataProvider module
- applied the
DTT_ClientOnly type tag to client-only constructor options (issue 4477)
- Util module
- implemented the following new types:
Bug Fixes in Qore
- SwaggerDataProvider module
- fixed a bug where
SwaggerDataProvider did not report binary and date types correctly (issue 4484)
- fixed a bug where
SwaggerDataProvider::getDesc() throws an exception when created without a RestClient option (issue 4475)
- fixed a bug where the "from file" tag was not respected in constructor options (issue 4473)
Qore 1.6.0
- Release Summary
- Release with minor new features; see below for more information
New Features in Qore
Bug Fixes in Qore
- DataProvider module
- fixed a bug where DataProvider types based on string that accept multiple input types with conversions but are not soft types threw spurious errors at runtime with non-string types (issue 4471)
- fixed a bug where hash types incorrectly claimed compatibility with incompatible hashes (issue 4463)
- Mapper module
- fixed an error mapping bulk data with custom output field handlers (regression) (issue 4460)
- SwaggerDataProvider module
- fixed a bug where request messages were not validated and processed correctly (issue 4469)
Qore 1.5.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- Mapper module
- fixed an error mapping bulk data with custom output field handlers (issue 4460)
Qore 1.5.0
- Release Summary
- Release with minor new features; see below for more information
New Features in Qore
Bug Fixes in Qore
Qore 1.4.0
- Release Summary
- Release with minor new features; see below for more information
New Features in Qore
- DataProvider module
- added support for tags on data provider types (i.e.
DataProvider::AbstractDataProviderType) (issue 4442)
- fixed data provider factory info to provide info about the actual data provider factory instead of only provider info; note that the data provider factory abstract API has changed with this fix (issue 4438)
- Added "from example" APIs to data provider factories:
AbstractDataProviderFactory::getExampleProviderRecordOutput()
AbstractDataProviderFactory::getProviderFromExample() (issue 4433)
- Added generic search capabilities to data providers with no native search functionality (issue 4430)
- Util module
- Implemented the
serialize_to_string() API (issue 4428)
- RestHandler module
- Added missing
make*() methods with REST responses to the RestHandler class
- added the CipherMap constant providing a hash of known ciphers
- new functions:
Bug Fixes in Qore
- Util module
parse_uri_query() fails if the string has newlines in it (issue 4429)
- Fixed building on the latest versions of Alpine (v3.15) (issue 4444)
- Support for OpenSSL 3+ added; when Qore is compiled with OpenSS 3 or greater, all cipher and digest algorithms known to the encryption library are supported with dynamic APIs (issue 4394)
- Removed code that generated unnecessary
ILLEGAL-CALL exceptions at parse time (issue 4404)
Qore 1.3.0
- Release Summary
- Bugfix release; see below for more information
New Features in Qore
Bug Fixes in Qore
- fixed a bug handling committing parse operations where final checks were not always made before committing (issue 4426)
- fixed return type for Type::isAssignableFrom(Type) in the reflection module (issue 4423)
- fixed bugs in variant matching that could lead to unexpected results at runtime as well as errors with inherited Java code (issue 4421)
- fixed a bug dispatching method and function calls at runtime in certain cases (issue 4419)
Qore 1.2.0
- Release Summary
- Minor new features added to Qore
New Features in Qore
Bug Fixes in Qore
- FreetdsSqlUtil module
- fixed a bug where
offset and limit were not properly supported with MS SQL Server DBs (issue 4408)
- fixed a bug where date/time values in other time zones were not bound correctly (issue 4403)
- fixed a bug handling transaction savepoints (issue 4402)
- MysqlSqlUtil module
- allow a
VARCHAR column to be created without a size, assume a default size (issue 4399)
- OracleSqlUtil module
- allow a
VARCHAR column to be created without a size, assume a default size (issue 4399)
- PgsqlSqlUtil module
- fixed a bug where objects created did not always contain the actual name used to create it (issue 4396)
- SqlUtil module
- respect "or nothing" Qore types when mapping to column types (issue 4400)
- fixed a bug in certain type errors involving complex types where the specific complex type was omitted from the error message (issue 4412)
- fixed a bug initializing constant values at parse time; now all constant expressions requiring evaluation are evaluated after all other parsing is done (issue 4404)
Qore 1.1.0
- Release Summary
- Minor new features added to Qore
New Features in Qore
- DataProvider module
- added DataProviderTypeCache::listParentTypes() to allow a list of parent types to be returned (issue 4385)
- added a the following new method:
- rethrow now accepts optional exception arguments to allow exceptions to be enriched in a
catch block while maintaining the original call stack, and the on_error statement now includes an implicit argument $1 giving the currently-active exception, additionally, rethrow statements are now allowed in on_error statement blocks to allow for exception enrichment without requiring a try/catch block. (issue 2104)
Bug Fixes in Qore
- fixed a bug in the stack guard implementation where additional guard area was needed in the primary thread on some platforms (issue 4392)
- fixed bugs tagging functions and constants provided by builtin modules with their module name; required to consistently provide unique binary names when imported into Java, for example (issue 4383)
- fixed a bug initializing constant values that could result in spurious errors (issue 4382)
- added regex APIs to the C++ string class (issue 4379)
- added a warning for constant operands with the square bracket operator that are not integers (issue 3409)
- fixed a bug handling EOF conditions while parsing the final part of regular expressions (issue 2096)
Qore 1.0.13
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- Mapper module
- fixed a bug where it was not possible to use a Mapper with an output provider only for the output data type (issue 4369)
- SwaggerDataProvider module
- fixed a regression caused by the bug fix for recursive data structions in the previous version of Qore (issue 4351)
- fixed bugs tagging namespaces provided by builtin modules with their module name; required to consistently provide unique binary names when imported into Java, for example (issue 4378)
- updated QUnit constructors to work better with Python and Java subclasses (issue 4377)
- added internal C++ APIs to allow namespaces to store language-specific information to facilitate bridging Python and Java through the
python and jni modules (issue 4373)
- fixed a bug in
qpp (the Qore C++-pre-processor used for building Qore from sources) that failed to recognize methods with multi-line signatures (issue 4366)
- removed invalid assert()s that caused an unnecessary crash with debug builds when destructors caused program local data to be created in destructors while destroying a Program object (issue 4299)
Qore 1.0.12
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module
- implemented
AbstractDataProvider::beginTransaction() to support starting a transaction in data providers that support transaction management (issue 4346)
- DbDataProvider module
- implemented
DbDataProvider::beginTransaction() and DbTableDataProvider::beginTransaction() to support starting a transaction when using the AbstractDataProvider API with databases and tables (issue 4346)
- HttpServer module
- fixed a bug where incorrect URI decoding was applied to URLs in received HTTP messages instead of URL decoding (issue 4363)
- MailMessage module
- various fixes from downstream to mail message data handling (issue 4352)
- Mime module
- various fixes from downstream to Mime data handling (issue 4352)
- PgsqlSqlUtil module
- fixed handling column names that use reserved words (issue 4348)
- RestClient module
- removed erroneous / extraneous URI encoding on REST paths before sending (issue 4360)
- SqlUtil module
- fixed upsert usage with unique constraints and indices when there is a non-matching PK (issue 4347)
- implemented
AbstracTable::beginTransaction() to support starting a transaction when using the SqlUtil API with databases and tables (issue 4346)
- Swagger module
- fixed a bug where schemas with recursive references could not be loaded (issue 4350)
- SwaggerDataProvider module
- fixed a bug where recursive definitions in a Swagger schema resulted in runtime errors using the schema (issue 4351)
- Util module
- fixed a bug in
parse_to_qore_value() with floats and numbers with trailing zeros (issue 4349)
- fixed issues encoding URLs in the HTTPClient class according to RFC 1738 section 2.2 (issue 4361)
- fixed a bug parsing URLs with a query after the port (ex:
"http://host:1234?query=true") (issue 4358)
- fixed a crashing bug when sorting large lists in background threads caused by excessive recursion and stack exhaustion (issue 4355)
- fixed a bug that caused a core dump with implicit object method calls in arguments in the background operator expression (issue 4344)
Qore 1.0.11
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- cmake builds broken without a build directory (issue 4341)
Qore 1.0.10
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- fixed a bug in calculating abstract overrides in child classes that could cause spurious errors (issue 4338)
- implemented the Qore::parse_url(string, *int) variant to allow for percent decoding in URL strings (issue 4332)
- fixed C++ foreign thread registration APIs to support TID reuse to provide thread affinity for language modules such as Python and Java with successive rapid transitions into Qore in callbacks (issue 4331)
Qore 1.0.9
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- fixed stack size reporting for the initial thread on Linux; Linux autoextends the initial thread in any case, so a large stack size is reported (8MB) regardless of the actual stack size reported by pthreads APIs; this allows code that requires a larger stack to run normally on Linux platforms that allocate a small initial stack (such as Alpine, for example, current versions allocate a 128KiB stack which caused stack exceptions in Qore or recursion exceptions in Python to be thrown in the main thread with code that would otherwise work on Linux) (issue 4325)
Qore 1.0.8
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- fixed stack size reporting for the initial thread to reflect the actual stack size used instead of the default stack size for new threads; this allows the python module to correctly calculate the recusion depth for Python modules, allowing more Python modules to be loaded without changing the default stack size in single-threaded programs (issue 4323)
Qore 1.0.7
- Release Summary
- Bugfix release; see below for more information
New Features
Bug Fixes in Qore
- HttpServer module
HttpServer::addListeners() has no mechanism for returning errors to the caller (issue 4312)
- Mapper module
- fixed bugs handling escaped
"." characters in field names (issue 4315)
- fixed a bug where the return type of map expressions would be reported incorrectly at parse time when the iterator expression was a constant value (issue 4319)
- fixed a bug where the return type of map expressions would be stripped of complex type information at runtime when the iterator experssion was an AbstractIterator object (issue 4318)
Qore 1.0.6
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module
- return the
base_type key in input type info in \ AbstractDataProviderType::getInputInfo() (issue 4311)
Qore 1.0.5
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DbDataProvider module
- detect duplicate insert errors and throw a DUPLICATE-RECORD exception with record creation errors (issue 4308)
- FreetdsSqlUtil module
- added APIs to enable duplicate record creation errors to be detected (issue 4308)
- Mapper module
- fixed handling automatically-acquired input and output data structions with dots in field names; un-deprecated the
allow_dot and allow_output_dot options (issue 4309)
- MysqlSqlUtil module
- added APIs to enable duplicate record creation errors to be detected (issue 4308)
- OracleSqlUtil module
- added APIs to enable duplicate record creation errors to be detected (issue 4308)
- PgsqlSqlUtil module
- added APIs to enable duplicate record creation errors to be detected (issue 4308)
- SqlUtil module
- added APIs to enable duplicate record creation errors to be detected (issue 4308)
Qore 1.0.4
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module
- greatly improved dataprovider and type acquisition speed from clients requiring initialization from the environment (issue 4305)
Qore 1.0.3
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 1.0.2
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- RestHandler module
- fixed a bug handling errors registering stream errors with a stream handler (issue 4291)
Qore 1.0.1
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- HttpServer module
- allow dynamic handlers to be removed without waiting for all connections to terminate (issue 4273)
- allow for full logging of authentication errors if HTTP server debugging is enabled (issue 4217)
- fixed a bug matching types at parse time that could cause unexpected and confusing results (issue 4284)
- fixed abstract method matching in inherited Java classes overriding abstract methods (issue 4282)
- fixed a bug where trying to export or import code in other languages in a Program object with pending parse structures could cause a crash (issue 4279)
- fixed a bug in Qore::sleep() and Qore::usleep() where calls could return early on platforms with
nanosleep() if a signal arrived when sleeping (issue 4275)
Qore 1.0
- Release Summary
- Bugfix release; see below for more information
Fixes That Can Affect Backwards-Compatibility
- Some server-side APIs have changed due to the integration of the Logger module in the HttpServer and the HttpServerUtil modules, in particular the errorlogger listener option has been removed, and the type of the logger listener option has been updated to require a
Logger object. Additionally, deprecated APIs have been removed from these modules.
- Implemented the invalid-catch warning when types are required by parse options, byt the exception variable declaration has no type; this was also added to the default warning mask for modules
New Features in Qore
- added support for Alpine Linux
- added support for thread-local global variables; see the thread_local keyword
- new constants:
- updated methods:
- type errors with function and method resolution will report the full namespace paths of class and hashdecl types
- Qore builds now support outputting javadoc for Qore sources to support code completion in Java IDEs for dynamic imports of Qore APIs
- fixed bugs reporting parse errors where a single error could cause many more unrelated errors to be output
- module updates:
- ConnectionProvider module:
- updated the
AbstractConnection::getInfo() method
- added the
AbstractConnection::getExtendedInfo() method
- DataProvider module:
- added the
limit search option to the DefaultRecordIterator class (issue 4225)
- HttpServer module:
- allow dynamic handlers to be disabled before being removed (issue 4173)
- integrated the Logger module
- removed deprecated APIs
- HttpServerUtil module:
- Logger module:
- added support for the
%h and %P patterns for hostname and PID, respectively (issue 4179)
- allow file appenders to be reopened (issue 4171)
- enable serialization for
LoggerEvent objects as well as for them to be submitted directly to Logger objects (issue 4164)
Bug Fixes in Qore
- ConnectionProvider module
- connection path options are subjected to environment variable substitution (issue 4236)
- HttpServerUtil module
- fixed a bug handling wildcard address binds in
http_get_url_from_bind() (issue 4266)
- MailMessage module
- fixed message serialization for SMTP handling; default to base64 encoding for attachments and if the message body has a single
"." character on a line; convert any single "." characters on a line to two ".." characters if using only quoted printable encoding (issue issue 3275)
- Mime module
- fixed bugs parsing binary data in multipart messages (issue 4223)
- PgsqlSqlUtil module
- fixed bugs dropping foreign constraints and indices when aligning tables (issue 4246)
- Qdx module
- fixed stripping the final \ character in multi-line entries in tables (issue 4195)
- SqlUtil module
- fixed a bug handling foreign constraints backed by indices on DBs that link indices and constraints automatically (issue 4269)
- SmtpClient module
- fixed message serialization for SMTP handling in case of single
"." characters on a line in serialized data (issue issue 3275)
- fixed a bug where negative timeouts with lock methods and internal condition variable wait calls would return immediately instead of waiting indefinitely with some objects (issue 4263)
- fixed bugs reporting parse errors where a single error could cause many more unrelated errors to be output (issue 4260)
- fixed a bug in method resolution in class hierarchies that could lead to spurious parse errors (issue 4250)
- fixed a bug handling complex softlist<...> values where illegal matches were allowed under some circumstances leading to runtime errors (issue 4184)
- fixed a bug handling
private:internal members in base classes with multiple inheritance (issue 4175)
- fixed a bug in Socket where multiple
Content-Length headers could be sent in HTTP responses (issue 4168)
- fixed a crash when adding the same module from a path multiple times with debug builds (issue 4159)
- fixed bugs handling namespaces in imported binary classes (issue 4142)
- fixed line number reporting for statements and expressions where the first element is optional (issue 2946)
- added a warning when strings and non scalar types are mixed with the + and += operators; these operations are errors when %strict-types is in effect (issue 2943)
- fixed a bug where the
";charset=xxx" string was not added to the Content-Type header when sending HTTP messages with strings with non-ISO-8859-1 character encodings (issue 1824)
Qore 0.9.15
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider
- fixed a bug where the data type was not supported correctly as a data provider type (issue 4232)
- fixed a potential crash when raising a large number of exceptions or parse warnings that can cause an unprotected stack exhaustion error; max 20 exceptions can be raised at any one time; the rest are ignored (issue 4257)
- fixed a potential deadlock loading user modules with complex initialization code (issue 4254)
- fixed a bug where SSL errors were not properly cleared before I/O operations in all cases, leading to incorrect spurious errors being raised in rare cases (issue 4242)
- fixed a bug where empty binary values could not be deserialized (issue 4238)
- fixed handling Qore program destruction in a foreign thread in a binary module that could cause a crash (issue 4228)
Qore 0.9.14
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- OracleSqlUtil module updates:
- fixed a bug where pseudocolumn references were used ambiguously in joins (issue 4214)
- fixed a bug where pseudocolumn names were quoted in queries leading to errors (issue 4210)
- fixed a bug generating queries with
limit and forupdate (issue 4206)
- SqlUtil module updates:
- fixed a bug where pseudocolumn references were used ambiguously in joins (issue 4214)
- Swagger module updates:
- fixed a bug where unknown string format types were not ignored but instead caused an exception to be thrown (issue 4203)
- Util module updates:
- fixed a bug in
parse_memory_size() with numbers larger than 9 (issue 4198)
- fixed module path handling on Windows to respect the
';' separator as well as the ':' character (issue 4154)
Qore 0.9.13
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- Mapper module updates:
- fixed a bug handling the
struct key in mappers (issue 4189)
Qore 0.9.12
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- fixed path handling on Windows to respect the
';' separator (issue 4154)
Qore 0.9.11
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- CsvUtil
- updated read and write data providers to provide verbose option support (issue 4139)
- implemented support for the missing
bool and *bool types (issue 4118)
- DataProvider
- fixed an issue where it was not possible for pipeline to flush any pending data or to perform reset or purge operations when pipeline processing is complete; for this the
AbstractDataProcessor::flush() and AbstractDataProcessor::flushImpl() methods were implemented (issue 4107)
- FixedLengthUtil
- updated read and write data providers to provide verbose option support (issue 4139)
- HttpServer
- fixed a bug shutting down dedicated socket I/O handlers (issue 4130)
- fixed a bug where invalid HTTP responses were sent with error messages and chunked transfer encoding (issue 4124)
- fixed a bug where HTTP stream handlers could not also implement protocol switching (issue 4111)
- HttpServerUtil
- fixed a bug where it was not possible to include CORS headers or any context-sensitive information in a 401 response (issue 4136)
- fixed a bug where HTTP stream handlers could not also implement protocol switching (issue 4111)
- fixed a bug handling responses to streaming requests with
HEAD requests with a Transfer-Encoding: chunked response (issue 4109)
- ServiceNowRestDataProvider
- fixed a type error in DataProvider API support (issue 4104)
- fixed support for 64-bit ARM CPUs; added stack guard support (issue 3965)
- fixed a bug handling types in assignments with complex hashes (issue 4133)
- fixed a bug in the remove operator when used with a slice of a hash or an object; hash keys for nonexistent values were returned in a manner inconsistnent with the hash slice operator when not used with the remove operator (issue 4122)
- fixed a bug in the cast<> operator; invalid exceptions were raised during parsing for values that could still inherit the target class; the check must only be made at runtime (issue 4113)
- fixed a bug in the instanceof operator; invalid exceptions were raised during parsing for values that could still inherit the target class; the check must only be made at runtime (issue 4112)
- fixed a bug where it was not possible to poll for I/O on more than one Socket at a time; for this the Socket::poll() static method was implemented (issue 4069)
Qore 0.9.10
- Release Summary
- Bugfix release; see below for more information
New Modules in Qore
Bug Fixes in Qore
- WebUtil module updates:
- fixed a bug serving files did not work in server contexts with multiple threads (issue 4096)
- fixed an invalid assert in class handling in complex hierarchies (issue 4094)
Qore 0.9.9
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- RestClient module updates:
- additional fixes to REST path handling with schema validators with a base path (issue 4059)
Qore 0.9.8
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
Qore 0.9.7
- Release Summary
- Bugfix release; see below for more information
Release Notes
Note that when a REST validator is present in a REST connection, any URI path in the connection URL is ignored; to change the base path specified by a REST validator, use the swagger_base_path connection option.
Bug Fixes in Qore
- DataProvider module updates:
- fixed type-handling bugs handling data provider options (issue 4062)
- RestClient module updates:
- fixed a bug where the base path in the Swagger schema was ignored; note that when a REST validator is present, any URI path in the connection URL is ignored; to change the base path specified by a REST validator, use the swagger_base_path connection option (issue 4059)
- Swagger module updates:
- fixed a type error in
Swagger::getBasePath() for the case when the base path is not set (issue 4064)
- WebSocketHandler module updates:
- fixed a bug handling the case when a connection object is deleted in a callback method (issue 4063)
Qore 0.9.6
- Note
- From Qore 0.9.6 onwards, Qore releases will use semantic versioning.
- Release Summary
- Bugfix release; see below for more information
Bug Fixes in Qore
- DataProvider module updates:
- fixed invalid default return values for
AbstractDataProcessor methods (issue 4043)
- RestClient module updates:
- added the swagger_base_path option to REST clients and connections to allow for Swagger schemas to have their base path overridden (issue 4059)
- SwaggerDataProvider module updates:
- fixed a bug where the base path in the Swagger schema was ignored (issue 4059)
- fixed a problem with lazy resolution of static class variables that could lead to incorrect runtime execution (issue 4045)
- fixed a symbol conflict with the
gettid() C++ function; use q_gettid() instead to avoid potential symbol conflicts that can result in a crash (issue 4046)
- fixed a bug handling the class context in closures created with the background operator when created in the context of a subclass of the method called (issue 4051)
- fixed a bug that could cause a crash destroying thread-local vars when threads terminate (issue 4053)
- fixed a race condition that could cause a crash when deleting closure-local variable data while holding a lock (issue 4055)
Qore 0.9.5
- Release Summary
- Bugfix release with minor new features; including full ARM CPU support; see below for more information
Fixes That Can Affect Backwards-Compatibility
- The ConnectionProvider module was updated with support for verbose option reporting and a connection cache; support for the deprecated constructor was removed from
HttpConnection, HttpBasedConnection, as well as from other connection classes
- The mkdir() function was modified to provide consistent behavior and a consistent return value with and without the parents argument; this function never throws an exception now, and always returns either
0 (meaning no error occurred) or 1 (meaning an error occurred) and no longer returns the number of directories created when parents = True. Use Dir::create() to get the number of directories created as in previous versions of Qore; - See also
- Qore::mkdir_ex()
- Fixed broken range() and xrange() where the upper limit of the range was included in the result for maximum compatibility with other languages. To get the old behavior, use the %broken-range parse directive.
- Floating-point values are always converted to strings with a decimal point; in previous releases of Qore, round floating-point values were converted to strings without any decimal point; i.e. 1.0 will now be converted to
"1.0" (in previous releases of Qore, it would be converted to simply "1")
New Features in Qore
- CdsRestClient
- new module providing APIs for communicating with the Microsoft Common Data Service REST API
- CdsRestDataProvider
- new module providing a data provider API for the Microsoft Common Data Service REST API
- ConnectionProvider
- added support for verbose connection option reporting
- added a connection cache
- all connection classes updated to support verbose option reporting
- DataProvider module updates:
- added new Qore base types to the data type hierarchy
- implemented the following classes:
AbstractDataProcessor
DataProviderBulkRecordIterator
DataProviderPipeline
(issue 3876)
- added the
DUPLICATE-RECORD exception documentation for AbstractDataProvider::createRecord()
- updated to allow data provider type attributes to appear as children in the type hierarchy (issue 4015)
- FsUtil module updates:
- reflection module updates:
- added
AbstractConstant::getModuleName()
- added
AbstractReflectionFunction::getCodeFlags()
- added
AbstractReflectionFunction::getCodeFlagList()
- added
AbstractReflectionFunction::getDomain()
- added
AbstractReflectionFunction::getDomainStringList()
- added
AbstractReflectionFunction::getModuleName()
- added
Namespace::getModuleName()
- added
TypedHash::doCast()
- RestClient
- added the
no_charset option to options (issue 3328)
- RestSchemaValidator
- added the
no_charset option to options (issue 3328)
- Schema module updates:
- allow schema operations to be executed with no output (verbose < 0) (issue 3996)
- SqlUtil module updates:
- new
AbstractTable methods returning a hash with info about the operation as well as the SQL and any bind arguments used
- Util module updates:
- added the
parse_memory_size() function (issue 4004)
- New data type:
- New methods:
- New functions:
- Added stack guard support for ARM processors (issue 3965)
Bug Fixes in Qore
- DataProvider module updates:
- fixed a bug where
HashDataType would not enforce fields or field types when checking for type and value compatibility (issue 4037)
- FreetdsSqlUtil module updates:
- fixed a bug generating literal date/time values for SQL queries (issue 3948)
- HttpServer module updates:
- fixed a bug where the HTTP server would not always stop the ThreadPool which caused process shutdowns to hang (issue 3999)
- fixed a bug where the
Expect header was not supported and where binary message bodies were read as strings (issue 4035)
- MysqlSqlUtil module updates:
- fixed a bug generating literal date/time values for SQL queries (issue 3948)
- PgsqlSqlUtil module updates:
- implemented atomic merge / upsert support (issue 3963)
- fixed a bug generating literal date/time values for SQL queries (issue 3948)
- Qdx module updates:
- fixed a bug where Qore-language post processing fixes were applied to non-Qore docs (issue 3985)
- QUnit module updates:
- updated to allow tests to be run with argument handling from languages that do not support lvalue references (issue 3934)
- fixed a bug in range() and xrange() where the upper limit of the range was included in the result (issue 4031)
- fixed a bug in exception handling with external language modules where stack trace elements were added in reverse order (issue 4030)
- fixed a bug in Qore::mkdir() with
parents = True (issue 3992)
- fixed a bug where complex formatting output with sprintf() and related dunctions would have
"." separators instead of "," separators when floating-point values were included in the output (issue 3947)
- fixed a bug handling embedded nulls in UTF-8 strings (issue 2942)
Qore 0.9.4.7
- Release Summary
Bugfix release; see details below
Bug Fixes in Qore
Qore 0.9.4.6
- Release Summary
Bugfix release; see details below
Bug Fixes in Qore
Qore 0.9.4.5
- Release Summary
Bugfix release; see details below
New Features in Qore
Bug Fixes in Qore
- Mapper module updates:
- fixed a bug handling external runtime keys with bulk input for keys that do not require the current input value (issue 3931)
- fixed a race condition in closure-bound variable reference handling that could result in a runtime crash (issue 3939)
Qore 0.9.4.4
- Release Summary
Bugfix release; see details below
New Features in Qore
- Mapper module updates:
- added support for mapper context in mapper field key handlers (issue 3893)
- added support for nested mappers and the
submappers option (issue 3414)
- implemented the
output_create_ignore_duplicates option
- added support for freestanding expression evaluation:
Bug Fixes in Qore
- CsvUtil module updates:
- fixed
FixedLengthWriteDataProvider to return the record created with the createRecord() call (issue 3914)
- DataProvider module updates:
- added the
DUPLICATE-RECORD exception documentation for AbstractDataProvider::createRecord()
- FixedLengthUtil module updates:
- fixed
CsvWriteDataProvider to return the record created with the createRecord() call (issue 3914)
- Mapper module updates:
- fixed a bug where mapper output data was not logged in case of an error in an output provider (issue 3909)
- updated mapper key handler calling convertion + docs (issue 3894)
- fixed
Mapper::mapAuto() to return NOTHING with no input (issue 3872)
- SalesforceRestDataProvider module updates:
- fixed a bug deleting records with no matches (issue 3921)
- fixed serializing
DATE fields (issue 3908)
- fixed a bug in class copy methods with
private:internal members (issue 3901)
- fixed bugs running
qdbg (issue 3900)
Qore 0.9.4.3
- Release Summary
Bugfix release; see details below
New Features in Qore
- DataProvider module updates:
- added new classes:
AbstractDataProcessor
DataProviderBulkRecordIterator
DataProviderPipeline
(issue 3876)
- Mapper module updates:
- added the
Mapper::mapAuto() method and the disable_bulk option (issue 3872)
Mapper now inherits DataProvider::AbstractDataProviderRecordProcessor (issue 3876)
Bug Fixes in Qore
- fixed a bug in the ThreadPool class where queued tasks were discarded without being executed when ThreadPool::stopWait() was called (issue 3897)
- fixed a bug determining method signature compatibility with variants of the softlist type (issue 3887)
- fixed a parse-time type error taking a slice of a hashdecl value (issue 3882)
- fixed HTTP responses with no message body and no
Transfer-Encoding header to include a Content-Length: 0 header to correctly support RFC-2616 (issue 3879)
- fixed a crash in handling reference arguments in call references in mixed class contexts (issue 3869)
- fixed a memory leak in the code that manages remote client certificates in the Socket class (issue 3865)
Qore 0.9.4.2
- Release Summary
Bugfix release; see details below
New Features in Qore
- new user modules:
- DataProvider module updates:
- implemented callbacks to allow for dynamic elements of request-response data providers (such as URI paths) to be resolved at runtime (issue 3838)
AbstractDataProviderType and AbstractDataField classes made serializable (issue 3809)
- implemented the
DataProviderTypeCache class to encapsulate reusable type caching logic (issue 3810)
- Mapper module updates:
- added the
ignore_missing_input mapper option (issue 3837)
- added support for the
use_input_record output field mapping key (issue 3823)
- MapperUtil module updates:
- added support for the
use_input_record output field mapping key (issue 3823)
- reflection module updates:
- new methods:
Bug Fixes in Qore
- DataProvider module:
- fixed
AbstractDataProviderType::get() to return the correct type with all string arguments (issue 3829)
- QUnit module:
- allow QUnit to be used from other languages like Java (issue 3857)
- SmtpClient module:
- SwaggerDataProvider module:
- Swagger module:
- Util module:
- fixed bugs in
EVAL= expressions in parse_to_qore_value() where expressions that evaluated to integer 0 or floating-point values were returned as NOTHING (issue 3851)
- fixed a bug where spurious
DUPLICATE-SIGNATURE parse errors were raised with signatures that referred to classes that differed only in their namespace paths (issue 3861)
- fixed the
Type object for "*hash<auto>" to return the correct name (issue 3826)
- added additional accept and returns keys for base type that accept and return integers; now they return both
int and integer to ensure that they match for logic that does standard comparisons with "integer" (issue 3854)
- fixed certificate verification; openssl will now use default CA certs when Socket::acceptAllCertificates(False) is set when SSL_VERIFY_PEER or similar is used with Socket::setSslVerifyMode() (issue 3818)
- fixed hostname verification in X.508 certificate verification (issue 3808)
- fixed patch version to appear in the Qore version (issue 3797)
Qore 0.9.4.1
- Release Summary
Bugfix release; see details below
New Features in Qore
- New FileLocationHandler module: provides an API for retrieving file data based on a URL-like location string
Bug Fixes in Qore
- DataProvider module:
- allow type paths to resolved to internal fields in
DataProvider::getType() and DataProvider::getTypeEx() (issue 3791)
- Mapper module:
- added the
Mapper::setNullableOutput() method and the output_nullable option (issue 3788)
- Swagger module:
- added support for the x-nullable attribute to allow for nullable values (issue 3785)
- fixed support for types with no type declaration (issue 3775)
- SwaggerDataProvider module:
- fixed support for requests that do not require a request hash (issue 3784)
Qore 0.9.4
- Release Summary
- The main new feature in this release is the DataProvider API, which provides a generic API for introspecting and manipulating data in any format and over any protocol. Qore 0.9.4 also contains many usability and consistency fixes as well.
Fixes That Can Affect Backwards-Compatibility
- RestHandler module: renamed
RestHandler::getPossibleSubClasses() to RestHandler::doGetPossibleSubClasses() in order to avoid a collision with a REST method name (issue 3614)
- fixed broken cast<> operator handling; in previous releases, cast<> would accept and return NOTHING without raising an error with type specifications that did not accept or return NOTHING. To get the old behavior, use the %broken-cast parse directive.
- disallowed the use of the deprecated
returns keyword by default. To get the old behavior, use the %allow-returns parse directive.
- classes inheriting
AbstractConnection must be serializable; the AbstractConnection::getConstructorInfo() and AbstractConnection::getConstructorInfoImpl() methods have been removed and are ignored in child classes
- the following are now reserved words in Qore to prohibit them from being redefined:
New Features in Qore
- ConnectionProvider module:
- implemented support for serializing connections (issue 3696)
- CsvUtil module:
- DataProvider module:
- supports arbitrary data inputs and outputs with introspection and strong type support
- DbDataProvider module:
- adds a data provider API for databases
- FixedLengthUtil module:
- FtpPoller module:
- added this new module to support polling files from a remote directory with the FTP protocol
- FtpPollerUtil module:
- added this new module to provide definitions for the FtpPoller module
- HttpServer module:
- added support for sending chunked replies from an InputStream
- Mapper module:
- SalesforceRestDataProvider module:
- adds a data provider API for Salesforce REST connections
- SqlUtil:
- adds infrastructure support for the data provider module
- implemented the
op_in_select() function for where clause hashes
- SwaggerDataProvider module:
- adds a data provider API for Swagger / OpenAPI schemas
- support for Unicode character matching in regular expressions:
- new constants:
- new pseudo-methods:
- pseudo-methods now run in the same class context as the caller
- new functions
- new methods:
- updated methods:
- new parse options:
- reflection module updates:
- added
Type::isAssignableFrom() methods
- added a working
Type::constructor() method
- added
Type::getAcceptTypeHash()
- added
Type::getBaseType()
- added
Type::getBaseTypeCode()
- added
Type::getElementType()
- added
Type::getReturnTypeHash()
- added
Type::getTypedHash()
- added
Type::hasType()
- added
Type::isCompatible()
- added
Type::isOrNothingType()
- added
Type::isTypedHash()
Bug Fixes in Qore
- fixes in modules:
- the default exception handler now shows the exception
"arg" key exceptions in builtin code if present (issue 3768)
- fixed reporting the exception location when exceptions occur in builtin code (issue 3742)
- fixed type handling in list and hash evaluation with complex types that can only be determined at runtime (issue 3740)
- fixed setting the time zone region in date/time values to not include the system-specific zoneinfo path prefix in order to allow for deserialization of date/time values on different systems (issue 3736)
- fixed a crash in parse error handling for recursive constant parse hash resolution cases (issue 3708)
- fixed a bug retrieving HTTP message bodies with servers that do not send a
Content-Length header but close the connection (issue 3691)
- fixed inconsistent handling of the += operator with *list<...> types with element types (issue 3586)
- <string>::split(string, string, bool) and Qore::split(string, string, string, bool) now properly handle double quote characters as an alternative way to include quotes in fields (issue 3550)
- the cast<> operator can now cast directly to "or nothing" types: ex:
*list<int> l = cast<*list<int>>(getList());
(issue 3331)
- fixed detecting invalid input in date(string, string) (issue 3239)@section qore_0933 Qore 0.9.3.3 @par Release Summary Bugfix release; see details below@subsection qore_0933_bug_fixes Bug Fixes in Qore - fixed a bug where a crash would result when calling @ref Qore::SQL::Datasource::getOption() Datasource::getOption()" when the connection was closed
(<a href="https://github.com/qorelanguage/qore/issues/3754">issue 3754</a>)
- <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module fix: updated to work also with
newer versions of MySQL / MariaDB that support sequences
(<a href="https://github.com/qorelanguage/qore/issues/3747">issue 3747</a>)
- fixed a bug where the @ref Qore::SQL::Datasource "Datasource" class would not always remove the transaction
thread resource when rolling back transactions
(<a href="https://github.com/qorelanguage/qore/issues/3745">issue 3745</a>)
@section qore_0932 Qore 0.9.3.2
@par Release Summary
Bugfix release; see details below
@subsection qore_0932_new_features New Features in Qore
- the <a href="../../modules/Sap4HanaRestClient/html/index.html">Sap4HanaRestClient</a> module was added
(<a href="https://github.com/qorelanguage/qore/issues/3600">issue 3600</a>)
@subsection qore_0932_bug_fixes Bug Fixes in Qore
- <a href="../../modules/RestHandler/html/index.html">RestHandler</a>: fixed a bug handling exceptions in REST
methods with unserializable exception data
(<a href="https://github.com/qorelanguage/qore/issues/3667">issue 3667</a>)
- fixed a bug in hashdecl member initialization in constants
(<a href="https://github.com/qorelanguage/qore/issues/3654">issue 3654</a>)
- fixed a bug in type handling that could cause a runtime crash
(<a href="https://github.com/qorelanguage/qore/issues/3644">issue 3644</a>)
- <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a>: fixed a bug where the sequence table name
was not respected in \c MysqlDatabase::getNextSequenceValueImpl()
(<a href="https://github.com/qorelanguage/qore/issues/3641">issue 3641</a>)
- <a href="../../modules/Schema/html/index.html">Schema</a>: fixed a bug where too little information was passed
to post schema alignment code
(<a href="https://github.com/qorelanguage/qore/issues/3640">issue 3640</a>)
- fixed a bug where in-object calls to implicit \c copy() methods would result in a core dump
(<a href="https://github.com/qorelanguage/qore/issues/3637">issue 3637</a>)
- <a href="../../modules/Mapper/html/index.html">Mapper</a> module: fixed a bug where list values could not be
passed as a value in non-bulk mode
(<a href="https://github.com/qorelanguage/qore/issues/3611">issue 3611</a>)
- fixed an error with runtime method call resolution with <b><tt>private:internal</tt></b> methods
(<a href="https://github.com/qorelanguage/qore/issues/3596">issue 3596</a>)
- <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module: fixed compatibility with
PostgreSQL 12
(<a href="https://github.com/qorelanguage/qore/issues/3589">issue 3589</a>)
@section qore_0931 Qore 0.9.3.1
@par Release Summary
Bugfix release; see details below
@subsection qore_0931_bug_fixes Bug Fixes in Qore
- fixed a critical error handling thread resources where if an exception was thrown handling thread resources,
user thread resource handlers queued afterwards were not executed
(<a href="https://github.com/qorelanguage/qore/issues/3571">issue 3571</a>)
- fixed a crash handling recursive user module dependencies with directory-based (split) user modules
(<a href="https://github.com/qorelanguage/qore/issues/3570">issue 3570</a>)
- fixed an error handling aborted chunked HTTP transfers that can result in a long timeout stalling the I/O thread
(<a href="https://github.com/qorelanguage/qore/issues/3564">issue 3564</a>)
- added library option constants and functions to allow the TLS v1.3 protocol to be disabled when the library is
initialized or at runtime
(<a href="https://github.com/qorelanguage/qore/issues/3561">issue 3561</a>)
- fixed a bug where different connections on the same @ref Qore::Socket "Socket" object could not be identified;
code that relied on @ref Qore::Socket::getSocket() "Socket::getSocket()" is unreliable as the same descriptor
can be reassigned
(<a href="https://github.com/qorelanguage/qore/issues/3558">issue 3558</a>)
- fixed a core dump in @ref Qore::FileLineIterator::getFileName() "FileLineIterator::getFileName()"
(<a href="https://github.com/qorelanguage/qore/issues/3555">issue 3555</a>)
- fixed a race condition in thread resource cleanups where a spurious exception could be raised
(<a href="https://github.com/qorelanguage/qore/issues/3551">issue 3551</a>)
- <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a>: fixed a bug where REST
serialization errors in server responses were ignored and a <tt>200 OK</tt> response was sent instead
(<a href="https://github.com/qorelanguage/qore/issues/3547">issue 3547</a>)
- fixed a bug where false positive parse-time matches with a complex list or hash type could be made with
incompatible types
(<a href="https://github.com/qorelanguage/qore/issues/3546">issue 3546</a>)
- <a href="../../modules/astparser/html/index.html">astparser</a> module:
- fixed memory leaks in astparser module
(<a href="https://github.com/qorelanguage/qore/issues/3344">issue 3344</a>)
@section qore_093 Qore 0.9.3
@par Release Summary
Bugfix release; see details below
@subsection qore_093_compatibility Fixes That Can Affect Backwards-Compatibility
Complex type fixes in this release have the effect that complex type declarations are not exactly equal to
the base types without a complex type restrictions, and also abstract argument type matching with concrete
implementations has been loosened to accept nearly identical matches, so that for example an abstract method may
declare a parameter with a \c hash<auto> type which may be implemented by a concrete method with type \c hash.
@subsection qore_093_new_features New Features in Qore
- the <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module was updated to
support connection tags
(<a href="https://github.com/qorelanguage/qore/issues/3486">issue 3486</a>)
- updated the @ref Qore::HTTPClient "HTTPClient" class to support the following new constructor options:
- \c encoding_passthru
- \c error_passthru
- \c redirect_passthru
as well as the \c "response-headers-raw" output info key, plus the following methods:
- @ref Qore::HTTPClient::getHostHeaderValue() "HTTPClient::getHostHeaderValue()"
- @ref Qore::HTTPClient::getEncodingPassthru() "HTTPClient::getEncodingPassthru()"
- @ref Qore::HTTPClient::setEncodingPassthru() "HTTPClient::setEncodingPassthru()"
- @ref Qore::HTTPClient::getErrorPassthru() "HTTPClient::getErrorPassthru()"
- @ref Qore::HTTPClient::setErrorPassthru() "HTTPClient::setErrorPassthru()"
- @ref Qore::HTTPClient::getRedirectPassthru() "HTTPClient::getRedirectPassthru()"
- @ref Qore::HTTPClient::setRedirectPassthru() "HTTPClient::setRedirectPassthru()"
.
(<a href="https://github.com/qorelanguage/qore/issues/3472">issue 3472</a>)
- added the following methods:
- @ref Qore::GetOpt::parse() "GetOpt::parse(hash<auto>, reference<list<string>>)"
- @ref Qore::GetOpt::parseEx() "GetOpt::parseEx(hash<auto>, reference<list<string>>)"
- @ref Qore::GetOpt::parseExit() "GetOpt::parseExit(hash<auto>, reference<list<string>>)"
- @ref Qore::Socket::getRemoteCertificate() "Socket::getRemoteCertificate()"
- added the following new functions:
- @ref Qore::auto_cast() "auto_cast()"
- @ref Qore::digest() "digest()"
- @ref Qore::get_digests() "get_digests()
- added the following new constants:
- added the Qore::UrlInfo hash as the return type to:
- added the module_visibility parameter to Program::importClass() and the Import Visibility Constants as possible argument values
- added the max_file_len param to ReadOnlyFile::readTextFile() and ReadOnlyFile::readBinaryFile() (issue 3525)
- added <string>::toBinary()
- added the AwsRestClient module
- the HttpServer module was updated to enable remote certificates to be retrieved in listeners and handlers by default; added new API entry points for listeners and handlers with more flexible and saner parameters, deprecated old complex methods (issue 3512)
- the Mapper module now supports the
"runtime_keys" option for adding support for new field keys to existing classes (issue 3535)
- the Mapper module now supports
"hash" and "any" types for output fields (issue 3453)
- the Mapper module now supports dot notation in output fields for the "hash" output type (issue 3413)
- the RestClient module was updated so that
RestConnection objects now support the "headers" option (issue 3455)
qdbg-vsc-adapter supports the VSCode Debug Protocol (issue 3392)
Bug Fixes in Qore
- fixed bugs in handling object members assigned to references (issue 3523)
- fixed bugs in thread-local variable handling and Program destruction (issue 3521)
- fixed a bug where a crash would result when serializing imported typed hashes (issue 3518)
- fixed a bug where attempting to serialize a weak references to a serializable object would result in an exception (issue 3515)
- fixed a bug where new DatasourcePool connections were left in place when calls to DatasourcePool::beginTransaction() would fail with an exception (issue 3509)
- fixed bugs importing user modules with an injected API in an existing Program container (issue 3504)
- fixed a memory leak in Serializable::deserialize(string)
- fixed a memory leak (crash in debug mode) related to deterministic garbage collection (issue 3481)
- fixed a bug where HTTP redirect messages with a simple path and not a full URL were not processed correctly (issue 3475)
- fixed a bug where HTTP connections with UNIX domain sockets were sending an incorrect
Host: header without URL encoding (issue 3474)
- fixed bugs affecting injection and Program API management (issue 3461)
- fixed a bug where a
'/' character in an HTTP username would cause a URL to be parsed incorrectly (issue 3457)
- added optional flags to the following methods to allow them to open file streams in nonblocking mode to handle opening named pipes independently of the writer without blocking:
(issue 3451)
- fixed a bug compiling with openssl with the MDC2 algorithm disabled (issue 3443)
- fixed a confusing error message with runtime overload type errors where complex type information was missing (issue 3441)
- fixed parse-time error handling complex types in hashes (issue 3438)
- fixed many type errors with complex types (issue 3429)
- fixed inconsistent behavior of references with pseudo-methods (issue 3417)
- fixed bugs in the return types of Qore::regex_extract() and <string>::regexExtract() (issue 3416)
- fixed documentation links between dependent modules (issue 3406)
- fixed a bug where an lvalue with a complex type accepted incompatible assignments from values without complex types if the base type was the same; this fix also ensures that complex type declarations with
auto are not treated as identical to the base type without any complex type restrictions, in addition abstract type matching was loosened to accept near matches with parameter types so that ab stract method with a parameter type of hash<auto> can be implemented with a concrete method with a hash parameter type, for example. (issue 3404)
- fixed a bug where a crash could result when deserializing invalid integer data (issue 3395)
- fixed a parse type error in initialization using return value of abstract method (issue 3387)
- fixed a bug where sort functions were incorrectly sorting strings with different lengths (issue 3378)
- fixed a member initialization bug with imported classes (issue 3368)
- HttpServer module:
- shut down dedicated socket conenctions last in order to allow for effective keep-alive implementations with WebSocket for example (issue 3488)
- fixed a bug where disconnected connections could cause unhandled exceptions to be output in the connection thread (issue 3415)
- fixed certificate and key errors for HTTPS listeners to generate user-friendly exceptions (issue 3397)
- Logger module:
- Mime module:
- fixed bugs parsing binary data in multipart messages (issue 2936)
- PgsqlSqlUtil module:
- fixed comparison of triggers with column restrictions with table alignment (issue 3466)
- Pop3Client module:
- fixed the timeout value for upgrading the SSL connection in
Pop3Client (issue 3388)
- QUnit module:
- allow binary modules to be subjected to dependency injections (issue 3382)
- RestHandler module:
- fixed RestHandler losing internal exception info when response was considered invalid by schema validator (issue 3435)
- fixed RestHandler incorrectly handling Accept header of incoming requests (issue 3426)
- added debug logging for REST schema validation errors (issue 3410)
- RestSchemaValidator module:
- fixed
NullRestSchemaValidator not respecting set Content-Type header from RestClass (issue 3427)
- SmtpClient module:
- fixed the timeout value for upgrading to SSL connection in
SmtpClient (issue 3381)
- SqlUtil module:
- fixed quoting of reserved words in column names in table alignment (issue 3400)
- implemented the
AbstractDatabase::getPhysicalSize() method (issue 3385)
- Util module:
- fixed a bug parsing nested lists in
parse_to_qore_value() (issue 3483)
Qore 0.9.2
- Release Summary
Bugfix release; see details below
New Features in Qore
qdbg-remote supports an option to provide HTTP headers for WebSocket connections (issue 3350)
Bug Fixes in Qore
- implemented support for deserializing data from a binary string (issue 3357)
- fixed a bug with class initialization that could sometimes result in members of parent classes not being initialized when objects were constructed (issue 3355)
- fixed a bug in the SqlUtil module that could lead to a deadlock when DML methods are used with a datasource pool with connection contention (issue 3352)
Qore 0.9.1
- Release Summary
Bugfix release; see details below
New Features in Qore
- the serialization protocol has been updated to version 1.1; it still reads both binary- and data-serialized data from v1.0
- added the ListSerializationInfo hashdecl to support serializing and deserializing lists with complex type information
- new user modules:
Bug Fixes in Qore
- fixed a bug where the Salesforce rest connection returns 'rest' type instead of 'sfrests' (issue 3346)
- fixed a bug where an invalid parse exception would be raised with an assignment of a global variable to another global variable with the same name in a different namespace (issue 3337)
- implemented support for serializing and deserializing complex type information in lists and hashes (issue 3318)
- fixed bugs handling unassigned lvalues with complex type declarations with the push and unshift operators (issue 3317)
- fixed a memory leak in copy constructor execution in complex class hierarchies (issue 3312)
- implemented support for automatically initializing the
Qore library from Java when dynamically loaded from the JVM; additionally in this case the jni module is loaded automatically immediately after the Qore library is initialized (issue 3310)
- implemented support for performing binary searches in binary data by adding the following new pseudo-methods:
(issue 3300)
- Util module fixes:
- fixed a bug in
get_exception_string() with Java exceptions (issue 3304)
- QUnit module fixes:
- fixed a bug where tests could not be nested (issue 3306)
- RestClient:
- fixed a bug with charset in the RestClient module (issue 3328)
- fixed default option handling in REST connections including timeout handling (issue 3321)
- SalesforceRestClient:
- fixed default option handling in REST connections including timeout handling (issue 3321)
- SewioRestClient:
- fixed default option handling in REST connections including timeout handling (issue 3321)
- WebUtil:
- fixed a bug when StaticTemplateManager does not respect constructor's parse options in templates (issue 3334
Qore 0.9
- Release Summary
- This is a major release of Qore with large portions of code subject to extensive optimizations leading to large memory and performance improvements along with more control of Program logic containers, multithreading, and a reflection API. This release breaks binary compatibility with older versions of Qore as well, requiring binary modules to support the new API and ABI.
Changes That Can Affect Backwards-Compatibility
- Qore classes and functions are now immutable once created; any attempt to add a new user variant to an existing function or method or to add new declarations to an existing class will result in a parse error.
- Program objects now only support a single complete parse action (Program::parse() or Program::parseCommit()); subsequent attempts to parse code into the same Program object will fail with an exception. If parsing fails due to a parse exception, the Program object is generally no longer usable and must be recreated to be used.
- Program::parseRollback() is now deprecated; this action removes all user code and most builtin code from the Program object; delete the object instead of using this method
- the transient keyword has been introduced to support control over object serialization; see also %no-transient
New Features in Qore
- Up to 70% reduced memory usage in Qore programs through:
- Extensive memory optimizations
- Changing the default thread stack size from 8 MB to 512 KB (issue 2701)
- Eliminating heap-allocated, atomic-reference-counted integer and floating-point values resulted in reduced memory usage as well as faster runtime execution
- Reflection API
- Data and object serialization support:
- All data types except closures, call references, references, and non-serializable objects can be serializeed
- All objects from classes inheriting Serializable can be serialized
- Class members declared with the transient keyword (new in this release) will not be serialized but instead will get their default values when deserialized
- Classes can define their own local serialization and deserialization logic by defining the serializeMembers() and deserializeMembers() methods, respectively
- The following builtin classes support serialization:
- New classes:
- AbstractSQLStatement: has been added as the parent class defining an abstract API for SQLStatement
- Serializable: a new class supporting data and object serialization
- StreamBase: a base class for stream classes allowing for a controlled handoff of a stream to another thread
- Added support for importing a split user module represented as directory (issue 2562)
- New and updated methods in existing classes:
- New functions:
- New modules:
- New and updated hashdecls:
- New constants:
- New date formatting codes for <date>::format() and format_date():
"Dn" and "DN": the ordinal day number in the year
"I": ISO-8601 week string
"Id" and "ID": ISO-8601 week day number
"IF": the value in ISO-8601 format for both relative (ex: "P2Y1M3DT5H7M9.002S") and absolute dates (ex: "2018-03-23T10:43:12.067628+01:00")
"Iw" and "IW": ISO-8601 week number
"Iy" and "IY": ISO-8601 week year
- New parse directives:
- Program::parse() and Program::parsePending() updates: the format_label parameter is obsolete/ignored (issue 2903)
- Module updates
- reflection: a new binary module providing a reflection API to Qore
- ConnectionProvider module changes:
- The
AbstractConnection::getConstructorInfo() method (and supporting declarations) was added to allow connections to be created dynamically, potentially in another process from a network call (issue 2628)
- The
AbstractConnection has new public flag enabled. Also constructors are updated. (issue 3001)
- The
AbstractConnection has new constructors, old ones are obsolete. Custom URL/URI parsing is possible (issue 3162)
- CsvUtil module updates:
- Added public methods
AbstractCsvIterator::getRawLine() and AbstractCsvIterator::getRawLineValues() (issue 2739)
- FreetdsSqlUtil module changes:
- Added support for serializing and deserializing
AbstractTable objects (issue 2663)
- HttpServer module changes:
- added the
"header-info" hash to the context argument when calling handlers (issue 3260)
- Added support for adding new HTTP methods to the server with the
HttpServer::addHttpMethod() method (issue 2805)
- Mime module changes:
- allow the default type for unknown extensions to be overridden in
get_mime_type_from_ext() (issue 3260)
- MysqlSqlUtil module changes:
- Added support for serializing and deserializing
AbstractTable objects (issue 2663)
- OracleSqlUtil module changes:
- Implemented a check for allowed types when is the AUTO_INCREMENT flag used (issue 2978)
- Added support for serializing and deserializing
AbstractTable objects (issue 2663)
- PgsqlSqlUtil module changes:
- Added support for serializing and deserializing
AbstractTable objects (issue 2663)
- QUnit module changes:
- RestHandler module changes:
- added the
RestHandler::returnRestException() method that allows subclasses to determine how exceptions are handled (issue 3235)
- Updated to support alternative URI paths for actions so that an "action=xxx" argument is not needed; instead the action can be added to the end of the URI path so that
"PUT path/xxx" can be used instead of "PUT path?action=xxx" (issue 2994)
- RestSchemaValidator module changes:
- Updated the default validator to try all serialization methods if multiple methods are available and one fails (issue 2831)
- Schema module changes:
- improved logging output when aligning schemas (issue 3114)
- SqlUtil module changes:
- Swagger:
- Swagger module does not accept multipart/form-data content-type and also does not work with list and hash parameters (issue 2932)
- Util module updates:
- Added public function
parse_ranges() (issue 2438)
- Added public function
check_ip_address() (issue 2483)
- Updated
parse_to_qore_value() to support single-element lists and hashes with curly brackets including empty hashes (issue 3138)
- updated
get_exception_string() to show the lang value (issue 3182)
- WebSocketHandler:
- added stopping connection from server side via
WebSocketConnection::stop(), WebSocketHandler::stopOne() and WebSocketClient handling of the WSCC_GoingAway event
- WebUtil module changes:
- updated to allow more control over file serving (issue 3260)
- Relative date changes
- Improved debugging support:
- ProgramControl::getStatementIdInfo() provides breakpoint info
- Command to resolve statement
- Interrupt notification provides call stack info
"Run to statement" implementation
- DebugHandler reimplemented to support multiple websocket handlers
- Programs are not interrupted in bootstrap code
- Command line utils display source line code when interrupted
- Runtime thread stack traces are available in all builds and the HAVE_RUNTIME_THREAD_STACK_TRACE constant is always
True. Furthermore, the Qore library has been extended to support stack tracing when embedding or integrating code in other programming languages at runtime
Bug Fixes in Qore
- fixed a bug in parse_url() with single-character hostnames with a port number (issue 3287)
- fixed a minor bug handling error info in exception handling in the RestClient module (issue 3280)
- fixed a crash in acquiring a new connection with datasource options (issue 3262)
- fixed a bug reporting the source location for runtime type errors related to missing return statements (issue 3255)
- fixed bugs where Datasource::getConfigString() and Datasource::getConfigHash() would require a connection to the server, making it impossible to check option before connecting (issue 3247)
- fixed a bug with weak references in some assignment expressions (issue 3202)
- fixed bugs in sprintf(), vsprintf(), and all variants where NOTHING was not treated the same as no value (issue 3184)
- worked around a potential COW bug in
std::string in GNU libdstdc++ 6+ (issue 3179)
- fixed a bug with simple additional and subtraction with mixed timeout and date values; updated docs that arithmetic operations with timeout values are not recommended and can return unexpected values in some situations (issue 3157)
- fixed a bug in deterministic garbage collection where Queue objects were not scanned and therefore cycles due to Queue elements would cause a memory and reference leak (issue 3101)
- fixed a bug where call references did not set the execution context with builtin functions and therefore calls to builtin functions in modules (such as
jni) with per-program private data would fail (issue 3024)
- fixed a bug where rvalue references with complex subtypes could get modified during an assignment (issue 2891)
- Fixed a bug where class members could be initialized multiple times in a class with multiple inheritance where the same class is inherited multiple times in the hierarchy (issue 2741)
- Fixed bugs handling abstract methods in complex hierarchies with multiple inheritance (issue 2741)
- Fixed bugs handling object scope in background expressions (issue 2653)
- Fixed a bug: hash(list<auto>) where l has an odd number of elements never returns (issue 2860)
- Fixed a bug where no error is issued when an expression does not have meaning as a top-level statement (issue 2826), and also where such expression is an argument to the background operator (issue 2747)
- Fixed a bug where the parser does not recognize that a return value of a function call is not ignored if it is an object and its method is immediately called (issue 2863),
- Fixed a bug where
public and private members of classes inherited with private:internal inheritance were not initialized when objects were created (issue 2970),
- Module fixes:
- QUnit:
- fixed error reporting with type errors with number values (issue 2984)
Qore 0.8.13.9
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a bug handling start and end arguments in replace() that would cause a crash (issue 3345)
- fixed a bug handling invalid DB driver options in datasource creation that could lead to a crash with some drivers (issue 3243)
- fixed a memory error in internal list handling that could lead to memory corruption and crashes (issue 3206)
- fixed calls to Dir::list*() methods which failed whenever there was a symlink with a non-existent target in a directory (issue 3192)
- fixed a bug handling illegal abstract method definitions of special class methods (issue 3126)
- fixed handling 304 Not Modified responses in the HTTPClient class (issue 3116)
- fixed a crashing bug in the Transform class when used with encryption algorithms (issue 3111)
- fixed a crash with multiple hash keys when parsing the hash map operator (issue 3108)
- module fixes:
Qore 0.8.13.8
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
Qore 0.8.13.7
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- module fixes:
- fixed a race condition in ThreadPool destruction that could cause a crash (issue 2906)
- fixed a hard to reproduce bug with internal runtime type matching that sometimes caused invalid runtime exceptions to be raised with base class constructors (issue 2928)
- fixed an error handling attach errors to Program objects from foreign threads after the program has been deleted (issue 2950)
- fixed a bug that would cause a crash if an unknown
"Content-Encoding" value were received by the HTTPClient class (issue 2953)
- fixed a memory leak with binary objects in certain operations such as when reading a file into a binary object (issue 2982)
Qore 0.8.13.6
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
Qore 0.8.13.5
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a bug where user modules with global variables could not be loaded into Program containers where PO_NO_GLOBAL_VARS was set (issue 2807)
- fixed a deadlock with RWLock and Condition objects when the read lock is held recursively (issue 2817)
- module fixes:
- CsvUtil:
- implemented the
number_format option to allow numbers with alternative decimal separators to be parsed and generated (issue 2806)
- RestClient:
- added support for REST requests with binary message bodies; added the
"bin" serialization method (issue 2816)
- RestSchemaValidator:
- fixed the null validator to handle binary message bodies; fixed issues with
"text" serialization with binary message bodies (issue 2816)
- Mime:
- fixed a bug in
mime_parse_form_urlencoded_string() where repeated elements would be overwriteen by subsequent keys with the same name (issue 2761)
Qore 0.8.13.4
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a bug where hashes and lists with subtype auto were not created correctly with implicit initialization causing excess type stripping which could lead to performance issues with large data structures (issue 2767)
- implemented a new optional DBI statement method to allow for statement execution only for describing the result set to solve performance issues when describing statements with large data sets (issue 2773)
- fixed a performance bug by eliminating overzealous and unnecessary internal type stripping (issue 2791)
- module fixes:
- CsvUtil:
- implemented the
csvutil_set_global_compat_force_empty_string() function and the compat_force_empty_string CSV parsing option to force "*string" fields with no value to return an empty string when parsing rather than NOTHING for backwards compatibility with very early versions of CsvUtil (issue 2476)
- Mime:
- mime_parse_form_urlencoded_string raies a parse exception when there is no value for a key (issue 2760)
- OracleSqlUtil module changes
- synonym resolving can fail with duplicated object name (issue 758)
- SqlUtil:
- implemented the
AbstractTable::getRowIteratorNoExec() method (issue 2773)
- TableMapper:
- updated to use the new SQL statement DBI method for efficient execution of queries only for describing result sets with outbound mappers to solve performance problems related to mappers that have statements with large data sets (issue 2773)
- fixed
RawSqlStatementOutboundMapper to be usable without subclassing (issue 2775)
Qore 0.8.13.3
- Release Summary
- Bugfix release; see details below
New Features in Qore
- improved debugging support:
- added support for a Visual Studio Code debug adapter for Qore
- the debugger can now retrieve sources when running from a remote debug server
- debugger options can now be set from command line (verbosity etc.)
- the
onAttach() event is now executed synchronously when the program thread context starts
- the
onDetach() event is executed properly when program thread contexts terminate
- the
onStep() now provides the breakpointId value if available
- the
onExit() event was added for greater control over code execution in the debugger
- the
onException() event was improved
- server commands now support
frameid as a parameter
- added the following methods to support retrieving source code in the debugger:
- new module:
Bug Fixes in Qore
- module fixes:
- QUnit:
- improved output in assertion failures for strings with special whitespace and for multi-line data structures (issue 2680)
- WebUtil:
- made it possible for FileHandler subclasses to add headers to response (issue 2686)
- HttpServerUtil:
- improved HTTP log masking to mask fewer false positives when attempting to mask sensitive data (issue 2621)
- fixed a crashing bug initializing constants with recursive references to code (issue 3027)
- fixed a crashing bug in the += operator with objects and hashes when %require-types is not in force (issue 2634)
- fixed a crashing bug in the background operator with non-constant hash expressions with local variable references (issue 2637)
- worked around an Oracle bug in materialized view creation in the OracleSqlUtil module where when the schema user is missing the CREATE MATERIALIZED VIEW grant the table backing the view is created but the materialized view itself is not created causing future creation actions to fail (issue 2643)
- implemented support for an optional error-handling method in SQL callbacks in the SqlUtil module to allow SqlUtil to recover from error scenarios in schema creation/alignment (issue 2643)
- fixed a design bug where an empty list () and an empty hash {} could not be assigned to complex types, leading to excess typing and casting for simple operations (issue 2647)
- fixed a bug in the map operator with complex types and empty list expressions (issue 2651)
- fixed a bug where implicitly-declared values of complex "or nothing" types would not be declared with the correct runtime type information (issue 2652)
- fixed a bug affecting class initialization with out of order initialization (issue 2657)
- implemented support for the more concise declaration of immediate typed hash values (issue 2675)
- fixed a bug where a crash would result when evaluating certain expressions in the brackground operator due to a memory error (issue 2679)
- fixed date formatting output with the
Z placeholder to always output the UTC offset as documented (issue 2684)
- fixed program thread context to return frames properly (issue 2674)
- fixed an internal memory bug that could cause unallocated memory to be read when creating objects (issue 2712)
- fixed a memory issue with typed hashes that could lead to a runtime creash (issue 2725)
Qore 0.8.13.2
- Release Summary
- Bugfix release; see details below
New Features in Qore
"thread list", "backtrace all" commands implemented for the debugger (issue 2608)
- QUnit: overloaded the
testAssertionValue() method to support auto/number/float and more verbose output when a difference in number/float values is found (issue 2556)
- qdbg-remote supports ConnectionProvider connections (issue 2613)
- new method: Breakpoint::getProgram()
Bug Fixes in Qore
- module fixes:
- DebugCmdLine:
- improved breakpoint usability (issue 2604)
- fixed a bug parsing call signatures when setting breakpoints (issue 2601)
- DebugProgramControl:
- QUnit:
- improved error location reporting by providing all stack location information up until the QUnit call to cover the case when multiple code layers are used such as one or more test modules (issue 1720)
- SqlUtil:
- implemented support for literal values in column operators taking column arguments with
cop_value() (issue 2555)
- WebSocketClient:
- added
WebSocketClient::pong() to allow unsolicited PONG messages to be sent (issue 2566)
- WebSocketHandler:
- fixed a bug where unsolicited
PONG messages caused the connection to be prematurely closed (issue 2566)
- fixed a bug with implicit initialization of typed hashes; this is now illegal and a
HASHDECL-IMPLICIT-CONSTRUCTION-ERROR exception is raised in such cases (issue 2491)
- fixed a bug with Condition variable handling on macOS High Sierra due to an internal undocumented API change (issue 2576)
- fixed a memory error with the += operator and uninitialized date/time values (issue 2591)
- fixed a bug in the remote debugger
qdbg-remote where wss:// schemes were not accepted (issue 2596)
- fixed a bug in an error message in ProgramControl::findFunctionStatementId() (issue 2600)
- fixed a crash when HTTPClient::setDefaultPath() was called with no argument (issue 2610)
- fixed a bug in debugger when program is not set (issue 2603)
Qore 0.8.13.1
- Release Summary
- Bugfix release; see details below
New Features in Qore
- the
sqlutil script has been updated with the –select option to allow dumped table rows to be filtered (issue 2509)
Bug Fixes in Qore
- fixes in modules:
astparser module fixes:
- fixed memory leaks in
AstParser::parseFile() and AstParser::parseString() methods (issue 2261)
- fixed incorrect flex code regarding parse options leading to segfaults (issue 2262)
- DebugCmdLine module fixes:
- fixed value setting to process all remaining arguments on the command line (issue 2294)
- DebugCmdLine module fixes:
- the debugger should report ambiguous partial matches as an error (issue 2292)
- MailMessage module fixes:
- fixed
Message::addBody() with no body present (issue issue 2360)
- Mapper module fixes:
- fixed a bug in the
STRING-TOO-LONG exception (issue 2405)
- PgsqlSqlUtil module fixes:
- fixed a bug where default column values were compared incorrectly leading to false positives when comparing and aligning DB schemas (issue 2527)
- Qdx module fixes:
- QUnit fixes:
- added missing comparison methods (issue 1588):
Test::assertRegex()
Test::assertNRegex()
Test::assertNeq()
Test::assertNeqSoft()
Test::assertGt()
Test::assertGtSoft()
Test::assertGe()
Test::assertGeSoft()
Test::assertLt()
Test::assertLtSoft()
Test::assertLe()
Test::assertLeSoft()
Test::assertNothing()
- RestHandler module fixes:
- updated to return a 400 Bad Request error when REST schema validation fails on messages received issue 2344)
- updated to return a 400 Bad Request error when there are string encoding errors with messages received (issue 2398)
- updated to return a 404 Not Found error when REST subclass does not exist (issue 2405)
- updated to return a 400 Bad Request error when ENCODING-CONVERSION-ERROR occurs during request parsing (issue 2543)
- RestSchemaValidator module fixes:
- updated docs for
AbstractRestSchemaValidator::parseRequest() to reflect how validation exceptions should be raised for proper error reporting (issue 2344)
- fixed handling of messages with non-object (i.e. non-hash) bodies (issue 2366)
- SqlUtil module changes
- implemented support for custom column operators (issue 2314)
- OracleSqlUtil module changes
- implemented support for chained synonyms (issue 2408)
- allow to use DBA_* views instead of ALL_* if possible (issue 2418)
- Swagger module fixes:
- fixed handling of string type date and date-time formats (issue 2341)
- fixed example value for binary type (issue 2342)
- fixed serialization of date/time values (issue 2349)
- updated to return a 400 Bad Request error when REST schema validation fails on messages received issue 2344)
- fixed handling of non-string enum types (issue 2364)
- fixed confusing error messages with invalid parameter types (issue 2365)
- fixed handling of messages with non-object (i.e. non-hash) bodies (issue 2366)
- fixed handling of optional parameters (issue 2369)
- fixed handling of non-string query parameters (issue 2388)
- fixed a bug where string value constraints were only enforced in requests but not responses (issue 2396)
- fixed a bug where invalid date, binary, and byte values would cause a 500 Internal Server Error response to be returned instead of a 400 Bad Request error (issue 2397)
- fixed a bug where date values were formatted incorrectly in Swagger responses (issue 2409)
- fixed a bug which made it impossible to send data with other content/mime types than json, yamlrpc, FormUrlEncoded or MultipartFormData (issue 2497)
- fixed handling of string/binary values (issue 2505)
- fixed a bug where consumes property of operations was sometimes ignored (issue 2507)
- fixed parsing of responses without Content-Type header (issue 2517)
- fixed path matching for paths not beginning with a slash (issue 2516)
- TableMapper module fixes:
- fixed issues where where description fields of input and output records for automatically-generated options did not reflect column comments and could not be overridden with user input (issue 2520)
- fixed bugs affecting debugging matching function/method variants and finding statements with special methods and with complex types (issue 1865)
- fixed a bug in
qpp generating hashdecl code in a specific namespace (issue 2255)
- fixed an error in a hashdecl documentation example (issue 2299)
- made C++ APIs for complex types for modules public (issue 2271)
- fixed inconsistencies in the behavior of the range operator (..) and the square brackets operator [] with lists and ranges between immediate evaluation and lazy functional evaluation and aligned the behavior of the operators among supported data types with the remove and delete operators (issue 2260)
- fixed a bug handling statement indices with parse errors (issue 2312)
- fixed too-agressive class hierachy checks that disallowed legal hierarchies where the same base class appears more than once in the hierarchy (issue 2317)
- fixed a crashing bug in the background operator when the object in context goes out of scope with the thread and an exception is thrown (issue 2319)
- fixed sending duplicate headers when header hash keys differ only in case; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search (issue 2340)
- fixed
q_absolute_path_windows to correctly recognize relative Windows paths beginning with a drive letter (issue 2377)
- fixed a bug in private:internal in method execution within a class hierarchy in some cases (issue 2380)
- fixed an obscure bug handling runtime errors in code calls with a variant matched at parse time where a runtime exception could occur (issue 2392)
- improved breakpoints (enabled by default), extended help texts, load/save debug history and session (issue 2401)
- fixed a bug in an error message regarding binary module signal assignments (issue 2439)
- added C++ functions to allow binary modules to allocate and deallocate multiple signals atomically (issue 2440)
- eliminated a warning in a header file when building with g++ 7+ (issue 2449)
- implemented a fix in
qdbg to resume any blocked threads before exiting to ensure a clean and correct shutdown of the debugger; fixes a problem when the process ould freeze on quit (issue 2472)
- fixed bugs in Windows builds (issue 2529)
Qore 0.8.13
- Release Summary
- Major new features and bug fixes including input and output stream support and sigificant new functionality including several new modules.
Changes That Can Affect Backwards-Compatibility
- fixed broken continue and break statements that were accepted anywhere in the source and behaved like a return statement; now such statements outside a loop context will result in a parse exception; to get the old behavior, use %broken-loop-statement in your source code
- fixed broken reference and *reference type restrictions which had no effect prior to this release; to get the old behavior, use %broken-references in your source code
- the random number generator is always seeded with a random number when the Qore library is initialized; to get a predictable sequence from rand(), you must explicitly seed the random number generator by calling srand() with a predefined seed number
- the synchronized keyword now operates differently depending on the context; synchronized functions have a global reentrant lock associated with the function (as in previous versions of Qore), whereas now synchronized normal class methods share a reentrant lock associated with the object, while synchronized static class methods share a reentrant lock associated with the class itself. This aligns Qore's synchronized behavior with that of Java and [MethodImpl(MethodImplOptions.Synchronized)] .NET/CLR (issue 894).
- classes may not have the name
"auto" due to the introduction of this identifier as a special type name
- a new keyword hashdecl has been introduced to support type-safe hash declarations
New Features in Qore
- complex type support
- type safe hashes (Type-Safe Hash Type); ex:
hash<MyInfo> = get_info();
- new system types:
- hash with type-safe values; ex:
hash<string, int> h = ("str": 1);
- list with type-safe values; ex:
- reference with type-safe lvalues; ex:
int i = 1; reference<int> r = \i;
- auto (allows any value including complex types to be assigned without losing complex type information); ex:
- improved new, cast<>, and instanceof operators
- the instanceof operator now works with any type; ex:
bool b = v instanceof hash<string, int>;
- note that complex type information is lost when assigning to an lvalue with a compatible but more generic type or by assigning to an untyped lvalue; this was necessary to allow complex types to be introduced in Qore without breaking backwards compatibility.
- support for input and output streams for the efficient piecewise processing of small or large amounts of data with a low memory overhead
- includes the following classes:
- Three constants were introduced for accessing standard input/output using streams API:
- Additionally, stream support has been added to the following functions and methods:
- Stream support was also added to the following user modules:
- support for lazy functional evaluation of functional operators (including nested lazy evaluation) for much more efficient processing of iterated expressions; affects:
- map: supports lazy evaluation of itself and also of the iterator expression
- select: supports lazy evaluation of itself and also of the iterator expression
- keys: supports lazy evaluation of itself
- foldl: supports lazy evaluation of the iterator expression
- foldlr: supports lazy evaluation of the iterator expression
- foreach: supports lazy evaluation of the iterator expression
- .. (range operator): supports lazy evaluation of itself
- [n,m,...] (list, string, or binary dereference with multiple indices)): supports lazy evaluation of itself
- support for list, string, and binary slices with offsets and ranges:
- enhanced cryptographic support including support for AES with Additional Authenticated Data and Message Authentication Code (MAC) support
- The following new API functions were added:
- The following constants were added to support the new generic cryptographic APIs:
- support for binding output placeholder buffers for result sets that return an SQLStatement object:
- new debugging support (note that APIs are subject to change until the next major release):
- new classes:
- new modules:
- new parse directives:
- new user modules:
- new access modifiers: private:internal (providing strong encapsulation of the following declaration(s)) and private:hierarchy (which is equivalent to private; issue 1197)
- new parse options and directives:
- new constants:
- implemented additional parse-time checks for many operators to provide feedback for invalid operations detected at parse time
- implemented the weak assignment operator (:=) (only available with %allow-weak-references)
- implemented the range operator (..)
- implemented support for list expressions inside the dereference operator ([])
- new methods:
- updated methods:
- Counter::dec(): now returns the current value of the counter
- Qore::HTTPClient::constructor() updates
- Added support for the following options:
ssl_cert_path: allows an X.509 client certificate to be set in the constructor
ssl_key_path: allows a private key for an X.509 client certificate to be set in the constructor
ssl_key_password: allows a password-protected private key to be used wih an X.509 client certificate
ssl_verify_cert: enforces server certificate validation with HTTPS connections
- Additionally, the HTTPClient class now understands the
PATCH method (RFC 5789)
- Qore::RangeIterator::constructor(int) was updated; the second argument was removed to avoid ambiguity with the other overloaded constructor
- TreeMap::get(): added a new optional argument to return the unmatched part of the search string
- the following read-only static methods were moved from the File class to the ReadOnlyFile class:
- new pseudo-methods:
- new functions:
- updated functions/methods:
- updated functions:
- ceil(): now allows the precision to be specified
- floor(): now allows the precision to be specified
- hash(): now returns an untyped hash stripped of any key type information
- mkdir(): now allows parent directories to be created in the same call
- round(): now allows the precision to be specified
- set_thread_init(): now allows for thread init code to be removed
- Qore::xrange(int) was updated; the second argument was removed to avoid ambiguity with the other overloaded variant
- module updates:
- BulkSqlUtil module updates:
- added complex type support
- added the
AbstractBulkOperation::size() method
- implemented analytic/window functions: new functions [issue 2202]
- implemented analytic/window functions: cop_over full support including ORDER BY [issue 2203]
- CsvUtil module updates:
- added support for streams
- FixedLengthUtil module updates:
- added support for streams
- added
FixedLengthFileIterator::getFileName() (issue 1164)
- added field as well as global option "truncate" (issue 1841)
- added field as well as global option "tab2space" (issue 1866)
- HttpServer module updates:
- added a minimal substring of string bodies received to the log message when logging HTTP requests
- HttpServerUtil module updates:
- the
parse_uri_query() function was moved to the Util module
- Mime module updates:
- added complex type support
- added the following constants:
MimeTypeMultipartFormData
MimeTypeMultipartRelated
MimeTypeMultipartMixed
- added the following methods:
MultipartMessage::getBoundary()
MultipartMessage::serializeBody()
MultipartMessage::size()
- fixed a bug parsing multipart messages where unnecessary characters were searched (issue 2099)
- Pop3Client module updates:
- Qorize module updates:
qorize_named() added support for objects
- RestClient module updates:
- added the
RestConnection class to support the ConnectionProvider module
- support for the
text/plain Content-Type
- RestClient module updates:
- added support for runtime REST API validation against a REST schema using the RestSchemaValidator module
- added support for Swagger 2.0 REST API validation and
"swagger" options using the Swagger module in the RestClient and RestConnection classes
- RestHandler module updates:
- added an API to allow REST calls to be made internally (issue 1899)
- added support for runtime REST API validation against a REST schema using the RestSchemaValidator module
- RestSchemaValidator module:
- added this new module providing a REST schema validation API
- SalesforceRestClient module updates:
- Schema module updates:
- added the
c_blob() and c_clob() functions (issue 1851)
- SewioRestClient module:
- added this new module providing APIs for communicating with Sewio.net's RTLS Studio REST API
- SewioWebSocketClient module:
- added this new module providing APIs for communicating with Sewio.net's RTLS Studio WebSocket API
- SmtpClient module updates:
- SqlUtil module updates:
- implemented the
cop_trunc_date() function (issue 2032)
- Swagger module added:
- TableMapper module updates:
- added support for upserts in
InboundTableMapper (issue 1067)
- added
InboundTableMapper::queueData(list)
- TelnetClient module updates:
- added the
TelnetConnection class to support the ConnectionProvider module
- added support for URLs in the constructor()
- added the
TelnetClient::getTarget() method
- Util module updates:
- the
parse_uri_query() function was moved here from the HttpServerUtil module
parse_uri_query() now handles repeated query arguments as a list
- added public function
flatten()
- added public function
uniq()
- WebSocketClient module updates:
- added the
WebSocketConnectionObject class to support the ConnectionProvider module
- updated for complex types
- fixed a bug where the event loop thread would immediately terminate after a reconnection (issue 2061)
- improved client logging
- fixed a bug where the
WebSocketClient class did not validate the Sec-WebSocket-Accept response header according to RFC6455 (issue 2062)
- WebSocketUtil module updates:
- added the
ws_get_response_key() function
- the following classes can be used from binary modules:
- updated the build to require a C++11 compiler or better to build Qore (issue 994)
- a relative time stamp is now logged in trace and debug output
Bug Fixes in Qore
- fixed a bug causing AbstractQuantifiedBidirectionalIterator not being available (issue 968)
- BulkSqlUtil module fixes:
- fixed the module to work properly even with DB drivers that do not support parameter array binding (issue 1154)
- CsvUtil module fixes:
- fixed a bug in an error message validating input data (issue 1062)
- added an exception when detected headers do not match the fields option (issue 2179)
- HttpServer module fixes:
- added logic to attempt to mask passwords in log messages (issue 1086)
- HttpServerUtil module fixes:
- fixed a bug where the msg arg to
AbstractAuthenticator::do401() was ignored (issue 1047)
- RestHandler module fixes:
- added logic to allow sensitive data to be masked in log messages (issue 1086)
- SqlUtil module fixes:
- fixed a bug in update and upsert statement generation when the given data does not have enough columns to use the unique index found, an error message is generated that contains all the columns names instead of just the column names required by the index (issue 1013)
- WebSocketClient module fixes:
- fixed a thread lock starvation race condition (issue 2130)
UTF-16 fixes:
- fixed a bug where break and continue statements were accepted outside of loops (issue 976)
- fixed a bug compiling on Solaris SPARC with g++ where
MPFR_DECL_INIT() is compiled incorrectly with -O1 or greater (issue 958)
- fixed a bug causing an infinite loop in decompression functions (issue 966)
- fixed an issue where an internal C++ API (QoreProgram::parseCmdLineDefines()) performed a needless copy of a data structure (issue 1099)
- fixed a stack corruption bug with asynchronous I/O on UNIX systems with ReadOnlyFile methods (issue 1106)
- fixed bugs with inconsistent conversions of int, float, and boolean values to date/time values, now they are all converted uniformly to relative date/time values (issue 1156)
- fixed a bug where Qore allowed code to be declared both public and private without a warning (issue 1187)
- fixed a bug where the instanceof operator would return True with objects that did not publically inherit the given class or where the given class is not accessible (issue 1191)
- fixed a bug in qpp support of the 'final' class flag (issue 1222)
- fixed a bug where the + operator provided access to private members from outside the class (issue 1209)
- fixed a bug where different overloaded method variant resolution rules were used at parse time (best match in hierarchy) and runtime (best match in first matching class) in a class hierarchy (issue 1229)
- fixed a bug where exceptions in base class constructor calls did not reflect the actual source location (issue 1230)
- fixed a bug where runtime function/method variant matching was incorrectly biased towards default matches for missing arguments (issue 1231)
- fixed bugs where calls to Socket::upgradeClientToSSL() and Socket::upgradeServerToSSL() were ignored with no exception thrown if the socket was not connected (issue 1258)
- fixed a bug where a closure created in an object scope could not be called if the object had been deleted, even if the closure did not refer to the object (issue 1303)
- fixed a bug where ord() would return negative numbers for bytes with the high bit set with compilers where char is the same as signed char (issue 1385)
- fixed a bug where int(number) returned rounded value instead of the integer part (while int(float) behaved correctly; also cf. initializing a softint value from a number vs. from a float) (issue 1463)
- File::read() now uses character semantics for the length argument (issue 1548)
- fixed a bug with strongly-typed lvalue assignments with classes created in different Program objects (issue 1551)
- fixed a bug where an ASCII string and the same string in a different encoding and with diacritics could incorrectly be marked as equal (issue 1579)
- fixed bugs in HTTPClient methods where string message bodies were not converted to the object's character encoding before transmission (issue 1813)
- fixed a bug in the reference and *reference assignment restrictions; previously any value was accepted, now only references are accepted as the initial assignment values (issue 1819)
- fixed a bug in handling the
SqlUtil::BLOB type in the FreetdsSqlUtil module (issue 1852)
- fixed a bug in overloaded call variant matching where missing arguments were counted towards the match (issue 1897)
- fixed many bugs where parse-time errors could be reported at an incorrect source location; parse-time error location reporting has been completely overhauled and reimplemented for correctness (issue 1930)
- fixed a bug where code signatures would accept parameter variables without
"$" signs even when %allow-bare-refs was not in effect (issue 1941)
- fixed memory leaks in the scanner related to EOF conditions (issue 1976)
- rewrote Qore functions Qore::gethostbyname(), Qore::gethostbyname_long() and Qore::gethostbyaddr() to use standard C functions
getaddrinfo(3) and getnameinfo(3) internally instead of the deprecated gethostbyname(3) and gethostbyaddr(3) (issue 1952)
- fixed cmake builds on Darwin (issue 1980)
- fixed a bug where immediate date-time values were not marked with their type at parse time (issue 2001)
- fixed a bug where the *data type restriction would allow all types to be assigned at runtime (issue 2002)
- Qore::RangeIterator::constructor(int) and Qore::xrange(int) were updated; the second arguments were removed to avoid ambiguity with the other overloaded variants (issue 2016)
- fixed a bug where Qore::replace() could get in an infinite loop with arguments with embededed nulls (issue 2098)
- fixed a bug in regular expression extraction where an infinite loop could occur (issue 2083)
- fixed a bug where a call reference to an object method that crosses Program boundaries could result in a core dump when called due to an error managing thread-local data (issue 2145)
- fixed crashes in scanner due to EOF in comments (issue 2175)
Qore 0.8.12.12
- Release Summary
- Bugfix release; see details below
New Features in Qore
- added the HAVE_DSS constant to indicate if the outdated DSS(), DSS1(), DSS_bin(), DSS1_bin(), DSS_HMAC(), and DSS1_HMAC() functions are available in the opnessl library used to compile Qore
Bug Fixes in Qore
- fixed a bug handling
argv in base class constructor execution (issue 2030)
- fixed a bug handling the connection status in the HTTPClient class (issue 2058)
- fixed building with openssl 1.1+ (issue 2135)
- fixed binding more than one wilcard port on a specific address in the HttpServer module (issue 2155)
- fixed a bug in SqlUtil with column aliases that are reserved words (issue 2163)
- fixed a memory bug in the splice operator with a binary operand (issue 2303)
- fixed a bug where calling any SQLStatement method in another thread with an active connection from a DatasourcePool causes a crash (issue 2334)
- fixed a bug in RestHandler regarding inconsistent handling of URI parameter arguments; the
"action" key was only removed from the ah hash when there were no other arguments, introducing an inconsistency in argument handling in REST services (issue 2479)
- fixed a bug where
ENCODING-CONVERSION-ERROR exceptions were not thrown with newer GNU iconv libraries with an API change (issue 2500)
Qore 0.8.12.11
- Release Summary
- Bugfix release; see details below
New Features in Qore
Bug Fixes in Qore
- fixed documentation regarding escaping of characters in strings and added a parse exception in case of trying to escape octal values in range 400-777 (issue 50)
- fixed a crashing bug where Datasource::getConfigString() was called without a connection, also could crash in an implicit internal call to this method with the DatasourcePool class when connections were lost and the warning callback should be called (issue 1992)
- fixed a bug where Datasource::getConfigHash() returned different values depending on if the object was connected or not (issue 1994)
Qore 0.8.12.10
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- module fixes:
- fixed a bug that could cause spurious parse-time exceptions to be thrown when matching call variants with multiple return types for the same callable object (issue 1928)
- fixed the process return code in the output reference in backquote() on Unix/Linux platforms (issue 1884)
- fixed a bug where connections were not immediately released back to the DatasourcePool in case of an
SQLSTATEMENT-ERROR exception (issue 1836)
- eliminated a spurious exception in the SQLStatement class in case of a DatasourcePool timeout (issue 1832)
- fixed a crash when the incorrect type was passed to a parameter declared *reference (issue 1815)
- fixed a crash when the Qore library exits caused by an error in handling module dependencies with injected modules (issue 1805)
- fixed segfault crashes caused by calling object methods with null pointers (issue 1791)
- added internal API support to make it easier for DBI drivers to handle lost connections and to allow DBI drivers that must close all open handles before a connection is closed (such as the oracle driver); due to this change, SQLStatement objects based on a DatasourcePool are closed automatically whenever the datasource is returned to the pool (issue 1250)
- implemented new parse options to revert the effect of parse options that affect code safety (issue 1895):
- fixed parse locations of strings and regexes (issue 1905)
Qore 0.8.12.9
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a memory leak where references participate in recursive references (issue 1774)
- fixed a build issue with clang++ (issue 1768)
- fixed a memory leak in the Queue copy constructor when the Queue was used in other objects (such as an event queue, etc; issue 1749)
- Mapper module fixes:
- fixed bugs handling the
allow_dot and allow_output_dot options (issue 1690)
- fixed
TableMapper bugs introduced in Qore 0.8.12.7 (issue 1754)
Qore 0.8.12.8
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a memory leak in %try-module error handling (issue 1690)
- fixed a bug in trunc_str() when the string has an invalid multi-byte character at the end of the string and the string is exactly the byte width requested (issue 1693)
- fixed a bug where ReadOnlyFile::getchar() did not respect character semantics as documented (issue 1547)
- OracleSqlUtil module fixes:
- fixed a bug in
character_semantics for standalone column (issue 1688)
- Mapper module fixes:
- fixed a bug in handling "list mode" data such as submitted by
InboundTableMapper::queueData() (issue 1736, bug introduced in Qore 0.8.12.7 with the fix for issue 1626)
- SqlUtil module fixes:
- fixed schema alignment skipping column with name "driver" (issue 1684)
- fixed sqlutil schema management: functional indexes are rejected without () in name (issue 1610)
- TableMapper module fixes:
- fixed a bug in handling "list mode" data with optimized inserts (issue 1736, bug introduced in Qore 0.8.12.7 with the fix for issue 1626)
- WebSocketClient module fixes:
- WebSocketHandler module fixes:
- WebSocketUtil module fixes:
- fixed a bug where a type conversion error in an lvalue assignment could generate a confusing unrelated runtime exception (issue 1697)
- fixed a bug where invalid characters in the port specification in a URL were ignored (issue 1728)
- fixed a bug with SSL socket communication the remote closing the connection during a send operation could cause the current thread to go into an infinite loop consuming 100% CPU (issue 1729)
- fixed a bug in the HashListIterator class iterating hashes with a mix of lists and single values such as used by bulk DML binds; now the single values will appear as the current value for all list elements as per the original design instead of throwing a runtime exception (issue 1738)
Qore 0.8.12.7
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed bug in internal string generation with
size_t arguments that could cause invalid data to be output or crashes on 32-bit platforms (issue 1640)
- fixed a runtime memory leak and invalid runtime behavior with undetected recursive lvalue references (issue 1617)
- improved prompt collection performance with large graphs of objects by eliminating additional unnecessary graph scans, resulting in further large performance improvements in the garbage collector (issue 1363)
- improved
InboundTableMapper::queueData() performance (in the TableMapper module) when used with data in hash of lists format to use bulk DML in input and output without internal data conversions (issue 1626)
- OracleSqlUtil module fixes:
- worked around
ORA-22165 from op_in() caused by Oracle's limit on number of collection elements (issue 1660)
- fixed a bug in the force option (i.e. cascade) for dropping types (issue 1683)
- improved %try-module error reporting and documentation (issue 1648)
Qore 0.8.12.6
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a bug in Qore::parse_url() parsing single-character hostnames (issue 1524)
- fixed a bug where PO_LOCKDOWN was not set when parsing
init and del attributes in user module headers (issue 1535)
- fixed a bug parsing exception catch block parameter errors (in debug builds only; issue 1558)
- fixed a bug dereferencing binary values with the [] operator; the behavior now corresponds to the documentation (issue 1566)
- fixed a bug that would result in a crash if a method were declared both
static and abstract (issue 1590)
- fixed performance issues with the Mapper module (and by extension the TableMapper module) for mappers with many identity (i.e. 1:1) and constant mappings (issue 1620)
- fixed a bug in the
BulkInsertOperation class in the BulkSqlUtil module where inserts would fail or silently insert invalid data in the second or later blocks when constant hashes were used (issue 1625)
Qore 0.8.12.5
- Release Summary
- Bugfix release; see details below
New Features in Qore
- added the SalesforceRestClient module for communicating with Salesforce.com using the REST APIs
- module SqlUtil
- has support for native default values in tables (issue 1428)
- has support for Oracle named types (eg. spatial types) for Schema.qm and SchemaReverse.qm. (issue 1465)
Bug Fixes in Qore
- Mime module:
- added support for URL form-encoded messages (issue 1436
- RestClient module:
- added support for URL form-encoded messages (issue 1436
- added support for the
"rawxml" message body encoding (issue 1437
- fixed handling of invalid compressed data in the following functions (issue 1432):
- fixed
@inf@ on Windows (issue 1442)
- fixed Qore::parse_url() with single-character usernames (issue 1455)
- corrected the error message with SSL reads when the server closes the connection prematurely (issue 1488)
- fixed the
Host header in HTTP requests to not include the port if the port is the default port for the scheme because it causes some servers to reject the request (issue 1489)
Qore 0.8.12.4
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
- fixed a reference bug in the Queue class introduced in the last release (issue 1309)
- fixed a bug where database types could not be correctly aligned if they had dependencies (issue 1314); entailed updates in the following modules:
- fixed a bug in trunc_str() where an infinite loop could be triggered with certain arguments and multi-byte character encodings (issue 1327)
- improved prompt collection performance with larger graphs of objects by eliminating unnecessary graph scans made during object method calls (issue 1363)
- fixed bugs in date(string) and date(string, string) where invalid input data was ignored and invalid dates were returned (issue 1369)
- CsvUtil module:
- fixed a bug in
AbstractCsvIterator::identifyTypeImpl() generating an error message (issue 1355)
- MailMessage module:
- fixed a bug using the default encoding in
Message::attach() (issue issue 1352)
- SqlUtil module:
- fixed the ignored character_semantics column option in schema alignmed (issue 1379)
- implemented the
cop_length() column function (issue 1395)
- OracleSqlUtil module:
- OraclePackage attribute body_src is now public to access package bodies
- Qorize module:
- Qorize module: new qorize_val() set of functions; qorize_named() introduced; qorize tests
- TableMapper module:
- fixed runtime option propagation to
TableMapper::SqlStatementMapperIterator from TableMapper::AbstractSqlStatementOutboundMapper::iterator() (issue 1418)
- fixed SqlStatementMapperIterator::getCount() (issue 1417)
- added the following methods:
TableMapper::AbstractSqlStatementOutboundMapper::getRowIterator()
TableMapper::InboundTableMapper::iterator()
TableMapper::InboundTableMapperIterator::getRuntime()
TableMapper::InboundTableMapperIterator::replaceRuntime()
TableMapper::InboundTableMapperIterator::setRuntime()
TableMapper::SqlStatementMapperIterator::getRuntime()
TableMapper::SqlStatementMapperIterator::replaceRuntime()
TableMapper::SqlStatementMapperIterator::setRuntime()
- QUnit module:
- fixed showing the assertion location when there are test modules on top of QUnit (issue 1046)
- fixed inconsistency between list splice operator and splice function (issue 1380)
Qore 0.8.12.3
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
Qore 0.8.12.2
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
Qore 0.8.12.1
- Release Summary
- Bugfix release; see details below
Bug Fixes in Qore
Qore 0.8.12
- Release Summary
- Major new release with major new features and bug fixes as well as packaging fixes:
- added support for deterministic garbage collection
- standardized function naming convention
- new functions, methods, constants, operators, and user modules
- greatly improved support on Windows
Changes That Can Affect Backwards-Compatibility
- fixed broken list parsing; in previous releases, Qore's parser re-wrote lists without parentheses used as top-level statements with certain assignment operators (=, +=, -=, *=, and /=, but not with others) so that statements like list l = 1, 2, 3; were valid assignments. Due to operator precedence, such statements should normally be interpreted as (list l = 1), 2, 3;, which is not a valid expression. Not only were the rules applied with only some assignment operators, but such lists were only rewritten if used as top-level statements, therefore the rules were applied inconsistenctly depending on where the expression was located in the parse tree. As of Qore 0.8.12, these inconsistencies have been eliminated by default from Qore; all lists are processed according to the precedence rules defined in operators. This could break old code that relied on the old, broken behavior. To get the old behavior, use the %broken-list-parsing parse directive.
- fixed broken int and softint assignments; previously runtime type errors with these type restrictions were ignored and all values were silently converted to integers for the assignment, now runtime type errors are thrown according to the original design. Parse errors are detected as before. This could break old code that relied on the old, broken behavior. To get the old behavior, use the %broken-int-assignments parse directive.
- fixed broken multi-character operator parsing; the Qore parser has been updated to no longer accept multi-character operators with whitespace between the chacters making up the operator; it is believed that this was never used and simply caused the parser to be needlessly complicated and caused Qore to be less compatible with other languages. To get the old behavior, use the %broken-operators parse directive.
- the push, unshift, pop and shift operators now throw an exception when their first operand is not a list and %strict-args is in effect
New Features in Qore
- Added the value_coalescing_operator which checks first argument if it evaluates to False with <value>::val() and if so assigns the second argument. The operator can be further chained; for example:
- Added the null_coalescing_operator which checks the first operand for NOTHING or NULL; if true returns the second argument. The operator can be further chained, in which case the first operand with a value is returned; ex:
- Qore identifiers can now begin with an underscore character
"_"; the following is now a valid (with %new-style):
- hash enhancements:
- new syntax for an expression giving an empty hash: {}; for example:
- new literal hash support: hashes can now be given as literal values as follows:
(<key_expr>: <val_expr>, [...])
For example: return (get_key(): get_value());
in the past the keys in literal hashes had to be either a string or a constant; now any valid Qore expression can be used to generate the hash keys at runtime
- new hash syntax; hash elements can now be enclosed by curly brackets as well as regular parentheses; the version with curly brackets when used with the map operator results in the hash version of the map operator being used
- Added new hash version of the map operator to build a hash from a list or iterator expression; ex:
hash h = map {$1, h2.$1}, i;
- implemented support for loading user modules in a pre-defined Program object (that can have a custom API) in the following new functions and methods:
- implemented support for code / dependency injections in Program containers with the following changes:
- Qore::Program::importClass() now accepts optional arguments that allow the imported version of the class to live in another namespace and have another name and an argument that allows the imported version of the class to remain even if it overlaps with an imported system or user class from a module
- Qore::Program::importFunction() now accepts an optional argument that allows the imported version of the function to remain even if it overlaps with an imported system or user function from a module
- the new parse option Qore::PO_ALLOW_INJECTION must be set on the Program object in order to use code / dependency injection parameters in the above methods
- Program changes:
- Once the object has an injected API set up, the system API can be imported (possibly already overridden with injected code) with the following new methods:
- Additionally user modules can be loaded with overridden injected code with the following new functions / methods:
- Furthermore the following function can be used to reload injected modules with the non-injected version:
- implemented support for user-defined thread-resource management, allowing Qore code to safely manage resources associated to a particular thread:
- new constants:
- new classes:
- other new methods:
- updated methods:
- the
SOCKET-THROUGHPUT-WARNING event is no longer raised on the warning queue if the transfer size is less than 1024 bytes; this affects:
- new functions:
- updated functions:
- new pseudo-methods:
- the following functions were moved from the Util module to Qore:
- camel-case functions were deprecated in this release
- the following functions were deprecated:
- Functions deprecated in this release will remain for the forseeable future for backwards-compatibility
- Added support for reexporting imported definitions in user module with the new %requires(reexport) form of the %requires parse directive.
- Qore::xrange() and Qore::RangeIterator updates:
- Qore::FtpClient updates:
- Performance improvements:
- module directory handling changed
- user modules are now stored in prefix/share/qore-modules/version
- prefix/share/qore-modules is also added to the module path
- version-specific module directories are added first, then the "generic" directories
- CsvUtil module updates:
- new
"tolwr" option in structured text parsing classes
AbstractCsvWriter will set "headers" from the "fields" option if "headers" are not explicitly set
- added write() methods returning the generated strings to the
CsvStringWriter class for API compatibility with the corresponding FixedLengthDataWriter methods
- implemented support for SQLStatement as an iterator source for
AbstractCsvWriter::write()
quote_escape option implemented in AbstractCsvWriter
- implemented the
"datamap" and "info_log" options for CSV generation
- implemented alternative options with underscores instead of dashes for all constructors
- extended multi-type support, record type rules and default value in field specification
- implemented multi-type record support in
AbstractCsvWriter and AbstractCsvIterator using resolve_type and headers options
- Mapper module updates:
- implemented the
"constant" field tag, allowing a constant value for an output field to be specified directly in the mapper hash
- implemented the
"default" field tag, giving a default value if no input value is specified
- implemented the global
"date_format" mapper option
- implemented support for structured output fields with dot notation in the output field name
- implemented per-field and global
"number_format" mapper options
- changed the behavior of the
"number" field type: now leaves numeric values in their original type, converts all other types to a number
- removed the deprecated
"crec" option
- implemented the
"input" option with input record validation
- implemented the
"output" option with output record validation
- implemented the
"info_log" option and removed the "trunc" option
- implemented the
"runtime" field tag
- implemented the
"index" field tag
- improved the Mapper::mapAll() method by adding support for hashes of lists to better support input from bulk DML (SQLStatement::fetchColumns())
- TableMapper module updates:
- added table name and datasource description to error messages
- implemented more efficient support for inserts from a sequence for databases supporting the
"returning" clause in insert statements; now such inserts are made in a single round trip instead of n + 1 where n is the number of sequences in the insert
- implemented an optimized insert approach assuming stable input data
- implemented the following new options:
unstable_input: to accommodate unstable input data and disable the insert optimization (default: False)
insert_block: for DB drivers supporting bulk DML, the number of rows inserted at once (default: 500, only used when unstable_input is False) and bulk inserts are supported in the table object
- added methods for bulk / batch inserts for db drivers supporting bulk DML (ex: Oracle)
- updated to Mapper changes: use table description to define output record for the Mapper module
- added the AbstractSqlStatementOutboundMapper class
- added the InboundIdentityTableMapper class
- added the SqlStatementMapperIterator class
- added the SqlStatementOutboundMapper class
- RestClient module updates:
- implemented RestClient::addDefaultHeaders()
- implemented RestClient::getDefaultHeaders()
- implemented RestClient::getSendEncoding()
- implemented RestClient::setContentEncoding()
- when possible, REST bodies are decoded and stored in the info output argument when the HTTP server returns a status code < 100 or >= 300 to allow for error-handling in the client
- RestHandler module updates:
- implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
- the AbstractRestStreamRequestHandler class is now the base abstract class for REST stream request handlers
- WebUtil module updates:
- updated FileHandler::handleRequest() to allow for chunked sends
- BulkSqlUtil module:
- added this new module providing APIs supporting bulk DML with SqlUtil with supported drivers
- FilePoller module:
- added this new module to support polling files in directories on the filesystem
- FixedLengthUtil module:
- added this new module for handling fixed length line data
- HttpServer module updates:
- HttpServerUtil module split from the HttpServer module containing supporting definitions for handler classes and other code interfacing with the HttpServer module
- added the PermissiveAuthenticator class
- translate
"+" (plus) to " " (space) in the query portion of URIs in parse_uri_query()
- implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
- new methods implemented in HttpServer:
- HttpServer::getListenerLogOptions()
- HttpServer::getListenerLogOptionsID()
- HttpServer::setListenerLogOptions()
- HttpServer::setListenerLogOptionsID()
- HttpServer::addListeners() (new variant taking a hash of SSL info)
- HttpServer::listenerStarted() (to allow for reporting when listeners are actually running since they are started asynchronously)
- improved performance matching request URIs to handlers
- added the
"ssl" key to the listener socket info hash
- implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
- removed the unused AbstractStreamRequestHandler class
- fixed parse_uri_query() to always return params as a hash (issue 569)
- added
root_path to the context hash if the path was matched by a URL path prefix (issue 570)
- implemented support for configurable stream handler timeout values (issue 719)
- Schema module updates:
- added the following public functions to make column definitions easier:
- c_char()
- c_date()
- c_int()
- c_number()
- c_timestamp()
- c_varchar()
- added option HAVE_DETERMINISTIC_GC for Qore builds where deterministic garbage collection is enabled
- Program class enhancements:
- the Program class now creates parse defines for parse options so that conditional code can be implemented depending on the sandboxing configuration of the program container
- the Qore::Program::importClass() method now accepts an optional new_name argument to allow for importing classes with a different name and namespace path
- added a timeout parameter to the following Socket methods:
- added zoneinfo -> Windows time zone translation code on Windows to support standard UNIX (zoneinfo) time zone names on Windows; time zone information is still taken from the Windows registry but region names are reported using the standard zoneinfo names
- Qore::FileLineIterator updates:
- SqlUtil module updates:
- implemented insert option support and support for the
"returning" clause in supported drivers to avoid server round trips
- implemented the AbstractTable::getDesc() method and improved exception description messages
- implemented support for late table resoluton in join arguments to enable joins from serialized parameters
- improved error messages for common errors such as join errors
- implemented support for DBA management actions
- implemented support for driver-dependent pseudocolumns
- implemented per-column support for the
"desc" keyword in orderby expressions
- implemented the
"wop_or()" function to allow complex SQL expressions to be generated with "or" as well as "and"
- implemented the
"cop_cast()" operator for converting [column] value into another datatype
- implemented the
"cop_sum()" aggregate operator for returning sum of column values
- implemented update operators
"uop_plus()", "uop_minus()", "uop_multiply()", "uop_divide()"
- implemented AbstractTable::getBulkUpsertClosure() to better support bulk SQL merge operations
- removed all APIs that handle implicit transactions; APIs must commit transactions explicitly
- orderby and groupby select options now take positive integers as column identifiers
- column aliases (defined with cop_as()) can now be used in the where hash argument and in join criteria
- column operator functions can be used in the where clause and in join conditions (issue 529)
- implemented the
"cop_coalesce()" column operation function to support the "COALESCE" operator in queries (issue 671)
- implemented
cop_substr() and uop_substr() operators (issue 801)
- implemented
op_substr() where operator (issue 883)
- implemented the
"omit_update" upsert option for asymmetrical upserts (updates only update a subset of the columns inserted) (issue 791)
- implemented the
"UpsertUpdateOnly" upsert option (issue 793)
- OracleSqlUtil module updates:
- implemented support for views for DML in the OracleTable class
- implemented support for Oracle pseudocolumns in queries
- return lists from Oracle's data dictionary ordered
- implemented AbstractTable::emptyStringsAsNull()
- PgsqlSqlUtil module updates:
- added support for the following datatypes and aliases:
bool, float, int, timetz, timestamptz, varbit
- added support for listing PostgreSQL types and materialized views (issue 699)
- MysqlSqlUtil module updates:
- added support for the following datatypes:
binary, varbinary
- Util module updates:
- added public function
glob_to_regex()
- added public functions
lpad() and rpad()
- added public function
ordinal()
- added public function
plural()
- added public function
regex_escape()
- added public function
zip()
parse_to_qore_value() now respects parentheses when parsing lists and hashes (issue 846)
- added initial support for UTF-16 character encoding; note that UTF-16 is not backwards-compatible with ASCII and therefore not supported universally in Qore; it's recommended to convert these strings to UTF-8 in Qore; do not use UTF-16 as the default character encoding in Qore; currently UTF-16 data can be parsed using the following classes that convert the data to UTF-8:
- removed support for the C++
QDBI_METHOD_ABORT_TRANSACTION_START DBI method; transactions are always assumed to be in progress even if an exec call throws an exception in the first statement in a new transaction; this is necessary to handle bulk DML where a single statement can partially succeed and partially fail; the ABI remains unchanged; drivers that set this DBI method will no longer have it called because it's not necessary; in the upcoming API/ABI change this C++ DBI method will be removed entirely
- added support for unary plus
- added support for empty private blocks in classes
- added support for Qore::statvfs() on Windows (simulated from
GetDiskFreeSpaceEx() issue 618)
- assignment of a variable to itself is now illegal (issue 526)
- extended qpp to support the 'final' class flag (issue 876)
- extended qpp to support private members (issue 924)
- added <float>::infp() and <float>::nanp() predicates to float (issue 909)
Bug Fixes in Qore