Qore Changelog

What's new in Qore 0.8.11

Jun 21, 2014
  • New Features:
  • added the Qore::AFMap and Qore::AFStrMap constants
  • WebUtil updates:
  • added logic to the default file serving code to determine if the file is a binary or text file from the MIME type
  • HTTPClient::sendWithSendCallback() and HTTPClient::sendWithSendCallback() updated such that if a response is received while the chunked send operation is still in progress, an error is assumed, the send operation is aborted, and the response header is read immediately
  • Bug Fixes:
  • fixed a bug in the DBI layer where calling SQLStatement::describe() would crash when called with an older module that did not implement this method
  • other fixes in the Util module (in addition to the Windows-specific fixes above):
  • fixed parse_to_qore_value() with hashes with a comma in the first key name
  • read from /dev/urandom instead of /dev/random since reads from the latter can block for long periods to fill the entropy pool
  • do not start signal thread after a fork() if signal handling is enabled, pthread_create() is not async-signal safe (on FreeBSD at least this reliably causes segfaults)

New in Qore 0.8.10 (May 31, 2014)

  • better HTTP support; support for chunked sends and receives for streaming data over HTTP and other improvements:
  • HTTPClient::sendWithSendCallback()
  • HTTPClient::sendWithRecvCallback()
  • HTTPClient::sendWithCallbacks()
  • HTTPClient::setPersistent()
  • Socket::readHTTPChunkedBodyBinaryWithCallback()
  • Socket::readHTTPChunkedBodyWithCallback()
  • Socket::sendHTTPMessageWithCallback()
  • Socket::sendHTTPResponseWithCallback()
  • Socket::pendingHttpChunkedBody()
  • added a minimum body size threshold for compression to HttpServer
  • RestClient module updates:
  • configurable content encoding for send request message bodies is now supported (ie optional compression)
  • new user modules:
  • Schema: for DB-independent schema management
  • new public C++ socket performance instrumentation API
  • New functions:
  • Qore::close_all_fd()
  • new constants:
  • ESRCH: search error
  • getModuleHash() and getModuleList() no longer return the "filename" key when run in a Program context with Qore::PO_NO_EXTERNAL_INFO set
  • SqlUtil updates:
  • added insert operator support; for example, for inserting with values from sequences
  • added new upsert constant maps
  • added static SqlUtil::AbstractSqlUtilBase::getDatasourceDesc() method
  • added new Table::insertFromSelect*() variants taking Table arguments
  • added SqlUtil::Table::checkExistence() method
  • added support for the "forupdate" select option
  • OracleSqlUtil updates:
  • fixed selects with "limit" but no "offset"
  • convert date/time values to timestamps with microseconds resolution instead of dates with second resolution when dynamically inserting values as strings in SQL (binding by value not affected)
  • CsvUtil module updates:
  • added the "write-headers" option to CsvUtil::AbstractCsvWriter and subclasses to enable headers to be suppressed
  • added the "optimal-quotes" option to CsvUtil::AbstractCsvWriter and subclasses to enable more efficient csv output (now the default)
  • added AbstractDatasource::currentThreadInTransaction() which is reimplemented as Datasource::currentThreadInTransaction() and DatasourcePool::currentThreadInTransaction(); the base class method throws an exception when called; it was not added as an abstract method in order to not break existing subclasses of AbstractDatasource
  • enhanced module license support
  • module license strings may now be specified in binary and user modules
  • Qore::getModuleHash() and Qore::getModuleList() now report license information for each module
  • Bug Fixes in Qore:
  • fixed an issue with class constant parse initialization where invalid recursive class constant definition parse exceptions could be raised and in some cases also crashes could result
  • SmtpClient module: fixed missing username and missing password errors
  • fixed a bug where a qore switch statement with no case conditions and only a default label would erroneously never have it's default code executed
  • fixed a reference leak related to exception handling with invalid arguments with Qore::Socket::setWarningQueue() and Qore::HTTPClient::setWarningQueue()
  • fixed several bugs where the parse location could be reported incorrectly for type errors regarding in-object variable references
  • fixed a bug where an error could result with Condition::wait() with timeouts > 2147483648ms
  • fixed bugs handling "bigint" and "double precision" column types with schema alignments with the PgsqlSqlUtil module
  • fixed a bug handling parse initialization of constant values requiring run-time evaluation after other parse exceptions have been raised that could cause a parse-time crash
  • fixed a bug where qore could crash on exit with certain openssl versions by calling ERR_remove_state(0) in the main thread's cleanup function
  • fixed a bug where qore could crash on exit due to user module destruction not taking into consideration user module dependencies
  • fixed a bug in schema management in SqlUtil where excessively verbose column aliases were used that caused errors when automatically updating columns with existing rows and new default values and non-null contraints with PostgreSQL databases
  • fixed a bug where a call reference to an abstract object method returned from an abstract class could be executed even though it must have been instantiated by a concrete subclass
  • fixed a bug where a valid call reference to a private object method was created within the class, then in some cases an object protection exception was raised when the call reference was called outside the class
  • fixed a bug in the RestClient module when the yaml binary module is not available
  • fixed programmatic select queries with "limit" but no "offset" in OracleSqlUtil
  • fixed a bug in Qore::Program::importFunction() where only the committed function list was checked when importing functions with a specific target namespace path
  • fixed a bug in Qore::Program::importClass() where only the committed class list was checked when importing functions with a specific target namespace path
  • fixed a bug when parsing subnamespaces into a parent namespace where the subnamespace already exists (either in the committed list or in the pending list)
  • fixed a memory and reference leak caused by recursive references when closures encapsulating an object's scope are assigned to or accessible from members of the object by making references to the object from within a closure encapsulating the object's state weak references instead of strong references
  • fixed schema information classes when the "string-numbers" driver option is enabled
  • fixed crashing bugs in Qore::get_thread_data() in certain use cases
  • fixed a bug in SqlUtil where select and row iterator operations could fail with certain select hash arguments without a "columns" entry but where column names were otherwise required
  • fixed a bug in HTTP response parsing where case-signficant comparisons where being made with certain critical header values
  • fixed a bug handling thread cancellation with the ThreadPool class
  • fixed several race conditions and potential deadlocks in ThreadPool destruction with active threads in the pool

