New features in Qore:
* the sqlutil script has been updated with the –select option
to allow dumped table rows to be filtered
* "thread list", "backtrace all" commands implemented for
the debugger
* QUnit: overloaded the testAssertionValue() method to support
auto/number/float and more verbose output when a difference
in number/float values is found
* qdbg-remote supports ConnectionProvider connections
* new method: Breakpoint::getProgram()
* 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
Bug fixes:
to many to list.
New features in Qore:
* Input/Output stream APIs
* Vastly improved type system with complex type support
* Improved operators; list, string, binary slice operators,
the ".." range operator, improved new, cast<>, and instanceof
operators, lazy evaluation of functional and list operators
* Improved encryption support including AES encryption,
encryption/decryption streams, support for AAD and MACs
* Improved HTTPS and SSL security support with addition X.509
certificate support including automatic certificate
verification in client and server contexts
* Universal connection API
* Support for binding output placeholder buffers for result sets
that return an SQLStatement object for more efficient piecewise
processing of DB stored procedure/function calls that return
very large result sets
* Strong encapsulation support (ex: private:internal)
* Deterministic garbage collection performance improvements with
large cycles
* Debugging support and APIs including remote network debugging
* Language Server Protocol support for Qore in the new astparser
module for rich language support in IDEs such as the
Visual Studio Code Qore Extension
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 comparing strings in UTF-16 encodings (issue 1579)
-fixed Qore::substr() and <string>::substr() with strings in
UTF-16 encodings (issue 1586)
-fixed Qore::trim(), Qore::ltrim(), Qore::rtrim() and the trim
operator with strings with UTF-16 encodings (issue 1775)
* 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 gethostbyname(), gethostbyname_long() and
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)
This is a bugfix release so no buildlink change.
ChangeLog:
New Features in Qore
* added broken-logic-precedence warning.
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)
Changelog from release notes:
New Features since Qore 0.8.12.4:
* 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 since Qore 0.8.12.4:
* module fixes:
-FixedLengthUtil: fixes and improvements to errors and
exceptions (issue 1828)
-HttpServerUtil: eliminated excess logging of all HTTP
chunks sent and received (issue 1832)
-PgsqlSqlUtil: fixed a bug in setting a comment for a
table column (issue 1886)
-SqlUtil: fixed a bug in the offset query hash argument
in SQL operation methods (issue 1880), fixed a bug
that prohibited only columns from the main query to be
selected when joins are used (issue 1909)
-TableMapper: fixed a bug in flush messages in the
InboundTableMapper class (issue 1849)
* 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):
-%correct-list-parsing
-%correct-logic-precedence
-%correct-int-assignments
-%correct-operators
-%loose-args
* fixed parse locations of strings and regexes (issue 1905)
* 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)
* 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 1574)
* 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:
-added timeout values to Socket and HTTPClient calls
(issue 1725)
* WebSocketHandler module fixes:
-added timeout values to Socket calls (issue 1725)
* WebSocketUtil module fixes:
-added timeout values to Socket calls (issue 1725)
* 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)
* 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)
* 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)
* 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):
-Qore::gunzip_to_binary()
-Qore::gunzip_to_string()
-Qore::uncompress_to_binary()
-Qore::uncompress_to_string()
* 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)
Changelog from release notes:
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:
SqlUtil
FreetdsSqlUtil
MysqlSqlUtil
OracleSqlUtil
PgsqlSqlUtil
Schema
* 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.qm module:
fixed a bug in AbstractCsvIterator::identifyTypeImpl() generating an
error message (issue 1355)
* MailMessage.qm module:
fixed a bug using the default encoding in Message::attach()
(issue issue 1352)
* SqlUtil.qm module:
* fixed the ignored character_semantics column option in schema alignmed
(issue 1379)
* implemented the cop_length() column function (issue 1395)
* OracleSqlUtil.qm module:
OraclePackage attribute body_src is now public to access package bodies
* Qorize.qm module:
Qorize module: new qorize_val() set of functions; qorize_named()
introduced; qorize tests
* TableMapper.qm 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.qm module:
fixed showing the assertion location when there are test modules on
top of QUnit.qm (issue 1046)
* fixed inconsistency between list splice operator and splice function
(issue 1380)
* fixed the documentation (and DB modules) where
SQLStatement::fetchColumns() was inconsistent; now it will return a
empty hash when no more rows are available to fetch (issue 1241)
* added I/O timeout support to the FtpClient class (issue 1252)
* fixed bugs in Socket::recv() and Socket::recvBinary() with size = 0
where NOTHING could be returned which is invalid according to the
methods' declared return types (issue 1260)
* fixed a bug where FtpClient:get() would fail with an exception when
retrieving an empty file (issue 1255)
* fixed a bug where executing a call reference to a deleted object
method would cause a crash (issue 1268)
* fixed a bug where Qore would allow methods to be called on already
deleted objects under certain conditions (issue 1270)
* fixed a bug where calling exit() in a multithreaded program could
result in a segmentation fault (issue 1215)
* fixed a bug where HttpServer::addListener() could not accept a bind on
port 0 to mean any random port (issue 1284)
* fixed a race condition in prompt collection that could lead to a crash
(issue 1084)
* fixed a bug clearing Socket event queues when the Socket goes out of
scope that could lead to a crash (issue 1292)
* fixed a bug with FtpClient::setWarningQueue() that could cause a crash
(issue 1293)
* fixed a bug where Qore::FtpClient::pwd() returned invalid directory
names (issue 1295)
* fixed bugs in handling websocket close status codes in the
WebSocketUtil, WebSocketClient, and WebSocketHandler modules
(issue 1216)
* TableMapper module fixes:
* fixed a bug with the SqlStatementOutboundMapper::iterator() method;
corrected the iterator object return value which was causing
AbstractMapperIterator::mapBulk() to fail (issue 979)
* fixed a bug with SqlStatementOutboundMapper; it would throw an error
if the required "table" or "sh" options were used and only worked
with subclasses that declared these options (issue 981)
* fixed a bug where AbstractSqlStatementOutboundMapper::iterator()
failed to use options when creating the new Mapper object
(issue 1088)
* fixed a bug where optional arguments were not handled correctly in
some rare cases (issue 974)
* fixed a bug causing a crash when parse_base64_string_to_string() was
called with an empty string (issue 996)
* fixed a bug resolving base class method calls during parse
initialization (issue 1075)
* fixed thread memory handling bug with some operator expressions and
the background operator (issue 1096)
* fixed a race condition in the prompt collection of closure-bound local
variables in the garbage collector (issue 1103)
* fixed a bug where HTTPClient class method variants such as
HTTPClient::get() without a callback would fail to return the message
body when the server sent a reply with chunked transfer encoding
(issue 1117)
* fixed a bug in CsvUtil where backward compatibility was broken for
single-row-type format (issue 1124)
* fixed bugs where declared public functions were missing from the
library ABI (issue 1126)
* fixed bugs where Qore::format_number() and <float>::format() gave
incorrect results when rounding to the significant decimals given in
the format string (issue 1149)
* fixed a bug referencing self in base class constructor arguments
(issue 1169)
* fixed a bug where the incorrect class destructor was called in the
openldap module (issue 1174)
* fixed a bug where declaring a copy() method as synchronized would
result in a crash when the method was called (issue 1188)
* fixed bugs in <string>::getEncoded() and <string>::getDecoded()
regarding CE_XML and CE_NONASCII (issue 1193)
* fixed bugs where Qore::call_object_method() and
Qore::call_object_method_args() allowed private methods to be called
from outside the class (issue 1194)
* fixed a bug where "Deprecated" Functions methods were being internally
registered as RUNTIME_NOOP (issue 1197)
* fixed bugs where the Datasource class would open a connection to the
server in the constructor before options were set and where a server
connection was required to call Datasource::getOption() or
Datasource::setOption() (issue 1201)
* fixed memory errors in the Queue class where spurious exceptions could
be raised (issue 1202)
* fixed a memory leak with static class member initializers (issue 1206)
Qore 0.8.12 is a major new release with many new features and hundreds of bug
fixes as well as packaging fixes. Highlights include:
* The most significant innovation in this release comes in the form of support
for Prompt Collection
* Support for Bulk DML (large volume SQL operations in one server round-trip)
in the Mapper, TableMapper, SqlUtil and the new BulkSqlUtil modules
* Standardized function naming convention, many significant design and
implementation fixes and improvements
* Numerous new functions, methods, constants, operators, and user modules
* Hundreds of bug fixes
memory and CPU time for certain input. Provide a variable
(CLANG_NO_VALUE_PROPAGATION_PASS) for selectively disabling it in those
places known to trigger it.
Qore is a modular, multi-threaded, SQL-integrated dynamically typed
scripting language with optional hard typing and procedural and
object-oriented features, powerful and easy-to-use data types,
structures, and operators, a clean and easy-to-lean/read syntax.