New in Qore 0.8.9 (Mar 12, 2014)

  • lib/scanner.lpp: removed duplicate rulex
  • lib/Pseudo_QC_String.qpp: doc update
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/Function.h, include/qore/intern/QoreClassIntern.h, lib/QoreClass.cpp: fixed a memory leak in handling abstract methods when multiple abstract methods with the same name but different signatures were declared in a class
  • qlib/HttpServer.qm: non-functional updates
  • lib/qpp.cpp: fixed bug in qpp regarding "or nothing" class restrictions
  • Makefile.am, doxygen/lang/900_release_notes.dox.tmpl, include/qore/DBI.h, include/qore/Datasource.h, include/qore/Qore.h, include/qore/QoreLib.h, include/qore/QoreQueue.h, include/qore/intern/DatasourcePool.h, include/qore/intern/ManagedDatasource.h, include/qore/intern/QC_Queue.h, include/qore/intern/QoreQueue.h, include/qore/intern/QoreQueueIntern.h, include/qore/intern/qore_dbi_private.h, include/qore/intern/qore_ds_private.h, include/qore/params.h, lib/DBI.cpp, lib/Datasource.cpp, lib/DatasourcePool.cpp, lib/ManagedDatasource.cpp, lib/QC_Datasource.qpp, lib/QC_DatasourcePool.qpp, lib/QC_Queue.qpp, lib/QoreQueue.cpp, lib/qpp.cpp: added support for a DBI warning API to allow DBI drivers to raise warnings that are posted on an event queue added initial internal and external API support for describe methods in DB drivers fixed some issues supporting "or nothing" class parameters in qpp
  • include/qore/intern/qore_socket_private.h: applied select() error-handling fix to 0.8.8 branch, updated error msg in trunk
  • include/qore/intern/qore_socket_private.h: non-functional changes
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/QoreHttpClientObjectIntern.h, include/qore/intern/qore_socket_private.h: fixed a bug in socket timeout handling with select() errors
  • include/qore/DBI.h, include/qore/QoreLib.h, lib/QC_FtpClient.qpp, lib/QoreSocket.cpp, qlib/WebSocketClient.qm: added the _QORE_HAS_DBI_DESCRIBE define doc fixes
  • include/qore/DBI.h, include/qore/intern/QoreSQLStatement.h, include/qore/intern/qore_dbi_private.h, lib/DBI.cpp, lib/QC_SQLStatement.qpp, lib/QoreSQLStatement.cpp: Implementation of SQLStatement::describe() method
  • qlib/Util.qm: fixed output formatting of get_*byte_size() functions with values < 1K
  • include/qore/QoreFtpClient.h, include/qore/QoreHttpClientObject.h, include/qore/QoreSocket.h, include/qore/QoreSocketObject.h, include/qore/intern/qore_socket_private.h, lib/QC_FtpClient.qpp, lib/QC_HTTPClient.qpp, lib/QC_Socket.qpp, lib/QoreFtpClient.cpp, lib/QoreHttpClientObject.cpp, lib/QoreSocket.cpp, lib/QoreSocketObject.cpp, qlib/Pop3Client.qm, qlib/SmtpClient.qm, qlib/TelnetClient.qm, qlib/WebSocketClient.qm: added an additional argument to set the minimum time period for socket performance warnings (default: 1 second)
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/Pop3Client.qm, qlib/TelnetClient.qm, qlib/WebSocketClient.qm: minor corrections to recent updates in user modules re socket performance instrumentation, added support for socket performance instrumentation and warning events to the WebSocketClient module
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/Pop3Client.qm, qlib/SmtpClient.qm, qlib/TelnetClient.qm: added support for socket performance instrumentation and warning events to the Pop3Client, SmtpClient, and TelnetClient modules
  • Makefile.am, doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreFtpClient.h, include/qore/QoreSocket.h, include/qore/intern/qore_socket_private.h, lib/QC_FtpClient.qpp, lib/QC_HTTPClient.qpp, lib/QC_Socket.qpp, lib/QoreFtpClient.cpp, lib/QoreSocket.cpp, qlib/SmtpClient.qm: added supoprt for socket performance instrumentation and warning events to the FtpClient class and the SmtpClient module/class
  • lib/QoreSocket.cpp: socket performance monitoring fixes / updates
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreHttpClientObject.h, include/qore/QoreSocket.h, include/qore/QoreSocketObject.h, include/qore/intern/QC_Socket.h, lib/QC_HTTPClient.qpp, lib/QC_Socket.qpp, lib/QoreHttpClientObject.cpp, lib/QoreSocket.cpp, lib/QoreSocketObject.cpp: added performance instrumentation for Socket and HTTPClient classes plus warning infrastructure if performance does not meet pre-defined limits
  • lib/ql_misc.qpp: doc updates
  • include/qore/intern/QoreHttpClientObjectIntern.h, lib/QoreHttpClientObject.cpp: fixed double // reported in HTTP URLs
  • qlib/MysqlSqlUtil.qm, qlib/OracleSqlUtil.qm, qlib/PgsqlSqlUtil.qm: minor doc updates
  • command-line.cpp, qlib/TableMapper.qm: minor doc updates
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/QoreObjectIntern.h, lib/QoreClass.cpp, lib/QoreObject.cpp, qlib/CsvUtil.qm, test/test.q: fixed a bug managing object private data in complex inheritance cases where the same class may be inherited with virtual private data and also real private data fixed CsvDataIterator::next() when header_lines > 0 and working with empty input data added a regression test for the CsvDataIterator case fixed above
  • include/qore/QoreIteratorBase.h: added virtual destructors to new abstract iterator classes with virtual methods
  • doxygen/lang/245_parse_directives.dox.tmpl, lib/QC_HTTPClient.qpp, lib/ql_misc.qpp: doc updates related to environment variable substitution in the %include directive added docs about the URL syntax when using UNIX socket paths
  • doxygen/lang/900_release_notes.dox.tmpl, lib/scanner.lpp: implemented support for environment variable substitution in the %include parse directive; enforce PO_NO_FILESYSTEM in %include
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/qore_number_private.h, lib/QoreNumberNode.cpp, test/test.q: fixed a bug in the arbitrary-precision rounding heuristic that could cause invalid results
  • doxygen/qdx: improved qdx regex for qore class -> c++ class generation for doxygen documentation
  • lib/QoreSocket.cpp: updated copyright to 2014
  • doxygen/lang/900_release_notes.dox.tmpl, lib/QC_Socket.qpp, lib/QoreSocket.cpp, qlib/HttpServer.qm, qlib/RestHandler.qm: HttpServer update: - added support for the OPTIONS method RestHandler updates: - added support for the OPTIONS method - return a 400 "Bad Request" error if an unsupported HTTP method is used in a REST Call other minor updates
  • qlib/Util.qm: made iec abbreviations the default (and only option) for get_byte_size()
  • doxygen/lang/900_release_notes.dox.tmpl, doxygen/qdx, qlib/Mime.qm, qlib/Util.qm: doc updates added new Mime file mappings added use_iec argument to get_bute_size() function in the Util module
  • include/qore/AbstractQoreNode.h, include/qore/intern/ConstantList.h, include/qore/intern/ParseNode.h, lib/ConstantList.cpp: fixed a constant entry lifetime mgmt bug introduced in a recent patch related to memory leaks in constant mgmt
  • include/qore/node_types.h: updated nax node type value
  • include/qore/intern/CallReferenceNode.h, include/qore/intern/qore_program_private.h, lib/CallReferenceNode.cpp, lib/ConstantList.cpp, lib/QoreObject.cpp, lib/QoreProgram.cpp, lib/QoreReferenceCounter.cpp, lib/qore-main.cpp: fixed memory issues with the last commit re ConstantEntry destruction, fixed a memory leak in ConstantEntry destruction with parse rollbacks and constant value of NULL
  • Makefile.am, include/qore/intern/CallReferenceNode.h, include/qore/intern/ConstantList.h, include/qore/intern/qore_list_private.h, include/qore/node_types.h, lib/CallReferenceNode.cpp, lib/ConstantList.cpp, lib/QoreListNode.cpp, lib/QoreNamespace.cpp: patches to avoid circular references in constants with values that include call references
  • lib/QoreNamespace.cpp: fixed a memory leak in clearing namespace and class constant values when destroying Program objects if a constant is assigned to a code reference
  • include/qore/QoreReferenceCounter.h, include/qore/intern/QoreObjectIntern.h, include/qore/intern/qore_program_private.h, lib/Pseudo_QC_String.qpp, lib/QoreProgram.cpp, lib/parser.ypp: minor updates
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/QoreClassIntern.h, include/qore/intern/QoreNamespaceIntern.h: missed files from last commit
  • lib/QoreClass.cpp: fixed memory leaks when an entire class has to be rolled back due to parse errors and the class has pending static variables
  • lib/parser.ypp: fixed memory leaks in class member management when adding static variables and members, and more memory leaks when conflicts are detected in the parser and parse exceptions are thrown
  • lib/ql_time.qpp: fixed an off-by-one memory bug in date(string, string) parsing a 4-digit date mask
  • doxygen/lang/900_release_notes.dox.tmpl: removed invalid line in relnotes
  • doxygen/lang/900_release_notes.dox.tmpl, lib/Pseudo_QC_All.qpp, lib/Pseudo_QC_Binary.qpp, lib/Pseudo_QC_Hash.qpp, lib/Pseudo_QC_List.qpp, lib/Pseudo_QC_Object.qpp, lib/Pseudo_QC_String.qpp, lib/QC_FileLineIterator.qpp, qlib/CsvUtil.qm, test/test.q: added new pseudo-methods: ::sizep(): if the value type can return a non-zero size ::getLine(): for parsing line data in string buffers CsvUtil module updates: new CsvAbstractIterator and CsvDataIterator classes added tests for CsvDataIterator class
  • doxygen/lang/900_release_notes.dox.tmpl: minor doc update
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/RestHandler.qm, qlib/Util.qm: doc updates
  • Makefile.am, cmake/QoreConfig.cmake.in, cmake/QoreMacros.cmake, doxygen/lib/90_cmake.doxygen, doxygen/lib/mainpage.doxygen: cmake builds: documented; more macros introduced; compiler warning fix
  • qlib/TableMapper.qm: do not add mappings for columns where there is no input mapping and there is no not null constraint or no default value
  • qlib/Mapper.qm, qlib/TableMapper.qm, test/test.q: mapper API and doc updates, added tests for the Mapper class
  • include/qore/QoreIteratorBase.h: added missing file
  • qlib/Mapper.qm: doc update
  • qlib/HttpServer.qm, qlib/Mapper.qm, qlib/TableMapper.qm: mapper updates
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/Mapper.qm, qlib/PgsqlSqlUtil.qm, qlib/TableMapper.qm: fixed a bug in PgsqlSqlUtil retrieving sequence values with Database::getNextSequenceValue() mapper fixes updated release notes
  • include/qore/QoreString.h, qlib/Mapper.qm, qlib/TableMapper.qm: mapper updates and minor C++ api updates
  • qlib/Mapper.qm: mapper fix
  • qlib/Mapper.qm, qlib/TableMapper.qm: mapper fixes
  • qlib/Mapper.qm: fixed Mapper constructor
  • qlib/TableMapper.qm: implementation fixes
  • include/qore/intern/AbstractIteratorHelper.h, lib/QoreLib.cpp, qlib/Mapper.qm, qlib/TableMapper.qm: added new mapper constructors and new infrastructure for binary modules to provide iterator support
  • include/qore/ModuleManager.h, lib/Makefile.am, lib/ModuleManager.cpp, qore.spec: updated library and module api version info to reflect new APIs
  • Makefile.am, include/qore/AbstractPrivateData.h, include/qore/Qore.h, include/qore/intern/QoreHashIterator.h, include/qore/intern/QoreHashListIterator.h, include/qore/intern/QoreLibIntern.h, include/qore/intern/QoreListIterator.h, include/qore/intern/SingleValueIterator.h, lib/QoreLib.cpp, qlib/OracleSqlUtil.qm: made QoreIteratorBase class public to make it easier to implement iterators in binary modules
  • doxygen/lang/120_modules.dox.tmpl, doxygen/lang/900_release_notes.dox.tmpl, qlib/Mapper.qm, qlib/TableMapper.qm: mapping updates
  • Makefile.am, qlib/Mapper.qm, qlib/TableMapper.qm: added TableMapper module based on Mapper and SqlUtil
  • Makefile.am, doxygen/lang/120_modules.dox.tmpl, doxygen/lang/900_release_notes.dox.tmpl, qlib/Mapper.qm: started adding initial data mapping module
  • qlib/HttpServer.qm, qlib/WebUtil.qm: minor doc updates
  • Makefile.am, cmake, cmake/QoreConfig.cmake.in, cmake/QoreConfigVersion.cmake.in, cmake/QoreMacros.cmake, configure.ac: cmake build reworked: qore creates cmake support files during configuration; modules using cmake just do not use FindQore.cmake in internal trees but use system-wide QoreConfig.cmake
  • lib/QC_RWLock.qpp, qlib/WebUtil.qm: minor doc updates
  • qlib/SqlUtil.qm: removed unused variable declaration in SqlUtil
  • lib/QoreFtpClient.cpp: updated exceptions to be consistent with other FtpClient exceptions
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/SqlUtil.qm: added new UpsertInsertOnly upsert strategy to SqlUtil, updated relnotes
  • qlib/CsvUtil.qm: updated module doxygen docs for easier integration in external docs
  • qlib/TelnetClient.qm, qlib/WebSocketClient.qm, qlib/WebSocketHandler.qm: updated module doxygen docs for easier integration in external docs
  • qlib/HttpServer.qm, qlib/Mime.qm, qlib/RestHandler.qm: renamed module intro sections for easier incorporation in external docs
  • doxygen/qdx: remove $ signs in "our" global variable declarations for doxygen processing
  • qlib/RestClient.qm, qlib/SqlUtil.qm, qlib/Util.qm: renamed intro sections for incorporation in external docs
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreEncoding.h, include/qore/QoreFtpClient.h, include/qore/QoreString.h, lib/QoreString.cpp, lib/charset.cpp, lib/ql_misc.qpp: fixed url encoding and decoding in encode_url() and decode_url() to really be RFC 3986 compliant
  • lib/QoreHttpClientObject.cpp, lib/QoreSocket.cpp: cosmetic/non-functional changes
  • TODO, doxygen/lang/120_modules.dox.tmpl, lib/QC_HTTPClient.qpp: minor doc updates
  • lib/ql_misc.qpp: doc update for encode_url()
  • include/qore/QoreString.h, include/qore/intern/QoreLibIntern.h, lib/QoreString.cpp, lib/ql_misc.qpp, lib/qore-main.cpp: added new option to encode_url() to encode all reserved characters listed by RFC 3986
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/RestClient.qm: RestClient fixes: - set the character encoding in the Content-Type request header when sending strings - set the Accept header correctly in requests (previously only indicated yaml as an acceptible response encoding
  • doxygen/lang/900_release_notes.dox.tmpl, lib/QoreString.cpp: decode_url() function updated to decode UTF-8 characters if the target string is in UTF-8 encoding
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreString.h, lib/QoreString.cpp, lib/ql_misc.qpp, qlib/RestClient.qm: + implemented the encode_url() function to correspond to decode_url() + updated the RestClient module to use the new encode_url() function to encode URL paths to ensure that valid requests are sent when spaces, percent characters, and non-ascii characters are used in the URL path
  • doxygen/lang/900_release_notes.dox.tmpl, lib/QC_Condition.qpp, lib/ql_file.qpp: fixed a bug in lchown() where chown() was used interally instead of lchown() fixed typos in the Condition class docs
  • qlib/SqlUtil.qm: fixed another recursive call in Table::del()
  • lib/thread.cpp: fixed a memory bug with exception handling when shutting down threads when exceptions occur after thread-local data has been deleted and the current timezone is queried for the current program context
  • lib/DatasourcePool.cpp: minor fixes to datasourcepool acquisition related to instrumentation changes
  • include/qore/intern/DatasourcePool.h, lib/DatasourcePool.cpp: attempts to fix DatasourcePool instrumentation issues - to be verified
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/SqlUtil.qm: fixed additional bugs in MySQL create/align table SQL generation with unique indexes that automatically create unique contraints
  • README-LICENSE, doxygen/lang/900_release_notes.dox.tmpl, qlib/SqlUtil.qm: fixed a bug in SqlUtil generating "create table" SQL with DBs where unique indexes automatically create unique constraints (ex: MySQL) minor doc updates
  • qlib/MysqlSqlUtil.qm, qlib/SqlUtil.qm: fixed bugs related to MySQL and some minor table creation SQL construction bugs
  • include/qore/intern/DatasourcePool.h, include/qore/intern/QoreLibIntern.h, lib/DatasourcePool.cpp, lib/QC_DatasourcePool.qpp, lib/QoreLib.cpp, lib/ql_time.qpp: updated DatasourcePool max wait time to use microseconds, fixed threading issues with the DatasourcePool callback (callback is no longer called while holding the internal DatasourcePool lock but the check for the callback is always made while the lock is held to ensure a consistent view of the data)
  • lib/DatasourcePool.cpp: fixed initialization order
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/DatasourcePool.h, lib/DatasourcePool.cpp, lib/QC_DatasourcePool.qpp: DatasourcePool::getWarningCallbackInfo() renamed to getUsageInfo(); connection acquisition statistics are tracked and returned in DatasourcePool::getUsageInfo() (which returns, total requests, hits, maximum wait time, etc)
  • include/qore/intern/DatasourcePool.h, lib/DatasourcePool.cpp, lib/QC_DatasourcePool.qpp: added an optional argument to the datasourcepool warning callback
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/DatasourcePool.h, include/qore/intern/DatasourceStatementHelper.h, include/qore/intern/QoreLibIntern.h, lib/DatasourcePool.cpp, lib/QC_DatasourcePool.qpp, lib/QoreLib.cpp, lib/ql_time.qpp: new DatasourcePool methods: - DatasourcePool::clearWarningCallback() - DatasourcePool::setWarningCallback() - DatasourcePool::getWarningCallbackInfo() - DatasourcePool::setErrorTimeout() - DatasourcePool::getErrorTimeout() the new methods allow for monitoring DatasourcePool objects for pool contention issues (in case the pool needs to be resized) and for throwing an exception if a connection is not acquired within the error timeout period (new default: 2 minutes)
  • include/qore/intern/QoreClassIntern.h, include/qore/intern/ql_crypto.h: removed invalid assert()s, cosmetic changes
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/Datasource.h, include/qore/intern/ManagedDatasource.h, include/qore/intern/qore_ds_private.h, lib/Datasource.cpp, lib/DatasourcePool.cpp, lib/ManagedDatasource.cpp: - fixed a bug in the Datasource copy constructor where implicitly-set options were not carried over into the new object - fixed a bug in the DatasourcePool class where implicitly-opened connections would not be guaranteed to have the same server time zone setting as the initial connections (for example, could cause problems with server timezone settings if running in a program context with a different local time zone attribute)
  • lib/FunctionCallNode.cpp: fixed a typo in the last commit
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreClass.h, include/qore/intern/FunctionCallNode.h, include/qore/intern/QoreClassIntern.h, lib/CallReferenceNode.cpp, lib/FunctionCallNode.cpp, lib/QoreClass.cpp, lib/QoreObject.cpp: fixed a bug where a call to a call reference to a static method across a program boundary with local variables as arguments would cause a crash due to improper setting of the program context before the arguments are evaluated
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/ModuleInfo.h, lib/ModuleManager.cpp: the error message now includes the module path used for the search when a module cannot be found in the module path
  • qlib/MailMessage.qm, qlib/Util.qm: fixed corner cases when processing multi-line input and some regex issues with hash processing fixed a typo in MailMessage
  • examples/sqlutil: added -L,--list-tables to sqlutil
  • qlib/SqlUtil.qm: sqlutil: dropViewIfExists implemented
  • qlib/MysqlSqlUtil.qm, qlib/OracleSqlUtil.qm, qlib/PgsqlSqlUtil.qm, qlib/SqlUtil.qm: sqlutil: view info implemented
  • qlib/SmtpClient.qm: fixed a regression caused by a recent patch - make sure that we authenticate before sending messages after a QUIT
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/Util.qm: added get_byte_size() and get_marketing_byte_size() to Util
  • doxygen/lang/900_release_notes.dox.tmpl, lib/ql_time.qpp: milliseconds() and mcroseconds() are both subject to overflow errors with large arguments
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/QoreString.h, lib/QoreLib.cpp, lib/QoreObject.cpp: fixed a bug in v*printf() where '%%' was not handled correctly in all cases
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/SqlUtil.qm: fixed an infinitely recursive call in Table::del() in SqlUtil
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/SmtpClient.qm: SmtpClient updates: optimized connection and login code; HELO/EHLO and authorization are performed when connecting only, not before each email
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/common.h: added support to compile on OSX Mavericks
  • include/qore/intern/QoreClassIntern.h: disabled unnecessary debugging output
  • qlib/CsvUtil.qm: removed %perl-bool-eval from CsvUtil since it's the default anyway
  • doxygen/lang/900_release_notes.dox.tmpl, qlib/CsvUtil.qm: fixed a bug where CsvUtil returned an invalid date when used with the "date" type and blank input updated release notes
  • lib/QoreSocket.cpp: minor non-functional socket fix
  • qlib/CsvUtil.qm: implemented support for the "*int", "*float", "*number", and "*date" types; implemented support for allowing subclasses of CsvFileIterator to implement support for other custom types
  • lib/ql_file.qpp: cosmetic non-functional change
  • doxygen/lang/900_release_notes.dox.tmpl, include/qore/intern/QoreHttpClientObjectIntern.h: fixed a bug in the @ref Qore::HTTPClient::getURL() "HTTPClient::getURL()" and @ref Qore::HTTPClient::getProxyURL() "HTTPClient::getProxyURL()" methods where the URL's path was not given with a leading "/" character
  • examples/sqlutil: fixed help for sequence dump
  • doxygen/lang/900_release_notes.dox.tmpl, lib/RegexSubstNode.cpp, lib/scanner.lpp: allow escaping "$" character in regular expression substitution target strings, previously it was impossible to output a literal "$" + a digit, since this would be interpreted as a numbered input pattern expression
  • doxygen/lang/900_release_notes.dox.tmpl, lib/scanner.lpp: fixed a bug parsing octal character constants in the lexer when octal digits followed the octal constant (ex: \c "\0441" meaning \c "$1" would cause an error)
  • doxygen/qdx, qlib/RestHandler.qm, qlib/SqlUtil.qm, qlib/Util.qm: doc updates and fixes
  • qlib/CsvUtil.qm, test/CsvUtil/test.q: csvutil: in-memory string writer implemented; writers are refactored to use AbstractCsvWriter
  • qlib/CsvUtil.qm: CsvUtil: reformatted to spaces
  • lib/QoreHttpClientObject.cpp: ported duplicate HTTP header handling from trunk to 0.8.8-snapshot, minor non-functional update to trunk regarding duplicate header handling
  • doxygen/lang/900_release_notes.dox.tmpl, lib/Makefile.am, lib/QoreHttpClientObject.cpp, qore.spec: fixed a crashing bug when HTTP messages with duplicate Connection, Content-Encoding, Transfer-Encoding, Location, or Content-Type headers is received

New in Qore 0.8.8 (Oct 5, 2013)

  • lib/QoreSocket.cpp: if the SSL connection is closed by the remote
  • end while writing then flag the connection as closed and throw an
  • appropriate exception so that errors can be caught when they
  • happen instead of on the next read / write
  • include/qore/Qore.h: doc updates
  • COPYING.MIT, Makefile.am, README, README-LICENSE,
  • command-line.cpp, include/qore/common.h, lib/ModuleManager.cpp,
  • qore.spec: updated qore to reflect being released under an MIT
  • open-source license in addition to GPL and LGPL
  • qlib/OracleSqlUtil.qm: sqlutils: standard methods for
  • materialized views implemented; docs for OracleMaterializedView
  • public members

New in Qore 0.8.7 (Feb 25, 2013)

  • fixed SSA checks when linking with static openssl libraries (such as on windows, for example)

New in Qore 0.8.6.2 (Nov 21, 2012)

  • doxygen/lang/120_modules.dox.tmpl,
  • doxygen/lang/150_container_data_types.dox.tmpl,
  • doxygen/lang/195_statements.dox.tmpl,
  • doxygen/lang/900_release_notes.dox.tmpl, examples/httpserver.q,
  • include/qore/Qore.h, include/qore/QoreCounter.h,
  • include/qore/QoreProgram.h, lib/Pseudo_QC_Hash.qpp,
  • lib/QC_Datasource.qpp, lib/QC_DatasourcePool.qpp,
  • lib/QC_HashKeyReverseIterator.qpp,
  • lib/QC_HashPairReverseIterator.qpp, lib/thread.cpp: updated the
  • QoreProgramHelper class to wait for all background threads to
  • terminate before taking the QoreProgram object out of scope; this
  • way programs using user modules that provide their own threads
  • will not go out of scope (making all callbacks, etc go out of
  • scope as well) while threads in the user modules (that require
  • the callbacks from the original program object) are still
  • running; made many doc updates

New in Qore 0.8.6.1 (Nov 10, 2012)

  • changed the default value of the decode parameter in MultiPartMessage::parseBody() to True
  • doxygen/lang/245_parse_directives.dox.tmpl, doxygen/lang/900_release_notes.dox.tmpl, qlib/MailMessage.qm, qlib/Mime.qm: doc updates
  • include/qore/QoreStringNode.h: checked in initial version of openldap module
  • qlib/MailMessage.qm, qlib/Pop3Client.qm: updated docs; updated Pop3Client module to 1.1; mask passwords in debug log by default set sender and from value properly when parsing email messages in MailMessage.

New in Qore 0.8.5.1 (Sep 18, 2012)

  • configure.ac, doxygen/lang/900_release_notes.dox.tmpl,
  • doxygen/lang/Doxyfile.tmpl, doxygen/lib/Doxyfile, doxygen/pdox,
  • include/qore/intern/LocalVar.h, include/qore/intern/QoreValue.h,
  • lib/Makefile.am, lib/QoreSQLStatement.cpp, lib/Variable.cpp,
  • qlib/MailMessage.qm, qlib/Mime.qm, qore.spec: new bugfix release
  • based on qore 0.8.5 with the following bug fixes from trunk:
  • fixed a race condition accessing global and closure-bound
  • thread-local variables in multithreaded contexts
  • fixed a bug in transaction management with the DatasourcePool
  • class when used with the SQLStatement class
  • fixed an error in the MailMessage.qm user module where mail
  • headers requiring encoding were not encoded and those not
  • requiring encoding were encoded with Q encoding
  • fixed an error in the Mime.qm user module where "_" characters
  • in q-encoded headers were not encoded correctly

New in Qore 0.8.5 (Sep 3, 2012)

  • More Control Over Thread Resource Exceptions
  • new functions:
  • throw_thread_resource_exceptions_to_mark()
  • mark_thread_resources()
  • Allow for only thread resouces created after a certain point to be processed
  • (for example only thread resources left after some embedded code was called)
  • New Socket Methods
  • new methods:
  • Socket::upgradeClientToSSL()
  • Socket::upgradeServerToSSL()
  • allow upgrading an already-existing socket connection to SSL
  • Better Socket Error Messages:
  • More information has been added to socket exceptions to provide better
  • feedback when errors occur.
  • New Socket Event Fields:
  • added "type" and "typename" keys to the EVENT_HOSTNAME_RESOLVED event
  • added "type", "typename", and "address" keys to the EVENT_CONNECTING event
  • Support For Blocking Writes in the Queue Class:
  • Queue objects can now be used as a blocking message channel (similar to a Go
  • channel); if a maximum size is given to the Queue constructor, then trying to
  • write data to the Queue when it is full will block until the Queue's size goes
  • below the maximum size; optional timeout parameters have been added to Queue
  • methods that write to the Queue.
  • New Queue::clear() Method:
  • Does just what you think it does
  • date(string, string) Improvement:
  • added the possibility to specify microseconds when parsing dates against a
  • mask with the date() function
  • New Support For ++ And -- Operators With Floating-Point Lvalues
  • previously this would either convert the lvalue to an int or throw an
  • exception if the lvalue could not be converted to an int due to type
  • restrictions
  • Class Recognition/Compatibility Between Program Objects:
  • The problem is that a user class created from the same source code in two
  • different Program objects would be recognized as a different class with
  • parameter and variable type restrictions - ie you could not declare a
  • variable or parameter with a class type restrictions and assign it an object
  • created from the same class source code but created in another Program object.

New in Qore 0.8.4 (May 23, 2012)

  • Makefile.am, docs/Makefile, docs/chunks2php, docs/docbook,
  • docs/docbook2qthelp, docs/get-docbook-root.sh, docs/img,
  • docs/qore-style.css, docs/qore.html, docs/scripts,
  • lib/Makefile.am, qore.spec: packaging fixes for building with
  • automake < 1.12
  • removed old docbook documentation
  • updated spec file for new docs, created devel-doc package,
  • other minor spec file fixes

New in Qore 0.8.3 (Oct 17, 2011)

  • BUG FIX: fixed a bug in parse_url() & parseURL(); parsing urls with IPv6 addresses without ":" - this will only work if a port
  • number is included; otherwise raw IPv6 addresses must be
  • enclosed in square brackets: [ipv6addr]
  • BUG FIX: fixed a bug in is_readable() - was returning True for all arguments
  • BUG FIX: fixed a file descriptor leak in the FtpClient class related to exception handling
  • BUG FIX: fixed some crashing memory bugs in socket handling
  • particularly related to the internal getPort() call)
  • BUG FIX: fixed split() with quote argument
  • BUG FIX: fixed a bug in handling parse errors in switch statements that caused an endless loop
  • BUG FIX: fixed 2 memory errors handling parse exceptions with
  • regular expressions
  • BUG FIX: fixed an error in system() recognizing "$=" as shell
  • meta-characters
  • BUG FIX: fixed a bug in system() where system() caused a deadlock in both child and parent processes if launching the child process launch fails
  • BUG FIX: fixed a bug in system() where quotes and backslashes were not being properly quoted
  • BUG FIX: fixed typeinfo handling with imported variables in many
  • places - particulary subprograms with imported variables
  • could fail to parse if %require-types is set in the
  • subprogram
  • BUG FIX: fixed detected duplicate variables in the same block when %assume-local is set
  • BUG FIX: SQLStatement::commit() and SQLStatement::rollback() no
  • longer throw an exception when called without an active
  • statement; instead, the statement is closed and the
  • operation is executed on the underlying database connection
  • object (Datasource or DatasourcePool object)
  • BUG FIX: fixed a memory error looking up scoped constant values at parse time
  • BUG FIX: do not issue a "return value ignored" exception if the
  • function/method could throw an exception - the usage
  • without using the return value could be to test if an
  • exception is raised (ie an exception would be considered a
  • side effect)
  • BUG FIX: fixed the string output for dates (when date/time values are converted to a string) to not duplicate UTC offset
  • information in case the associated time zone has no region
  • name
  • BUG FIX: fixed a bug in the c++ function QoreString::replaceAll BUG FIX: fixed a crash when parsing a class with an
  • unknown/undefined base class
  • BUG FIX: fixed a memory leak in the Socket class static
  • initialization
  • BUG FIX: fixed issues with passing a reference through different
  • program stacks
  • BUG FIX: fixed a bug where some specific type errors in function or method calls were not found at parse time, but rather only
  • at bug time - now these errors are found at parse time
  • BUG FIX: added stack overrun check in QoreClass::execConstructor
  • call to catch the case when a class instantiation is
  • recursively defined
  • BUG FIX: fixed a crash due to a memory error in managing reference cycles with closures assigned to constant containers
  • BUG FIX: fixed a crash when referencing closure-bound local
  • variables in expressions executed by the background
  • operator
  • BUG FIX: fixed function/method variant matching to ensure that
  • variants are matched at run time if there is a variant with
  • fewer parameters than arguments in the call, but the
  • arguments could be NOTHING (count these as ambiguous
  • matches)
  • BUG FIX: fixed 2 extremely tricky bugs where deleting a
  • global-thread-local and closure-bound variable that causes
  • an object to go out of scope that in turn references the
  • variable int its destructor caused a crash due to improper
  • thread-local variable stack deletion
  • BUG FIX: fixed a deadlock when deleting the old value of the
  • closure-bound global-thread-local variable while holding
  • the variable's lock (happened when the value was an object
  • that referenced the variable in the destructor)
  • BUG FIX: implemented variable finalization to ensure that variables are not assigned after they are destroyed during program and thread termination and destruction - this fixed some
  • possible memory leaks in QoreProgram destruction
  • BUG FIX: implemented sleep() and usleep() with nanosleep() (on all platforms with nanosleep(); also no longer mask SIGALRM as
  • it may be used by a library; SIGALRM is also needed for
  • sleep() and usleep() on UNIX and UNIX-like platforms; this
  • eliminated some strange crashes due to unhandled SIGALRM
  • signals when qore is used with some 3rd party libraries
  • BUG FIX: added QDOM_FILESYSTEM to all static File class methods (so they cannot be called while "no-filesystem" restrictions
  • are in place for a Program object)

New in Qore 0.8.2 (Mar 7, 2011)

  • include/qore/QoreNet.h, lib/QoreNet.cpp, lib/QoreSocket.cpp: removed unnecessary arguments from 2 network functions; fixed a bug setting the port number after calling bind(0)

New in Qore 0.8.1 (Dec 27, 2010)

  • major bugfixes and major new features including the new prepared statement API, vastly improved type system, static class variables and class constants.

New in Qore 0.8.0 (Jun 15, 2010)

  • updated, minor miscellaneous variant updates, fixed 2 crashingbugs

New in Qore 0.7.8 (Apr 20, 2010)

  • fixed a memory bug in the context statement when an exception
  • occurs in the context expression (backported from trunk)
  • fixed a memory bug in the binary += operation; if the operand for
  • BinaryNode::append() is equal to the current buffer, a crash would
  • result (backported from trunk)

New in Qore 0.7.7 (Dec 7, 2009)

  • fixed a bug where taking a slice from an object could return private members when called outside the class (backported from trunk)
  • fixed a bug making a hash slice where the character encoding was not ensured to be QCS_DEFAULT before trying to match key names (backported from trunk)

New in Qore 0.7.6 (Nov 6, 2009)

  • BUG FIX: updated is_writable() and is_readable() to always return True if called by effective UID 0 (root)
  • BUG FIX: fixed a race condition in deleting objects by marking objects atomically as inside destructor
  • BUG FIX: updated sleep() to continue sleeping for the remaining time if interrupted by a signal
  • BUG FIX: changed decompression routines to a string to preserve binary data, especially trailing nulls
  • BUG FIX: fixed C++ QoreString constructor when taking ownership of a string buffer to ensure that the buffer is null terminated when the allocated buffer is exactly equal to the string length
  • BUG FIX: fixed scanner to ignore quoted text in comments (i.e. "*/" will be ignored)
  • BUG FIX: updated the Socket class implementation to retry connect(), accept(), recv(), send(), and select() (Socket::isDataAvailable(), Socket::connect() with timeout, etc) if interrupted by a signal
  • BUG FIX: updated the File class implementation to retry read(), write() and fcntl() with F_SETLKW (File::lockBlocking()) if interrupted by a signal
  • BUG FIX: fixed set_signal_handler() to accept a closure as per the documentation
  • BUG FIX: fixed internal C++ library function test_funcref_param() to return a value for call references and closures
  • BUG FIX: fixed broken access to private members of an object outside the class; before it was possible to delete and reassign private members from outside the class which should have been illegal
  • BUG FIX: fixed a crashing bug in the File::open2() method
  • BUG FIX: fixed class method registration so that static method names and non-static method names have independent namespaces (i.e. a static method may now have the same name as a non-static method). Static methods may still be called with normaly method call syntax, however if there is a non-static method with the same name, then it will be called instead.
  • BUG FIX: when an HTTP header is received more than once, return all values as a list under the header name in the resulting hash
  • BUG FIX: fixed a potential race condition that could cause a crash in very rare circumstances in internal C++ QoreClass::numMethods() and QoreClass::numStaticMethod() functions; to make a crash a program would have to be running and parsing new code into the program in a separate thread as well; this is explicitly supported by Qore, but very rarely done
  • BUG FIX: fixed an XML-RPC parsing bug caused by a side-effect in a debugging statement
  • BUG FIX: fixed a bug setting the character encoding in strings produced with makeXMLFragment() and makeFormattedXMLFragment() when the default character encoding is not UTF8
  • BUG FIX: fixed concatentation of strings with embedded nulls
  • BUG FIX: fixed split() to work on strings with embedded nulls
  • BUG FIX: fixed method resolution for in-object method calls when the target method is static
  • BUG FIX: fixed a crash in parsing when a class with no parent classes references a base class method of an existing class
  • BUG FIX: fixed static method calls at the top level of a program
  • BUG FIX: fixed type comparisons with new qore types implemented in external modules
  • BUG FIX: fixed configure to ensure compiling in 32-bit mode on Darwin/OSX if 32-bit mode is selected
  • BUG FIX: fixed configure to assume 64-bit mode by default on Darwin 10 (OSX Snow Leopard)
  • BUG FIX: fixed $ARGV and $QORE_ARGV variables to always be of type list as according to the documentation
  • BUG FIX: fixed Socket::connect() with timeout (affects all classes using sockets for communication
  • BUG FIX: fixed DatasourcePool handling when a driver-handled auto-reconnect fails (previously would cause a crash)
  • BUG FIX: added QDOM_TERMINAL_IO to TermIOS class (previously this class would be available even if PO_NO_TERMINAL_IO was in force)
  • BUG FIX: fixed a bug parsing XML-RPC array data with empty value elements; i.e.:
  • BUG FIX: fixed a bug waiting on a Condition variable when thread read lock is held by multiple threads (for RWLock)
  • BUG FIX: fixed a bug calculating the time offset for waiting on a Condition object
  • BUG FIX: fixed millisecond formatting using "ms" with format_date()
  • BUG FIX: fixed a crashing bug when a Condition object waits on a RWLock with the read lock held
  • BUG FIX: fixed a bug setting the exception location when throwing thread resource exceptions when shutting down the qore library
  • NEW FEATURE: added XmlDoc, XmlReader, and XmlNode classes for more robust XML parsing and document iteration
  • NEW FEATURE: added support for validation with RelaxNG schemas: new functions: parseXMLWithRelaxNG() and parseXMLAsDataWithRelaxNG() as well as new method: XmlDoc::validateRelaxNG()
  • NEW FEATURE: added a new binary_to_string() function to convert a binary object directly to a string type
  • NEW FEATURE: implemented binary object concatentation with the + and += operators
  • NEW FEATURE: the -= operator now operates on objects (with string and list operands) like it does with hashes
  • NEW FEATURE: added static method TermIOS::getWindowSize() to get the current terminal window size (rows and columns)
  • NEW FEATURE: new C++ APIs are available supporting a generic calling convention to facilitate the development of the new Qt4 module using libsmoke; the latest module API is now 0.8
  • NEW FEATURE: added the HTTPClient::isConnected() method
  • NEW FEATURE: added the rename() function to rename or move files
  • NEW FEATURE: case expressions now support the == operator for soft comparisons
  • NEW FEATURE: updated split() to work on binary objects just like on strings, but will return a list of binary objects split by the marker
  • BUILD CHANGE: minimum libxml2 version required for compiling and linking is now 2.6.0

New in Qore 0.7.5 (Jul 14, 2009)

  • BUG FIX: Datasource::close() would assert() in debug mode and do nothing in non-debug mode
  • BUG FIX: fixed a deadlock in running class destructor code when a member is deleted that is itself an object, and that object's destructor references the parent object
  • BUG FIX: fixed a bug in the "qore" binary reporting the library's latest module API version (was using the compiled value and not the value from the library)
  • BUG FIX: fixed a bug in the HTTPClient class where the connection was not flagged as closed when an error occurred that indicated that the client had closed the connection
  • added a ModuleDir key to the hash output of get_qore_library_info()
  • added an optional port number to datasources (i.e.: driver:user/pass@db(encoding)%host:port, updated:
  • Datasource::constructor(): added support for a port argument
  • Datasource::setPort(): new method
  • Datasource::getPort(): new method
  • DatasourcePool::constructor(): added support for a port argument
  • DatasourcePool::getPort(): new method
  • parseDatasource(): modified to parse the port if present
  • updated module API to 0.7 supporting DBI drivers with port as a configuration option
  • updated the %include directive to always search the directory of the currently-executing script first if known when looking for files without an absolute path
  • added the C++ API function QoerObject::externalDelete() to handle the situation when object private data is deleted externally (needed by the QT modules)
  • improved error messages in the scanner when trying to %include something that's not a regular file

New in Qore 0.7.4 (Jun 9, 2009)

  • BUG FIX: fixed localtime() when called with no argument to return the current date and time as per documentation
  • BUG FIX: fixed a race condition that could cause a deadlock when calling pthread_join() when Qore code calls "exit()" when multiple threads are running
  • BUG FIX: fixed the Dir::listFiles() method; the mask used would not filter out directories
  • BUG FIX: fixed crashes in the File class due to unsigned data type being used and the comparison (< 0) that signaled an error always failed; the crash would happen when a non-File object was read
  • BUG FIX: fixed outputting recursive data structures with the %n and %N printf format specifiers (would otherwise result in a crash - for example, when an object contains a list that also contains the object, etc)
  • BUG FIX: fixed object access deadlock scenarios
  • BUG FIX: fixed the "-" operator with: hash-string and hash-list (also hash-=string and hash-=list) to remove the value(s) from the hash, not call the delete operator
  • BUG FIX: NULL values are serialized as "null" JSON values
  • BUG FIX: fixed parsing of a corner case of marginally valid XML-RPC
  • BUG FIX: fixed XML-RPC serialization to handle NOTHING (no value) and NULL identically
  • BUG FIX: fixed XML-RPC serialization to never output an empty element, as it could potentially break some implementations (the XML-RPC spec is not very clear on this). Note: we send empty value elements: when serializing NOTHING or NULL, which may not be correct either
  • BUG FIX: do not assume that a trailing null should terminate the string when reading string data from files; include the trailing null in the string
  • BUG FIX: fixed a bug parsing base64 strings when newlines and/or linefeeds trailed the base64-encoded data
  • BUG FIX: fixed outputting '%%' as '%' in *printf*() functions
  • BUG FIX: fixed a bug parsing hashes where the hash key was given as a constant
  • BUG FIX: fixed a bug in the delete operator where shared data was being updated in place instead of copied and then updated
  • BUG FIX: fixed some race conditions that could cause deadlocks with the getAllThreadCallStacks() function (not normally enabled by default)
  • BUG FIX: ignore '
  • ' and ' ' when parsing base64-encoded strings
  • BUG FIX: fixed a crashing bug when trying to copy member elements of a deleted object
  • BUG FIX: fixed the foreach statement when used with a reference and the break statement is used
  • BUG FIX: fixed a rare reference dependency bug where system classes were being destroyed while still referenced in user code
  • BUG FIX: fixed %= with a modula operand of 0 to set the lvalue to 0 (previously the expression was ignored if the modula operand was 0)
  • added the abilty for a Condition variable to wait on RWLock objects as well as Mutex objects
  • dereferencing a hash or object with a list will return a slice of the hash or object as a hash: ex: $hash.("key1", "key2")
  • allow %include parse directives to quote the file names (ignore leading and trailing quotes around the file name)
  • new Socket class methods: + Socket::isWriteFinished(): for future support for non-blocking writes + Socket::setNoDelay(): to set the TCP_NODELAY option + Socket::getNoDelay(): returns value of the TCP_NODELAY option
  • new functions to allow for explicitly specifying the encoding when serializing XML-RPC strings: + makeXMLRPCCallStringWithEncoding() + makeXMLRPCCallStringArgsWithEncoding() + makeXMLRPCResponseStringWithEncoding() + makeXMLRPCFaultResponseStringWithEncoding() + makeFormattedXMLRPCCallStringWithEncoding() + makeFormattedXMLRPCCallStringArgsWithEncoding() + makeFormattedXMLRPCResponseStringWithEncoding() + makeFormattedXMLRPCFaultResponseStringWithEncoding()
  • added new HTTPClient methods for manipulating the TCP_NODELAY setting: + HTTPClient::setNoDelay() + HTTPClient::getNoDelay()
  • now the XmlRpcClient and JsonRpcClient constructors accept an optional second argument that, when True, will inhibit the immediate connection attempt on the socket and instead allow the socket connections to be either manually established or established on demand with the first request

New in Qore 0.7.3 (Feb 16, 2009)

  • Socket::connect() takes an optional timeout value
  • HTTPClient::constructor() options takes a new option: connect_timeout
  • SOAP support updated in examples directory: SoapClient.qc, SoapHandler.qc, HTTPServer.qc, WSDL.qc
  • added is_writable() function as a correctly-spelled alias for is_writeable()
  • fixed and documented getcwd() function
  • BUG FIX: fixed a bug in the binary() function when converting binary strings to binary type when the strings had embedded nulls
  • BUG FIX: fixed a crashing bug in the handling of GLIBC gethostbyname_r() failures; contrary to the documentation, the return value is 0 even when the function fails
  • BUG FIX: fixed some erroneous builds on powerpc where processor-specific features were not built properly
  • BUG FIX: fixed a bug handling GLIBC gethostbyaddr_r() failures; contrary to the documentation, the return value is 0 even when the function fails
  • BUG FIX: fixed a bug doing math on negative units of relative dates; invalid dates would be returned

New in Qore 0.7.2 (Dec 4, 2008)

  • several bug fixes (including 8 crashing bugs), including packaging fixes
  • support for timeouts in Socket::connect*() methods
  • terminal attribute support, TermIOS class, new constants
  • non-blocking read support for the File class
  • event support for File class

New in Qore 0.7.1 (Nov 20, 2008)

  • new ABI 5.0, problems were found with ABI 4.0
  • packaging and build updated to support building universal binaries on Darwin
  • support for atomic operations in 64bit builds with itanium processors
  • support for stack guard including RSE monitoring in 64-bit builds on itanium processors
  • default module dir change, module handling updated
  • network event notification support
  • implemented the ability to specify qore, module, and feature version requirements
  • misc additions

New in Qore 0.6.2.4 (Apr 10, 2008)

  • Fixed a bug where a local variable declared as an immediate call reference call would cause a run-time core dump
  • Fixed a memory leak the use of Object::evalData() when an exception occurs
  • Fixed a memory error in QoreString::addch()

New in Qore 0.6.2.3 (Feb 11, 2008)

  • compression of strings no longer includes the trailing null (broke XML-RPC and JSON-RPC communication over the HTTP server with compression with some browsers)
  • do not throw an exception with sort*() functions when the argument is not a list - just return the argument
  • fixed local and global variable destruction order (was reversed until now)
  • fixed proxy URL reporting in Qore HTTPClient::getProxyURL() (was reporting the target port instead of the proxy port)
  • corrected erroneous printd() debugging statement in Operator.cc (only affected debugging builds)
  • fixed tibae, ncurses, pgsql, tibrv, and tuxedo module namespace handling for subprogram objects - when more than one subprogram object requested one of these
  • features, and it was not originally present in the parent Program object, a memory leak and erroneous behavior would result (mostly spurious exceptions)
  • ensure that argument list is unique before modifying in QoreClass::evalMethodGate() (could cause erroneous behavior with methodGate methods in some circumstances)
  • fixed a potential rare memory leak in exception handling related to QoreNode reference count managemnt in Operator.cc
  • fixed rethrow statement parsing to throw a parse exception when a rethrow statement is outside of a catch block (before would cause a run-time core dump)
  • fixed Datasource class not to mark a Datasource as in a transaction if an exception occurs in the first statement of an implicit transaction
  • fixed integer divide by zero, missing "else" could cause a run-time division by zero error
  • fixed a memory leak in the "replace()" function if an exception occurs converting string encodings
  • fixed a memory leak in the "parseBase64ToString()" function
  • fixed a crashing bug in exception handling in a JSON generation helper function in lib/ql_json.cc
  • fixed a memory leak in the FtpClient class constructor
  • fixed a bug where the string returned by QoreString::reverse() could be tagged with the wrong encoding under some circumstances
  • fixed a bug where the HashIterator::takeValueAndDelete() function would leave the map entry in the Hash which could cause a crash later
  • fixed a memory leak in exception handling in FtpClient::list()
  • fixed a memory leak in exception handling in object_MakeString()
  • fixed 2 off-by-one bugs with string concatentation in the QoreString class
  • fixed get*BigInt() time functions to return int64 instead of int
  • fixed a memory leak in QoreHTTPClient processing 100 responses
  • fixed a bug in the ? : operator where immediate list values could be returned improperly (only the first element could be erroneously returned under some conditions)
  • fixed a potentially crashing bug in makeFormattedXMLRPCCallStringArgs()
  • eliminated spurious double exceptions in rare cases with list operators in Operator.cc
  • fixed a bug in the "tibae" module where instantiating a sequence while giving an explicit class name skipped type checking that could result in a crash
  • fixed a bug in QoreHTTPClient processing the protocol parameter as an integer port number
  • fixed a bug in regex_subst() (in RegexSubst::parseRT()) that would cause a run-time crash if a regular-expression parse exception were encountered at run-time