\hypertarget{release_notes_qore_09}{}\section{Qore 0.\+9}\label{release_notes_qore_09}
\begin{DoxyParagraph}{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 \mbox{\hyperlink{class_qore_1_1_program}{Program}} logic containers, multithreading, and a \href{../../modules/reflection/html/index.html}{\tt reflection A\+PI}. This release breaks binary compatibility with older versions of Qore as well, requiring binary modules to support the new A\+PI and A\+BI.
\end{DoxyParagraph}
\hypertarget{release_notes_qore_09_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_09_compatibility}

\begin{DoxyItemize}
\item \mbox{\hyperlink{namespace_qore}{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.
\item \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects now only support a single complete parse action (\mbox{\hyperlink{class_qore_1_1_program_ad59f1b6ce7adaa693086e1b858cbe896}{Program\+:\+:parse()}} or \mbox{\hyperlink{class_qore_1_1_program_a789d84e0f40137ad3b38064378b50e1b}{Program\+:\+:parse\+Commit()}}); subsequent attempts to parse code into the same Program object will fail with an exception. If parsing fails due to a parse exception, the \mbox{\hyperlink{class_qore_1_1_program}{Program}} object is generally no longer usable and must be recreated to be used.
\item \mbox{\hyperlink{class_qore_1_1_program_acc27af9225963f20947e0045186ecfb7}{Program\+:\+:parse\+Rollback()}} is now deprecated; this action removes all user code and most builtin code from the \mbox{\hyperlink{class_qore_1_1_program}{Program}} object; delete the object instead of using this method
\item the \mbox{\hyperlink{qore_classes_transient}{transient}} keyword has been introduced to support control over \mbox{\hyperlink{class_qore_1_1_serializable}{object serialization}}; see also \mbox{\hyperlink{parse_directives_no-transient}{\%no-\/transient}}
\end{DoxyItemize}\hypertarget{release_notes_qore_09_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_09_new_features}

\begin{DoxyItemize}
\item Up to 70\% reduced memory usage in Qore programs through\+:
\begin{DoxyItemize}
\item Extensive memory optimizations
\item Changing the default thread stack size from 8 MB to 512 KB (\href{https://github.com/qorelanguage/qore/issues/2701}{\tt issue 2701})
\item Eliminating heap-\/allocated, atomic-\/reference-\/counted integer and floating-\/point values resulted in reduced memory usage as well as faster runtime execution
\end{DoxyItemize}
\item \href{../../modules/reflection/html/index.html}{\tt Reflection A\+PI}
\item \mbox{\hyperlink{class_qore_1_1_serializable}{Data and object serialization}} support\+:
\begin{DoxyItemize}
\item All data types except \mbox{\hyperlink{expressions_closure}{closures}}, \mbox{\hyperlink{expressions_call_reference}{call references}}, \mbox{\hyperlink{lvalue_references}{references}}, and non-\/serializable objects can be serializeed
\item All objects from classes inheriting \mbox{\hyperlink{class_qore_1_1_serializable}{Serializable}} can be serialized
\item Class members declared with the \mbox{\hyperlink{qore_classes_transient}{transient}} keyword (new in this release) will not be serialized but instead will get their default values when deserialized
\item Classes can define their own local serialization and deserialization logic by defining the \mbox{\hyperlink{class_qore_1_1_serializable_ae2a384d8d7fc0a628609f1907ea32b07}{serialize\+Members()}} and \mbox{\hyperlink{class_qore_1_1_serializable_a7d59dd31c2e7f9a06eafb995db5b1381}{deserialize\+Members()}} methods, respectively
\item The following builtin classes support serialization\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource}{Datasource}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_certificate}{S\+S\+L\+Certificate}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_private_key}{S\+S\+L\+Private\+Key}}
\item \mbox{\hyperlink{class_qore_1_1_time_zone}{Time\+Zone}}
\end{DoxyItemize}
\end{DoxyItemize}
\item New classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_s_q_l_statement}{Abstract\+S\+Q\+L\+Statement}}\+: has been added as the parent class defining an abstract A\+PI for \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}}
\item \mbox{\hyperlink{class_qore_1_1_serializable}{Serializable}}\+: a new class supporting data and object serialization
\item \mbox{\hyperlink{class_qore_1_1_stream_base}{Stream\+Base}}\+: a base class for stream classes allowing for a controlled handoff of a stream to another thread
\end{DoxyItemize}
\item Added support for importing a split user module represented as directory (\href{https://github.com/qorelanguage/qore/issues/2562}{\tt issue 2562})
\item New and updated methods in existing classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_afdf23f69850ebb8e0c337ade7fcb793d}{Abstract\+Datasource\+:\+:get\+S\+Q\+L\+Statement()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a39ef1a8bff15788d039672359c28772e}{Datasource\+:\+:get\+S\+Q\+L\+Statement()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_af59598025506fa7079b734018a89decf}{Datasource\+Pool\+:\+:get\+S\+Q\+L\+Statement()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a8ce1cf401892b56a61bbb16754366079}{File\+:\+:redirect()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a288bbef821ce9641b0175a2052680001}{Ftp\+Client\+:\+:get\+Network\+Family()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a1ced03072c695abf25df4d419b64dfa0}{Ftp\+Client\+:\+:set\+Network\+Family()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_ab07b745d71fb0d9be7860fd41c9450c8}{Ftp\+Client\+:\+:get\+Control\+Peer\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_aa9bd9f5c986f891fa1e2021d426c0969}{Ftp\+Client\+:\+:get\+Control\+Socket\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a4655d94c5f3a25d14098b65c21755d31}{Ftp\+Client\+:\+:get\+Data\+Peer\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a9c91cf56b957986b28ae36db98466d0b}{Ftp\+Client\+:\+:get\+Data\+Socket\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_program_aee25b65b811efa96f8d3690c0d19314e}{Program\+:\+:get\+Parse\+Option\+String\+List()}}
\item \mbox{\hyperlink{class_qore_1_1_program_afe6fc6b4013b8e2ff209ac9dad421487}{Program\+:\+:issue\+Module\+Cmd()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a2f83d6257c25cc5ae867d9d461019996}{Program\+:\+:load\+Apply\+To\+Private\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ae15ccde47d36af187a972a6468bafc2a}{Program\+:\+:load\+Apply\+To\+Private\+User\+Module\+Warn()}}
\item \mbox{\hyperlink{class_qore_1_1_program_acd9c44ff76909f62106f83b3c5011772}{Program\+:\+:load\+Apply\+To\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ab2072ecb954ec19baed8a2107f4cd23d}{Program\+:\+:load\+Apply\+To\+User\+Module\+Warn()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a9bc54a95f735cdc10bfb52e5166259b2}{Program\+:\+:load\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a08a74eec43638d3132b99de1479c0a27}{Program\+:\+:load\+Module\+Warn()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a88ead6a191a58736b49e794f3220869f}{Program\+:\+:load\+User\+Module\+With\+Program()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a1675c1af5ba3d423af82dbc026c0202f}{Program\+:\+:load\+User\+Module\+With\+Program\+Warn()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ad59f1b6ce7adaa693086e1b858cbe896}{Program\+:\+:parse()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ac943bad226fcf69ce5007b101828f8c1}{Program\+:\+:parse\+Pending()}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_certificate_aba1f8b7876a1c6630f8c474a713daa2e}{S\+S\+L\+Certificate\+:\+:copy()}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_certificate_adc018f372e971b43a44d678b96c222ca}{S\+S\+L\+Certificate\+:\+:get\+D\+ER()}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_private_key_abc635ed38e5d73865bbc356267b6d26e}{S\+S\+L\+Private\+Key\+:\+:copy()}}
\item \mbox{\hyperlink{class_qore_1_1_s_s_l_private_key_af6efb915453871f442bed6554a30b156}{S\+S\+L\+Private\+Key\+:\+:get\+D\+ER()}}
\item \mbox{\hyperlink{class_qore_1_1_stream_reader_aacf2ab395e40fcc8c05dfc42cc82c5f2}{Stream\+Reader\+:\+:get\+Input\+Stream()}}
\item \mbox{\hyperlink{class_qore_1_1_stream_writer_a43a64e7d6774c777071fff39245477d6}{Stream\+Writer\+:\+:get\+Output\+Stream()}}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter_a7c098cd52caeff8f5ff18dddff2eeeb5}{Counter\+:\+:inc()}}
\end{DoxyItemize}
\item New functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__object__functions_ga46a72b2a2a84282c5125b6fd7a2e6b23}{call\+\_\+static\+\_\+method()}}
\item \mbox{\hyperlink{group__object__functions_gaf3059a3551575f93e04f2f58ae0ab4c4}{call\+\_\+static\+\_\+method\+\_\+args()}}
\item \mbox{\hyperlink{group__threading__functions_ga82d1b72e32a368be71b3b91462cbe0da}{get\+\_\+default\+\_\+thread\+\_\+stack\+\_\+size()}}
\item \mbox{\hyperlink{group__misc__functions_ga26bb5a87af0e8be0e661a590fb722c83}{get\+\_\+module\+\_\+option()}}
\item \mbox{\hyperlink{group__library__functions_ga9c666f750378638e71530ced628538a3}{get\+\_\+netif\+\_\+list()}}
\item \mbox{\hyperlink{group__threading__functions_gaa97833f603fb51b23fe0bb6c22b7f95f}{get\+\_\+stack\+\_\+size()}}
\item \mbox{\hyperlink{group__threading__functions_ga79f9cd8de9606cae29c29e3b08d234f0}{get\+\_\+thread\+\_\+name()}}
\item \mbox{\hyperlink{group__misc__functions_ga24b04239fa5f45bd1c3d430dfab49019}{load\+\_\+module\+\_\+warn()}}
\item \mbox{\hyperlink{group__threading__functions_gadbd86685c49fd7b4960b8b21e05cb2f0}{set\+\_\+default\+\_\+thread\+\_\+stack\+\_\+size()}}
\item \mbox{\hyperlink{group__misc__functions_ga9034376bb44beb761d76156600b537f8}{set\+\_\+module\+\_\+option()}}
\item \mbox{\hyperlink{group__threading__functions_ga321040a3e764383dd68c50d496436e87}{set\+\_\+thread\+\_\+name()}}
\end{DoxyItemize}
\item Updated functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__misc__functions_gaaa60e9a984c59e662b2e7cac84a3899d}{get\+\_\+ex\+\_\+pos()}}\+: {\ttfamily lang} info was added to the result string if available
\item \mbox{\hyperlink{group__misc__functions_gaf0922a51e6c5471b02a947cb0cb008ba}{load\+\_\+module()\+: added an optional {\ttfamily warning\+\_\+mask} parameter}}
\end{DoxyItemize}
\item New modules\+:
\begin{DoxyItemize}
\item \href{../../modules/FsUtil/html/index.html}{\tt Fs\+Util}
\item \href{../../modules/Logger/html/index.html}{\tt Logger}
\item \href{../../modules/reflection/html/index.html}{\tt reflection}
\end{DoxyItemize}
\item New and updated hashdecls\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{struct_qore_1_1_net_if_info}{Net\+If\+Info}}\+: new \mbox{\hyperlink{hashdecl}{hashdecl}} for the \mbox{\hyperlink{group__library__functions_ga9c666f750378638e71530ced628538a3}{get\+\_\+netif\+\_\+list()}} function
\item \mbox{\hyperlink{struct_qore_1_1_call_stack_info}{Call\+Stack\+Info}}\+: updated with new members\+:
\begin{DoxyItemize}
\item {\ttfamily lang} 
\item {\ttfamily programid} 
\item {\ttfamily statementid} 
\end{DoxyItemize}
\item \mbox{\hyperlink{struct_qore_1_1_exception_info}{Exception\+Info}}\+: updated with a new member\+:
\begin{DoxyItemize}
\item {\ttfamily lang} 
\end{DoxyItemize}
\end{DoxyItemize}
\item New constants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__parse__options_ga5e61e3651bfad227600a9cf7120fb727}{Domain\+Code\+Map}}
\item \mbox{\hyperlink{group__parse__options_ga2c80f990c3c3ad952018ee6cdddbfa9c}{Domain\+String\+Map}}
\item \mbox{\hyperlink{group__option__constants_ga39b9cdc4df2f0b13b08ce661b3f31d6b}{H\+A\+V\+E\+\_\+\+G\+E\+T\+\_\+\+N\+E\+T\+I\+F\+\_\+\+L\+I\+ST}}
\item \mbox{\hyperlink{group__option__constants_gae9654317eddd561ad25dbdf76959a60e}{H\+A\+V\+E\+\_\+\+G\+E\+T\+\_\+\+S\+T\+A\+C\+K\+\_\+\+S\+I\+ZE}}
\item \mbox{\hyperlink{group__option__constants_ga3e3b196e3ae7f8b26e890ce36c120901}{H\+A\+V\+E\+\_\+\+M\+A\+N\+A\+G\+E\+\_\+\+S\+T\+A\+CK}}
\item \mbox{\hyperlink{group__option__constants_ga5c7b490cc1b6c8749d42067ee4baa7b2}{H\+A\+V\+E\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+N\+A\+ME}}
\item \mbox{\hyperlink{group__parse__options_ga46fa5284de5681ab4c8e8cb842f35fff}{P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+S\+P\+R\+I\+N\+TF}}
\item \mbox{\hyperlink{group__parse__options_ga454fabf3a392b8fec9ee587e97a2d8e8}{P\+O\+\_\+\+N\+O\+\_\+\+R\+E\+F\+L\+E\+C\+T\+I\+ON}}
\item \mbox{\hyperlink{group__parse__options_ga4d9e69dc24ed1eed0ea11f4947cceca2}{P\+O\+\_\+\+N\+O\+\_\+\+T\+R\+A\+N\+S\+I\+E\+NT}}
\item \mbox{\hyperlink{group__functional__domain__constants}{Functional Domain Constants}}
\end{DoxyItemize}
\item New \mbox{\hyperlink{group__date__and__time__functions_date_formatting}{date formatting}} codes for \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_aeff0dd69a9ef8f228b54ba5543b2e3c6}{Qore\+::zzz8datezzz9\+::format()}} and \mbox{\hyperlink{group__date__and__time__functions_gad5572fcb49964bfe3005e144da579361}{format\+\_\+date()}}\+:
\begin{DoxyItemize}
\item {\ttfamily \char`\"{}\+Dn\char`\"{}} and {\ttfamily \char`\"{}\+D\+N\char`\"{}}\+: the ordinal day number in the year
\item {\ttfamily \char`\"{}\+I\char`\"{}}\+: I\+S\+O-\/8601 week string
\item {\ttfamily \char`\"{}\+Id\char`\"{}} and {\ttfamily \char`\"{}\+I\+D\char`\"{}}\+: \href{http://en.wikipedia.org/wiki/ISO_week_date}{\tt I\+S\+O-\/8601 week} day number
\item {\ttfamily \char`\"{}\+I\+F\char`\"{}}\+: the value in \href{https://en.wikipedia.org/wiki/ISO_8601}{\tt I\+S\+O-\/8601} format for both \mbox{\hyperlink{basic_data_types_relative_dates}{relative}} (ex\+: {\ttfamily \char`\"{}\+P2\+Y1\+M3\+D\+T5\+H7\+M9.\+002\+S\char`\"{}}) and \mbox{\hyperlink{basic_data_types_absolute_dates}{absolute}} dates (ex\+: {\ttfamily \char`\"{}2018-\/03-\/23\+T10\+:43\+:12.\+067628+01\+:00\char`\"{}})
\item {\ttfamily \char`\"{}\+Iw\char`\"{}} and {\ttfamily \char`\"{}\+I\+W\char`\"{}}\+: \href{http://en.wikipedia.org/wiki/ISO_week_date}{\tt I\+S\+O-\/8601 week} number
\item {\ttfamily \char`\"{}\+Iy\char`\"{}} and {\ttfamily \char`\"{}\+I\+Y\char`\"{}}\+: \href{http://en.wikipedia.org/wiki/ISO_week_date}{\tt I\+S\+O-\/8601 week} year
\end{DoxyItemize}
\item New parse directives\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{parse_directives_broken-sprintf}{\%broken-\/sprintf}}
\item \mbox{\hyperlink{parse_directives_correct-sprintf}{\%correct-\/sprintf}}
\item \mbox{\hyperlink{parse_directives_no-reflection}{\%no-\/reflection}}
\item \mbox{\hyperlink{parse_directives_no-transient}{\%no-\/transient}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_ad59f1b6ce7adaa693086e1b858cbe896}{Program\+:\+:parse()}} and \mbox{\hyperlink{class_qore_1_1_program_ac943bad226fcf69ce5007b101828f8c1}{Program\+:\+:parse\+Pending()}} updates\+: the {\itshape format\+\_\+label} parameter is obsolete/ignored (\href{https://github.com/qorelanguage/qore/issues/2903}{\tt issue 2903})
\item Module updates
\begin{DoxyItemize}
\item \href{../../modules/reflection/html/index.html}{\tt reflection}\+: a new binary module providing a reflection A\+PI to Qore
\item \href{../../modules/ConnectionProvider/html/index.html}{\tt Connection\+Provider} module changes\+:
\begin{DoxyItemize}
\item The {\ttfamily Abstract\+Connection\+::get\+Constructor\+Info()} method (and supporting declarations) was added to allow connections to be created dynamically, potentially in another process from a network call (\href{https://github.com/qorelanguage/qore/issues/2628}{\tt issue 2628})
\item The {\ttfamily Abstract\+Connection} has new public flag {\ttfamily enabled}. Also constructors are updated. (\href{https://github.com/qorelanguage/qore/issues/3001}{\tt issue 3001})
\item The {\ttfamily Abstract\+Connection} has new constructors, old ones are obsolete. Custom U\+R\+L/\+U\+RI parsing is possible (\href{https://github.com/qorelanguage/qore/issues/3162}{\tt issue 3162})
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module updates\+:
\begin{DoxyItemize}
\item Added public methods {\ttfamily Abstract\+Csv\+Iterator\+::get\+Raw\+Line()} and {\ttfamily Abstract\+Csv\+Iterator\+::get\+Raw\+Line\+Values()} (\href{https://github.com/qorelanguage/qore/issues/2739}{\tt issue 2739})
\end{DoxyItemize}
\item \href{../../modules/FreetdsSqlUtil/html/index.html}{\tt Freetds\+Sql\+Util} module changes\+:
\begin{DoxyItemize}
\item Added support for serializing and deserializing {\ttfamily Abstract\+Table} objects (\href{https://github.com/qorelanguage/qore/issues/2663}{\tt issue 2663})
\end{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module changes\+:
\begin{DoxyItemize}
\item added the {\ttfamily \char`\"{}header-\/info\char`\"{}} hash to the context argument when calling handlers (\href{https://github.com/qorelanguage/qore/issues/3260}{\tt issue 3260})
\item Added support for adding new H\+T\+TP methods to the server with the {\ttfamily Http\+Server\+::add\+Http\+Method()} method (\href{https://github.com/qorelanguage/qore/issues/2805}{\tt issue 2805})
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime} module changes\+:
\begin{DoxyItemize}
\item allow the default type for unknown extensions to be overridden in get\+\_\+mime\+\_\+type\+\_\+from\+\_\+ext() (\href{https://github.com/qorelanguage/qore/issues/3260}{\tt issue 3260})
\end{DoxyItemize}
\item \href{../../modules/MysqlSqlUtil/html/index.html}{\tt Mysql\+Sql\+Util} module changes\+:
\begin{DoxyItemize}
\item Added support for serializing and deserializing {\ttfamily Abstract\+Table} objects (\href{https://github.com/qorelanguage/qore/issues/2663}{\tt issue 2663})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module changes\+:
\begin{DoxyItemize}
\item Implemented a check for allowed types when is the A\+U\+T\+O\+\_\+\+I\+N\+C\+R\+E\+M\+E\+NT flag used (\href{https://github.com/qorelanguage/qore/issues/2978}{\tt issue 2978})
\item Added support for serializing and deserializing {\ttfamily Abstract\+Table} objects (\href{https://github.com/qorelanguage/qore/issues/2663}{\tt issue 2663})
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} module changes\+:
\begin{DoxyItemize}
\item Added support for serializing and deserializing {\ttfamily Abstract\+Table} objects (\href{https://github.com/qorelanguage/qore/issues/2663}{\tt issue 2663})
\end{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit} module changes\+:
\begin{DoxyItemize}
\item updated Test\+:\+:test\+Skip() to use the reason argument a format string with \mbox{\hyperlink{group__string__functions_gab2494031a30dc02d9f6696435a8c4485}{vsprintf()}} (\href{https://github.com/qorelanguage/qore/issues/3172}{\tt issue 3172})
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module changes\+:
\begin{DoxyItemize}
\item added the {\ttfamily Rest\+Handler\+::return\+Rest\+Exception()} method that allows subclasses to determine how exceptions are handled (\href{https://github.com/qorelanguage/qore/issues/3235}{\tt issue 3235})
\item Updated to support alternative U\+RI paths for actions so that an \char`\"{}action=xxx\char`\"{} argument is not needed; instead the action can be added to the end of the U\+RI path so that {\ttfamily \char`\"{}\+P\+U\+T path/xxx\char`\"{}} can be used instead of {\ttfamily \char`\"{}\+P\+U\+T path?action=xxx\char`\"{}} (\href{https://github.com/qorelanguage/qore/issues/2994}{\tt issue 2994})
\end{DoxyItemize}
\item \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator} module changes\+:
\begin{DoxyItemize}
\item Updated the default validator to try all serialization methods if multiple methods are available and one fails (\href{https://github.com/qorelanguage/qore/issues/2831}{\tt issue 2831})
\end{DoxyItemize}
\item \href{../../modules/Schema/html/index.html}{\tt Schema} module changes\+:
\begin{DoxyItemize}
\item improved logging output when aligning schemas (\href{https://github.com/qorelanguage/qore/issues/3114}{\tt issue 3114})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module changes\+:
\begin{DoxyItemize}
\item Deprecated {\ttfamily Abstract\+Table\+::get\+Row\+Iterator()} for {\ttfamily Abstract\+Table\+::get\+Statement()} (\href{https://github.com/qorelanguage/qore/issues/2326}{\tt issue 2326})
\item Updated the module to use the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_s_q_l_statement}{Abstract\+S\+Q\+L\+Statement}} class instead of the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} (\href{https://github.com/qorelanguage/qore/issues/2326}{\tt issue 2326})
\item Added support for serializing and deserializing {\ttfamily Abstract\+Table} objects (\href{https://github.com/qorelanguage/qore/issues/2663}{\tt issue 2663})
\end{DoxyItemize}
\item \href{../../modules/Swagger/html/index.html}{\tt Swagger}\+:
\begin{DoxyItemize}
\item Swagger module does not accept multipart/form-\/data content-\/type and also does not work with list and hash parameters (\href{https://github.com/qorelanguage/qore/issues/2932}{\tt issue 2932})
\end{DoxyItemize}
\item \href{../../modules/Util/html/index.html}{\tt Util} module updates\+:
\begin{DoxyItemize}
\item Added public function {\ttfamily parse\+\_\+ranges()} (\href{https://github.com/qorelanguage/qore/issues/2438}{\tt issue 2438})
\item Added public function {\ttfamily check\+\_\+ip\+\_\+address()} (\href{https://github.com/qorelanguage/qore/issues/2483}{\tt issue 2483})
\item Updated {\ttfamily parse\+\_\+to\+\_\+qore\+\_\+value()} to support single-\/element lists and hashes with curly brackets including empty hashes (\href{https://github.com/qorelanguage/qore/issues/3138}{\tt issue 3138})
\item updated get\+\_\+exception\+\_\+string() to show the {\ttfamily lang} value (\href{https://github.com/qorelanguage/qore/issues/3182}{\tt issue 3182})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler}\+:
\begin{DoxyItemize}
\item added stopping connection from server side via Web\+Socket\+Handler\+::\+Web\+Socket\+Connection\+::stop(), Web\+Socket\+Handler\+::\+Web\+Socket\+Handler\+::stop\+One() and Web\+Socket\+Client handling of W\+S\+C\+C\+\_\+\+Going\+Away event
\end{DoxyItemize}
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util} module changes\+:
\begin{DoxyItemize}
\item updated to allow more control over file serving (\href{https://github.com/qorelanguage/qore/issues/3260}{\tt issue 3260})
\end{DoxyItemize}
\end{DoxyItemize}
\item \mbox{\hyperlink{basic_data_types_relative_dates}{Relative date}} changes
\begin{DoxyItemize}
\item Fractional seconds are accepted in the \mbox{\hyperlink{basic_data_types_single_reldates}{Single Relative Time Format}}
\item Fractional date components are accepted in the \mbox{\hyperlink{basic_data_types_short_reldates}{Short Relative Time Format}} based on \href{https://en.wikipedia.org/wiki/ISO_8601#Durations}{\tt I\+S\+O-\/8601 durations}
\end{DoxyItemize}
\item Improved debugging support\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_control_ada1ff792e44ca555e6c4f5d77c411153}{Program\+Control\+:\+:get\+Statement\+Id\+Info()}} provides breakpoint info
\item Command to resolve statement
\item Interrupt notification provides call stack info
\item {\ttfamily \char`\"{}\+Run to statement\char`\"{}} implementation
\item \href{../../modules/DebugHandler/html/index.html}{\tt Debug\+Handler} reimplemented to support multiple websocket handlers
\item Programs are not interrupted in bootstrap code
\item Command line utils display source line code when interrupted
\end{DoxyItemize}
\item Runtime thread stack traces are available in all builds and the \mbox{\hyperlink{group__option__constants_ga5d3b3ad72dbc870686836888c5cb92e0}{H\+A\+V\+E\+\_\+\+R\+U\+N\+T\+I\+M\+E\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+S\+T\+A\+C\+K\+\_\+\+T\+R\+A\+CE}} 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
\end{DoxyItemize}\hypertarget{release_notes_qore_09_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_09_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug in \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{parse\+\_\+url()}} with single-\/character hostnames with a port number (\href{https://github.com/qorelanguage/qore/issues/3287}{\tt issue 3287})
\item fixed a minor bug handling error info in exception handling in the \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module (\href{https://github.com/qorelanguage/qore/issues/3280}{\tt issue 3280})
\item fixed a crash in acquiring a new connection with datasource options (\href{https://github.com/qorelanguage/qore/issues/3262}{\tt issue 3262})
\item fixed a bug reporting the source location for runtime type errors related to missing return statements (\href{https://github.com/qorelanguage/qore/issues/3255}{\tt issue 3255})
\item fixed bugs where \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a7713f26c809821a7942a60e27f924742}{Datasource\+:\+:get\+Config\+String()}} and \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a68c63cda68bd98860f332e6335e7a642}{Datasource\+:\+:get\+Config\+Hash()}} would require a connection to the server, making it impossible to check option before connecting (\href{https://github.com/qorelanguage/qore/issues/3247}{\tt issue 3247})
\item fixed a bug with \mbox{\hyperlink{operators_weak_assignment_operator}{weak references}} in some assignment expressions (\href{https://github.com/qorelanguage/qore/issues/3202}{\tt issue 3202})
\item fixed bugs in \mbox{\hyperlink{group__string__functions_ga7a74be141f814ef286046c367b21091c}{sprintf()}}, \mbox{\hyperlink{group__string__functions_gab2494031a30dc02d9f6696435a8c4485}{vsprintf()}}, and all variants where \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} was not treated the same as no value (\href{https://github.com/qorelanguage/qore/issues/3184}{\tt issue 3184})
\item worked around a potential C\+OW bug in {\ttfamily std\+::string} in G\+NU libdstdc++ 6+ (\href{https://github.com/qorelanguage/qore/issues/3179}{\tt issue 3179})
\item fixed a bug with simple additional and subtraction with mixed \mbox{\hyperlink{data_type_declarations_timeout_type}{timeout}} and \mbox{\hyperlink{data_type_declarations_date_type}{date}} values; updated docs that arithmetic operations with timeout values are not recommended and can return unexpected values in some situations (\href{https://github.com/qorelanguage/qore/issues/3157}{\tt issue 3157})
\item fixed a bug in deterministic garbage collection where \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} objects were not scanned and therefore cycles due to \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} elements would cause a memory and reference leak (\href{https://github.com/qorelanguage/qore/issues/3101}{\tt issue 3101})
\item 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 {\ttfamily jni}) with per-\/program private data would fail (\href{https://github.com/qorelanguage/qore/issues/3024}{\tt issue 3024})
\item fixed a bug where rvalue references with complex subtypes could get modified during an assignment (\href{https://github.com/qorelanguage/qore/issues/2891}{\tt issue 2891})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/2741}{\tt issue 2741})
\item Fixed bugs handling \mbox{\hyperlink{qore_classes_abstract}{abstract}} methods in complex hierarchies with multiple inheritance (\href{https://github.com/qorelanguage/qore/issues/2741}{\tt issue 2741})
\item Fixed bugs handling object scope in \mbox{\hyperlink{operators_background}{background}} expressions (\href{https://github.com/qorelanguage/qore/issues/2653}{\tt issue 2653})
\item Fixed a bug\+: \mbox{\hyperlink{group__type__conversion__functions_gab06789ce6dbfa0d12fd571ea33e223a7}{hash(list)}} where l has an odd number of elements never returns (\href{https://github.com/qorelanguage/qore/issues/2860}{\tt issue 2860})
\item Fixed a bug where no error is issued when an expression does not have meaning as a top-\/level statement (\href{https://github.com/qorelanguage/qore/issues/2826}{\tt issue 2826}), and also where such expression is an argument to the \mbox{\hyperlink{operators_background}{background}} operator (\href{https://github.com/qorelanguage/qore/issues/2747}{\tt issue 2747})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/2863}{\tt issue 2863}),
\item Fixed a bug where {\ttfamily public} and {\ttfamily private} members of classes inherited with {\ttfamily private\+:internal} inheritance were not initialized when objects were created (\href{https://github.com/qorelanguage/qore/issues/2970}{\tt issue 2970}),
\item Module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit}\+:
\begin{DoxyItemize}
\item fixed error reporting with type errors with number values (\href{https://github.com/qorelanguage/qore/issues/2984}{\tt issue 2984})
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08139}{}\section{Qore 0.\+8.\+13.\+9}\label{release_notes_qore_08139}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08139_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08139_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug handling invalid DB driver options in datasource creation that could lead to a crash with some drivers (\href{https://github.com/qorelanguage/qore/issues/3243}{\tt issue 3243})
\item fixed a memory error in internal list handling that could lead to memory corruption and crashes (\href{https://github.com/qorelanguage/qore/issues/3206}{\tt issue 3206})
\item fixed calls to Dir\+::list$\ast$() methods which failed whenever there was a symlink with a non-\/existent target in a directory (\href{https://github.com/qorelanguage/qore/issues/3192}{\tt issue 3192})
\item fixed a bug handling illegal abstract method definitions of special class methods (\href{https://github.com/qorelanguage/qore/issues/3126}{\tt issue 3126})
\item fixed handling {\ttfamily 304 Not Modified} responses in the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class (\href{https://github.com/qorelanguage/qore/issues/3116}{\tt issue 3116})
\item fixed a crashing bug in the \mbox{\hyperlink{class_qore_1_1_transform}{Transform}} class when used with encryption algorithms (\href{https://github.com/qorelanguage/qore/issues/3111}{\tt issue 3111})
\item fixed a crash with multiple hash keys when parsing the \mbox{\hyperlink{operators_hmap}{hash map operator}} (\href{https://github.com/qorelanguage/qore/issues/3108}{\tt issue 3108})
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server}\+:
\begin{DoxyItemize}
\item fixed responses that cannot have a message body (ex\+: {\ttfamily H\+E\+AD} requests and others) (\href{https://github.com/qorelanguage/qore/issues/3116}{\tt issue 3116})
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client}\+:
\begin{DoxyItemize}
\item added missing exception handling in the connection close callback (\href{https://github.com/qorelanguage/qore/issues/3225}{\tt issue 3225})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler}\+:
\begin{DoxyItemize}
\item added missing exception handling to connection registration code (\href{https://github.com/qorelanguage/qore/issues/3215}{\tt issue 3215})
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08138}{}\section{Qore 0.\+8.\+13.\+8}\label{release_notes_qore_08138}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08138_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08138_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug where \mbox{\hyperlink{group__io__constants_ga44ab38fe66ed7aa87731a2de976017c6}{Qore\+::stdout}}, \mbox{\hyperlink{group__io__constants_ga0cfa7aea34f3c921036623600e42b21f}{Qore\+::stdin}}, \mbox{\hyperlink{group__io__constants_ga697e4968984d273562f14bfed155b4a8}{Qore\+::stderr}}, \mbox{\hyperlink{group__io__constants_gad35de1bb3d368f94ca75b1a4e165f361}{Qore\+::stdout\+\_\+stream}}, \mbox{\hyperlink{group__io__constants_gae2e16a518aa5a69148ad5b218ae91109}{Qore\+::stdin\+\_\+stream}}, and \mbox{\hyperlink{group__io__constants_gae762f18fd8b6318f15f8aaf1d18c595e}{Qore\+::stderr\+\_\+stream}}, would perform automatic C\+R\+LF -\/$>$ LF translations on Windows (\href{https://github.com/qorelanguage/qore/issues/3061}{\tt issue 3061})
\item fixed a bug in secure socket T\+LS communication making it impossible to talk to servers that require \href{https://en.wikipedia.org/wiki/Server_Name_Indication}{\tt S\+NI} (\href{https://github.com/qorelanguage/qore/issues/3053}{\tt issue 3053})
\item fixed a deadlock in \mbox{\hyperlink{class_qore_1_1_ftp_client_a835c52e32ee089773d48574f297e7965}{Ftp\+Client\+:\+:put()}} with zero-\/length files (\href{https://github.com/qorelanguage/qore/issues/3038}{\tt issue 3038})
\item fixed an error respecting the I/O timeout in \mbox{\hyperlink{class_qore_1_1_ftp_client_a835c52e32ee089773d48574f297e7965}{Ftp\+Client\+:\+:put()}} with \mbox{\hyperlink{class_qore_1_1_input_stream}{Input\+Stream}} argugments (\href{https://github.com/qorelanguage/qore/issues/3032}{\tt issue 3032})
\item fixed an error where \mbox{\hyperlink{class_qore_1_1_ftp_client}{Ftp\+Client}} {\ttfamily P\+O\+RT} operations would not time out (\href{https://github.com/qorelanguage/qore/issues/3031}{\tt issue 3031})
\end{DoxyItemize}\hypertarget{release_notes_qore_08137}{}\section{Qore 0.\+8.\+13.\+7}\label{release_notes_qore_08137}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08137_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08137_bug_fixes}

\begin{DoxyItemize}
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/ConnectionProvider/html/index.html}{\tt Connection\+Provider}\+:
\begin{DoxyItemize}
\item removed unnecessary serialization from Abstract\+Connection\+::get() (\href{https://github.com/qorelanguage/qore/issues/2880}{\tt issue 2880})
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util}
\begin{DoxyItemize}
\item fixed schema alignment when there are functions to be dropped (\href{https://github.com/qorelanguage/qore/issues/2963}{\tt issue 2963})
\end{DoxyItemize}
\end{DoxyItemize}
\item fixed a race condition in \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} destruction that could cause a crash (\href{https://github.com/qorelanguage/qore/issues/2906}{\tt issue 2906})
\item fixed a hard to reproduce bug with internal runtime type matching that sometimes caused invalid runtime exceptions to be raised with base class constructors (\href{https://github.com/qorelanguage/qore/issues/2928}{\tt issue 2928})
\item fixed an error handling attach errors to \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects from foreign threads after the program has been deleted (\href{https://github.com/qorelanguage/qore/issues/2950}{\tt issue 2950})
\item fixed a bug that would cause a crash if an unknown {\ttfamily \char`\"{}\+Content-\/\+Encoding\char`\"{}} value were received by the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class (\href{https://github.com/qorelanguage/qore/issues/2953}{\tt issue 2953})
\item fixed a memory leak with binary objects in certain operations such as when reading a file into a binary object (\href{https://github.com/qorelanguage/qore/issues/2982}{\tt issue 2982})
\end{DoxyItemize}\hypertarget{release_notes_qore_08136}{}\section{Qore 0.\+8.\+13.\+6}\label{release_notes_qore_08136}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08136_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08136_bug_fixes}

\begin{DoxyItemize}
\item fixed a deadlock in lvalue handling with complex object operations in multithreaded contexts (\href{https://github.com/qorelanguage/qore/issues/2889}{\tt issue 2889})
\item fixed type errors with complex hashes in \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aa0a89864ecb2f16870af201163a6e3a7}{Qore\+::zzz8hashzzz9\+::values()}} and \mbox{\hyperlink{group__misc__functions_gaf5d769ebf4e89f22c223f36beacf5000}{hash\+\_\+values()}} (\href{https://github.com/qorelanguage/qore/issues/2877}{\tt issue 2877})
\item fixed an error handling complex types with the \mbox{\hyperlink{operators_plus_equals_operator}{+=}} operator (\href{https://github.com/qorelanguage/qore/issues/2869}{\tt issue 2869})
\item fixed a memory leak in \mbox{\hyperlink{class_qore_1_1_tree_map_a4bfaf979430e7cac9c265101f0d057dd}{Tree\+Map\+:\+:put()}} (\href{https://github.com/qorelanguage/qore/issues/2840}{\tt issue 2840})
\item fixed a crashing bug in {\ttfamily qpp} (used in building \mbox{\hyperlink{namespace_qore}{Qore}} from source) (\href{https://github.com/qorelanguage/qore/issues/2838}{\tt issue 2838})
\item fixed a crashing bug in \mbox{\hyperlink{class_qore_1_1_socket_a39eb3993cde9b9e0096412d1edbc3a57}{Socket\+:\+:accept()}} handling (\href{https://github.com/qorelanguage/qore/issues/2835}{\tt issue 2835})
\item fixed a cosmetic bug in module load error messages to provide the context of the module where the error is found in cases where it was missing (\href{https://github.com/qorelanguage/qore/issues/2834}{\tt issue 2834})
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}\+:
\begin{DoxyItemize}
\item schema alignment fails when user accidentally creates table schema with strings instead of hashes (\href{https://github.com/qorelanguage/qore/issues/2761}{\tt issue 2358})
\end{DoxyItemize}
\item \href{../../modules/Swagger/html/index.html}{\tt Swagger}\+:
\begin{DoxyItemize}
\item Swagger module does not use text/plain Content-\/\+Type for simple string responses (\href{https://github.com/qorelanguage/qore/issues/2893}{\tt issue 2893})
\item Swagger module does not check response body if response schema is missing in Swaggerfile (\href{https://github.com/qorelanguage/qore/issues/2894}{\tt issue 2894})
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client}\+:
\begin{DoxyItemize}
\item allowed the handling of {\ttfamily P\+I\+NG} messages to be customized (\href{https://github.com/qorelanguage/qore/issues/2887}{\tt issue 2887})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler}\+:
\begin{DoxyItemize}
\item added support for heartbeat messages (\href{https://github.com/qorelanguage/qore/issues/2887}{\tt issue 2887})
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08135}{}\section{Qore 0.\+8.\+13.\+5}\label{release_notes_qore_08135}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08135_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08135_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug where user modules with global variables could not be loaded into \mbox{\hyperlink{class_qore_1_1_program}{Program}} containers where \mbox{\hyperlink{group__parse__options_ga00fcb14e17ebe9073cc0b768c276cf64}{P\+O\+\_\+\+N\+O\+\_\+\+G\+L\+O\+B\+A\+L\+\_\+\+V\+A\+RS}} was set (\href{https://github.com/qorelanguage/qore/issues/2807}{\tt issue 2807})
\item fixed a deadlock with \mbox{\hyperlink{class_qore_1_1_thread_1_1_r_w_lock}{R\+W\+Lock}} and \mbox{\hyperlink{class_qore_1_1_thread_1_1_condition}{Condition}} objects when the read lock is held recursively (\href{https://github.com/qorelanguage/qore/issues/2817}{\tt issue 2817})
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util}\+:
\begin{DoxyItemize}
\item implemented the {\ttfamily number\+\_\+format} option to allow numbers with alternative decimal separators to be parsed and generated (\href{https://github.com/qorelanguage/qore/issues/2806}{\tt issue 2806})
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client}\+:
\begin{DoxyItemize}
\item added support for R\+E\+ST requests with binary message bodies; added the {\ttfamily \char`\"{}bin\char`\"{}} serialization method (\href{https://github.com/qorelanguage/qore/issues/2816}{\tt issue 2816})
\end{DoxyItemize}
\item \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator}\+:
\begin{DoxyItemize}
\item fixed the null validator to handle binary message bodies; fixed issues with {\ttfamily \char`\"{}text\char`\"{}} serialization with binary message bodies (\href{https://github.com/qorelanguage/qore/issues/2816}{\tt issue 2816})
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime}\+:
\begin{DoxyItemize}
\item fixed a bug in {\ttfamily mime\+\_\+parse\+\_\+form\+\_\+urlencoded\+\_\+string()} where repeated elements would be overwriteen by subsequent keys with the same name (\href{https://github.com/qorelanguage/qore/issues/2761}{\tt issue 2761})
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08134}{}\section{Qore 0.\+8.\+13.\+4}\label{release_notes_qore_08134}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08134_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08134_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug where hashes and lists with subtype \mbox{\hyperlink{data_type_declarations_auto_type}{auto}} were not created correctly with implicit initialization causing excess type stripping which could lead to performance issues with large data structures (\href{https://github.com/qorelanguage/qore/issues/2767}{\tt issue 2767})
\item implemented a new optional D\+BI statement method to allow for statement execution only for describing the result set to solve performance issues when describing statements with large data sets (\href{https://github.com/qorelanguage/qore/issues/2773}{\tt issue 2773})
\item fixed a performance bug by eliminating overzealous and unnecessary internal type stripping (\href{https://github.com/qorelanguage/qore/issues/2791}{\tt issue 2791})
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util}\+:
\begin{DoxyItemize}
\item implemented the {\ttfamily csvutil\+\_\+set\+\_\+global\+\_\+compat\+\_\+force\+\_\+empty\+\_\+string()} function and the {\ttfamily compat\+\_\+force\+\_\+empty\+\_\+string} C\+SV parsing option to force {\ttfamily \char`\"{}$\ast$string\char`\"{}} fields with no value to return an empty string when parsing rather than \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} for backwards compatibility with very early versions of Csv\+Util (\href{https://github.com/qorelanguage/qore/issues/2476}{\tt issue 2476})
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime}\+:
\begin{DoxyItemize}
\item mime\+\_\+parse\+\_\+form\+\_\+urlencoded\+\_\+string raies a parse exception when there is no value for a key (\href{https://github.com/qorelanguage/qore/issues/2760}{\tt issue 2760})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module changes
\begin{DoxyItemize}
\item synonym resolving can fail with duplicated object name (\href{https://github.com/qorelanguage/qore/issues/2758}{\tt issue 758})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}\+:
\begin{DoxyItemize}
\item implemented the {\ttfamily Abstract\+Table\+::get\+Row\+Iterator\+No\+Exec()} method (\href{https://github.com/qorelanguage/qore/issues/2773}{\tt issue 2773})
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper}\+:
\begin{DoxyItemize}
\item updated to use the new S\+QL statement D\+BI 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 (\href{https://github.com/qorelanguage/qore/issues/2773}{\tt issue 2773})
\item fixed {\ttfamily Raw\+Sql\+Statement\+Outbound\+Mapper} to be usable without subclassing (\href{https://github.com/qorelanguage/qore/issues/2775}{\tt issue 2775})
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08133}{}\section{Qore 0.\+8.\+13.\+3}\label{release_notes_qore_08133}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08133_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_08133_new_features}

\begin{DoxyItemize}
\item improved debugging support\+:
\begin{DoxyItemize}
\item added support for a \href{https://code.visualstudio.com/}{\tt Visual Studio Code} debug adapter for Qore
\item the debugger can now retrieve sources when running from a remote debug server
\item debugger options can now be set from command line (verbosity etc.)
\item the {\ttfamily on\+Attach()} event is now executed synchronously when the program thread context starts
\item the {\ttfamily on\+Detach()} event is executed properly when program thread contexts terminate
\item the {\ttfamily on\+Step()} now provides the {\ttfamily breakpoint\+Id} value if available
\item the {\ttfamily on\+Exit()} event was added for greater control over code execution in the debugger
\item the {\ttfamily on\+Exception()} event was improved
\item server commands now support {\ttfamily frameid} as a parameter
\item added the following methods to support retrieving source code in the debugger\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_control_a73386fae3bc6d0eb873764b44fbe4566}{Program\+Control\+:\+:get\+Source\+File\+Names()}}
\item \mbox{\hyperlink{class_qore_1_1_program_control_a417103cce2340391665afab936209b85}{Program\+Control\+:\+:get\+Source\+Labels()}}
\end{DoxyItemize}
\end{DoxyItemize}
\item new module\+:
\begin{DoxyItemize}
\item \href{../../modules/DebugLinenoiseCmdLine/html/index.html}{\tt Debu\+Linenoise\+Cmd\+Line}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08133_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08133_bug_fixes}

\begin{DoxyItemize}
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit}\+:
\begin{DoxyItemize}
\item improved output in assertion failures for strings with special whitespace and for multi-\/line data structures (\href{https://github.com/qorelanguage/qore/issues/2680}{\tt issue 2680})
\end{DoxyItemize}
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util}\+:
\begin{DoxyItemize}
\item made it possible for File\+Handler subclasses to add headers to response (\href{https://github.com/qorelanguage/qore/issues/2686}{\tt issue 2686})
\end{DoxyItemize}
\end{DoxyItemize}
\item \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util}\+:
\begin{DoxyItemize}
\item improved H\+T\+TP log masking to mask fewer false positives when attempting to mask sensitive data (\href{https://github.com/qorelanguage/qore/issues/2621}{\tt issue 2621})
\end{DoxyItemize}
\item fixed a crashing bug initializing constants with recursive references to code (\href{https://github.com/qorelanguage/qore/issues/3027}{\tt issue 3027})
\item fixed a crashing bug in the \mbox{\hyperlink{operators_plus_equals_operator}{+= operator}} with objects and hashes when \mbox{\hyperlink{parse_directives_require-types}{\%require-\/types}} is not in force (\href{https://github.com/qorelanguage/qore/issues/2634}{\tt issue 2634})
\item fixed a crashing bug in the \mbox{\hyperlink{operators_background}{background operator}} with non-\/constant hash expressions with local variable references (\href{https://github.com/qorelanguage/qore/issues/2637}{\tt issue 2637})
\item worked around an Oracle bug in materialized view creation in the \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module where when the schema user is missing the {\ttfamily C\+R\+E\+A\+TE M\+A\+T\+E\+R\+I\+A\+L\+I\+Z\+ED V\+I\+EW} grant the table backing the view is created but the materialized view itself is not created causing future creation actions to fail (\href{https://github.com/qorelanguage/qore/issues/2643}{\tt issue 2643})
\item implemented support for an optional error-\/handling method in S\+QL callbacks in the \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module to allow Sql\+Util to recover from error scenarios in schema creation/alignment (\href{https://github.com/qorelanguage/qore/issues/2643}{\tt issue 2643})
\item fixed a design bug where an empty list {\ttfamily ()} and an empty hash {\ttfamily \{\}} could not be assigned to complex types, leading to excess typing and casting for simple operations (\href{https://github.com/qorelanguage/qore/issues/2647}{\tt issue 2647})
\item fixed a bug in the \mbox{\hyperlink{operators_map}{map operator}} with complex types and empty list expressions (\href{https://github.com/qorelanguage/qore/issues/2651}{\tt issue 2651})
\item fixed a bug where implicitly-\/declared values of complex \char`\"{}or nothing\char`\"{} types would not be declared with the correct runtime type information (\href{https://github.com/qorelanguage/qore/issues/2652}{\tt issue 2652})
\item fixed a bug affecting class initialization with out of order initialization (\href{https://github.com/qorelanguage/qore/issues/2657}{\tt issue 2657})
\item implemented support for the more concise declaration of immediate typed hash values (\href{https://github.com/qorelanguage/qore/issues/2675}{\tt issue 2675})
\item fixed a bug where a crash would result when evaluating certain expressions in the \mbox{\hyperlink{operators_background}{brackground operator}} due to a memory error (\href{https://github.com/qorelanguage/qore/issues/2679}{\tt issue 2679})
\item fixed \mbox{\hyperlink{group__date__and__time__functions_date_formatting}{date formatting}} output with the {\ttfamily Z} placeholder to always output the U\+TC offset as documented (\href{https://github.com/qorelanguage/qore/issues/2684}{\tt issue 2684})
\item fixed program thread context to return frames properly (\href{https://github.com/qorelanguage/qore/issues/2674}{\tt issue 2674})
\item fixed an internal memory bug that could cause unallocated memory to be read when creating objects (\href{https://github.com/qorelanguage/qore/issues/2712}{\tt issue 2712})
\item fixed a memory issue with typed hashes that could lead to a runtime creash (\href{https://github.com/qorelanguage/qore/issues/2725}{\tt issue 2725})
\end{DoxyItemize}\hypertarget{release_notes_qore_08132}{}\section{Qore 0.\+8.\+13.\+2}\label{release_notes_qore_08132}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08132_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_08132_new_features}

\begin{DoxyItemize}
\item {\ttfamily \char`\"{}thread list\char`\"{}}, {\ttfamily \char`\"{}backtrace all\char`\"{}} commands implemented for the debugger (\href{https://github.com/qorelanguage/qore/issues/2608}{\tt issue 2608})
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit}\+: overloaded the {\ttfamily test\+Assertion\+Value()} method to support auto/number/float and more verbose output when a difference in number/float values is found (\href{https://github.com/qorelanguage/qore/issues/2556}{\tt issue 2556})
\item qdbg-\/remote supports Connection\+Provider connections (\href{https://github.com/qorelanguage/qore/issues/2613}{\tt issue 2613})
\item new method\+: \mbox{\hyperlink{class_qore_1_1_breakpoint_a68760cc4fde41e64496725927e873bcf}{Breakpoint\+:\+:get\+Program()}}
\end{DoxyItemize}\hypertarget{release_notes_qore_08132_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08132_bug_fixes}

\begin{DoxyItemize}
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/DebugCmdLine/html/index.html}{\tt Debug\+Cmd\+Line}\+:
\begin{DoxyItemize}
\item improved breakpoint usability (\href{https://github.com/qorelanguage/qore/issues/2604}{\tt issue 2604})
\item fixed a bug parsing call signatures when setting breakpoints (\href{https://github.com/qorelanguage/qore/issues/2601}{\tt issue 2601})
\end{DoxyItemize}
\item \href{../../modules/DebugProgramControl/html/index.html}{\tt Debug\+Program\+Control}\+:
\begin{DoxyItemize}
\item improved breakpoint usability (\href{https://github.com/qorelanguage/qore/issues/2604}{\tt issue 2604})
\item fixed a bug providing the program\+Id context (\href{https://github.com/qorelanguage/qore/issues/2603}{\tt issue 2603})
\end{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit}\+:
\begin{DoxyItemize}
\item improved error location reporting by providing all stack location information up until the Q\+Unit call to cover the case when multiple code layers are used such as one or more test modules (\href{https://github.com/qorelanguage/qore/issues/1720}{\tt issue 1720})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}\+:
\begin{DoxyItemize}
\item implemented support for literal values in column operators taking column arguments with {\ttfamily cop\+\_\+value()} (\href{https://github.com/qorelanguage/qore/issues/2555}{\tt issue 2555})
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client}\+:
\begin{DoxyItemize}
\item added {\ttfamily Web\+Socket\+Client\+::pong()} to allow unsolicited {\ttfamily P\+O\+NG} messages to be sent (\href{https://github.com/qorelanguage/qore/issues/2566}{\tt issue 2566})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler}\+:
\begin{DoxyItemize}
\item fixed a bug where unsolicited {\ttfamily P\+O\+NG} messages caused the connection to be prematurely closed (\href{https://github.com/qorelanguage/qore/issues/2566}{\tt issue 2566})
\end{DoxyItemize}
\end{DoxyItemize}
\item fixed a bug with implicit initialization of typed hashes; this is now illegal and a {\ttfamily H\+A\+S\+H\+D\+E\+C\+L-\/\+I\+M\+P\+L\+I\+C\+I\+T-\/\+C\+O\+N\+S\+T\+R\+U\+C\+T\+I\+O\+N-\/\+E\+R\+R\+OR} exception is raised in such cases (\href{https://github.com/qorelanguage/qore/issues/2491}{\tt issue 2491})
\item fixed a bug with \mbox{\hyperlink{class_qore_1_1_thread_1_1_condition}{Condition}} variable handling on mac\+OS High Sierra due to an internal undocumented A\+PI change (\href{https://github.com/qorelanguage/qore/issues/2576}{\tt issue 2576})
\item fixed a memory error with the \mbox{\hyperlink{operators_plus_equals_operator}{+= operator}} and uninitialized date/time values (\href{https://github.com/qorelanguage/qore/issues/2591}{\tt issue 2591})
\item fixed a bug in the remote debugger {\ttfamily qdbg-\/remote} where {\ttfamily wss\+://} schemes were not accepted (\href{https://github.com/qorelanguage/qore/issues/2596}{\tt issue 2596})
\item fixed a bug in an error message in \mbox{\hyperlink{class_qore_1_1_program_control_abeb009c4ccc44659d90584bff3e8ff4b}{Program\+Control\+:\+:find\+Function\+Statement\+Id()}} (\href{https://github.com/qorelanguage/qore/issues/2600}{\tt issue 2600})
\item fixed a crash when \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a7d57e49bdde9c6fa2d67013f3fb0a4c8}{H\+T\+T\+P\+Client\+:\+:set\+Default\+Path()}} was called with no argument (\href{https://github.com/qorelanguage/qore/issues/2610}{\tt issue 2610})
\item fixed a bug in debugger when program is not set (\href{https://github.com/qorelanguage/qore/issues/2603}{\tt issue 2603})
\end{DoxyItemize}\hypertarget{release_notes_qore_08131}{}\section{Qore 0.\+8.\+13.\+1}\label{release_notes_qore_08131}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08131_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_08131_new_features}

\begin{DoxyItemize}
\item the {\ttfamily sqlutil} script has been updated with the {\ttfamily --select} option to allow dumped table rows to be filtered (\href{https://github.com/qorelanguage/qore/issues/2509}{\tt issue 2509})
\end{DoxyItemize}\hypertarget{release_notes_qore_08131_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08131_bug_fixes}

\begin{DoxyItemize}
\item fixes in modules\+:
\begin{DoxyItemize}
\item {\ttfamily astparser} module fixes\+:
\begin{DoxyItemize}
\item fixed memory leaks in {\ttfamily Ast\+Parser\+::parse\+File()} and {\ttfamily Ast\+Parser\+::parse\+String()} methods (\href{https://github.com/qorelanguage/qore/issues/2261}{\tt issue 2261})
\item fixed incorrect flex code regarding parse options leading to segfaults (\href{https://github.com/qorelanguage/qore/issues/2262}{\tt issue 2262})
\end{DoxyItemize}
\item \href{../../modules/DebugCmdLine/html/index.html}{\tt Debug\+Cmd\+Line} module fixes\+:
\begin{DoxyItemize}
\item fixed value setting to process all remaining arguments on the command line (\href{https://github.com/qorelanguage/qore/issues/2294}{\tt issue 2294})
\end{DoxyItemize}
\item \href{../../modules/DebugCmdLine/html/index.html}{\tt Debug\+Cmd\+Line} module fixes\+:
\begin{DoxyItemize}
\item the debugger should report ambiguous partial matches as an error (\href{https://github.com/qorelanguage/qore/issues/2292}{\tt issue 2292})
\end{DoxyItemize}
\item \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module fixes\+:
\begin{DoxyItemize}
\item fixed {\ttfamily Message\+::add\+Body()} with no body present (issue \href{https://github.com/qorelanguage/qore/issues/2360}{\tt issue 2360})
\end{DoxyItemize}
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in the {\ttfamily S\+T\+R\+I\+N\+G-\/\+T\+O\+O-\/\+L\+O\+NG} exception (\href{https://github.com/qorelanguage/qore/issues/2495}{\tt issue 2405})
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where default column values were compared incorrectly leading to false positives when comparing and aligning DB schemas (\href{https://github.com/qorelanguage/qore/issues/2527}{\tt issue 2527})
\end{DoxyItemize}
\item \href{../../modules/Qdx/html/index.html}{\tt Qdx} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in documentation post-\/processing for \mbox{\hyperlink{hashdecl}{hashdecl}} declarations (\href{https://github.com/qorelanguage/qore/issues/2298}{\tt issue 2298})
\end{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit} fixes\+:
\begin{DoxyItemize}
\item added missing comparison methods (\href{https://github.com/qorelanguage/qore/issues/1588}{\tt issue 1588})\+:
\begin{DoxyItemize}
\item {\ttfamily Test\+::assert\+Regex()} 
\item {\ttfamily Test\+::assert\+N\+Regex()} 
\item {\ttfamily Test\+::assert\+Neq()} 
\item {\ttfamily Test\+::assert\+Neq\+Soft()} 
\item {\ttfamily Test\+::assert\+Gt()} 
\item {\ttfamily Test\+::assert\+Gt\+Soft()} 
\item {\ttfamily Test\+::assert\+Ge()} 
\item {\ttfamily Test\+::assert\+Ge\+Soft()} 
\item {\ttfamily Test\+::assert\+Lt()} 
\item {\ttfamily Test\+::assert\+Lt\+Soft()} 
\item {\ttfamily Test\+::assert\+Le()} 
\item {\ttfamily Test\+::assert\+Le\+Soft()} 
\item {\ttfamily Test\+::assert\+Nothing()} 
\end{DoxyItemize}
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module fixes\+:
\begin{DoxyItemize}
\item updated to return a 400 Bad Request error when R\+E\+ST schema validation fails on messages received \href{https://github.com/qorelanguage/qore/issues/2344}{\tt issue 2344})
\item updated to return a 400 Bad Request error when there are string encoding errors with messages received (\href{https://github.com/qorelanguage/qore/issues/2398}{\tt issue 2398})
\item updated to return a 404 Not Found error when R\+E\+ST subclass does not exist (\href{https://github.com/qorelanguage/qore/issues/2405}{\tt issue 2405})
\item updated to return a 400 Bad Request error when E\+N\+C\+O\+D\+I\+N\+G-\/\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N-\/\+E\+R\+R\+OR occurs during request parsing (\href{https://github.com/qorelanguage/qore/issues/2543}{\tt issue 2543})
\end{DoxyItemize}
\item \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator} module fixes\+:
\begin{DoxyItemize}
\item updated docs for {\ttfamily Abstract\+Rest\+Schema\+Validator\+::parse\+Request()} to reflect how validation exceptions should be raised for proper error reporting (\href{https://github.com/qorelanguage/qore/issues/2344}{\tt issue 2344})
\item fixed handling of messages with non-\/object (i.\+e. non-\/hash) bodies (\href{https://github.com/qorelanguage/qore/issues/2366}{\tt issue 2366})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module changes
\begin{DoxyItemize}
\item implemented support for custom column operators (\href{https://github.com/qorelanguage/qore/issues/2314}{\tt issue 2314})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module changes
\begin{DoxyItemize}
\item implemented support for chained synonyms (\href{https://github.com/qorelanguage/qore/issues/2408}{\tt issue 2408})
\item allow to use D\+B\+A\+\_\+$\ast$ views instead of A\+L\+L\+\_\+$\ast$ if possible (\href{https://github.com/qorelanguage/qore/issues/2418}{\tt issue 2418})
\end{DoxyItemize}
\item \href{../../modules/Swagger/html/index.html}{\tt Swagger} module fixes\+:
\begin{DoxyItemize}
\item fixed handling of string type date and date-\/time formats (\href{https://github.com/qorelanguage/qore/issues/2341}{\tt issue 2341})
\item fixed example value for binary type (\href{https://github.com/qorelanguage/qore/issues/2342}{\tt issue 2342})
\item fixed serialization of date/time values (\href{https://github.com/qorelanguage/qore/issues/2349}{\tt issue 2349})
\item updated to return a 400 Bad Request error when R\+E\+ST schema validation fails on messages received \href{https://github.com/qorelanguage/qore/issues/2344}{\tt issue 2344})
\item fixed handling of non-\/string enum types (\href{https://github.com/qorelanguage/qore/issues/2364}{\tt issue 2364})
\item fixed confusing error messages with invalid parameter types (\href{https://github.com/qorelanguage/qore/issues/2365}{\tt issue 2365})
\item fixed handling of messages with non-\/object (i.\+e. non-\/hash) bodies (\href{https://github.com/qorelanguage/qore/issues/2366}{\tt issue 2366})
\item fixed handling of optional parameters (\href{https://github.com/qorelanguage/qore/issues/2369}{\tt issue 2369})
\item fixed handling of non-\/string query parameters (\href{https://github.com/qorelanguage/qore/issues/2388}{\tt issue 2388})
\item fixed a bug where string value constraints were only enforced in requests but not responses (\href{https://github.com/qorelanguage/qore/issues/2396}{\tt issue 2396})
\item fixed a bug where invalid date, binary, and byte values would cause a {\ttfamily 500 Internal Server Error} response to be returned instead of a {\ttfamily 400 Bad Request} error (\href{https://github.com/qorelanguage/qore/issues/2397}{\tt issue 2397})
\item fixed a bug where date values were formatted incorrectly in Swagger responses (\href{https://github.com/qorelanguage/qore/issues/2409}{\tt issue 2409})
\item fixed a bug which made it impossible to send data with other content/mime types than json, yamlrpc, Form\+Url\+Encoded or Multipart\+Form\+Data (\href{https://github.com/qorelanguage/qore/issues/2497}{\tt issue 2497})
\item fixed handling of string/binary values (\href{https://github.com/qorelanguage/qore/issues/2505}{\tt issue 2505})
\item fixed a bug where consumes property of operations was sometimes ignored (\href{https://github.com/qorelanguage/qore/issues/2507}{\tt issue 2507})
\item fixed parsing of responses without Content-\/\+Type header (\href{https://github.com/qorelanguage/qore/issues/2517}{\tt issue 2517})
\item fixed path matching for paths not beginning with a slash (\href{https://github.com/qorelanguage/qore/issues/2516}{\tt issue 2516})
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module fixes\+:
\begin{DoxyItemize}
\item 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 (\href{https://github.com/qorelanguage/qore/issues/2520}{\tt issue 2520})
\end{DoxyItemize}
\end{DoxyItemize}
\item fixed bugs affecting debugging matching function/method variants and finding statements with special methods and with complex types (\href{https://github.com/qorelanguage/qore/issues/1865}{\tt issue 1865})
\item fixed a bug in {\ttfamily qpp} generating hashdecl code in a specific namespace (\href{https://github.com/qorelanguage/qore/issues/2255}{\tt issue 2255})
\item fixed an error in a \mbox{\hyperlink{hashdecl}{hashdecl}} documentation example (\href{https://github.com/qorelanguage/qore/issues/2299}{\tt issue 2299})
\item made C++ A\+P\+Is for complex types for modules public (\href{https://github.com/qorelanguage/qore/issues/2271}{\tt issue 2271})
\item fixed inconsistencies in the behavior of the \mbox{\hyperlink{operators_range_operator}{range operator (..)}} and the \mbox{\hyperlink{operators_list_element_operator}{square brackets operator \mbox{[}\mbox{]}}} with lists and ranges between immediate evaluation and lazy functional evaluation and aligned the behavior of the operators among supported data types with the \mbox{\hyperlink{operators_remove}{remove}} and \mbox{\hyperlink{operators_delete}{delete}} operators (\href{https://github.com/qorelanguage/qore/issues/2260}{\tt issue 2260})
\item fixed a bug handling statement indices with parse errors (\href{https://github.com/qorelanguage/qore/issues/2312}{\tt issue 2312})
\item fixed too-\/agressive class hierachy checks that disallowed legal hierarchies where the same base class appears more than once in the hierarchy (\href{https://github.com/qorelanguage/qore/issues/2317}{\tt issue 2317})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/2319}{\tt issue 2319})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/2340}{\tt issue 2340})
\item fixed {\ttfamily q\+\_\+absolute\+\_\+path\+\_\+windows} to correctly recognize relative Windows paths beginning with a drive letter (\href{https://github.com/qorelanguage/qore/issues/2377}{\tt issue 2377})
\item fixed a bug in {\ttfamily {\bfseries private\+:internal}} in method execution within a class hierarchy in some cases (\href{https://github.com/qorelanguage/qore/issues/2380}{\tt issue 2380})
\item fixed an obscure bug handling runtime errors in code calls with a variant matched at parse time where a runtime exception could occur (\href{https://github.com/qorelanguage/qore/issues/2392}{\tt issue 2392})
\item improved breakpoints (enabled by default), extended help texts, load/save debug history and session (\href{https://github.com/qorelanguage/qore/issues/2401}{\tt issue 2401})
\item fixed a bug in an error message regarding binary module signal assignments (\href{https://github.com/qorelanguage/qore/issues/2439}{\tt issue 2439})
\item added C++ functions to allow binary modules to allocate and deallocate multiple signals atomically (\href{https://github.com/qorelanguage/qore/issues/2440}{\tt issue 2440})
\item eliminated a warning in a header file when building with g++ 7+ (\href{https://github.com/qorelanguage/qore/issues/2449}{\tt issue 2449})
\item implemented a fix in {\ttfamily 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 {\ttfamily quit} (\href{https://github.com/qorelanguage/qore/issues/2472}{\tt issue 2472})
\item fixed bugs in Windows builds (\href{https://github.com/qorelanguage/qore/issues/2529}{\tt issue 2529})
\end{DoxyItemize}\hypertarget{release_notes_qore_0813}{}\section{Qore 0.\+8.\+13}\label{release_notes_qore_0813}
\begin{DoxyParagraph}{Release Summary}
Major new features and bug fixes including input and output stream support and sigificant new functionality including several new modules.
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0813_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_0813_compatibility}

\begin{DoxyItemize}
\item fixed broken \mbox{\hyperlink{statements_continue}{continue}} and \mbox{\hyperlink{statements_break}{break}} statements that were accepted anywhere in the source and behaved like a \mbox{\hyperlink{statements_return}{return}} statement; now such statements outside a loop context will result in a parse exception; to get the old behavior, use \mbox{\hyperlink{parse_directives_broken-loop-statement}{\%broken-\/loop-\/statement}} in your source code
\item fixed broken \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} type restrictions which had no effect prior to this release; to get the old behavior, use \mbox{\hyperlink{parse_directives_broken-references}{\%broken-\/references}} in your source code
\item the random number generator is always seeded with a random number when the \mbox{\hyperlink{namespace_qore}{Qore}} library is initialized; to get a predictable sequence from \mbox{\hyperlink{group__library__functions_ga6ed36f08f41864dfe007504e8b4ff5c3}{rand()}}, you must explicitly seed the random number generator by calling \mbox{\hyperlink{group__library__functions_gaeb017e3b5ea8ff39e270e844f280e32b}{srand()}} with a predefined seed number
\item the \mbox{\hyperlink{threading_synchronized}{synchronized}} keyword now operates differently depending on the context; {\ttfamily {\bfseries synchronized}} functions have a global reentrant lock associated with the function (as in previous versions of Qore), whereas now {\ttfamily {\bfseries synchronized}} normal class methods share a reentrant lock associated with the object, while {\ttfamily {\bfseries synchronized}} static class methods share a reentrant lock associated with the class itself. This aligns Qore\textquotesingle{}s \mbox{\hyperlink{threading_synchronized}{synchronized}} behavior with that of Java and {\ttfamily \mbox{[}Method\+Impl(Method\+Impl\+Options.\+Synchronized)\mbox{]}} .N\+E\+T/\+C\+LR (\href{https://github.com/qorelanguage/qore/issues/894}{\tt issue 894}).
\item classes may not have the name {\ttfamily \char`\"{}auto\char`\"{}} due to the introduction of this identifier as a special type name
\item a new keyword \mbox{\hyperlink{hashdecl}{hashdecl}} has been introduced to support type-\/safe hash declarations
\end{DoxyItemize}\hypertarget{release_notes_qore_0813_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_0813_new_features}

\begin{DoxyItemize}
\item complex type support
\begin{DoxyItemize}
\item \mbox{\hyperlink{hashdecl}{type safe hashes}} (\mbox{\hyperlink{data_type_declarations_hash_hashdecl_type}{Type-\/\+Safe Hash Type}}); ex\+:
\begin{DoxyCode}
hash<MyInfo> = get\_info(); 
\end{DoxyCode}

\item new system types\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{struct_qore_1_1_call_stack_info}{Call\+Stack\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_date_time_info}{Date\+Time\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_dir_stat_info}{Dir\+Stat\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_exception_info}{Exception\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_filesystem_info}{Filesystem\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_iso_week_info}{Iso\+Week\+Info}}
\item \mbox{\hyperlink{struct_qore_1_1_stat_info}{Stat\+Info}}
\end{DoxyItemize}
\item \mbox{\hyperlink{data_type_declarations_hash_complex_type}{hash with type-\/safe values}}; ex\+:
\begin{DoxyCode}
hash<string, int> h = (\textcolor{stringliteral}{"str"}: 1); 
\end{DoxyCode}

\item \mbox{\hyperlink{data_type_declarations_list_complex_type}{list with type-\/safe values}}; ex\+:
\begin{DoxyCode}
list<int> l = (1); 
\end{DoxyCode}

\item \mbox{\hyperlink{data_type_declarations_reference_complex_type}{reference with type-\/safe lvalues}}; ex\+:
\begin{DoxyCode}
int i = 1; reference<int> r = \(\backslash\)i; 
\end{DoxyCode}

\item \mbox{\hyperlink{data_type_declarations_auto_type}{auto}} (allows any value including complex types to be assigned without losing complex type information); ex\+:
\begin{DoxyCode}
auto l = (1, 2); 
\end{DoxyCode}

\item improved \mbox{\hyperlink{operators_new}{new}}, \mbox{\hyperlink{operators_cast}{cast$<$$>$}}, and \mbox{\hyperlink{operators_instanceof}{instanceof}} operators
\item the \mbox{\hyperlink{operators_instanceof}{instanceof}} operator now works with any type; ex\+:
\begin{DoxyCode}
bool b = v instanceof hash<string, int>; 
\end{DoxyCode}

\item 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.
\end{DoxyItemize}
\item 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\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_binary_input_stream}{Binary\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_binary_output_stream}{Binary\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_buffered_stream_reader}{Buffered\+Stream\+Reader}}
\item \mbox{\hyperlink{class_qore_1_1_encoding_conversion_input_stream}{Encoding\+Conversion\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_encoding_conversion_output_stream}{Encoding\+Conversion\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_file_input_stream}{File\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_file_output_stream}{File\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_input_stream}{Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_input_stream_line_iterator}{Input\+Stream\+Line\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_output_stream}{Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_pipe_input_stream}{Pipe\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_pipe_output_stream}{Pipe\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_stream_pipe}{Stream\+Pipe}}
\item \mbox{\hyperlink{class_qore_1_1_stream_reader}{Stream\+Reader}}
\item \mbox{\hyperlink{class_qore_1_1_stream_writer}{Stream\+Writer}}
\item \mbox{\hyperlink{class_qore_1_1_string_input_stream}{String\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_string_output_stream}{String\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_transform}{Transform}}
\item \mbox{\hyperlink{class_qore_1_1_transform_input_stream}{Transform\+Input\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_transform_output_stream}{Transform\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_stdout_output_stream}{Stdout\+Output\+Stream}}
\item \mbox{\hyperlink{class_qore_1_1_stderr_output_stream}{Stderr\+Output\+Stream}}
\end{DoxyItemize}Three constants were introduced for accessing standard input/output using streams A\+PI\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__io__constants_gae2e16a518aa5a69148ad5b218ae91109}{stdin\+\_\+stream}}
\item \mbox{\hyperlink{group__io__constants_gad35de1bb3d368f94ca75b1a4e165f361}{stdout\+\_\+stream}}
\item \mbox{\hyperlink{group__io__constants_gae762f18fd8b6318f15f8aaf1d18c595e}{stderr\+\_\+stream}}
\end{DoxyItemize}Additionally, stream support has been added to the following functions and methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a835c52e32ee089773d48574f297e7965}{Qore\+::\+Ftp\+Client\+::put()}}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a2b06a66db173df6bac61b1af48c7a11c}{Qore\+::\+Ftp\+Client\+::get()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_ae1f4636690926617d710f78cbf48e4f9}{Qore\+::\+H\+T\+T\+P\+Client\+::send()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_aa0b8e59ebd5518bfb4ec8a7d3e3f1e14}{Qore\+::\+H\+T\+T\+P\+Client\+::send\+Chunked()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aebaa2374adb09d2497d30cf1775a9c09}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Chunked\+Body\+From\+Input\+Stream()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aa97d2e32904fd5ccc419261ab6f4bbbf}{Qore\+::\+Socket\+::read\+H\+T\+T\+P\+Chunked\+Body\+To\+Output\+Stream()}}
\end{DoxyItemize}Stream support was also added to the following user modules\+:
\begin{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util}
\item \href{../../modules/FixedLengthUtil/html/index.html}{\tt Fixed\+Length\+Util}
\end{DoxyItemize}
\item support for \mbox{\hyperlink{operators_op_functional}{lazy functional evaluation}} of functional operators (including nested lazy evaluation) for much more efficient processing of iterated expressions; affects\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{operators_map}{map}}\+: supports lazy evaluation of itself and also of the iterator expression
\item \mbox{\hyperlink{operators_select}{select}}\+: supports lazy evaluation of itself and also of the iterator expression
\item \mbox{\hyperlink{operators_keys}{keys}}\+: supports lazy evaluation of itself
\item \mbox{\hyperlink{operators_foldl}{foldl}}\+: supports lazy evaluation of the iterator expression
\item \mbox{\hyperlink{operators_foldr}{foldlr}}\+: supports lazy evaluation of the iterator expression
\item \mbox{\hyperlink{statements_foreach}{foreach}}\+: supports lazy evaluation of the iterator expression
\item \mbox{\hyperlink{operators_range_operator}{.. (range operator)}}\+: supports lazy evaluation of itself
\item \mbox{\hyperlink{operators_list_element_operator}{\mbox{[}n,m,...\mbox{]} (list, string, or binary dereference with multiple indices))}}\+: supports lazy evaluation of itself
\end{DoxyItemize}
\item support for list, string, and binary slices with offsets and ranges\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{container_data_types_list_slicing}{list slices}}
\item \mbox{\hyperlink{basic_data_types_string_slicing}{string slices}}
\item \mbox{\hyperlink{basic_data_types_binary_slicing}{binary slices}}
\item new \mbox{\hyperlink{operators_range_operator}{.. range operator}}
\item updated \mbox{\hyperlink{operators_list_element_operator}{\mbox{[}\mbox{]} operator}}
\end{DoxyItemize}
\item enhanced cryptographic support including support for \href{https://en.wikipedia.org/wiki/Advanced_Encryption_Standard}{\tt A\+ES} with Additional Authenticated Data and \href{https://en.wikipedia.org/wiki/Message_authentication_code}{\tt Message Authentication Code (M\+AC)} support, plus the following new A\+PI functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__hmac__functions_gad159aa97f0f07e827e74b4b9a12b92ca}{Qore\+::decrypt\+\_\+to\+\_\+binary()}}
\item \mbox{\hyperlink{group__hmac__functions_ga94bc9698c368c32987d7207096806df1}{Qore\+::decrypt\+\_\+to\+\_\+string()}}
\item \mbox{\hyperlink{group__hmac__functions_ga7141b56ffa6c5a4f8c9c58f788f33780}{Qore\+::encrypt()}}
\item \mbox{\hyperlink{group__hmac__functions_ga23662a1e7f11f483a6e841da96389197}{Qore\+::get\+\_\+crypto\+\_\+info()}}
\item \mbox{\hyperlink{group__hmac__functions_ga913932d6120f9ea1e3918168fb204976}{Qore\+::get\+\_\+decryptor()}}
\item \mbox{\hyperlink{group__hmac__functions_ga6e67ba0396d70cd012f7c46c7562b81f}{Qore\+::get\+\_\+encryptor()}}
\end{DoxyItemize}The following constants were added to support the new generic cryptographic A\+P\+Is\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__crypto__transformations_ga73689cc7289473ce0061551c392120bf}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+A\+E\+S\+\_\+128}}
\item \mbox{\hyperlink{group__crypto__transformations_ga022dfeaa3c3e4ee34f0cb55ba1129125}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+A\+E\+S\+\_\+192}}
\item \mbox{\hyperlink{group__crypto__transformations_ga5a725d566fde3fdf16cf967f24396d4f}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+A\+E\+S\+\_\+256}}
\item \mbox{\hyperlink{group__crypto__transformations_ga537286d57ff4a0326f427e8d513cbfb0}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+B\+L\+O\+W\+F\+I\+SH}}
\item \mbox{\hyperlink{group__crypto__transformations_ga422366c05ce16fb7bd4891e96eab6e8e}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+B\+L\+O\+W\+F\+I\+S\+H\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga2a5dfd4cdf80d6da8c2a9447ed0c4d13}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+B\+L\+O\+W\+F\+I\+S\+H\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gab6dd39c61668eed9ee863a86c0536023}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+C\+A\+S\+T5}}
\item \mbox{\hyperlink{group__crypto__transformations_ga5d4040b319f9c4bd307e4df9ed426676}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+C\+A\+S\+T5\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gab4eced22515cb6dd7c6a28e436534a0d}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+C\+A\+S\+T5\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gab2509ba7b5427976e71ed4441b96cb39}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+ES}}
\item \mbox{\hyperlink{group__crypto__transformations_ga4271e36093c0a96caf2a189dcf703f86}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gab9ae17ec1fae8d177132b6abbe94dfb4}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gae1d1fcde9e41fb04b5f1ecca97a69824}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+DE}}
\item \mbox{\hyperlink{group__crypto__transformations_ga48839b104df4562c36fc787f7c262c56}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+D\+E\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga68234e274ee028b255e2af4417577b71}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+D\+E\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga056d23c2aaeeb75f37d4e7e515db5a6d}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+D\+E3}}
\item \mbox{\hyperlink{group__crypto__transformations_gacadc7af0b9f9bf99c24f2045847544d8}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+D\+E3\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gac2f3e064d44a1d71316036d2dd47fb3d}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+S\+\_\+\+E\+D\+E3\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga87d409efe9ca4136e594c9d7f054c7d5}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+D\+E\+SX}}
\item \mbox{\hyperlink{group__crypto__transformations_ga5c88760095c4fd3d4306e69362d9e462}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C2}}
\item \mbox{\hyperlink{group__crypto__transformations_ga7c32cf736fcb8a6580b7807a61e97c74}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C2\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga267f3f2ee291872b9e829ccce4c101f9}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C2\+\_\+\+O\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_ga99a646fac8a832add2cff0a957680289}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C4}}
\item \mbox{\hyperlink{group__crypto__transformations_gae9bcc35cfb5dc20aaf28434c852ee0ef}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C5}}
\item \mbox{\hyperlink{group__crypto__transformations_ga9d66718f85fb96613009043d7ba9e391}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C5\+\_\+\+C\+FB}}
\item \mbox{\hyperlink{group__crypto__transformations_gad93f79055d46a93781a138ca839f2b1b}{Qore\+::\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+L\+G\+\_\+\+R\+C5\+\_\+\+O\+FB}}
\end{DoxyItemize}
\item support for binding output placeholder buffers for \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_resultset_output_binding}{result sets}} that return an \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} object\+:
\begin{DoxyItemize}
\item new D\+BI capability constant \mbox{\hyperlink{group__dbi__capabilities_ga91b90789d24991b1eebce9c11491f015}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+R\+E\+S\+U\+L\+T\+S\+E\+T\+\_\+\+O\+U\+T\+P\+UT}}
\item new placeholder buffer specification constant \mbox{\hyperlink{group__sql__constants_ga9d23a1d69fcb188296a231a36c6b6da2}{R\+E\+S\+U\+L\+T\+S\+ET}}
\end{DoxyItemize}
\item new debugging support (note that A\+P\+Is are subject to change until the next major release)\+:
\begin{DoxyItemize}
\item new classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_breakpoint}{Breakpoint}}
\item \mbox{\hyperlink{class_qore_1_1_debug_program}{Debug\+Program}}
\item \mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}}
\end{DoxyItemize}
\item new modules\+:
\begin{DoxyItemize}
\item \href{../../modules/DebugCmdLine/html/index.html}{\tt Debug\+Cmd\+Line}
\item \href{../../modules/DebugHandler/html/index.html}{\tt Debug\+Handler}
\item \href{../../modules/DebugProgramControl/html/index.html}{\tt Debug\+Program\+Control}
\item \href{../../modules/DebugUtil/html/index.html}{\tt Debug\+Util}
\end{DoxyItemize}
\item new parse directives\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{parse_directives_allow-debugger}{\%allow-\/debugger}}\+: allows running debug commands
\item \mbox{\hyperlink{parse_directives_no-debugging}{\%no-\/debugging}}\+: forbids debugging of the current \mbox{\hyperlink{class_qore_1_1_program}{Program}} object
\end{DoxyItemize}
\end{DoxyItemize}
\item new user modules\+:
\begin{DoxyItemize}
\item \href{../../modules/DebugCmdLine/html/index.html}{\tt Debug\+Cmd\+Line}
\item \href{../../modules/DebugHandler/html/index.html}{\tt Debug\+Handler}
\item \href{../../modules/DebugProgramControl/html/index.html}{\tt Debug\+Program\+Control}
\item \href{../../modules/DebugUtil/html/index.html}{\tt Debug\+Util}
\item \href{../../modules/ConnectionProvider/html/index.html}{\tt Connection\+Provider}
\item \href{../../modules/DatasourceProvider/html/index.html}{\tt Datasource\+Provider}
\item \href{../../modules/Qdx/html/index.html}{\tt Qdx}
\item \href{../../modules/SewioRestClient/html/index.html}{\tt Sewio\+Rest\+Client}
\item \href{../../modules/SewioWebSocketClient/html/index.html}{\tt Sewio\+Web\+Socket\+Client}
\item \href{../../modules/Swagger/html/index.html}{\tt Swagger}
\item \href{../../modules/TextWrap/html/index.html}{\tt Text\+Wrap}
\end{DoxyItemize}
\item new access modifiers\+: {\ttfamily {\bfseries private\+:internal}} (providing strong encapsulation of the following declaration(s)) and {\ttfamily {\bfseries private\+:hierarchy}} (which is equivalent to {\ttfamily {\bfseries private}}; \href{https://github.com/qorelanguage/qore/issues/1197}{\tt issue 1197})
\item new parse options and directives\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{parse_directives_allow-debugger}{\%allow-\/debugger}}\+: allows running debug commands
\item \mbox{\hyperlink{parse_directives_no-debugging}{\%no-\/debugging}}\+: forbids debugging of the current \mbox{\hyperlink{class_qore_1_1_program}{Program}} object
\item \mbox{\hyperlink{parse_directives_allow-weak-references}{\%allow-\/weak-\/references}}\+: allows the use of the \mbox{\hyperlink{operators_weak_assignment_operator}{weak assignment operator (\+:=)}}
\item \mbox{\hyperlink{parse_directives_broken-loop-statement}{\%broken-\/loop-\/statement}}\+: allows \mbox{\hyperlink{statements_continue}{continue}} and \mbox{\hyperlink{statements_break}{break}} statements to be accepted anywhere in the source and behave like a \mbox{\hyperlink{statements_return}{return}} statement
\item \mbox{\hyperlink{parse_directives_broken-references}{\%broken-\/references}}\+: allows \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} type restrictions to accept any type contrary to the documented design and intention of these type restrictions
\item \mbox{\hyperlink{parse_directives_correct-loop-statement}{\%correct-\/loop-\/statement}}\+: to revert the effect of \mbox{\hyperlink{parse_directives_broken-loop-statement}{\%broken-\/loop-\/statement}}
\item \mbox{\hyperlink{parse_directives_correct-references}{\%correct-\/references}}\+: to revert the effect of \mbox{\hyperlink{parse_directives_broken-references}{\%broken-\/references}}
\item \mbox{\hyperlink{parse_directives_no-uncontrolled-apis}{\%no-\/uncontrolled-\/apis}}\+: disallow access to uncontrolled A\+P\+Is such as external language bindings or direct generic system call A\+P\+Is that could bypass Qore\textquotesingle{}s sandboxing controls
\item \mbox{\hyperlink{parse_directives_strong-encapsulation}{\%strong-\/encapsulation}}\+: disallows out of line class and namespace declarations
\item \mbox{\hyperlink{parse_directives_try-reexport-module}{\%try-\/reexport-\/module}}\+: conditionally loads a module in a \mbox{\hyperlink{qore_modules_user_modules}{user module}} and allows for that module to be reexported as well
\end{DoxyItemize}
\item new constants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__dbi__capabilities_ga91b90789d24991b1eebce9c11491f015}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+R\+E\+S\+U\+L\+T\+S\+E\+T\+\_\+\+O\+U\+T\+P\+UT}}\+: D\+BI capability for drivers that support returning an \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} object for a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_resultset_output_binding}{result set}} when bound with the \mbox{\hyperlink{group__sql__constants_ga9d23a1d69fcb188296a231a36c6b6da2}{R\+E\+S\+U\+L\+T\+S\+ET}} placeholder specification
\item \mbox{\hyperlink{group__system__and__build__constants_ga92a67b51fbd91b3f09ccb8fd84fd8975}{Path\+Sep}}\+: defines the platform-\/specific path separator character
\item \mbox{\hyperlink{group__parse__options_gad0d38cd46f08bf4210d4010204269cc9}{P\+O\+\_\+\+A\+L\+L\+O\+W\+\_\+\+D\+E\+B\+U\+G\+G\+ER}}\+: allows running debugger commands
\item \mbox{\hyperlink{group__parse__options_ga36ecb26e0659608fc8d35bf9c9a3b5b2}{P\+O\+\_\+\+N\+O\+\_\+\+D\+E\+B\+U\+G\+G\+I\+NG}}\+: disallows debugging of the \mbox{\hyperlink{class_qore_1_1_program}{Program}}
\item \mbox{\hyperlink{group__parse__options_ga7cbf296853bb3a9d7cd1cf3a3e9556a5}{P\+O\+\_\+\+A\+L\+L\+O\+W\+\_\+\+W\+E\+A\+K\+\_\+\+R\+E\+F\+E\+R\+E\+N\+C\+ES}}\+: allows the use of the \mbox{\hyperlink{operators_weak_assignment_operator}{weak assignment operator (\+:=)}}
\item \mbox{\hyperlink{group__parse__options_ga80bef77e62dead678bbb426794f5f337}{P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+L\+O\+O\+P\+\_\+\+S\+T\+A\+T\+E\+M\+E\+NT}}\+: allows \mbox{\hyperlink{statements_continue}{continue}} and \mbox{\hyperlink{statements_break}{break}} statements to be accepted anywhere in the source and behave like a \mbox{\hyperlink{statements_return}{return}} statement
\item \mbox{\hyperlink{group__parse__options_ga889aa80f8ab33266c165478b5fe3c279}{P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+R\+E\+F\+E\+R\+E\+N\+C\+ES}}\+: reverts \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} type restrictions to pre-\/Qore-\/0.\+8.\+13 behavior where they would have no effect
\item \mbox{\hyperlink{group__parse__options_ga88a927479c495b99209a6397ef67c240}{P\+O\+\_\+\+N\+O\+\_\+\+U\+N\+C\+O\+N\+T\+R\+O\+L\+L\+E\+D\+\_\+\+A\+P\+IS}}\+: disallow access to uncontrolled A\+P\+Is such as external language bindings or direct generic system call A\+P\+Is that could bypass Qore\textquotesingle{}s sandboxing controls; note that this parse option was also added to \mbox{\hyperlink{group__parse__options_gabcd4198285f25da13a5883006f06a2b7}{P\+O\+\_\+\+N\+O\+\_\+\+IO}} and \mbox{\hyperlink{group__parse__options_ga10aefe54a313d86a87fedc46820ffb02}{P\+O\+\_\+\+N\+O\+\_\+\+E\+X\+T\+E\+R\+N\+A\+L\+\_\+\+A\+C\+C\+E\+SS}}
\item \mbox{\hyperlink{group__parse__options_gaa8259d8e3b4c908f9d09c6987c8c6167}{P\+O\+\_\+\+S\+T\+R\+O\+N\+G\+\_\+\+E\+N\+C\+A\+P\+S\+U\+L\+A\+T\+I\+ON}}\+: disallows out of line class and namespace declarations
\item \mbox{\hyperlink{group__sql__constants_ga9d23a1d69fcb188296a231a36c6b6da2}{R\+E\+S\+U\+L\+T\+S\+ET}}\+: specifies that an \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} object should be returned from a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_resultset_output_binding}{result set}} output variable in an S\+QL query
\item \mbox{\hyperlink{group__ssl__mode__constants_ga3e03ac75e51a9f4e994518fc3fc69ab7}{S\+S\+L\+\_\+\+V\+E\+R\+I\+F\+Y\+\_\+\+N\+O\+NE}}\+: \mbox{\hyperlink{class_qore_1_1_socket_aaafb6b597a1e5b3372d88ea53ea4cbac}{Socket\+:\+:set\+Ssl\+Verify\+Mode()}} option\+: do not verify peer certificates
\item \mbox{\hyperlink{group__ssl__mode__constants_gae29e3d0203f536c5bf5c0cb225c73c1a}{S\+S\+L\+\_\+\+V\+E\+R\+I\+F\+Y\+\_\+\+P\+E\+ER}}\+: \mbox{\hyperlink{class_qore_1_1_socket_aaafb6b597a1e5b3372d88ea53ea4cbac}{Socket\+:\+:set\+Ssl\+Verify\+Mode()}} option\+: verify peer certificates
\item \mbox{\hyperlink{group__ssl__mode__constants_ga7053aa1b8d954e00530f632c502c91d2}{S\+S\+L\+\_\+\+V\+E\+R\+I\+F\+Y\+\_\+\+F\+A\+I\+L\+\_\+\+I\+F\+\_\+\+N\+O\+\_\+\+P\+E\+E\+R\+\_\+\+C\+E\+RT}}\+: \mbox{\hyperlink{class_qore_1_1_socket_aaafb6b597a1e5b3372d88ea53ea4cbac}{Socket\+:\+:set\+Ssl\+Verify\+Mode()}} option\+: fail if the client does not provide a certificate (server mode only)
\item \mbox{\hyperlink{group__ssl__mode__constants_ga70bdb100f9ffb3564dfc38505740a0cb}{S\+S\+L\+\_\+\+V\+E\+R\+I\+F\+Y\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+O\+N\+CE}}\+: \mbox{\hyperlink{class_qore_1_1_socket_aaafb6b597a1e5b3372d88ea53ea4cbac}{Socket\+:\+:set\+Ssl\+Verify\+Mode()}} option\+: only require the client to send a certificate once (server mode only)
\item \mbox{\hyperlink{group__parse__options_gac5bb2159e3353d40072d974c057882b4}{Qore\+::\+Parse\+Option\+Cmd\+Code\+Map}}
\item \mbox{\hyperlink{group__parse__options_gaa932d004bc88438547cdfc4e217461e5}{Qore\+::\+Parse\+Option\+Cmd\+String\+Map}}
\item see new cryptographic constants listed above
\end{DoxyItemize}
\item implemented additional parse-\/time checks for many \mbox{\hyperlink{operators}{operators}} to provide feedback for invalid operations detected at parse time
\item implemented the \mbox{\hyperlink{operators_weak_assignment_operator}{weak assignment operator (\+:=)}} (only available with \mbox{\hyperlink{parse_directives_allow-weak-references}{\%allow-\/weak-\/references}})
\item implemented the \mbox{\hyperlink{operators_range_operator}{range operator (..)}}
\item implemented support for list expressions inside the \mbox{\hyperlink{operators_list_element_operator}{dereference operator (\mbox{[}\mbox{]})}}
\item new methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_a0359add1b4fce59b0e8b4bfd46bdf14e}{Qore\+::\+Program\+::get\+All\+Defines()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a6a57d21fd7901b6525a454db504e6d75}{Qore\+::\+Program\+::get\+Global\+Vars()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a029c9dbdbdc3dc13e685f7d101e5829e}{Qore\+::\+Program\+::import\+Hash\+Decl()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a4aef71f37e505dbe84be95b0a2848cba}{Qore\+::\+Program\+::import\+System\+Hash\+Decls()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a8be97bfcd125d83a9415c843694734ac}{Qore\+::\+Program\+::set\+Global\+Var\+Value()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a6fda138e987e698d3c5b11294d21bcdb}{Qore\+::\+Program\+::set\+Thread\+Init()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a5435e046150b69d97f215c0f6b192ce0}{Qore\+::\+Program\+::get\+Thread\+List()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aa530d889c522a410e7e5e5163204d1db}{Qore\+::\+Socket\+::accept\+All\+Certificates()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a1338b37101ef0b82a6dde62b5369f5b9}{Qore\+::\+Socket\+::get\+Accept\+All\+Certificates()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a749e2b7f8882b0e6fcc058886134daf5}{Qore\+::\+Socket\+::get\+Ssl\+Verify\+Mode()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aaafb6b597a1e5b3372d88ea53ea4cbac}{Qore\+::\+Socket\+::set\+Ssl\+Verify\+Mode()}}
\end{DoxyItemize}
\item updated methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter_a31f5a01212067685e54de06ae29a9984}{Counter\+:\+:dec()}}\+: now returns the current value of the counter
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a1966daad73f8cd30da527e16618eb768}{Qore\+::\+H\+T\+T\+P\+Client\+::constructor()}} added support for the following options\+:
\begin{DoxyItemize}
\item {\ttfamily ssl\+\_\+cert\+\_\+path\+:} allows an X.\+509 client certificate to be set in the constructor
\item {\ttfamily ssl\+\_\+key\+\_\+path\+:} allows a private key for an X.\+509 client certificate to be set in the constructor
\item {\ttfamily ssl\+\_\+key\+\_\+password\+:} allows a password-\/protected private key to be used wih an X.\+509 client certificate
\item {\ttfamily ssl\+\_\+verify\+\_\+cert\+:} enforces server certificate validation with H\+T\+T\+PS connections
\end{DoxyItemize}Additionally, the H\+T\+T\+P\+Client class now understands the {\ttfamily P\+A\+T\+CH} method (\href{https://tools.ietf.org/html/rfc5789}{\tt R\+FC 5789})
\item \mbox{\hyperlink{class_qore_1_1_range_iterator_acdcab14b075fb022dfd4a221c3ddf1ab}{Qore\+::\+Range\+Iterator\+::constructor(int)}} was updated; the second argument was removed to avoid ambiguity with the other overloaded constructor
\item \mbox{\hyperlink{class_qore_1_1_tree_map_a53a50c34b01c6a0a4829f58243191175}{Tree\+Map\+:\+:get()}}\+: added a new optional argument to return the unmatched part of the search string
\item the following read-\/only static methods were moved from the \mbox{\hyperlink{class_qore_1_1_file}{File}} class to the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Read\+Only\+File}} class\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_a1de2cddec975057ca61f3c5621256833}{Read\+Only\+File\+:\+:hstat()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_aa0e7a9d95c754b065ed043810bd32b33}{Read\+Only\+File\+:\+:hlstat()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_a6915b82c9f1c5ac4de0fa44d3bd3f6b8}{Read\+Only\+File\+:\+:lstat()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_ae2f1c544881c1186798d001c19b894ba}{Read\+Only\+File\+:\+:stat()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_ade31b4901849ae29223e11d0cae6e464}{Read\+Only\+File\+:\+:statvfs()}}
\end{DoxyItemize}
\end{DoxyItemize}
\item new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a52e3a4df1cf57a32686d651666a9643a}{Qore\+::zzz8intzzz9\+::format(int, string, string)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_a0a1ed20b3cbe9a7d99681b2ee1b4802b}{Qore\+::zzz8floatzzz9\+::format(int, string, string)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8numberzzz9_a31013414002c3808718a217d8d488f7b}{Qore\+::zzz8numberzzz9\+::format(int, string, string)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ae5fc7b01d0469fc2a015a0f6f3b0ae26}{Qore\+::zzz8stringzzz9\+::to\+Int(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a1a7c8f41ba26bec22c1a0f485d90a48a}{Qore\+::zzz8intzzz9\+::to\+Base(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8numberzzz9_ae6d52cb434c6eef372ef064852038f8a}{Qore\+::zzz8numberzzz9\+::to\+Base(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_a138a6d9c7f0c10546c96a875bc29d242}{Qore\+::zzz8floatzzz9\+::to\+Base(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a3ef4fe2f9389f29e7c53e2cfc4217a97}{Qore\+::zzz8valuezzz9\+::complex\+Type()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a74179a71cd4d02fd8367d469df86edfc}{Qore\+::zzz8valuezzz9\+::full\+Type()}}
\end{DoxyItemize}
\item new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__hmac__functions_gad159aa97f0f07e827e74b4b9a12b92ca}{Qore\+::decrypt\+\_\+to\+\_\+binary()}}
\item \mbox{\hyperlink{group__hmac__functions_ga94bc9698c368c32987d7207096806df1}{Qore\+::decrypt\+\_\+to\+\_\+string()}}
\item \mbox{\hyperlink{group__hmac__functions_ga7141b56ffa6c5a4f8c9c58f788f33780}{Qore\+::encrypt()}}
\item \mbox{\hyperlink{group__compresssion__functions_gabdbd68fb7146a0fe2c5c4bb13d481cb8}{Qore\+::get\+\_\+compressor()}}
\item \mbox{\hyperlink{group__hmac__functions_ga23662a1e7f11f483a6e841da96389197}{Qore\+::get\+\_\+crypto\+\_\+info()}}
\item \mbox{\hyperlink{group__compresssion__functions_ga1590535ac15c91dee832b9ffae8fa69f}{Qore\+::get\+\_\+decompressor()}}
\item \mbox{\hyperlink{group__hmac__functions_ga913932d6120f9ea1e3918168fb204976}{Qore\+::get\+\_\+decryptor()}}
\item \mbox{\hyperlink{group__hmac__functions_ga6e67ba0396d70cd012f7c46c7562b81f}{Qore\+::get\+\_\+encryptor()}}
\item \mbox{\hyperlink{group__misc__functions_ga35f238f6343017d7e4736cd2c3007752}{Qore\+::get\+\_\+global\+\_\+vars()}}
\item \mbox{\hyperlink{group__misc__functions_gac3c60c8fa6766bc3e6809468acca8465}{Qore\+::get\+\_\+local\+\_\+vars()}}
\item \mbox{\hyperlink{group__hmac__functions_gaa5fd7a2cd931d0390368d54865602c20}{Qore\+::get\+\_\+random\+\_\+bytes()}}
\item \mbox{\hyperlink{group__threading__functions_gaff3b8af236d59870ff5c6a36c17c4907}{Qore\+::get\+\_\+thread\+\_\+call\+\_\+stack()}}
\item \mbox{\hyperlink{group__string__functions_gac63ded32a4a0217e954935848210808e}{Qore\+::parse\+\_\+int()}}
\item \mbox{\hyperlink{group__misc__functions_gaea05595c0ea4cf4affef51c323c7eed1}{Qore\+::set\+\_\+global\+\_\+var\+\_\+value()}}
\item \mbox{\hyperlink{group__misc__functions_ga20e0c1f20a6afc4b02dbd9862996d57a}{Qore\+::set\+\_\+local\+\_\+var\+\_\+value()}}
\end{DoxyItemize}
\item updated functions/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter_a31f5a01212067685e54de06ae29a9984}{Counter\+:\+:dec()}}\+: now returns the current value of the counter
\item \mbox{\hyperlink{group__threading__functions_ga23d27aeac0640b070f964f2eb9f1cc8a}{Qore\+::\+Thread\+::thread\+\_\+yield()}}
\end{DoxyItemize}
\item updated functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__math__functions_gab5e499c271ead1e1dfb44cec71a9254e}{ceil()}}\+: now allows the precision to be specified
\item \mbox{\hyperlink{group__math__functions_gaef0b0eaa3ff1b0535cc4059e3afbdfb5}{floor()}}\+: now allows the precision to be specified
\item \mbox{\hyperlink{group__type__conversion__functions_ga5182bb860e3837e1eb337e85a9b3ebd6}{hash()}}\+: now returns an untyped hash stripped of any key type information
\item \mbox{\hyperlink{group__filesystem__functions_ga834e1f95eb108bd6e4d564daecd68eda}{mkdir()}}\+: now allows parent directories to be created in the same call
\item \mbox{\hyperlink{group__math__functions_ga99beb41177f06433ce9dda9fcfd07ec7}{round()}}\+: now allows the precision to be specified
\item \mbox{\hyperlink{group__threading__functions_gae83c32576b59a1ecfa906d9b3c3af557}{set\+\_\+thread\+\_\+init()}}\+: now allows for thread init code to be removed
\item \mbox{\hyperlink{group__range__functions_ga85798861f6ac3dc0adafaa8db337d8e5}{Qore\+::xrange(int)}} was updated; the second argument was removed to avoid ambiguity with the other overloaded variant
\end{DoxyItemize}
\item module updates\+:
\begin{DoxyItemize}
\item \href{../../modules/BulkSqlUtil/html/index.html}{\tt Bulk\+Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item added complex type support
\item added the {\ttfamily Abstract\+Bulk\+Operation\+::size()} method
\item implemented analytic/window functions\+: new functions \mbox{[}\href{https://github.com/qorelanguage/qore/issues/2203}{\tt issue 2202}\mbox{]}
\item implemented analytic/window functions\+: cop\+\_\+over full support including O\+R\+D\+ER BY \mbox{[}\href{https://github.com/qorelanguage/qore/issues/2203}{\tt issue 2203}\mbox{]}
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module updates\+:
\begin{DoxyItemize}
\item added support for streams
\end{DoxyItemize}
\item \href{../../modules/FixedLengthUtil/html/index.html}{\tt Fixed\+Length\+Util} module updates\+:
\begin{DoxyItemize}
\item added support for streams
\item added {\ttfamily Fixed\+Length\+File\+Iterator\+::get\+File\+Name()} (\href{https://github.com/qorelanguage/qore/issues/1164}{\tt issue 1164})
\item added field as well as global option \char`\"{}truncate\char`\"{} (\href{https://github.com/qorelanguage/qore/issues/1841}{\tt issue 1841})
\item added field as well as global option \char`\"{}tab2space\char`\"{} (\href{https://github.com/qorelanguage/qore/issues/1866}{\tt issue 1866})
\end{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module updates\+:
\begin{DoxyItemize}
\item added a minimal substring of string bodies received to the log message when logging H\+T\+TP requests
\end{DoxyItemize}
\item \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util} module updates\+:
\begin{DoxyItemize}
\item the {\ttfamily parse\+\_\+uri\+\_\+query()} function was moved to the \href{../../modules/Util/html/index.html}{\tt Util} module
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime} module updates\+:
\begin{DoxyItemize}
\item added complex type support
\item added the following constants\+:
\begin{DoxyItemize}
\item {\ttfamily Mime\+Type\+Multipart\+Form\+Data} 
\item {\ttfamily Mime\+Type\+Multipart\+Related} 
\item {\ttfamily Mime\+Type\+Multipart\+Mixed} 
\end{DoxyItemize}
\item added the following methods\+:
\begin{DoxyItemize}
\item {\ttfamily Multipart\+Message\+::get\+Boundary()} 
\item {\ttfamily Multipart\+Message\+::serialize\+Body()} 
\item {\ttfamily Multipart\+Message\+::size()} 
\end{DoxyItemize}
\item fixed a bug parsing multipart messages where unnecessary characters were searched (\href{https://github.com/qorelanguage/qore/issues/2099}{\tt issue 2099})
\end{DoxyItemize}
\item \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Pop3\+Connection} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\end{DoxyItemize}
\item \href{../../modules/Qorize/html/index.html}{\tt Qorize} module updates\+:
\begin{DoxyItemize}
\item {\ttfamily qorize\+\_\+named()} added support for objects
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Rest\+Connection} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\item support for the {\ttfamily text/plain} {\ttfamily Content-\/\+Type} 
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item added support for runtime R\+E\+ST A\+PI validation against a R\+E\+ST schema using the \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator} module
\item added support for Swagger 2.\+0 R\+E\+ST A\+PI validation and {\ttfamily \char`\"{}swagger\char`\"{}} options using the \href{../../modules/Swagger/html/index.html}{\tt Swagger} module in the {\ttfamily Rest\+Client} and {\ttfamily Rest\+Connection} classes
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module updates\+:
\begin{DoxyItemize}
\item added an A\+PI to allow R\+E\+ST calls to be made internally (\href{https://github.com/qorelanguage/qore/issues/1899}{\tt issue 1899})
\item added support for runtime R\+E\+ST A\+PI validation against a R\+E\+ST schema using the \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator} module
\end{DoxyItemize}
\item \href{../../modules/RestSchemaValidator/html/index.html}{\tt Rest\+Schema\+Validator} module\+:
\begin{DoxyItemize}
\item added this new module providing a \href{https://en.wikipedia.org/wiki/Representational_state_transfer}{\tt R\+E\+ST} schema validation A\+PI
\end{DoxyItemize}
\item \href{../../modules/SalesforceRestClient/html/index.html}{\tt Salesforce\+Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Salesforc\+Rest\+Connection} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\end{DoxyItemize}
\item \href{../../modules/Schema/html/index.html}{\tt Schema} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily c\+\_\+blob()} and {\ttfamily c\+\_\+clob()} functions (\href{https://github.com/qorelanguage/qore/issues/1851}{\tt issue 1851})
\end{DoxyItemize}
\item \href{../../modules/SewioRestClient/html/index.html}{\tt Sewio\+Rest\+Client} module\+:
\begin{DoxyItemize}
\item added this new module providing A\+P\+Is for communicating with \href{http://www.sewio.net}{\tt Sewio.\+net}\textquotesingle{}s R\+T\+LS Studio R\+E\+ST A\+PI
\end{DoxyItemize}
\item \href{../../modules/SewioWebSocketClient/html/index.html}{\tt Sewio\+Web\+Socket\+Client} module\+:
\begin{DoxyItemize}
\item added this new module providing A\+P\+Is for communicating with \href{http://www.sewio.net}{\tt Sewio.\+net}\textquotesingle{}s R\+T\+LS Studio Web\+Socket A\+PI
\end{DoxyItemize}
\item \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Smtp\+Connection} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item implemented the {\ttfamily cop\+\_\+trunc\+\_\+date()} function (\href{https://github.com/qorelanguage/qore/issues/2032}{\tt issue 2032})
\end{DoxyItemize}
\item \href{../../modules/Swagger/html/index.html}{\tt Swagger} module added\+:
\begin{DoxyItemize}
\item added this new module providing a \href{https://swagger.io/}{\tt Swagger 2.\+0 R\+E\+ST A\+PI validation A\+PI} to Qore
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module updates\+:
\begin{DoxyItemize}
\item added support for upserts in {\ttfamily Inbound\+Table\+Mapper} (\href{https://github.com/qorelanguage/qore/issues/1067}{\tt issue 1067})
\item added {\ttfamily Inbound\+Table\+Mapper\+::queue\+Data(list)} 
\end{DoxyItemize}
\item \href{../../modules/TelnetClient/html/index.html}{\tt Telnet\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Telnet\+Connection} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\item added support for U\+R\+Ls in the constructor()
\item added the {\ttfamily Telnet\+Client\+::get\+Target()} method
\end{DoxyItemize}
\item \href{../../modules/Util/html/index.html}{\tt Util} module updates\+:
\begin{DoxyItemize}
\item the {\ttfamily parse\+\_\+uri\+\_\+query()} function was moved here from the \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util} module
\item {\ttfamily parse\+\_\+uri\+\_\+query()} now handles repeated query arguments as a list
\item added public function {\ttfamily flatten()} 
\item added public function {\ttfamily uniq()} 
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily Web\+Socket\+Connection\+Object} class to support the \href{../../ConnectionProvider/html/index.html}{\tt Connection\+Provider} module
\item updated for complex types
\item fixed a bug where the event loop thread would immediately terminate after a reconnection (\href{https://github.com/qorelanguage/qore/issues/2061}{\tt issue 2061})
\item improved client logging
\item fixed a bug where the {\ttfamily Web\+Socket\+Client} class did not validate the {\ttfamily Sec-\/\+Web\+Socket-\/\+Accept} response header according to R\+F\+C6455 (\href{https://github.com/qorelanguage/qore/issues/2062}{\tt issue 2062})
\end{DoxyItemize}
\item \href{../../modules/WebSocketUtil/html/index.html}{\tt Web\+Socket\+Util} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily ws\+\_\+get\+\_\+response\+\_\+key()} function
\end{DoxyItemize}
\end{DoxyItemize}
\item the following classes can be used from binary modules\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_file}{File}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file}{Read\+Only\+File}}
\end{DoxyItemize}
\item updated the build to require a \href{https://en.wikipedia.org/wiki/C%2B%2B11}{\tt C++11} compiler or better to build Qore (\href{https://github.com/qorelanguage/qore/issues/994}{\tt issue 994})
\item a relative time stamp is now logged in trace and debug output
\end{DoxyItemize}\hypertarget{release_notes_qore_0813_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0813_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug causing \mbox{\hyperlink{class_qore_1_1_abstract_quantified_bidirectional_iterator}{Abstract\+Quantified\+Bidirectional\+Iterator}} not being available (\href{https://github.com/qorelanguage/qore/issues/968}{\tt issue 968})
\item \href{../../modules/BulkSqlUtil/html/index.html}{\tt Bulk\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed the module to work properly even with DB drivers that do not support parameter array binding (\href{https://github.com/qorelanguage/qore/issues/1154}{\tt issue 1154})
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in an error message validating input data (\href{https://github.com/qorelanguage/qore/issues/1062}{\tt issue 1062})
\item added an exception when detected headers do not match the {\itshape fields} option (\href{https://github.com/qorelanguage/qore/issues/2179}{\tt issue 2179})
\end{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module fixes\+:
\begin{DoxyItemize}
\item added logic to attempt to mask passwords in log messages (\href{https://github.com/qorelanguage/qore/issues/1086}{\tt issue 1086})
\end{DoxyItemize}
\item \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where the {\itshape msg} arg to {\ttfamily Abstract\+Authenticator\+::do401()} was ignored (\href{https://github.com/qorelanguage/qore/issues/1047}{\tt issue 1047})
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module fixes\+:
\begin{DoxyItemize}
\item added logic to allow sensitive data to be masked in log messages (\href{https://github.com/qorelanguage/qore/issues/1086}{\tt issue 1086})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item 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 (\href{https://github.com/qorelanguage/qore/issues/1013}{\tt issue 1013})
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client} module fixes\+:
\begin{DoxyItemize}
\item fixed a thread lock starvation race condition (\href{https://github.com/qorelanguage/qore/issues/2130}{\tt issue 2130})
\end{DoxyItemize}
\item {\ttfamily U\+T\+F-\/16} fixes\+:
\begin{DoxyItemize}
\item fixed a bug comparing strings in {\ttfamily U\+T\+F-\/16} encodings (\href{https://github.com/qorelanguage/qore/issues/1579}{\tt issue 1579})
\item fixed \mbox{\hyperlink{group__string__functions_gafe621446ada382d5b086a1d2a20934c9}{Qore\+::substr()}} and \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ab5ad54b1fe38b46ee071e55563d9d245}{Qore\+::zzz8stringzzz9\+::substr()}} with strings in {\ttfamily U\+T\+F-\/16} encodings (\href{https://github.com/qorelanguage/qore/issues/1586}{\tt issue 1586})
\item fixed \mbox{\hyperlink{group__string__functions_gae8d314e819a299d46d181696600d4293}{Qore\+::trim()}}, \mbox{\hyperlink{group__string__functions_gaa3c396510f9d106aee5161cbb144e163}{Qore\+::ltrim()}}, \mbox{\hyperlink{group__string__functions_ga25264bfb9950ac66862db9b4a32eeee8}{Qore\+::rtrim()}} and the \mbox{\hyperlink{operators_trim}{trim}} operator with strings with {\ttfamily U\+T\+F-\/16} encodings (\href{https://github.com/qorelanguage/qore/issues/1775}{\tt issue 1775})
\end{DoxyItemize}
\item fixed a bug where \mbox{\hyperlink{statements_break}{break}} and \mbox{\hyperlink{statements_continue}{continue}} statements were accepted outside of loops (\href{https://github.com/qorelanguage/qore/issues/976}{\tt issue 976})
\item fixed a bug compiling on Solaris S\+P\+A\+RC with g++ where {\ttfamily M\+P\+F\+R\+\_\+\+D\+E\+C\+L\+\_\+\+I\+N\+I\+T()} is compiled incorrectly with -\/\+O1 or greater (\href{https://github.com/qorelanguage/qore/issues/958}{\tt issue 958})
\item fixed a bug causing an infinite loop in decompression functions (\href{https://github.com/qorelanguage/qore/issues/966}{\tt issue 966})
\item fixed an issue where an internal C++ A\+PI (Qore\+Program\+::parse\+Cmd\+Line\+Defines()) performed a needless copy of a data structure (\href{https://github.com/qorelanguage/qore/issues/1099}{\tt issue 1099})
\item fixed a stack corruption bug with asynchronous I/O on U\+N\+IX systems with \mbox{\hyperlink{class_qore_1_1_read_only_file}{Read\+Only\+File}} methods (\href{https://github.com/qorelanguage/qore/issues/1106}{\tt issue 1106})
\item fixed bugs with inconsistent conversions of \mbox{\hyperlink{data_type_declarations_int_type}{int}}, \mbox{\hyperlink{data_type_declarations_float_type}{float}}, and \mbox{\hyperlink{data_type_declarations_bool_type}{boolean}} values to date/time values, now they are all converted uniformly to \mbox{\hyperlink{basic_data_types_relative_dates}{relative date/time values}} (\href{https://github.com/qorelanguage/qore/issues/1156}{\tt issue 1156})
\item fixed a bug where \mbox{\hyperlink{namespace_qore}{Qore}} allowed code to be declared both public and private without a warning (\href{https://github.com/qorelanguage/qore/issues/1187}{\tt issue 1187})
\item fixed a bug where the \mbox{\hyperlink{operators_instanceof}{instanceof}} operator would return \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} with objects that did not publically inherit the given class or where the given class is not accessible (\href{https://github.com/qorelanguage/qore/issues/1191}{\tt issue 1191})
\item fixed a bug in qpp support of the \textquotesingle{}final\textquotesingle{} class flag (\href{https://github.com/qorelanguage/qore/issues/1222}{\tt issue 1222})
\item fixed a bug where the \mbox{\hyperlink{operators_plus_operator}{+ operator}} provided access to private members from outside the class (\href{https://github.com/qorelanguage/qore/issues/1209}{\tt issue 1209})
\item fixed a bug where different \mbox{\hyperlink{overloading}{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 (\href{https://github.com/qorelanguage/qore/issues/1229}{\tt issue 1229})
\item fixed a bug where exceptions in base class constructor calls did not reflect the actual source location (\href{https://github.com/qorelanguage/qore/issues/1230}{\tt issue 1230})
\item fixed a bug where runtime function/method variant matching was incorrectly biased towards default matches for missing arguments (\href{https://github.com/qorelanguage/qore/issues/1231}{\tt issue 1231})
\item fixed bugs where calls to \mbox{\hyperlink{class_qore_1_1_socket_ad471f7399655c3fb211c72b55ca568d9}{Socket\+:\+:upgrade\+Client\+To\+S\+SL()}} and \mbox{\hyperlink{class_qore_1_1_socket_a83385d31d5b112409424269f025de5ea}{Socket\+:\+:upgrade\+Server\+To\+S\+SL()}} were ignored with no exception thrown if the socket was not connected (\href{https://github.com/qorelanguage/qore/issues/1258}{\tt issue 1258})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/1303}{\tt issue 1303})
\item fixed a bug where \mbox{\hyperlink{group__string__functions_gab1aedfc4b3b7aed6dffead7e46c72b07}{ord()}} would return negative numbers for bytes with the high bit set with compilers where {\ttfamily char} is the same as {\ttfamily signed char} (\href{https://github.com/qorelanguage/qore/issues/1385}{\tt issue 1385})
\item fixed a bug where \mbox{\hyperlink{group__type__conversion__functions_gaedc7dfca9a2bab4770135bb01a34b63c}{int(number)}} returned rounded value instead of the integer part (while \mbox{\hyperlink{group__type__conversion__functions_gaedc7dfca9a2bab4770135bb01a34b63c}{int(float)}} behaved correctly; also cf. initializing a softint value from a number vs. from a float) (\href{https://github.com/qorelanguage/qore/issues/1463}{\tt issue 1463})
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_ac4475042a820d3d303b1b67f3921e728}{File\+:\+:read()}} now uses character semantics for the length argument (\href{https://github.com/qorelanguage/qore/issues/1548}{\tt issue 1548})
\item fixed a bug with strongly-\/typed lvalue assignments with classes created in different \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects (\href{https://github.com/qorelanguage/qore/issues/1551}{\tt issue 1551})
\item fixed a bug where an A\+S\+C\+II string and the same string in a different encoding and with diacritics could incorrectly be marked as equal (\href{https://github.com/qorelanguage/qore/issues/1579}{\tt issue 1579})
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} methods where string message bodies were not converted to the object\textquotesingle{}s \mbox{\hyperlink{character_encoding}{character encoding}} before transmission (\href{https://github.com/qorelanguage/qore/issues/1813}{\tt issue 1813})
\item fixed a bug in the \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} assignment restrictions; previously any value was accepted, now only references are accepted as the initial assignment values (\href{https://github.com/qorelanguage/qore/issues/1819}{\tt issue 1819})
\item fixed a bug in handling the {\ttfamily Sql\+Util\+::\+B\+L\+OB} type in the \href{../../modules/FreetdsSqlUtil/html/index.html}{\tt Freetds\+Sql\+Util} module (\href{https://github.com/qorelanguage/qore/issues/1852}{\tt issue 1852})
\item fixed a bug in overloaded call variant matching where missing arguments were counted towards the match (\href{https://github.com/qorelanguage/qore/issues/1897}{\tt issue 1897})
\item 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 (\href{https://github.com/qorelanguage/qore/issues/1930}{\tt issue 1930})
\item fixed a bug where code signatures would accept parameter variables without {\ttfamily \char`\"{}\$\char`\"{}} signs even when \mbox{\hyperlink{parse_directives_allow-bare-refs}{\%allow-\/bare-\/refs}} was not in effect (\href{https://github.com/qorelanguage/qore/issues/1941}{\tt issue 1941})
\item fixed memory leaks in the scanner related to E\+OF conditions (\href{https://github.com/qorelanguage/qore/issues/1976}{\tt issue 1976})
\item rewrote Qore functions \mbox{\hyperlink{group__library__functions_gaa4ca4c902bdebd8b368fb2ae00bf76b2}{gethostbyname()}}, \mbox{\hyperlink{group__library__functions_ga9caff22e82dc2d3e0d13ecd19d398470}{gethostbyname\+\_\+long()}} and \mbox{\hyperlink{group__library__functions_gabf75d8247386c90c83583f6cd6909e1b}{gethostbyaddr()}} to use standard C functions {\ttfamily getaddrinfo(3)} and {\ttfamily getnameinfo(3)} internally instead of the deprecated {\ttfamily gethostbyname(3)} and {\ttfamily gethostbyaddr(3)} (\href{https://github.com/qorelanguage/qore/issues/1952}{\tt issue 1952})
\item fixed cmake builds on Darwin (\href{https://github.com/qorelanguage/qore/issues/1980}{\tt issue 1980})
\item fixed a bug where immediate date-\/time values were not marked with their type at parse time (\href{https://github.com/qorelanguage/qore/issues/2001}{\tt issue 2001})
\item fixed a bug where the \mbox{\hyperlink{data_type_declarations_data_or_nothing_type}{$\ast$data}} type restriction would allow all types to be assigned at runtime (\href{https://github.com/qorelanguage/qore/issues/2002}{\tt issue 2002})
\item \mbox{\hyperlink{class_qore_1_1_range_iterator_acdcab14b075fb022dfd4a221c3ddf1ab}{Qore\+::\+Range\+Iterator\+::constructor(int)}} and \mbox{\hyperlink{group__range__functions_ga85798861f6ac3dc0adafaa8db337d8e5}{Qore\+::xrange(int)}} were updated; the second arguments were removed to avoid ambiguity with the other overloaded variants (\href{https://github.com/qorelanguage/qore/issues/2016}{\tt issue 2016})
\item fixed a bug where \mbox{\hyperlink{group__string__functions_ga757f5b4682cb6787e7e186ddcc2b2b56}{Qore\+::replace()}} could get in an infinite loop with arguments with embededed nulls (\href{https://github.com/qorelanguage/qore/issues/2098}{\tt issue 2098})
\item fixed a bug in regular expression extraction where an infinite loop could occur (\href{https://github.com/qorelanguage/qore/issues/2083}{\tt issue 2083})
\item fixed a bug where a call reference to an object method that crosses \mbox{\hyperlink{class_qore_1_1_program}{Program}} boundaries could result in a core dump when called due to an error managing thread-\/local data (\href{https://github.com/qorelanguage/qore/issues/2145}{\tt issue 2145})
\item fixed crashes in scanner due to E\+OF in comments (\href{https://github.com/qorelanguage/qore/issues/2175}{\tt issue 2175})
\end{DoxyItemize}\hypertarget{release_notes_qore_081212}{}\section{Qore 0.\+8.\+12.\+12}\label{release_notes_qore_081212}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_081212_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_081212_new_features}

\begin{DoxyItemize}
\item added the \mbox{\hyperlink{group__option__constants_gafdc62dff75931ccafe0a105e62bb1d05}{H\+A\+V\+E\+\_\+\+D\+SS}} constant to indicate if the outdated \mbox{\hyperlink{group__digest__functions_gab75d2872586f27999e85b7ed990f6dad}{D\+S\+S()}}, \mbox{\hyperlink{group__digest__functions_ga418f6b8eb4acc61b72a3a600d418a1b6}{D\+S\+S1()}}, \mbox{\hyperlink{group__digest__functions_ga20bcfd88e83ae5c08af1d4ef5b6a10c7}{D\+S\+S\+\_\+bin()}}, \mbox{\hyperlink{group__digest__functions_gad7149067899176a4910c1aff7f8c3157}{D\+S\+S1\+\_\+bin()}}, D\+S\+S\+\_\+\+H\+M\+A\+C(), and D\+S\+S1\+\_\+\+H\+M\+A\+C() functions are available in the opnessl library used to compile Qore
\end{DoxyItemize}\hypertarget{release_notes_qore_081212_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_081212_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug handling {\ttfamily argv} in base class constructor execution (\href{https://github.com/qorelanguage/qore/issues/2030}{\tt issue 2030})
\item fixed a bug handling the connection status in the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class (\href{https://github.com/qorelanguage/qore/issues/2058}{\tt issue 2058})
\item fixed building with openssl 1.\+1+ (\href{https://github.com/qorelanguage/qore/issues/2135}{\tt issue 2135})
\item fixed binding more than one wilcard port on a specific address in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module (\href{https://github.com/qorelanguage/qore/issues/2155}{\tt issue 2155})
\item fixed a bug in \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} with column aliases that are reserved words (\href{https://github.com/qorelanguage/qore/issues/2163}{\tt issue 2163})
\item fixed a memory bug in the \mbox{\hyperlink{operators_splice}{splice}} operator with a binary operand (\href{https://github.com/qorelanguage/qore/issues/2303}{\tt issue 2303})
\item fixed a bug where calling any \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} method in another thread with an active connection from a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} causes a crash (\href{https://github.com/qorelanguage/qore/issues/2334}{\tt issue 2334})
\item fixed a bug in \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} regarding inconsistent handling of U\+RI parameter arguments; the {\ttfamily \char`\"{}action\char`\"{}} key was only removed from the {\ttfamily ah} hash when there were no other arguments, introducing an inconsistency in argument handling in R\+E\+ST services (\href{https://github.com/qorelanguage/qore/issues/2479}{\tt issue 2479})
\item fixed a bug where {\ttfamily E\+N\+C\+O\+D\+I\+N\+G-\/\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N-\/\+E\+R\+R\+OR} exceptions were not thrown with newer G\+NU iconv libraries with an A\+PI change (\href{https://github.com/qorelanguage/qore/issues/2500}{\tt issue 2500})
\end{DoxyItemize}\hypertarget{release_notes_qore_081211}{}\section{Qore 0.\+8.\+12.\+11}\label{release_notes_qore_081211}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_081211_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_081211_new_features}

\begin{DoxyItemize}
\item \href{https://github.com/qorelanguage/qore/issues/1947}{\tt issue 1947} added \mbox{\hyperlink{warnings_warning-broken-logic-precedence}{broken-\/logic-\/precedence}} warning.
\end{DoxyItemize}\hypertarget{release_notes_qore_081211_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_081211_bug_fixes}

\begin{DoxyItemize}
\item 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 (\href{https://github.com/qorelanguage/qore/issues/50}{\tt issue 50})
\item fixed a crashing bug where \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a7713f26c809821a7942a60e27f924742}{Datasource\+:\+:get\+Config\+String()}} was called without a connection, also could crash in an implicit internal call to this method with the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} class when connections were lost and the warning callback should be called (\href{https://github.com/qorelanguage/qore/issues/1992}{\tt issue 1992})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a68c63cda68bd98860f332e6335e7a642}{Datasource\+:\+:get\+Config\+Hash()}} returned different values depending on if the object was connected or not (\href{https://github.com/qorelanguage/qore/issues/1994}{\tt issue 1994})
\end{DoxyItemize}\hypertarget{release_notes_qore_081210}{}\section{Qore 0.\+8.\+12.\+10}\label{release_notes_qore_081210}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_081210_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_081210_bug_fixes}

\begin{DoxyItemize}
\item module fixes\+:
\begin{DoxyItemize}
\item \href{../../modules/FixedLengthUtil/html/index.html}{\tt Fixed\+Length\+Util}\+:
\begin{DoxyItemize}
\item fixes and improvements to errors and exceptions (\href{https://github.com/qorelanguage/qore/issues/1828}{\tt issue 1828})
\end{DoxyItemize}
\item \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util}\+:
\begin{DoxyItemize}
\item eliminated excess logging of all H\+T\+TP chunks sent and received (\href{https://github.com/qorelanguage/qore/issues/1832}{\tt issue 1832})
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util}\+:
\begin{DoxyItemize}
\item fixed a bug in setting a {\ttfamily comment} for a table column (\href{https://github.com/qorelanguage/qore/issues/1886}{\tt issue 1886})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}\+:
\begin{DoxyItemize}
\item fixed a bug in the {\ttfamily offset} query hash argument in S\+QL operation methods (\href{https://github.com/qorelanguage/qore/issues/1880}{\tt issue 1880})
\item fixed a bug that prohibited only columns from the main query to be selected when joins are used (\href{https://github.com/qorelanguage/qore/issues/1909}{\tt issue 1909})
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper}\+:
\begin{DoxyItemize}
\item fixed a bug in flush messages in the {\ttfamily Inbound\+Table\+Mapper} class (\href{https://github.com/qorelanguage/qore/issues/1849}{\tt issue 1849})
\end{DoxyItemize}
\end{DoxyItemize}
\item 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 (\href{https://github.com/qorelanguage/qore/issues/1928}{\tt issue 1928})
\item fixed the process return code in the output reference in \mbox{\hyperlink{group__misc__functions_gaee11d366f841cd34c9aa6ac8c7c49577}{backquote()}} on Unix/\+Linux platforms (\href{https://github.com/qorelanguage/qore/issues/1884}{\tt issue 1884})
\item fixed a bug where connections were not immediately released back to the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} in case of an {\ttfamily S\+Q\+L\+S\+T\+A\+T\+E\+M\+E\+N\+T-\/\+E\+R\+R\+OR} exception (\href{https://github.com/qorelanguage/qore/issues/1836}{\tt issue 1836})
\item eliminated a spurious exception in the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} class in case of a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} timeout (\href{https://github.com/qorelanguage/qore/issues/1832}{\tt issue 1832})
\item fixed a crash when the incorrect type was passed to a parameter declared \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} (\href{https://github.com/qorelanguage/qore/issues/1815}{\tt issue 1815})
\item fixed a crash when the Qore library exits caused by an error in handling module dependencies with injected modules (\href{https://github.com/qorelanguage/qore/issues/1805}{\tt issue 1805})
\item fixed segfault crashes caused by calling object methods with null pointers (\href{https://github.com/qorelanguage/qore/issues/1791}{\tt issue 1791})
\item added internal A\+PI support to make it easier for D\+BI drivers to handle lost connections and to allow D\+BI drivers that must close all open handles before a connection is closed (such as the oracle driver); due to this change, \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} objects based on a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} are closed automatically whenever the datasource is returned to the pool (\href{https://github.com/qorelanguage/qore/issues/1250}{\tt issue 1250})
\item implemented new parse options to revert the effect of parse options that affect code safety (\href{https://github.com/qorelanguage/qore/issues/1895}{\tt issue 1895})\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{parse_directives_correct-list-parsing}{\%correct-\/list-\/parsing}}
\item \mbox{\hyperlink{parse_directives_correct-logic-precedence}{\%correct-\/logic-\/precedence}}
\item \mbox{\hyperlink{parse_directives_correct-int-assignments}{\%correct-\/int-\/assignments}}
\item \mbox{\hyperlink{parse_directives_correct-operators}{\%correct-\/operators}}
\item \mbox{\hyperlink{parse_directives_loose-args}{\%loose-\/args}}
\end{DoxyItemize}
\item fixed parse locations of strings and regexes (\href{https://github.com/qorelanguage/qore/issues/1905}{\tt issue 1905})
\end{DoxyItemize}\hypertarget{release_notes_qore_08129}{}\section{Qore 0.\+8.\+12.\+9}\label{release_notes_qore_08129}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08129_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08129_bug_fixes}

\begin{DoxyItemize}
\item fixed a memory leak where references participate in recursive references (\href{https://github.com/qorelanguage/qore/issues/1774}{\tt issue 1774})
\item fixed a build issue with clang++ (\href{https://github.com/qorelanguage/qore/issues/1768}{\tt issue 1768})
\item fixed a memory leak in the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} copy constructor when the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} was used in other objects (such as an event queue, etc; \href{https://github.com/qorelanguage/qore/issues/1749}{\tt issue 1749})
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper} module fixes\+:
\begin{DoxyItemize}
\item fixed bugs handling the {\ttfamily allow\+\_\+dot} and {\ttfamily allow\+\_\+output\+\_\+dot} options (\href{https://github.com/qorelanguage/qore/issues/1690}{\tt issue 1690})
\item fixed {\ttfamily Table\+Mapper} bugs introduced in \mbox{\hyperlink{namespace_qore}{Qore}} 0.\+8.\+12.\+7 (\href{https://github.com/qorelanguage/qore/issues/1754}{\tt issue 1754})
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08128}{}\section{Qore 0.\+8.\+12.\+8}\label{release_notes_qore_08128}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08128_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08128_bug_fixes}

\begin{DoxyItemize}
\item fixed a memory leak in \mbox{\hyperlink{parse_directives_try-module}{\%try-\/module}} error handling (\href{https://github.com/qorelanguage/qore/issues/1690}{\tt issue 1690})
\item fixed a bug in \mbox{\hyperlink{group__string__functions_ga49c6b104180fd40bb21d164773df1f4b}{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 (\href{https://github.com/qorelanguage/qore/issues/1693}{\tt issue 1693})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_read_only_file_ab6946821b81fc2b9b4f07ef27ebacd45}{Read\+Only\+File\+:\+:getchar()}} did not respect character semantics as documented (\href{https://github.com/qorelanguage/qore/issues/1547}{\tt issue 1547})
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in {\ttfamily character\+\_\+semantics} for standalone column (\href{https://github.com/qorelanguage/qore/issues/1688}{\tt issue 1688})
\end{DoxyItemize}
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in handling \char`\"{}list mode\char`\"{} data such as submitted by {\ttfamily Inbound\+Table\+Mapper\+::queue\+Data()} (\href{https://github.com/qorelanguage/qore/issues/1736}{\tt issue 1736}, bug introduced in \mbox{\hyperlink{namespace_qore}{Qore}} 0.\+8.\+12.\+7 with the fix for \href{https://github.com/qorelanguage/qore/issues/1626}{\tt issue 1626})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed schema alignment skipping column with name \char`\"{}driver\char`\"{} (\href{https://github.com/qorelanguage/qore/issues/1684}{\tt issue 1684})
\item fixed sqlutil schema management\+: functional indexes are rejected without () in name (\href{https://github.com/qorelanguage/qore/issues/1610}{\tt issue 1610})
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in handling \char`\"{}list mode\char`\"{} data with optimized inserts (\href{https://github.com/qorelanguage/qore/issues/1736}{\tt issue 1736}, bug introduced in \mbox{\hyperlink{namespace_qore}{Qore}} 0.\+8.\+12.\+7 with the fix for \href{https://github.com/qorelanguage/qore/issues/1626}{\tt issue 1626})
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client} module fixes\+:
\begin{DoxyItemize}
\item added timeout values to \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} and \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} calls (\href{https://github.com/qorelanguage/qore/issues/1725}{\tt issue 1725})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler} module fixes\+:
\begin{DoxyItemize}
\item added timeout values to \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} calls (\href{https://github.com/qorelanguage/qore/issues/1725}{\tt issue 1725})
\end{DoxyItemize}
\item \href{../../modules/WebSocketUtil/html/index.html}{\tt Web\+Socket\+Util} module fixes\+:
\begin{DoxyItemize}
\item added timeout values to \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} calls (\href{https://github.com/qorelanguage/qore/issues/1725}{\tt issue 1725})
\end{DoxyItemize}
\item fixed a bug where a type conversion error in an lvalue assignment could generate a confusing unrelated runtime exception (\href{https://github.com/qorelanguage/qore/issues/1697}{\tt issue 1697})
\item fixed a bug where invalid characters in the port specification in a U\+RL were ignored (\href{https://github.com/qorelanguage/qore/issues/1728}{\tt issue 1728})
\item fixed a bug with S\+SL socket communication the remote closing the connection during a send operation could cause the current thread to go into an infinite loop consuming 100\% C\+PU (\href{https://github.com/qorelanguage/qore/issues/1729}{\tt issue 1729})
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_hash_list_iterator}{Hash\+List\+Iterator}} class iterating hashes with a mix of lists and single values such as used by bulk D\+ML 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 (\href{https://github.com/qorelanguage/qore/issues/1738}{\tt issue 1738})
\end{DoxyItemize}\hypertarget{release_notes_qore_08127}{}\section{Qore 0.\+8.\+12.\+7}\label{release_notes_qore_08127}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08127_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08127_bug_fixes}

\begin{DoxyItemize}
\item fixed bug in internal string generation with {\ttfamily size\+\_\+t} arguments that could cause invalid data to be output or crashes on 32-\/bit platforms (\href{https://github.com/qorelanguage/qore/issues/1640}{\tt issue 1640})
\item fixed a runtime memory leak and invalid runtime behavior with undetected recursive lvalue references (\href{https://github.com/qorelanguage/qore/issues/1617}{\tt issue 1617})
\item improved \mbox{\hyperlink{container_data_types_garbage_collection}{prompt collection}} performance with large graphs of objects by eliminating additional unnecessary graph scans, resulting in further large performance improvements in the garbage collector (\href{https://github.com/qorelanguage/qore/issues/1363}{\tt issue 1363})
\item improved {\ttfamily Inbound\+Table\+Mapper\+::queue\+Data()} performance (in the \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module) when used with data in hash of lists format to use bulk D\+ML in input and output without internal data conversions (\href{https://github.com/qorelanguage/qore/issues/1626}{\tt issue 1626})
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item worked around {\ttfamily O\+R\+A-\/22165} from {\ttfamily op\+\_\+in()} caused by Oracle\textquotesingle{}s limit on number of collection elements (\href{https://github.com/qorelanguage/qore/issues/1660}{\tt issue 1660})
\item fixed a bug in the {\itshape force} option (i.\+e. cascade) for dropping types (\href{https://github.com/qorelanguage/qore/issues/1683}{\tt issue 1683})
\end{DoxyItemize}
\item improved \mbox{\hyperlink{parse_directives_try-module}{\%try-\/module}} error reporting and documentation (\href{https://github.com/qorelanguage/qore/issues/1648}{\tt issue 1648})
\end{DoxyItemize}\hypertarget{release_notes_qore_08126}{}\section{Qore 0.\+8.\+12.\+6}\label{release_notes_qore_08126}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08126_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08126_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug in \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{Qore\+::parse\+\_\+url()}} parsing single-\/character hostnames (\href{https://github.com/qorelanguage/qore/issues/1524}{\tt issue 1524})
\item fixed a bug where \mbox{\hyperlink{group__parse__options_ga32ca9503dd181920af97c058d9bd1164}{P\+O\+\_\+\+L\+O\+C\+K\+D\+O\+WN}} was not set when parsing {\ttfamily init} and {\ttfamily del} attributes in \mbox{\hyperlink{qore_modules_user_modules}{user module}} headers (\href{https://github.com/qorelanguage/qore/issues/1535}{\tt issue 1535})
\item fixed a bug parsing exception catch block parameter errors (in debug builds only; \href{https://github.com/qorelanguage/qore/issues/1558}{\tt issue 1558})
\item fixed a bug dereferencing \mbox{\hyperlink{basic_data_types_binary}{binary values}} with the \mbox{\hyperlink{operators_list_element_operator}{\mbox{[}\mbox{]} operator}}; the behavior now corresponds to the documentation (\href{https://github.com/qorelanguage/qore/issues/1566}{\tt issue 1566})
\item fixed a bug that would result in a crash if a method were declared both {\ttfamily static} and {\ttfamily abstract} (\href{https://github.com/qorelanguage/qore/issues/1590}{\tt issue 1590})
\item fixed performance issues with the \href{../../modules/Mapper/html/index.html}{\tt Mapper} module (and by extension the \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module) for mappers with many identity (i.\+e. 1\+:1) and constant mappings (\href{https://github.com/qorelanguage/qore/issues/1620}{\tt issue 1620})
\item fixed a bug in the {\ttfamily Bulk\+Insert\+Operation} class in the \href{../../modules/BulkSqlUtil/html/index.html}{\tt Bulk\+Sql\+Util} module where inserts would fail or silently insert invalid data in the second or later blocks when constant hashes were used (\href{https://github.com/qorelanguage/qore/issues/1625}{\tt issue 1625})
\end{DoxyItemize}\hypertarget{release_notes_qore_08125}{}\section{Qore 0.\+8.\+12.\+5}\label{release_notes_qore_08125}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08125_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_08125_new_features}

\begin{DoxyItemize}
\item added the \href{../../modules/SalesforceRestClient/html/index.html}{\tt Salesforce\+Rest\+Client} module for communicating with Salesforce.\+com using the R\+E\+ST A\+P\+Is
\item module \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}
\begin{DoxyItemize}
\item has support for native default values in tables (\href{https://github.com/qorelanguage/qore/issues/1428}{\tt issue 1428})
\item has support for Oracle named types (eg. spatial types) for Schema.\+qm and Schema\+Reverse.\+qm. (\href{https://github.com/qorelanguage/qore/issues/1465}{\tt issue 1465})
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_08125_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08125_bug_fixes}

\begin{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime} module\+:
\begin{DoxyItemize}
\item added support for U\+RL form-\/encoded messages (\href{https://github.com/qorelanguage/qore/issues/1436}{\tt issue 1436}
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module\+:
\begin{DoxyItemize}
\item added support for U\+RL form-\/encoded messages (\href{https://github.com/qorelanguage/qore/issues/1436}{\tt issue 1436}
\item added support for the {\ttfamily \char`\"{}rawxml\char`\"{}} message body encoding (\href{https://github.com/qorelanguage/qore/issues/1437}{\tt issue 1437}
\end{DoxyItemize}
\item fixed handling of invalid compressed data in the following functions (\href{https://github.com/qorelanguage/qore/issues/1432}{\tt issue 1432})\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__compresssion__functions_gae3d26c1886e243d300d5d7ca1686ba9e}{Qore\+::gunzip\+\_\+to\+\_\+binary()}}
\item \mbox{\hyperlink{group__compresssion__functions_ga5684efdbe38373331255d4984ef13c9d}{Qore\+::gunzip\+\_\+to\+\_\+string()}}
\item \mbox{\hyperlink{group__compresssion__functions_gad1fe94d17de0489667c6909b88c01d43}{Qore\+::uncompress\+\_\+to\+\_\+binary()}}
\item \mbox{\hyperlink{group__compresssion__functions_ga873701e40ef6eb9831c9cf66fc8cd981}{Qore\+::uncompress\+\_\+to\+\_\+string()}}
\end{DoxyItemize}
\item fixed {\ttfamily @inf@} on Windows (\href{https://github.com/qorelanguage/qore/issues/1442}{\tt issue 1442})
\item fixed \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{Qore\+::parse\+\_\+url()}} with single-\/character usernames (\href{https://github.com/qorelanguage/qore/issues/1455}{\tt issue 1455})
\item corrected the error message with S\+SL reads when the server closes the connection prematurely (\href{https://github.com/qorelanguage/qore/issues/1488}{\tt issue 1488})
\item fixed the {\ttfamily Host} header in H\+T\+TP 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 (\href{https://github.com/qorelanguage/qore/issues/1489}{\tt issue 1489})
\end{DoxyItemize}\hypertarget{release_notes_qore_08124}{}\section{Qore 0.\+8.\+12.\+4}\label{release_notes_qore_08124}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08124_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08124_bug_fixes}

\begin{DoxyItemize}
\item fixed a reference bug in the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} class introduced in the last release (\href{https://github.com/qorelanguage/qore/issues/1309}{\tt issue 1309})
\item fixed a bug where database types could not be correctly aligned if they had dependencies (\href{https://github.com/qorelanguage/qore/issues/1314}{\tt issue 1314}); entailed updates in the following modules\+:
\begin{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}
\item \href{../../modules/FreetdsSqlUtil/html/index.html}{\tt Freetds\+Sql\+Util}
\item \href{../../modules/MysqlSqlUtil/html/index.html}{\tt Mysql\+Sql\+Util}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util}
\item \href{../../modules/Schema/html/index.html}{\tt Schema}
\end{DoxyItemize}
\item fixed a bug in \mbox{\hyperlink{group__string__functions_ga49c6b104180fd40bb21d164773df1f4b}{trunc\+\_\+str()}} where an infinite loop could be triggered with certain arguments and multi-\/byte character encodings (\href{https://github.com/qorelanguage/qore/issues/1327}{\tt issue 1327})
\item improved \mbox{\hyperlink{container_data_types_garbage_collection}{prompt collection}} performance with larger graphs of objects by eliminating unnecessary graph scans made during object method calls (\href{https://github.com/qorelanguage/qore/issues/1363}{\tt issue 1363})
\item fixed bugs in \mbox{\hyperlink{group__date__and__time__functions_ga835071f44cebd259e52045a822009cac}{date(string)}} and \mbox{\hyperlink{group__date__and__time__functions_gaa990826f93b4f22f786fcfe431c4886d}{date(string, string)}} where invalid input data was ignored and invalid dates were returned (\href{https://github.com/qorelanguage/qore/issues/1369}{\tt issue 1369})
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module\+:
\begin{DoxyItemize}
\item fixed a bug in {\ttfamily Abstract\+Csv\+Iterator\+::identify\+Type\+Impl()} generating an error message (\href{https://github.com/qorelanguage/qore/issues/1355}{\tt issue 1355})
\end{DoxyItemize}
\item \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module\+:
\begin{DoxyItemize}
\item fixed a bug using the default encoding in {\ttfamily Message\+::attach()} (issue \href{https://github.com/qorelanguage/qore/issues/1352}{\tt issue 1352})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module\+:
\begin{DoxyItemize}
\item fixed the ignored character\+\_\+semantics column option in schema alignmed (\href{https://github.com/qorelanguage/qore/issues/1379}{\tt issue 1379})
\item implemented the {\ttfamily cop\+\_\+length()} column function (\href{https://github.com/qorelanguage/qore/issues/1395}{\tt issue 1395})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module\+:
\begin{DoxyItemize}
\item Oracle\+Package attribute body\+\_\+src is now public to access package bodies
\end{DoxyItemize}
\item \href{../../modules/Qorize/html/index.html}{\tt Qorize} module\+:
\begin{DoxyItemize}
\item Qorize module\+: new qorize\+\_\+val() set of functions; qorize\+\_\+named() introduced; qorize tests
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module\+:
\begin{DoxyItemize}
\item fixed runtime option propagation to {\ttfamily Table\+Mapper\+::\+Sql\+Statement\+Mapper\+Iterator} from {\ttfamily Table\+Mapper\+::\+Abstract\+Sql\+Statement\+Outbound\+Mapper\+::iterator()} (\href{https://github.com/qorelanguage/qore/issues/1418}{\tt issue 1418})
\item fixed Sql\+Statement\+Mapper\+Iterator\+::get\+Count() (\href{https://github.com/qorelanguage/qore/issues/1417}{\tt issue 1417})
\item added the following methods\+:
\begin{DoxyItemize}
\item {\ttfamily Table\+Mapper\+::\+Abstract\+Sql\+Statement\+Outbound\+Mapper\+::get\+Row\+Iterator()} 
\item {\ttfamily Table\+Mapper\+::\+Inbound\+Table\+Mapper\+::iterator()} 
\item {\ttfamily Table\+Mapper\+::\+Inbound\+Table\+Mapper\+Iterator\+::get\+Runtime()} 
\item {\ttfamily Table\+Mapper\+::\+Inbound\+Table\+Mapper\+Iterator\+::replace\+Runtime()} 
\item {\ttfamily Table\+Mapper\+::\+Inbound\+Table\+Mapper\+Iterator\+::set\+Runtime()} 
\item {\ttfamily Table\+Mapper\+::\+Sql\+Statement\+Mapper\+Iterator\+::get\+Runtime()} 
\item {\ttfamily Table\+Mapper\+::\+Sql\+Statement\+Mapper\+Iterator\+::replace\+Runtime()} 
\item {\ttfamily Table\+Mapper\+::\+Sql\+Statement\+Mapper\+Iterator\+::set\+Runtime()} 
\end{DoxyItemize}
\end{DoxyItemize}
\item \href{../../modules/QUnit/html/index.html}{\tt Q\+Unit} module\+:
\begin{DoxyItemize}
\item fixed showing the assertion location when there are test modules on top of Q\+Unit (\href{https://github.com/qorelanguage/qore/issues/1046}{\tt issue 1046})
\end{DoxyItemize}
\item fixed inconsistency between list splice operator and splice function (\href{https://github.com/qorelanguage/qore/issues/1380}{\tt issue 1380})
\end{DoxyItemize}\hypertarget{release_notes_qore_08123}{}\section{Qore 0.\+8.\+12.\+3}\label{release_notes_qore_08123}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08123_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08123_bug_fixes}

\begin{DoxyItemize}
\item fixed the documentation (and DB modules) where \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_a204d8637dc5c072ad5e54d6063c25415}{S\+Q\+L\+Statement\+:\+:fetch\+Columns()}} was inconsistent; now it will return a empty hash when no more rows are available to fetch (\href{https://github.com/qorelanguage/qore/issues/1241}{\tt issue 1241})
\item added I/O timeout support to the \mbox{\hyperlink{class_qore_1_1_ftp_client}{Ftp\+Client}} class (\href{https://github.com/qorelanguage/qore/issues/1252}{\tt issue 1252})
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1_socket_adba4badd712c161df1b2da87e528ecb8}{Socket\+:\+:recv()}} and \mbox{\hyperlink{class_qore_1_1_socket_aa255d1dcfbddb208e80684eebecc800d}{Socket\+:\+:recv\+Binary()}} with {\ttfamily size = 0} where \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} could be returned which is invalid according to the methods\textquotesingle{} declared return types (\href{https://github.com/qorelanguage/qore/issues/1260}{\tt issue 1260})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_ftp_client_a2b06a66db173df6bac61b1af48c7a11c}{Ftp\+Client\+:get()}} would fail with an exception when retrieving an empty file (\href{https://github.com/qorelanguage/qore/issues/1255}{\tt issue 1255})
\item fixed a bug where executing a call reference to a deleted object method would cause a crash (\href{https://github.com/qorelanguage/qore/issues/1268}{\tt issue 1268})
\item fixed a bug where \mbox{\hyperlink{namespace_qore}{Qore}} would allow methods to be called on already deleted objects under certain conditions (\href{https://github.com/qorelanguage/qore/issues/1270}{\tt issue 1270})
\item fixed a bug where calling \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit()}} in a multithreaded program could result in a segmentation fault (\href{https://github.com/qorelanguage/qore/issues/1215}{\tt issue 1215})
\item fixed a bug where \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server\+::add\+Listener()} could not accept a bind on port 0 to mean any random port (\href{https://github.com/qorelanguage/qore/issues/1284}{\tt issue 1284})
\item fixed a race condition in \mbox{\hyperlink{container_data_types_garbage_collection}{prompt collection}} that could lead to a crash (\href{https://github.com/qorelanguage/qore/issues/1084}{\tt issue 1084})
\item fixed a bug clearing \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} event queues when the \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} goes out of scope that could lead to a crash (\href{https://github.com/qorelanguage/qore/issues/1292}{\tt issue 1292})
\item fixed a bug with \mbox{\hyperlink{class_qore_1_1_ftp_client_a49a2e47cde50ae8bbcbca8721199dd16}{Ftp\+Client\+:\+:set\+Warning\+Queue()}} that could cause a crash (\href{https://github.com/qorelanguage/qore/issues/1293}{\tt issue 1293})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_ftp_client_a50427e074d3f14757491ad26295d7e6b}{Qore\+::\+Ftp\+Client\+::pwd()}} returned invalid directory names (\href{https://github.com/qorelanguage/qore/issues/1295}{\tt issue 1295})
\end{DoxyItemize}\hypertarget{release_notes_qore_08122}{}\section{Qore 0.\+8.\+12.\+2}\label{release_notes_qore_08122}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08122_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08122_bug_fixes}

\begin{DoxyItemize}
\item fixed bugs in handling websocket close status codes in the \href{../../modules/WebSocketUtil/html/index.html}{\tt Web\+Socket\+Util}, \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client}, and \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler} modules (\href{https://github.com/qorelanguage/qore/issues/1216}{\tt issue 1216})
\item fixed a crashing bug with recursive class initialization (\href{https://github.com/qorelanguage/qore/issues/2023}{\tt issue 2023})
\end{DoxyItemize}\hypertarget{release_notes_qore_08121}{}\section{Qore 0.\+8.\+12.\+1}\label{release_notes_qore_08121}
\begin{DoxyParagraph}{Release Summary}
Bugfix release; see details below
\end{DoxyParagraph}
\hypertarget{release_notes_qore_08121_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_08121_bug_fixes}

\begin{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug with the {\ttfamily Sql\+Statement\+Outbound\+Mapper\+::iterator()} method; corrected the iterator object return value which was causing {\ttfamily Abstract\+Mapper\+Iterator\+::map\+Bulk()} to fail (\href{https://github.com/qorelanguage/qore/issues/979}{\tt issue 979})
\item fixed a bug with {\ttfamily Sql\+Statement\+Outbound\+Mapper}; it would throw an error if the required {\ttfamily \char`\"{}table\char`\"{}} or {\ttfamily \char`\"{}sh\char`\"{}} options were used and only worked with subclasses that declared these options (\href{https://github.com/qorelanguage/qore/issues/981}{\tt issue 981})
\item fixed a bug where {\ttfamily Abstract\+Sql\+Statement\+Outbound\+Mapper\+::iterator()} failed to use options when creating the new {\ttfamily Mapper} object (\href{https://github.com/qorelanguage/qore/issues/1088}{\tt issue 1088})
\end{DoxyItemize}
\item fixed a bug where optional arguments were not handled correctly in some rare cases (\href{https://github.com/qorelanguage/qore/issues/974}{\tt issue 974})
\item fixed a bug causing a crash when \mbox{\hyperlink{group__misc__functions_ga0160c0c4cbe7180d70048577e4e40bcc}{parse\+\_\+base64\+\_\+string\+\_\+to\+\_\+string()}} was called with an empty string (\href{https://github.com/qorelanguage/qore/issues/996}{\tt issue 996})
\item fixed a bug resolving base class method calls during parse initialization (\href{https://github.com/qorelanguage/qore/issues/1075}{\tt issue 1075})
\item fixed thread memory handling bug with some operator expressions and the \mbox{\hyperlink{operators_background}{background operator}} (\href{https://github.com/qorelanguage/qore/issues/1096}{\tt issue 1096})
\item fixed a race condition in the prompt collection of closure-\/bound local variables in the \mbox{\hyperlink{container_data_types_garbage_collection}{garbage collector}} (\href{https://github.com/qorelanguage/qore/issues/1103}{\tt issue 1103})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class method variants such as \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a970d28332d49ae168e1fc0d8dd279564}{H\+T\+T\+P\+Client\+:\+:get()}} without a callback would fail to return the message body when the server sent a reply with chunked transfer encoding (\href{https://github.com/qorelanguage/qore/issues/1117}{\tt issue 1117})
\item fixed a bug in Csv\+Util where backward compatibility was broken for single-\/row-\/type format (\href{https://github.com/qorelanguage/qore/issues/1124}{\tt issue 1124})
\item fixed bugs where declared public functions were missing from the library A\+BI (\href{https://github.com/qorelanguage/qore/issues/1126}{\tt issue 1126})
\item fixed bugs where \mbox{\hyperlink{group__string__functions_ga33bb08516773ed10def16bb42d6b8159}{Qore\+::format\+\_\+number()}} and \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_a456f92c6ee27c0c772223745f918bcbc}{Qore\+::zzz8floatzzz9\+::format()}} gave incorrect results when rounding to the significant decimals given in the format string (\href{https://github.com/qorelanguage/qore/issues/1149}{\tt issue 1149})
\item fixed a bug referencing {\ttfamily self} in base class constructor arguments (\href{https://github.com/qorelanguage/qore/issues/1169}{\tt issue 1169})
\item fixed a bug where the incorrect class destructor was called in the openldap module (\href{https://github.com/qorelanguage/qore/issues/1174}{\tt issue 1174})
\item fixed a bug where declaring a {\ttfamily copy()} method as \mbox{\hyperlink{threading_synchronized}{synchronized}} would result in a crash when the method was called (\href{https://github.com/qorelanguage/qore/issues/1188}{\tt issue 1188})
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a4b2cac04c91fb14fcb5a79469550b820}{Qore\+::zzz8stringzzz9\+::get\+Encoded()}} and \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a07b89a849ef94f060e0fcf2c040fd296}{Qore\+::zzz8stringzzz9\+::get\+Decoded()}} regarding \mbox{\hyperlink{group___string_concat_encoding_gadb85427aabfa0641ebfd5ac5186e5d9e}{C\+E\+\_\+\+X\+ML}} and \mbox{\hyperlink{group___string_concat_encoding_gaa1fefe1dab38a1b1b4a32d84e34fa3f4}{C\+E\+\_\+\+N\+O\+N\+A\+S\+C\+II}} (\href{https://github.com/qorelanguage/qore/issues/1193}{\tt issue 1193})
\item fixed bugs where \mbox{\hyperlink{group__object__functions_ga733217c233efed0557e133a6cc45189f}{Qore\+::call\+\_\+object\+\_\+method()}} and \mbox{\hyperlink{group__object__functions_ga3f3c875b6632a9b028a5d63be30bec14}{Qore\+::call\+\_\+object\+\_\+method\+\_\+args()}} allowed private methods to be called from outside the class (\href{https://github.com/qorelanguage/qore/issues/1194}{\tt issue 1194})
\item fixed a bug where \mbox{\hyperlink{deprecated}{Deprecated List}} methods were being internally registered as \mbox{\hyperlink{code_flags_RUNTIME_NOOP}{R\+U\+N\+T\+I\+M\+E\+\_\+\+N\+O\+OP}} (\href{https://github.com/qorelanguage/qore/issues/1197}{\tt issue 1197})
\item fixed bugs where the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource}{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 \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a34834d2da5e1e8f13949810e76a6e1cd}{Datasource\+:\+:get\+Option()}} or \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_ad64b2409e602054d6e29257442b8601e}{Datasource\+:\+:set\+Option()}} (\href{https://github.com/qorelanguage/qore/issues/1201}{\tt issue 1201})
\item fixed memory errors in the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} class where spurious exceptions could be raised (\href{https://github.com/qorelanguage/qore/issues/1202}{\tt issue 1202})
\item fixed a memory leak with static class member initializers (\href{https://github.com/qorelanguage/qore/issues/1206}{\tt issue 1206})
\end{DoxyItemize}\hypertarget{release_notes_qore_0812}{}\section{Qore 0.\+8.\+12}\label{release_notes_qore_0812}
\begin{DoxyParagraph}{Release Summary}
Major new release with major new features and bug fixes as well as packaging fixes\+:
\begin{DoxyItemize}
\item added support for \mbox{\hyperlink{container_data_types_garbage_collection}{deterministic garbage collection}}
\item standardized function naming convention
\item new functions, methods, constants, operators, and user modules
\item greatly improved support on Windows
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0812_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_0812_compatibility}

\begin{DoxyItemize}
\item fixed broken list parsing; in previous releases, Qore\textquotesingle{}s parser re-\/wrote lists without parentheses used as top-\/level statements with certain assignment operators (\mbox{\hyperlink{operators_assignment_operator}{=}}, \mbox{\hyperlink{operators_plus_equals_operator}{+=}}, \mbox{\hyperlink{operators_minus_equals_operator}{-\/=}}, \mbox{\hyperlink{operators_multiply_equals_operator}{$\ast$=}}, and \mbox{\hyperlink{operators_divide_equals_operator}{/=}}, but not with others) so that statements like {\ttfamily list l = 1, 2, 3;} were valid assignments. Due to operator precedence, such statements should normally be interpreted as {\ttfamily (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 \mbox{\hyperlink{operators}{Operators}}. This could break old code that relied on the old, broken behavior. To get the old behavior, use the \mbox{\hyperlink{parse_directives_broken-list-parsing}{\%broken-\/list-\/parsing}} parse directive.
\item fixed broken \mbox{\hyperlink{data_type_declarations_int_type}{int}} and \mbox{\hyperlink{data_type_declarations_softint_type}{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 \mbox{\hyperlink{parse_directives_broken-int-assignments}{\%broken-\/int-\/assignments}} parse directive.
\item 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 \mbox{\hyperlink{parse_directives_broken-operators}{\%broken-\/operators}} parse directive.
\item the \mbox{\hyperlink{operators_push}{push}}, \mbox{\hyperlink{operators_unshift}{unshift}}, \mbox{\hyperlink{operators_pop}{pop}} and \mbox{\hyperlink{operators_shift}{shift}} operators now throw an exception when their first operand is not a list and \mbox{\hyperlink{parse_directives_strict-args}{\%strict-\/args}} is in effect
\end{DoxyItemize}\hypertarget{release_notes_qore_0812_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_0812_new_features}

\begin{DoxyItemize}
\item Added the \mbox{\hyperlink{operators_value_coalescing_operator}{Value Coalescing Operator (?$\ast$)}} which checks first argument if it evaluates to \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} with \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a3a66486cee14aa073cf90fbed5a23edd}{Qore\+::zzz8valuezzz9\+::val()}} and if so assigns the second argument. The operator can be further chained; for example\+:
\begin{DoxyCode}
expr1 ?* expr2 ?* expr3 
\end{DoxyCode}

\item Added the \mbox{\hyperlink{operators_null_coalescing_operator}{Null Coalescing Operator (??)}} which checks the first operand for \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} or \mbox{\hyperlink{basic_data_types_null}{N\+U\+LL}}; if true returns the second argument. The operator can be further chained, in which case the first operand with a value is returned; ex\+:
\begin{DoxyCode}
expr1 ?? expr2 ?? expr3 
\end{DoxyCode}

\item Qore identifiers can now begin with an underscore character {\ttfamily \char`\"{}\+\_\+\char`\"{}}; the following is now a valid (with \mbox{\hyperlink{parse_directives_new-style}{\%new-\/style}})\+:
\begin{DoxyCode}
int \_var = 1;
\end{DoxyCode}

\item hash enhancements\+:
\begin{DoxyItemize}
\item new syntax for an expression giving an empty hash\+: {\ttfamily \{\}}; for example\+:
\begin{DoxyCode}
hash h = \{\};
\end{DoxyCode}

\item new literal hash support\+: hashes can now be given as literal values as follows\+:
\begin{DoxyCode}
(<key\_expr>: <val\_expr>, [...]) 
\end{DoxyCode}
 For example\+:
\begin{DoxyCode}
\textcolor{keywordflow}{return} (get\_key(): get\_value()); 
\end{DoxyCode}
 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
\item 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 \mbox{\hyperlink{operators_hmap}{map}} operator results in the hash version of the map operator being used
\item Added new \mbox{\hyperlink{operators_hmap}{hash version of the map}} operator to build a hash from a list or iterator expression; ex\+:
\begin{DoxyCode}
hash h = map \{$1, h2.$1\}, i; 
\end{DoxyCode}

\end{DoxyItemize}
\item implemented support for loading user modules in a pre-\/defined \mbox{\hyperlink{class_qore_1_1_program}{Program}} object (that can have a custom A\+PI) in the following new functions and methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__misc__functions_ga59d94b7cc4dfcc6e39030097458b8afe}{load\+\_\+user\+\_\+module\+\_\+with\+\_\+program()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a2f83d6257c25cc5ae867d9d461019996}{Program\+:\+:load\+Apply\+To\+Private\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_acd9c44ff76909f62106f83b3c5011772}{Program\+:\+:load\+Apply\+To\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a88ead6a191a58736b49e794f3220869f}{Program\+:\+:load\+User\+Module\+With\+Program()}}
\end{DoxyItemize}
\item implemented support for code / dependency injections in \mbox{\hyperlink{class_qore_1_1_program}{Program}} containers with the following changes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Qore\+::\+Program\+::import\+Class()}} 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
\item \mbox{\hyperlink{class_qore_1_1_program_a9a2e3da4029c50643169cbb72e57f494}{Qore\+::\+Program\+::import\+Function()}} 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
\item the new parse option \mbox{\hyperlink{group__parse__options_ga1c78ca9bda4b8f5b2ad669c48fe0368d}{Qore\+::\+P\+O\+\_\+\+A\+L\+L\+O\+W\+\_\+\+I\+N\+J\+E\+C\+T\+I\+ON}} must be set on the \mbox{\hyperlink{class_qore_1_1_program}{Program}} object in order to use code / dependency injection parameters in the above methods
\item once a \mbox{\hyperlink{class_qore_1_1_program}{Program}} object has an injected A\+PI set up, the system A\+PI can be imported (possibly already overridden with injected code) with the following new methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_a8abea6fe89712e9b4f84c7f7b0420151}{Qore\+::\+Program\+::import\+System\+Api()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ad512b5c0b491823d186e0de7cf8d87d4}{Qore\+::\+Program\+::import\+System\+Classes()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a2942f186ac759fb7a71cbb9ec0ffb72a}{Qore\+::\+Program\+::import\+System\+Constants()}}
\item \mbox{\hyperlink{class_qore_1_1_program_adc115cc0b1c0f196ed0d764eb33c4009}{Qore\+::\+Program\+::import\+System\+Functions()}}
\end{DoxyItemize}additionally user modules can be loaded with overridden injected code with the following new functions / methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__misc__functions_ga59d94b7cc4dfcc6e39030097458b8afe}{load\+\_\+user\+\_\+module\+\_\+with\+\_\+program()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a2f83d6257c25cc5ae867d9d461019996}{Program\+:\+:load\+Apply\+To\+Private\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_acd9c44ff76909f62106f83b3c5011772}{Program\+:\+:load\+Apply\+To\+User\+Module()}}
\item \mbox{\hyperlink{class_qore_1_1_program_a88ead6a191a58736b49e794f3220869f}{Program\+:\+:load\+User\+Module\+With\+Program()}}
\end{DoxyItemize}furthermore the following function can be used to reload injected modules with the non-\/injected version\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__misc__functions_ga84fcab69e514fd31cefe8de51bbe8acd}{reload\+\_\+module()}}
\end{DoxyItemize}
\end{DoxyItemize}
\item implemented support for user-\/defined thread-\/resource management, allowing Qore code to safely manage resources associated to a particular thread\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_abstract_thread_resource}{Qore\+::\+Thread\+::\+Abstract\+Thread\+Resource}}
\item \mbox{\hyperlink{group__threading__functions_gadc994316e54fdf50111018de9bd15dc6}{Qore\+::\+Thread\+::remove\+\_\+thread\+\_\+resource()}}
\item \mbox{\hyperlink{group__threading__functions_ga1a1fbc371cfc8885ed78e4bff25d35b1}{Qore\+::\+Thread\+::set\+\_\+thread\+\_\+resource()}}
\end{DoxyItemize}
\item new constants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__system__and__build__constants_ga6cebae5097d4414ca8c6da4be8cf9922}{Qore\+::\+Dir\+Sep}}
\item \mbox{\hyperlink{group__system__and__build__constants_ga003f84c29bc6d145ea7ab890cadc5b41}{Qore\+::\+Platform}}
\item \mbox{\hyperlink{group__parse__options_gacb154a5a9c64065609d22c5fb62b0d04}{Qore\+::\+Parse\+Option\+Code\+Map}}
\item \mbox{\hyperlink{group__parse__options_gad7a1c95d88d0f59ecc3e9985b904dd4a}{Qore\+::\+Parse\+Option\+String\+Map}}
\item \mbox{\hyperlink{group__parse__options_ga0d64d3a06cb049d7a50bdeaefb236245}{Qore\+::\+P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+L\+I\+S\+T\+\_\+\+P\+A\+R\+S\+I\+NG}}
\item \mbox{\hyperlink{group__parse__options_ga83f83114a31c6c0367370557650f4ae2}{Qore\+::\+P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+L\+O\+G\+I\+C\+\_\+\+P\+R\+E\+C\+E\+D\+E\+N\+CE}}
\item \mbox{\hyperlink{group__parse__options_ga6647f2e40ae673ba85d42f9df6199472}{Qore\+::\+P\+O\+\_\+\+B\+R\+O\+K\+E\+N\+\_\+\+O\+P\+E\+R\+A\+T\+O\+RS}}
\item \mbox{\hyperlink{group__parse__options_gaec5488ae61db4b43af0e89ddc532e379}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+C\+O\+N\+S\+T\+A\+N\+TS}}
\item \mbox{\hyperlink{group__parse__options_gaea230eb2f3d02cb456ed8838b805960f}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+U\+S\+E\+R\+\_\+\+C\+O\+N\+S\+T\+A\+N\+TS}}
\item \mbox{\hyperlink{group__parse__options_ga922d0591649ab5fcfa6d6ca3df24a48a}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+A\+PI}}
\item \mbox{\hyperlink{group__parse__options_ga0b4be620288f71a4b591608c931082d0}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+A\+PI}}
\item \mbox{\hyperlink{group__parse__options_ga58354296ab988435714ebba1fffd59ae}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+U\+S\+E\+R\+\_\+\+A\+PI}}
\item \mbox{\hyperlink{group__dbi__capabilities_ga87128ed8eccc517cb36ceb5f27ceaa53}{Qore\+:\+:S\+QL\+:\+:D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+B\+I\+ND}}
\item \mbox{\hyperlink{group___string_concat_encoding}{String Concatenation Encoding Codes}}
\item \mbox{\hyperlink{group___string_concat_decoding}{String Concatenation Decoding Codes}}
\end{DoxyItemize}
\item new classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_data_line_iterator}{Qore\+::\+Data\+Line\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_abstract_thread_resource}{Qore\+::\+Thread\+::\+Abstract\+Thread\+Resource}}
\end{DoxyItemize}
\item other new methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a6b84d1a73d81d05158087517ae31bdfe}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::get\+Capabilities()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_af830f8bf4f19f7cf7a0bc3465aec0d07}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::get\+Capability\+List()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_a50d360812380f793b0b0ab7f0b181792}{Qore\+::\+S\+Q\+L\+::\+S\+Q\+L\+Statement\+::current\+Thread\+In\+Transaction()}}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue_ab55ff73e8143bf963aa2ce62b93d7c7f}{Qore\+::\+Thread\+::\+Queue\+::set\+Error()}}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue_a49732032b1eeda812640acbaf35cc884}{Qore\+::\+Thread\+::\+Queue\+::clear\+Error()}}
\end{DoxyItemize}
\item updated methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Time\+Zone\+:\+:constructor()}}\+: now accepts a path to the zoneinfo file if the \mbox{\hyperlink{group__parse__options_ga5e466ed886222f0b57b0a399b455be71}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+F\+I\+L\+E\+S\+Y\+S\+T\+EM}} sandboxing restrictions is not set
\end{DoxyItemize}
\item the {\ttfamily S\+O\+C\+K\+E\+T-\/\+T\+H\+R\+O\+U\+G\+H\+P\+U\+T-\/\+W\+A\+R\+N\+I\+NG} event is no longer raised on the warning queue if the transfer size is less than 1024 bytes; this affects\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client_a49a2e47cde50ae8bbcbca8721199dd16}{Qore\+::\+Ftp\+Client\+::set\+Warning\+Queue()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_ae2aafddbf5be67012e3b57f846c4105e}{Qore\+::\+H\+T\+T\+P\+Client\+::set\+Warning\+Queue()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a4c3b78b845de5f48434e527755dec18a}{Qore\+::\+Socket\+::set\+Warning\+Queue()}}
\end{DoxyItemize}
\item new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__object__functions_ga6a929dc065cfb0b20639ac815be9cad3}{Qore\+::create\+\_\+object()}}
\item \mbox{\hyperlink{group__object__functions_ga6eaee4a61dd7e3f58de1dab76154397f}{Qore\+::create\+\_\+object\+\_\+args()}}
\item \mbox{\hyperlink{group__misc__functions_gafd6a2b1500aca8b73c112b723695af4f}{Qore\+::decode\+\_\+uri\+\_\+request()}}
\item \mbox{\hyperlink{group__misc__functions_gad0bbcfc5357d459cb538e57e85c1971e}{Qore\+::encode\+\_\+uri\+\_\+request()}}
\item \mbox{\hyperlink{group__date__and__time__functions_gac96ed9dc0e5436a5f77c7fbeb5c5842e}{Qore\+::get\+\_\+duration\+\_\+seconds\+\_\+f()}}
\item \mbox{\hyperlink{group__library__functions_ga0f7f448e698798cbc38f58e0b75edf92}{Qore\+::getgroups()}}
\item \mbox{\hyperlink{group__user__and__group__functions_ga6be17484ff802389da795f831a549e4e}{Qore\+::getusername()}}
\item \mbox{\hyperlink{group__string__functions_gaa3c396510f9d106aee5161cbb144e163}{Qore\+::ltrim()}}
\item \mbox{\hyperlink{group__string__functions_gad09a541dcd0e0f42a0447c92a7a60d36}{Qore\+::parse\+\_\+float()}}
\item \mbox{\hyperlink{group__string__functions_ga0024906d05096f7f8c1130396dde53c7}{Qore\+::parse\+\_\+number()}}
\item \mbox{\hyperlink{group__filesystem__functions_ga59c7b40bb68308943c26473b3536594d}{Qore\+::realpath()}}
\item \mbox{\hyperlink{group__string__functions_ga25264bfb9950ac66862db9b4a32eeee8}{Qore\+::rtrim()}}
\item \mbox{\hyperlink{group__misc__functions_ga51444e624e7ba2b2ecfb45dd49e6db42}{Qore\+::set\+\_\+return\+\_\+value()}}
\item \mbox{\hyperlink{group__library__functions_gaedb399bde4288a76c59f8bd4f5ee6690}{Qore\+::setgroups()}}
\item \mbox{\hyperlink{group__threading__functions_gadc994316e54fdf50111018de9bd15dc6}{Qore\+::\+Thread\+::remove\+\_\+thread\+\_\+resource()}}
\item \mbox{\hyperlink{group__threading__functions_ga1a1fbc371cfc8885ed78e4bff25d35b1}{Qore\+::\+Thread\+::set\+\_\+thread\+\_\+resource()}}
\end{DoxyItemize}
\item updated functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__string__functions_ga774b6d0f9d5835de7d7362400aa2cdd1}{Qore\+::parse\+\_\+boolean()}}
\item \mbox{\hyperlink{group__type__conversion__functions_gacf16b4126b795f4b6933ef3425cadae3}{Qore\+::string()}}
\item \mbox{\hyperlink{group__string__functions_gaabfb10141a51d31ef100d9fd3a02252e}{Qore\+::strmul()}}
\end{DoxyItemize}
\item new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_ae0566a68783890f894213258833b0b37}{Qore\+::zzz8datezzz9\+::day\+Number()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a776388307af89346ac4456a09d8fb22d}{Qore\+::zzz8datezzz9\+::day\+Of\+Week()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a51af864148656e9fe7dd6e9bc1aba1df}{Qore\+::zzz8datezzz9\+::duration\+Seconds\+Float()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_ad38a12c3b55fab4825bbb7d6125df1e5}{Qore\+::zzz8datezzz9\+::iso\+Day\+Of\+Week()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_ada1be7d54d1a218ed90b7ee9cdb5130a}{Qore\+::zzz8datezzz9\+::iso\+Week\+Hash()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_aa03daafa0fe01dfa0abf447d8ca135fd}{Qore\+::zzz8datezzz9\+::iso\+Week\+String()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a0702bbe59ecc54c7eed8c16550a010ed}{Qore\+::zzz8objectzzz9\+::unique\+Hash()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a07b89a849ef94f060e0fcf2c040fd296}{Qore\+::zzz8stringzzz9\+::get\+Decoded()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a4b2cac04c91fb14fcb5a79469550b820}{Qore\+::zzz8stringzzz9\+::get\+Encoded()}}
\end{DoxyItemize}
\item the following functions were moved from the \href{../../modules/Util/html/index.html}{\tt Util} module to Qore\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__filesystem__functions_ga59a85037788f39c5269f0aadbb499f90}{Qore\+::absolute\+\_\+path()}}
\item \mbox{\hyperlink{group__filesystem__functions_ga77456f40ff1734bb6d5692e6dbb9e8eb}{Qore\+::absolute\+\_\+path\+\_\+windows()}}
\item \mbox{\hyperlink{group__filesystem__functions_gac13e5f3c1a03fbb5e6c60213a595795f}{Qore\+::absolute\+\_\+path\+\_\+unix()}}
\end{DoxyItemize}
\item camel-\/case functions were deprecated in this release, covering the following functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__object__functions_ga22ceceed9c9da64694045ef7a32409c4}{Qore\+::call\+Object\+Method()}}\+: deprecated for \mbox{\hyperlink{group__object__functions_ga733217c233efed0557e133a6cc45189f}{Qore\+::call\+\_\+object\+\_\+method()}}
\item \mbox{\hyperlink{group__object__functions_ga1aa450b9391a7e36b01caf570d458ab5}{Qore\+::call\+Object\+Method\+Args()}}\+: deprecated for \mbox{\hyperlink{group__object__functions_ga3f3c875b6632a9b028a5d63be30bec14}{Qore\+::call\+\_\+object\+\_\+method\+\_\+args()}}
\item \mbox{\hyperlink{group__misc__functions_ga83615e15094fca9ffe868ee0d80cd002}{Qore\+::exists\+Function()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga3a1dcf3c8f3908896ca2aabfcc41010c}{Qore\+::exists\+\_\+function()}}
\item \mbox{\hyperlink{group__misc__functions_ga5ae2be041abe7d02be8a2ccc67c0032f}{Qore\+::function\+Type()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga23f1e7651ff70e32e9ba7c28907b1306}{Qore\+::function\+\_\+type()}}
\item \mbox{\hyperlink{group__threading__functions_ga52baa4131379e22e307ae742ffbe3ee1}{Qore\+::get\+All\+Thread\+Call\+Stacks()}}\+: deprecated for \mbox{\hyperlink{group__threading__functions_gae4d42c6ab7b7fc7d9a9cb1be139f6773}{Qore\+::get\+\_\+all\+\_\+thread\+\_\+call\+\_\+stacks()}}
\item \mbox{\hyperlink{group__misc__functions_ga46b9c2df48897cb68e765cb6d66728ac}{Qore\+::get\+Class\+Name()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_gaa9a0d3f277ef8cbdc99fe146dd3db49b}{Qore\+::get\+\_\+class\+\_\+name()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga86f47ab9a928a2c8aff8cbac9b5f3518}{Qore\+::get\+Date\+From\+I\+S\+O\+Week()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_ga1401d634f3bcbec80d64f75cdd9d4921}{Qore\+::get\+\_\+date\+\_\+from\+\_\+iso\+\_\+week()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga08d26e9c0ed9635a1ee1158ee4bf24a5}{Qore\+::get\+Day\+Number()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_gaec9d8c1ba3a39869904f27e8c0706589}{Qore\+::get\+\_\+day\+\_\+number()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga5719e06bb6919c3cc370f99910f78277}{Qore\+::get\+Day\+Of\+Week()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_gaa546956fb71d56f18c903aff1f3fc01a}{Qore\+::get\+\_\+day\+\_\+of\+\_\+week()}}
\item \mbox{\hyperlink{group__old__dbi__functions_ga330acb764484b16529d4f25960c45fa8}{Qore\+::get\+D\+B\+I\+Driver\+Capabilities()}}\+: deprecated for \mbox{\hyperlink{group__dbi__functions_ga40597983f24f3b0edc06149246d1cbe2}{Qore\+::dbi\+\_\+get\+\_\+driver\+\_\+capabilities()}}
\item \mbox{\hyperlink{group__old__dbi__functions_gae35d9e887cfd754eea6cad030bb19864}{Qore\+::get\+D\+B\+I\+Driver\+Capability\+List()}}\+: deprecated for \mbox{\hyperlink{group__dbi__functions_ga1b7664b6fef86a36d8f96084fb88885c}{Qore\+::dbi\+\_\+get\+\_\+driver\+\_\+capability\+\_\+list()}}
\item \mbox{\hyperlink{group__old__dbi__functions_ga5d9143dbcae773794e24300fbe66109e}{Qore\+::get\+D\+B\+I\+Driver\+List()}}\+: deprecated for \mbox{\hyperlink{group__dbi__functions_ga5f5a0bf394b3472e206441651bf48e9e}{Qore\+::dbi\+\_\+get\+\_\+driver\+\_\+list()}}
\item \mbox{\hyperlink{group__misc__functions_ga82a9721ba77a2a344b0e356d45c5a37f}{Qore\+::get\+Feature\+List()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga86de08439e084c19460ae57d3d6269e5}{Qore\+::get\+\_\+feature\+\_\+list()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga92ef075d0aa1945a11580a864bc7f4cb}{Qore\+::get\+I\+S\+O\+Day\+Of\+Week()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_ga64bfe13c03c1b2746bfb5c80f5279e2a}{Qore\+::get\+\_\+iso\+\_\+day\+\_\+of\+\_\+week()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga62eb1df91fe17207d865565e52fa1e19}{Qore\+::get\+I\+S\+O\+Week\+Hash()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_ga2e891572705fb44c6d881bfeb48e8b8e}{Qore\+::get\+\_\+iso\+\_\+week\+\_\+hash()}}
\item \mbox{\hyperlink{group__date__and__time__functions_ga04331a3a415abfaaa228c4253a04859b}{Qore\+::get\+I\+S\+O\+Week\+String()}}\+: deprecated for \mbox{\hyperlink{group__date__and__time__functions_gadfb87ebf695f7e037efb64367cdb6626}{Qore\+::get\+\_\+iso\+\_\+week\+\_\+string()}}
\item \mbox{\hyperlink{group__object__functions_ga88b51a14acbe008f2e60fca211b98a50}{Qore\+::get\+Method\+List()}}\+: deprecated for \mbox{\hyperlink{group__object__functions_ga04fa3aad6209f16abaae0ff63591321c}{Qore\+::get\+\_\+method\+\_\+list()}}
\item \mbox{\hyperlink{group__misc__functions_ga34248adafed4b00da2a526f8f23017cf}{Qore\+::get\+Module\+Hash()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_gab64b871ddf6f09568d4a0798c0ca755a}{Qore\+::get\+\_\+module\+\_\+hash()}}
\item \mbox{\hyperlink{group__misc__functions_ga82506074037fe39372ea4f44e2582a75}{Qore\+::get\+Module\+List()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga18cc840553c5850216308dbefa9d5a78}{Qore\+::get\+\_\+module\+\_\+list()}}
\item \mbox{\hyperlink{group__misc__functions_ga302de285f031c3dd4b059df3494bd21c}{Qore\+::make\+Base64\+String()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga8de429a31ac854f93c8c66e14baaaf66}{Qore\+::make\+\_\+base64\+\_\+string()}}
\item \mbox{\hyperlink{group__misc__functions_gae4ca24e1000d327df636f75c7bf4f00c}{Qore\+::make\+Hex\+String()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_gae7be18717b0ed9010c48166a437c35b4}{Qore\+::make\+\_\+hex\+\_\+string()}}
\item \mbox{\hyperlink{group__misc__functions_ga1e6e24f780713c4d10cb9b98fa45cd35}{Qore\+::parse\+Base64\+String()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga34c9bccc1d1e61d6a8a8988ceb4a8a6c}{Qore\+::parse\+\_\+base64\+\_\+string()}}
\item \mbox{\hyperlink{group__misc__functions_ga1f1a63790a7c60a3a61c5d1569fe4e4c}{Qore\+::parse\+Base64\+String\+To\+String()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_ga0160c0c4cbe7180d70048577e4e40bcc}{Qore\+::parse\+\_\+base64\+\_\+string\+\_\+to\+\_\+string()}}
\item \mbox{\hyperlink{group__old__dbi__functions_gab8f5a597374024a8c78e767dbfcafc15}{Qore\+::parse\+Datasource()}}\+: deprecated for \mbox{\hyperlink{group__dbi__functions_gad95f3a076d1818cc722c516543e29858}{Qore\+::parse\+\_\+datasource()}}
\item \mbox{\hyperlink{group__misc__functions_ga74fed7603d2176dd5d433d3fae02ad9f}{Qore\+::parse\+Hex\+String()}}\+: deprecated for \mbox{\hyperlink{group__misc__functions_gaedf4a2c140fa284c9e09a68b743763b3}{Qore\+::parse\+\_\+hex\+\_\+string()}}
\item \mbox{\hyperlink{group__list__functions_gad9e205ca0a43f52a1388611b54521c19}{Qore\+::sort\+Descending()}}\+: deprecated for \mbox{\hyperlink{group__list__functions_ga0149391f4fb2c97dd4ad2080f9240753}{Qore\+::sort\+\_\+descending()}}
\item \mbox{\hyperlink{group__list__functions_gacd07eea87f385a0bb8764a9fa5b47075}{Qore\+::sort\+Descending\+Stable()}}\+: deprecated for \mbox{\hyperlink{group__list__functions_ga59bf2466a7bd64db585ad1b2b5f7ae7d}{Qore\+::sort\+\_\+descending\+\_\+stable()}}
\item \mbox{\hyperlink{group__list__functions_ga6202469e6119631474b685952cefe11f}{Qore\+::sort\+Stable()}}\+: deprecated for \mbox{\hyperlink{group__list__functions_gad03629b1133f3a6b47a2f33792801dbf}{Qore\+::sort\+\_\+stable()}}
\item \mbox{\hyperlink{group__threading__functions_ga401f0e787e79f2e4851d60b9223bb8d2}{Qore\+::throw\+Thread\+Resource\+Exceptions()}}\+: deprecated for \mbox{\hyperlink{group__threading__functions_ga421dca39ccb55b191d5d09fd98c2075a}{Qore\+::throw\+\_\+thread\+\_\+resource\+\_\+exceptions()}}
\end{DoxyItemize}Functions deprecated in this release will remain for the forseeable future for backwards-\/compatibility
\item Added support for reexporting imported definitions in user module with the new {\ttfamily \%requires(reexport)} form of the \mbox{\hyperlink{parse_directives_requires}{\%requires}} parse directive.
\item \mbox{\hyperlink{group__range__functions_gad5b4d3ad3f6c36d2e714bc6ed757a507}{Qore\+::xrange()}} and \mbox{\hyperlink{class_qore_1_1_range_iterator}{Qore\+::\+Range\+Iterator}} updates\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__range__functions_gad5b4d3ad3f6c36d2e714bc6ed757a507}{Qore\+::xrange()}} and \mbox{\hyperlink{class_qore_1_1_range_iterator_ae1659e4a23b185f2cf371b015d806088}{Qore\+::\+Range\+Iterator\+::constructor()}} and \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a4231a2c883ab4c25e87c2e3b23f8ff06}{Qore\+::zzz8listzzz9\+::range\+Iterator()}} updated to take an optional value to return in the \mbox{\hyperlink{class_qore_1_1_range_iterator_a96d2eb508ede8cc4a26141ccf94acecc}{Qore\+::\+Range\+Iterator\+::get\+Value()}} method
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client}{Qore\+::\+Ftp\+Client}} updates\+:
\begin{DoxyItemize}
\item added \mbox{\hyperlink{class_qore_1_1_ftp_client_abe7fe74d0bf2ea11fdedc5f0c67af5dc}{Qore\+::\+Ftp\+Client\+::get\+Mode()}}
\end{DoxyItemize}
\item Performance improvements\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_pair_iterator}{Qore\+::\+Hash\+Pair\+Iterator}} and \mbox{\hyperlink{class_qore_1_1_object_pair_iterator}{Qore\+::\+Object\+Pair\+Iterator}} objects (returned by \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aae2e67b218a51791103c21866df5217b}{Qore\+::zzz8hashzzz9\+::pair\+Iterator()}} and \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7d6df627d80aa7f74c7e895fb352c837}{Qore\+::zzz8objectzzz9\+::pair\+Iterator()}}, respectively and the associated reverse iterators) have had their performance improved by approximately 70\% by reusing the hash iterator object when possible
\end{DoxyItemize}
\item module directory handling changed
\begin{DoxyItemize}
\item user modules are now stored in prefix/share/qore-\/modules/version
\item prefix/share/qore-\/modules is also added to the module path
\item version-\/specific module directories are added first, then the \char`\"{}generic\char`\"{} directories
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module updates\+:
\begin{DoxyItemize}
\item new {\ttfamily \char`\"{}tolwr\char`\"{}} option in structured text parsing classes
\item {\ttfamily Abstract\+Csv\+Writer} will set {\ttfamily \char`\"{}headers\char`\"{}} from the {\ttfamily \char`\"{}fields\char`\"{}} option if {\ttfamily \char`\"{}headers\char`\"{}} are not explicitly set
\item added write() methods returning the generated strings to the {\ttfamily Csv\+String\+Writer} class for A\+PI compatibility with the corresponding Fixed\+Length\+Data\+Writer methods
\item implemented support for \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} as an iterator source for {\ttfamily Abstract\+Csv\+Writer\+::write()} 
\item {\ttfamily quote\+\_\+escape} option implemented in {\ttfamily Abstract\+Csv\+Writer} 
\item implemented the {\ttfamily \char`\"{}datamap\char`\"{}} and {\ttfamily \char`\"{}info\+\_\+log\char`\"{}} options for C\+SV generation
\item implemented alternative options with underscores instead of dashes for all constructors
\item extended multi-\/type support, record type rules and default value in field specification
\item implemented multi-\/type record support in {\ttfamily Abstract\+Csv\+Writer} and {\ttfamily Abstract\+Csv\+Iterator} using {\ttfamily resolve\+\_\+type} and {\ttfamily headers} options
\end{DoxyItemize}
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper} module updates\+:
\begin{DoxyItemize}
\item implemented the {\ttfamily \char`\"{}constant\char`\"{}} field tag, allowing a constant value for an output field to be specified directly in the mapper hash
\item implemented the {\ttfamily \char`\"{}default\char`\"{}} field tag, giving a default value if no input value is specified
\item implemented the global {\ttfamily \char`\"{}date\+\_\+format\char`\"{}} mapper option
\item implemented support for structured output fields with dot notation in the output field name
\item implemented per-\/field and global {\ttfamily \char`\"{}number\+\_\+format\char`\"{}} mapper options
\item changed the behavior of the {\ttfamily \char`\"{}number\char`\"{}} field type\+: now leaves numeric values in their original type, converts all other types to a number
\item removed the deprecated {\ttfamily \char`\"{}crec\char`\"{}} option
\item implemented the {\ttfamily \char`\"{}input\char`\"{}} option with input record validation
\item implemented the {\ttfamily \char`\"{}output\char`\"{}} option with output record validation
\item implemented the {\ttfamily \char`\"{}info\+\_\+log\char`\"{}} option and removed the {\ttfamily \char`\"{}trunc\char`\"{}} option
\item implemented the {\ttfamily \char`\"{}runtime\char`\"{}} field tag
\item implemented the {\ttfamily \char`\"{}index\char`\"{}} field tag
\item improved the Mapper\+::map\+All() method by adding support for hashes of lists to better support input from bulk D\+ML (\mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_a204d8637dc5c072ad5e54d6063c25415}{S\+Q\+L\+Statement\+:\+:fetch\+Columns()}})
\end{DoxyItemize}
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper} module updates\+:
\begin{DoxyItemize}
\item added table name and datasource description to error messages
\item implemented more efficient support for inserts from a sequence for databases supporting the {\ttfamily \char`\"{}returning\char`\"{}} 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
\item implemented an optimized insert approach assuming stable input data
\item implemented the following new options\+:
\begin{DoxyItemize}
\item {\ttfamily unstable\+\_\+input\+:} to accommodate unstable input data and disable the insert optimization (default\+: False)
\item {\ttfamily insert\+\_\+block\+:} for DB drivers supporting bulk D\+ML, the number of rows inserted at once (default\+: 500, only used when {\ttfamily unstable\+\_\+input} is False) and bulk inserts are supported in the table object
\end{DoxyItemize}
\item added methods for bulk / batch inserts for db drivers supporting bulk D\+ML (ex\+: Oracle)
\item updated to \href{../../modules/Mapper/html/index.html}{\tt Mapper} changes\+: use table description to define output record for the \href{../../modules/Mapper/html/index.html}{\tt Mapper} module
\item added the Abstract\+Sql\+Statement\+Outbound\+Mapper class
\item added the Inbound\+Identity\+Table\+Mapper class
\item added the Sql\+Statement\+Mapper\+Iterator class
\item added the Sql\+Statement\+Outbound\+Mapper class
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item implemented Rest\+Client\+::add\+Default\+Headers()
\item implemented Rest\+Client\+::get\+Default\+Headers()
\item implemented Rest\+Client\+::get\+Send\+Encoding()
\item implemented Rest\+Client\+::set\+Content\+Encoding()
\item when possible, R\+E\+ST bodies are decoded and stored in the {\itshape info} output argument when the H\+T\+TP server returns a status code $<$ 100 or $>$= 300 to allow for error-\/handling in the client
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module updates\+:
\begin{DoxyItemize}
\item implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
\item the Abstract\+Rest\+Stream\+Request\+Handler class is now the base abstract class for R\+E\+ST stream request handlers
\end{DoxyItemize}
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util} module updates\+:
\begin{DoxyItemize}
\item updated File\+Handler\+::handle\+Request() to allow for chunked sends
\end{DoxyItemize}
\item \href{../../modules/BulkSqlUtil/html/index.html}{\tt Bulk\+Sql\+Util} module\+:
\begin{DoxyItemize}
\item added this new module providing A\+P\+Is supporting bulk D\+ML with \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} with supported drivers
\end{DoxyItemize}
\item \href{../../modules/FilePoller/html/index.html}{\tt File\+Poller} module\+:
\begin{DoxyItemize}
\item added this new module to support polling files in directories on the filesystem
\end{DoxyItemize}
\item \href{../../modules/FixedLengthUtil/html/index.html}{\tt Fixed\+Length\+Util} module\+:
\begin{DoxyItemize}
\item added this new module for handling fixed length line data
\end{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module updates\+:
\begin{DoxyItemize}
\item \href{../../modules/HttpServerUtil/html/index.html}{\tt Http\+Server\+Util} module split from the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module containing supporting definitions for handler classes and other code interfacing with the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module
\item added the Permissive\+Authenticator class
\item translate {\ttfamily \char`\"{}+\char`\"{}} (plus) to {\ttfamily \char`\"{} \char`\"{}} (space) in the query portion of U\+R\+Is in parse\+\_\+uri\+\_\+query()
\item implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
\item new methods implemented in Http\+Server\+:
\begin{DoxyItemize}
\item Http\+Server\+::get\+Listener\+Log\+Options()
\item Http\+Server\+::get\+Listener\+Log\+Options\+I\+D()
\item Http\+Server\+::set\+Listener\+Log\+Options()
\item Http\+Server\+::set\+Listener\+Log\+Options\+I\+D()
\item Http\+Server\+::add\+Listeners() (new variant taking a hash of S\+SL info)
\item Http\+Server\+::listener\+Started() (to allow for reporting when listeners are actually running since they are started asynchronously)
\end{DoxyItemize}
\item improved performance matching request U\+R\+Is to handlers
\item added the {\ttfamily \char`\"{}ssl\char`\"{}} key to the listener socket info hash
\item implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
\item removed the unused Abstract\+Stream\+Request\+Handler class
\item fixed parse\+\_\+uri\+\_\+query() to always return {\itshape params} as a hash (\href{https://github.com/qorelanguage/qore/issues/569}{\tt issue 569})
\item added {\ttfamily root\+\_\+path} to the context hash if the path was matched by a U\+RL path prefix (\href{https://github.com/qorelanguage/qore/issues/570}{\tt issue 570})
\item implemented support for configurable stream handler timeout values (\href{https://github.com/qorelanguage/qore/issues/719}{\tt issue 719})
\end{DoxyItemize}
\item \href{../../modules/Schema/html/index.html}{\tt Schema} module updates\+:
\begin{DoxyItemize}
\item added the following public functions to make column definitions easier\+:
\begin{DoxyItemize}
\item c\+\_\+char()
\item c\+\_\+date()
\item c\+\_\+int()
\item c\+\_\+number()
\item c\+\_\+timestamp()
\item c\+\_\+varchar()
\end{DoxyItemize}
\end{DoxyItemize}
\item added option \mbox{\hyperlink{group__option__constants_ga8315f695323cb4e3a69f51c85f23cce8}{H\+A\+V\+E\+\_\+\+D\+E\+T\+E\+R\+M\+I\+N\+I\+S\+T\+I\+C\+\_\+\+GC}} for Qore builds where deterministic garbage collection is enabled
\item \mbox{\hyperlink{class_qore_1_1_program}{Program}} class enhancements\+:
\begin{DoxyItemize}
\item the \mbox{\hyperlink{class_qore_1_1_program}{Program}} class now creates \mbox{\hyperlink{conditional_parsing}{parse defines}} for parse options so that conditional code can be implemented depending on the sandboxing configuration of the program container
\item the \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Qore\+::\+Program\+::import\+Class()}} method now accepts an optional {\itshape new\+\_\+name} argument to allow for importing classes with a different name and namespace path
\end{DoxyItemize}
\item added a timeout parameter to the following \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_ad471f7399655c3fb211c72b55ca568d9}{Qore\+::\+Socket\+::upgrade\+Client\+To\+S\+S\+L()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a83385d31d5b112409424269f025de5ea}{Qore\+::\+Socket\+::upgrade\+Server\+To\+S\+S\+L()}}
\end{DoxyItemize}
\item added zoneinfo -\/$>$ Windows time zone translation code on Windows to support standard U\+N\+IX (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
\item \mbox{\hyperlink{class_qore_1_1_file_line_iterator}{Qore\+::\+File\+Line\+Iterator}} updates\+:
\begin{DoxyItemize}
\item added \mbox{\hyperlink{class_qore_1_1_file_line_iterator_afd0b7665ba69bba57fa903410680773f}{Qore\+::\+File\+Line\+Iterator\+::hstat()}} and \mbox{\hyperlink{class_qore_1_1_file_line_iterator_a07e6595ecf2b7cc2789cbd0778276b0e}{Qore\+::\+File\+Line\+Iterator\+::stat()}}
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item implemented insert option support and support for the {\ttfamily \char`\"{}returning\char`\"{}} clause in supported drivers to avoid server round trips
\item implemented the Abstract\+Table\+::get\+Desc() method and improved exception description messages
\item implemented support for late table resoluton in join arguments to enable joins from serialized parameters
\item improved error messages for common errors such as join errors
\item implemented support for D\+BA management actions
\item implemented support for driver-\/dependent pseudocolumns
\item implemented per-\/column support for the {\ttfamily \char`\"{}desc\char`\"{}} keyword in orderby expressions
\item implemented the {\ttfamily \char`\"{}wop\+\_\+or()\char`\"{}} function to allow complex S\+QL expressions to be generated with {\ttfamily \char`\"{}or\char`\"{}} as well as {\ttfamily \char`\"{}and\char`\"{}} 
\item implemented the {\ttfamily \char`\"{}cop\+\_\+cast()\char`\"{}} operator for converting \mbox{[}column\mbox{]} value into another datatype
\item implemented the {\ttfamily \char`\"{}cop\+\_\+sum()\char`\"{}} aggregate operator for returning sum of column values
\item implemented update operators {\ttfamily \char`\"{}uop\+\_\+plus()\char`\"{}}, {\ttfamily \char`\"{}uop\+\_\+minus()\char`\"{}}, {\ttfamily \char`\"{}uop\+\_\+multiply()\char`\"{}}, {\ttfamily \char`\"{}uop\+\_\+divide()\char`\"{}} 
\item implemented Abstract\+Table\+::get\+Bulk\+Upsert\+Closure() to better support bulk S\+QL merge operations
\item removed all A\+P\+Is that handle implicit transactions; A\+P\+Is must commit transactions explicitly
\item {\itshape orderby} and {\itshape groupby} select options now take positive integers as column identifiers
\item column aliases (defined with cop\+\_\+as()) can now be used in the where hash argument and in join criteria
\item column operator functions can be used in the where clause and in join conditions (\href{https://github.com/qorelanguage/qore/issues/529}{\tt issue 529})
\item implemented the {\ttfamily \char`\"{}cop\+\_\+coalesce()\char`\"{}} column operation function to support the {\ttfamily \char`\"{}\+C\+O\+A\+L\+E\+S\+C\+E\char`\"{}} operator in queries (\href{https://github.com/qorelanguage/qore/issues/671}{\tt issue 671})
\item implemented {\ttfamily cop\+\_\+substr()} and {\ttfamily uop\+\_\+substr()} operators (\href{https://github.com/qorelanguage/qore/issues/801}{\tt issue 801})
\item implemented {\ttfamily op\+\_\+substr()} where operator (\href{https://github.com/qorelanguage/qore/issues/883}{\tt issue 883})
\item implemented the {\ttfamily \char`\"{}omit\+\_\+update\char`\"{}} upsert option for asymmetrical upserts (updates only update a subset of the columns inserted) (\href{https://github.com/qorelanguage/qore/issues/791}{\tt issue 791})
\item implemented the {\ttfamily \char`\"{}\+Upsert\+Update\+Only\char`\"{}} upsert option (\href{https://github.com/qorelanguage/qore/issues/793}{\tt issue 793})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item implemented support for views for D\+ML in the Oracle\+Table class
\item implemented support for Oracle pseudocolumns in queries
\item return lists from Oracle\textquotesingle{}s data dictionary ordered
\item implemented Abstract\+Table\+::empty\+Strings\+As\+Null()
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item added support for the following datatypes and aliases\+: {\ttfamily bool}, {\ttfamily float}, {\ttfamily int}, {\ttfamily timetz}, {\ttfamily timestamptz}, {\ttfamily varbit} 
\item added support for listing Postgre\+S\+QL types and materialized views (\href{https://github.com/qorelanguage/qore/issues/699}{\tt issue 699})
\end{DoxyItemize}
\item \href{../../modules/MysqlSqlUtil/html/index.html}{\tt Mysql\+Sql\+Util} module updates\+:
\begin{DoxyItemize}
\item added support for the following datatypes\+: {\ttfamily binary}, {\ttfamily varbinary} 
\end{DoxyItemize}
\item \href{../../modules/Util/html/index.html}{\tt Util} module updates\+:
\begin{DoxyItemize}
\item added public function {\ttfamily glob\+\_\+to\+\_\+regex()} 
\item added public functions {\ttfamily lpad()} and {\ttfamily rpad()} 
\item added public function {\ttfamily ordinal()} 
\item added public function {\ttfamily plural()} 
\item added public function {\ttfamily regex\+\_\+escape()} 
\item added public function {\ttfamily zip()} 
\item {\ttfamily parse\+\_\+to\+\_\+qore\+\_\+value()} now respects parentheses when parsing lists and hashes (\href{https://github.com/qorelanguage/qore/issues/846}{\tt issue 846})
\end{DoxyItemize}
\item added initial support for U\+T\+F-\/16 character encoding; note that U\+T\+F-\/16 is not backwards-\/compatible with A\+S\+C\+II and therefore not supported universally in Qore; it\textquotesingle{}s recommended to convert these strings to U\+T\+F-\/8 in Qore; do not use U\+T\+F-\/16 as the default character encoding in Qore; currently U\+T\+F-\/16 data can be parsed using the following classes that convert the data to U\+T\+F-\/8\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_data_line_iterator}{Qore\+::\+Data\+Line\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_file_line_iterator}{Qore\+::\+File\+Line\+Iterator}}
\end{DoxyItemize}
\item removed support for the C++ {\ttfamily Q\+D\+B\+I\+\_\+\+M\+E\+T\+H\+O\+D\+\_\+\+A\+B\+O\+R\+T\+\_\+\+T\+R\+A\+N\+S\+A\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+RT} D\+BI 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 D\+ML where a single statement can partially succeed and partially fail; the A\+BI remains unchanged; drivers that set this D\+BI method will no longer have it called because it\textquotesingle{}s not necessary; in the upcoming A\+P\+I/\+A\+BI change this C++ D\+BI method will be removed entirely
\item added support for \mbox{\hyperlink{operators_unary_plus_operator}{unary plus}}
\item added support for empty private blocks in classes
\item added support for \mbox{\hyperlink{group__filesystem__functions_gaddd77c64341dc7694cfd3ba51c7becac}{Qore\+::statvfs()}} on Windows (simulated from {\ttfamily Get\+Disk\+Free\+Space\+Ex()} \href{https://github.com/qorelanguage/qore/issues/618}{\tt issue 618})
\item assignment of a variable to itself is now illegal (\href{https://github.com/qorelanguage/qore/issues/526}{\tt issue 526})
\item extended qpp to support the \textquotesingle{}final\textquotesingle{} class flag (\href{https://github.com/qorelanguage/qore/issues/876}{\tt issue 876})
\item extended qpp to support private members (\href{https://github.com/qorelanguage/qore/issues/924}{\tt issue 924})
\item added \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_aea0691501b3c4e0325034bd7a77f83fb}{Qore\+::zzz8floatzzz9\+::infp()}} and \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_af592f928a4c796aeb82be290b7973f91}{Qore\+::zzz8floatzzz9\+::nanp()}} predicates to \mbox{\hyperlink{data_type_declarations_float_type}{float}} (\href{https://github.com/qorelanguage/qore/issues/909}{\tt issue 909})
\end{DoxyItemize}\hypertarget{release_notes_qore_0812_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0812_bug_fixes}

\begin{DoxyItemize}
\item fixed format of octal constant -\/ there was an error if a string contained octal constant that is shorter than 3 digit
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug setting the response encoding in Http\+Server\+::set\+Reply\+Headers() where the Socket encoding was not set properly and therefore the encoding in the Content-\/\+Type in the response header did not necessarily match the encoding of the response
\item fixed a socket / connection performance problem with H\+T\+T\+PS listeners where the S\+SL connection was being negotiated inline with the accept instead of in the connection thread, thereby blocking new connections from being accepted
\item fixed bugs where U\+RI strings were improperly encoded and decoded (also fixed in the \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module)
\item fixed a bug in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module where chunked sends were not received and decoded properly in all cases for handlers that did not explicitly handle chunked messages
\item fixed a bug in Http\+Server\+::add\+Listener() with an integer argument; a U\+N\+IX socket was opened instead of a wildcard listener on the given port
\item fixed typos causing bugs in H\+T\+TP error logging (\href{https://github.com/qorelanguage/qore/issues/308}{\tt issue 308})
\item fixed a bug formatting I\+Pv6 host addresses in the return value to {\ttfamily Http\+Server\+::http\+\_\+get\+\_\+url\+\_\+from\+\_\+bind()} (\href{https://github.com/qorelanguage/qore/issues/821}{\tt issue 821})
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module fixes\+:
\begin{DoxyItemize}
\item fixed bugs where U\+RI strings were improperly encoded and decoded (also fixed in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module)
\item fixed a bug where U\+RI paths were sent as relative paths instead of absolute paths
\item fixed issues where multiple leading {\ttfamily \char`\"{}/\char`\"{}} chars were sometimes present in the request U\+RI path
\item fixed an issue where a trailing {\ttfamily \char`\"{}/\char`\"{}} char was sometimes added to the request U\+RI path (\href{https://github.com/qorelanguage/qore/issues/899}{\tt issue 899})
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where the {\ttfamily \char`\"{}format\char`\"{}} field option was not usable with fields assigned type {\ttfamily \char`\"{}$\ast$date\char`\"{}} 
\item fixed the default field type as \char`\"{}$\ast$string\char`\"{} (from \char`\"{}string\char`\"{}) to avoid parsing and outputting empty strings for missing input data
\end{DoxyItemize}
\item \href{../../modules/Schema/html/index.html}{\tt Schema} module fixes\+:
\begin{DoxyItemize}
\item Abstract\+Schema\+::combine\+Options() fails when an option variable contains \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} instead of a valid hash
\item fixed a bug with {\itshape \char`\"{}insert-\/only reference data\char`\"{}} with the verbose option; the upsert strategy was changed to {\ttfamily Upsert\+Select\+First} which means that insert-\/only reference data could also be updated
\item fixed a bug where it was not possible to provide Database options when creating schemas (\href{https://github.com/qorelanguage/qore/issues/501}{\tt issue 501})
\end{DoxyItemize}
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper} module fixes\+:
\begin{DoxyItemize}
\item moved field length checks after all transformations have been applied
\item fixed bugs in the {\ttfamily \char`\"{}timezone\char`\"{}} and {\ttfamily \char`\"{}input\+\_\+timezone\char`\"{}} options, documented those options
\item fixed a bug where {\ttfamily \char`\"{}constant\char`\"{}} field tags assigned to a value that evaluated to boolean \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} were not recognized (\href{https://github.com/qorelanguage/qore/issues/610}{\tt issue 610})
\end{DoxyItemize}
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug with queries using a {\itshape desc} argument with the {\itshape orderby} query option with multiple sort columns; the {\ttfamily \char`\"{}desc\char`\"{}} string was added only to the last column but should have been added to all columns
\item fixed a bug where foreign key constraints with supporting indexes were not tracked and therefore schema alignment on D\+Bs that automatically create indexes for foreign key constraints would fail
\item fixed a bug where driver-\/specific objects were not included when dropping a schema
\item fixed a bug in subquery handling where bind-\/by-\/value arguments from the subquery were lost
\item fixed a bug in the partition by/over operator where column names as given in the query argument hash were not properly recognized
\item fixed a bug in schema alignment; when aligning a schema and an index supporting a PK constraint is introduced in the new schema, the alignment would fail when a constraint is attempted to be disabled that doesn\textquotesingle{}t exist
\item fixed a bug generating select statements for tables accessed through a synonym when used with join clauses; previously inconsistent schema prefixes could be used which could cause errors parsing the S\+QL statements generated
\item fixed a bug where the Abstract\+Table lock was held while executing S\+QL to determine the upsert strategy to use with Upsert\+Auto
\item fixed a bug where complex bind values as hashes (such as used by the pgsql and oracle drivers) were rejected by Sql\+Util (\href{https://github.com/qorelanguage/qore/issues/494}{\tt issue 494}) when updating
\item fixed a bug where wildcard columns in join tables were not working (\href{https://github.com/qorelanguage/qore/issues/499}{\tt issue 499})
\item fixed a bug in {\ttfamily \char`\"{}op\+\_\+in()\char`\"{}} where invalid S\+QL was generated with an argument of 0 (\href{https://github.com/qorelanguage/qore/issues/500}{\tt issue 500})
\item fixed bugs in {\ttfamily cop\+\_\+seq()} and {\ttfamily cop\+\_\+seq\+\_\+currval()} (\href{https://github.com/qorelanguage/qore/issues/624}{\tt issue 624})
\item fixed a bug in {\ttfamily join\+\_\+inner()} where the {\itshape cond} argument was ignored (\href{https://github.com/qorelanguage/qore/issues/645}{\tt issue 645})
\item fixed {\ttfamily \char`\"{}uop\+\_\+lower()\char`\"{}} and {\ttfamily \char`\"{}uop\+\_\+upper()\char`\"{}} operators to allow nesting (\href{https://github.com/qorelanguage/qore/issues/657}{\tt issue 657})
\item fixed a bug where Sql\+Util was generating invalid S\+QL for some D\+Bs where a wilcard was used with explicit column names (\href{https://github.com/qorelanguage/qore/issues/708}{\tt issue 708})
\item fixed a bug where updating an index without any source constraints caused an invalid exception to be raised (\href{https://github.com/qorelanguage/qore/issues/768}{\tt issue 768})
\item fixed a bug in {\ttfamily Abstract\+Table\+::update()} with sequence operators (\href{https://github.com/qorelanguage/qore/issues/942}{\tt issue 942})
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where column names that are reserved words were not quoted in generated S\+QL
\item fixed bugs in {\ttfamily cop\+\_\+seq()} and {\ttfamily cop\+\_\+seq\+\_\+currval()} (\href{https://github.com/qorelanguage/qore/issues/624}{\tt issue 624})
\end{DoxyItemize}
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug in Pgsql\+Table\+::try\+Insert\+Impl(); added an explicit {\ttfamily \char`\"{}begin\char`\"{}} call to make the savepoint work with Postgre\+S\+QL 9.\+3+ servers
\item fixed a bug retrieving foreign constraints; columns were not guaranteed to be returned in declaration order
\item fixed a bug handling tablespaces in unique constraints
\item fixed a bug handling {\ttfamily \char`\"{}time\char`\"{}} columns; they were being issued as {\ttfamily \char`\"{}time6\char`\"{}} instead of \char`\"{}time(6)\char`\"{} (\href{https://github.com/qorelanguage/qore/issues/385}{\tt issue 385})
\item fixed support for the following datatypes and aliases\+: {\ttfamily \char`\"{}bit\char`\"{}}, {\ttfamily \char`\"{}bit varying\char`\"{}}, {\ttfamily \char`\"{}char\char`\"{}}, {\ttfamily \char`\"{}character\char`\"{}}, {\ttfamily \char`\"{}character varying\char`\"{}}, {\ttfamily \char`\"{}char varying\char`\"{}}, {\ttfamily \char`\"{}oid\char`\"{}}, {\ttfamily \char`\"{}varchar\char`\"{}} 
\item fixed bugs in {\ttfamily cop\+\_\+seq()} and {\ttfamily cop\+\_\+seq\+\_\+currval()} (\href{https://github.com/qorelanguage/qore/issues/624}{\tt issue 624})
\end{DoxyItemize}
\item \href{../../modules/MysqlSqlUtil/html/index.html}{\tt Mysql\+Sql\+Util} module fixes\+:
\begin{DoxyItemize}
\item corrected support for the {\ttfamily varbinary} type (\href{https://github.com/qorelanguage/qore/issues/403}{\tt issue 403})
\item corrected support for the {\ttfamily binary} type (\href{https://github.com/qorelanguage/qore/issues/524}{\tt issue 524})
\item {\ttfamily schema} member incorrectly set by \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_aea226bb7ae548363ae25a4f1e306b34a}{Abstract\+Datasource\+:\+:get\+User\+Name()}} instead of \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_a1e0d642801b1ce96fea0553ae4def964}{Abstract\+Datasource\+:\+:get\+D\+B\+Name()}} (\href{https://github.com/qorelanguage/qore/pull/519}{\tt issue 519})
\end{DoxyItemize}
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where template programs with \mbox{\hyperlink{group__parse__options_gaa980dd723754782db7b8be9abe77615a}{Qore\+::\+P\+O\+\_\+\+A\+L\+L\+O\+W\+\_\+\+B\+A\+R\+E\+\_\+\+R\+E\+FS}} set did not work
\item fixed a bug serving index files in {\ttfamily File\+Handler\+::try\+Serve\+Request()} where index files could be incorrectly served with a {\ttfamily \char`\"{}204 No Content\char`\"{}} response (\href{https://github.com/qorelanguage/qore/issues/616}{\tt issue 616})
\end{DoxyItemize}
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler} module fixes\+:
\begin{DoxyItemize}
\item fixed a bug where the connection object was deleted when the connection closes which could cause excess exceptions in multithreaded server code
\item added the Web\+Socket\+Connection\+::connection\+Closed() method to be called when the connection is closed
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client} module updates\+:
\begin{DoxyItemize}
\item updated module to version 1.\+3
\item ignore {\ttfamily S\+O\+C\+K\+E\+T-\/\+N\+O\+T-\/\+O\+P\+EN} errors when closing (server already closed the connection)
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module fixes\+:
\begin{DoxyItemize}
\item fold all possible arguments in the R\+E\+ST request body into the argument hash so that complex R\+E\+ST requests can be made with clear U\+RI strings
\item fixed a bug where an error calling an internal nonexistent method would be reported with an incorrect error message
\item send errors are now reported in the {\ttfamily Abstract\+Rest\+Stream\+Request\+Handler} object so they can be properly logged (\href{https://github.com/qorelanguage/qore/issues/734}{\tt issue 734})
\item unknown R\+E\+ST class errors with the base class are now reported consistently like all other such errors (\href{https://github.com/qorelanguage/qore/issues/859}{\tt issue 859})
\item fixed an issue where request U\+RI paths with multiple consecutive {\ttfamily \char`\"{}/\char`\"{}} chars were handled incorrectly (\href{https://github.com/qorelanguage/qore/issues/900}{\tt issue 900})
\end{DoxyItemize}
\item \href{../../modules/Util/html/index.html}{\tt Util} module fixes\+:
\begin{DoxyItemize}
\item fixed {\ttfamily normalize\+\_\+dir\+\_\+windows()} handling of U\+NC paths (\href{https://github.com/qorelanguage/qore/issues/813}{\tt issue 813})
\end{DoxyItemize}
\item fixed a memory error in error-\/handling with type errors when parsing user module headers that could cause a crash
\item fixed a memory leak in \mbox{\hyperlink{class_qore_1_1_socket_a4c3b78b845de5f48434e527755dec18a}{Socket\+:\+:set\+Warning\+Queue()}}\+: when a callback argument is used, the argument can be leaked when the \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} is destroyed
\item fixed a bug where the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class did not send the X.\+509 certificate and private key when making a client S\+SL connection
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} class where an error in shutdown handling could cause a crash in rare conditions when \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} methods are called while the pool is shutting down
\item fixed a crashing bug initializing some lvalues with type restrictions; affected static class variables at least
\item fixed a bug where a class calling an overridden method in a base class constructor that referred to a member that should have been initialized in the subclass would be executed before the subclass\textquotesingle{}s members were initialized causing the method call to fail
\item fixed a memory leak in classes with multiple inheritance and base classes that are inherited multiple times with member initialization
\item fixed a bug in the \mbox{\hyperlink{parse_directives_include}{\%include}} and \mbox{\hyperlink{parse_directives_append-module-path}{\%append-\/module-\/path}} parse directives where relative paths were not calculated from the script\textquotesingle{}s directory but instead were calculated from the current working directory, causing such paths to fail
\item fixed a bug in \mbox{\hyperlink{group__misc__functions_gaa0c7ff8f74f88213fdcee6fd6082b16d}{Qore\+::get\+\_\+qore\+\_\+library\+\_\+info()}} that could cause a crash due to treating the {\itshape Build} attribute as a string when it was an integer
\item fixed a bug in the \mbox{\hyperlink{operators_divide_equals_operator}{divide-\/equals (/=) operator}} where an exception was not thrown when an operand of zero with arbitrary-\/precision numeric arguments is used
\item fixed a bug where the connection mode would be reset for every connection in the \mbox{\hyperlink{class_qore_1_1_ftp_client}{Qore\+::\+Ftp\+Client}} class
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_ftp_client}{Qore\+::\+Ftp\+Client}} class where connection problems in the data channel when executing certain F\+TP commands could cause a crash due to missing error checking
\item fixed a bug in \mbox{\hyperlink{namespace_qore}{Qore}}\textquotesingle{}s internal strcasestr() function on platforms that do not support this function (ex\+: Solaris) that could result in a crash
\item fixed a bug in \mbox{\hyperlink{namespace_qore}{Qore}} where string data formatted with {\ttfamily \%n}, {\ttfamily \%N}, or {\ttfamily \%y} could be added to another string with a different character encoding without any automatic conversions, therefore resulting in an improperly-\/encoded string
\item fixed a crash when parsing when parsing function, method, or closure arguments when either of the \mbox{\hyperlink{warnings_duplicate-local-vars}{duplicate-\/local-\/vars}} or \mbox{\hyperlink{warnings_duplicate-block-vars}{duplicate-\/block-\/vars}} warnings are set due to an error handling thread-\/local variable info in parse initialization
\item fixed a bug where code with mixed coding styles (old and new) could result in invalid parse errors when parsing base class constructor calls to a base class defined in another coding style
\item fixed a bug where an H\+T\+TP response with an unknown {\ttfamily Content-\/\+Encoding} header would cause a crash
\item fixed a memory error with receiving H\+T\+TP chunked data with receive callbacks where the buffer object was reset with reference counts $>$ 1
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_ftp_client}{Ftp\+Client}} class where socket errors would not cause the connection to be closed automatically and therefore further use of the object required a manual disconnect even though the object supports transparent auto-\/reconnection
\item fixed a bug where conversions from float to number would introduce inaccuracy in the arbitrary-\/precision number; ex\+: {\ttfamily 737.\+38.\+to\+Number() -\/$>$ 737.\+3799999999999954525264911353588104248}
\item fixed a bug where \mbox{\hyperlink{parse_directives_requires}{\%requires}} would fail loading a user module inside a \mbox{\hyperlink{parse_directives_try-module}{\%try-\/module}} block
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Qore\+::\+Program\+::import\+Class()}} where the import would fail if a namespace-\/justified class name was given and any element of the namespace path didn\textquotesingle{}t already exist in the target whereas the same import would succeed if the namespace were omitted in the call
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Qore\+::\+Program\+::import\+Class()}}, \mbox{\hyperlink{class_qore_1_1_program_a9a2e3da4029c50643169cbb72e57f494}{Qore\+::\+Program\+::import\+Function()}}, and \mbox{\hyperlink{class_qore_1_1_program_a5db34046e2722a8519642ad98f412ed3}{Qore\+::\+Program\+::import\+Global\+Variable()}} when namespace-\/justified arguments were given, in this case when namespaces were created in the target, the internal root namespace index was not updated so the imported objects could not be found with namespace-\/justified references until the root indexes were updated
\item fixed a bug in the \mbox{\hyperlink{parse_directives_requires}{\%requires}} directive where relative paths were not calculated from the script\textquotesingle{}s directory but rather from the current working directory
\item fixed various bugs in path handling on Windows in the following areas\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__library__functions_ga2552ac9c7f40c474e3b311b6178d7909}{Qore\+::basename()}}
\item \mbox{\hyperlink{group__misc__functions_ga4730f5a695996be26efbfa9760417b1b}{Qore\+::get\+\_\+script\+\_\+dir()}}
\item \mbox{\hyperlink{group__misc__functions_ga3ebc5d7d350677395e4b89686ca335b4}{Qore\+::get\+\_\+script\+\_\+path()}}
\item \mbox{\hyperlink{group__misc__functions_gade1f45f4d12597822362d920c84695a5}{Qore\+::get\+\_\+script\+\_\+name()}}
\item \mbox{\hyperlink{class_qore_1_1_dir}{Qore\+::\+Dir}}
\item module importing and include file handling
\end{DoxyItemize}
\item fixed a bug in parsing constant value assignment expressions where such expressions could use or instantiate classes with uncommitted changes and therefore a crash could result
\item fixed a bug in user module initialization and destruction where call references were not accepted, contrary to the documentation and design goals
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_socket_adb234af8e02eee33b15a55f0ad37f690}{Qore\+::\+Socket\+::accept\+S\+S\+L()}} and \mbox{\hyperlink{class_qore_1_1_socket_a3d64c129d67687ab0e00b96b495059c5}{Qore\+::\+Socket\+::connect\+S\+S\+L()}} where the timeout argument was not respected for S\+SL protocol negotation by implementing non-\/blocking I/O support for the internal S\+SL calls for upgrading the socket connection
\item fixed a memory leak in exception handling in the \mbox{\hyperlink{class_qore_1_1_ftp_client_a835c52e32ee089773d48574f297e7965}{Qore\+::\+Ftp\+Client\+::put()}} method (thanks to nros)
\item fixed a memory error in string handling in the \mbox{\hyperlink{class_qore_1_1_ftp_client}{Qore\+::\+Ftp\+Client}} class\textquotesingle{}s F\+TP response handling code
\item fixed a bug in aligning table data in the sqlutil example program
\item fixed a bug when loading modules by a path argument; if the module is already loaded, then do not throw an exception
\item adjusted the stack guard buffer for x86\+\_\+64 from 20K -\/$>$ 32K which solved some rare crashes related to stack exhaustion (ex\+: make check works consistently now on x86\+\_\+64 Linux)
\item fixed a bug handling H\+T\+TP send callbacks that returned zero-\/length strings and binary objects which would cause invalid chunked data to be sent violating the H\+T\+TP protocol
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a953480807dbdafae0808a6c47014c0d6}{Datasource\+Pool\+:\+:get\+Server\+Version()}} method where the connection to the server was not guaranteed to be in place before the call, in case of connection errors in the pool a crash could result
\item fixed a crash in \mbox{\hyperlink{class_qore_1_1_file_line_iterator_a00df8c3068548371230467c0cbca0169}{Qore\+::\+File\+Line\+Iterator\+::copy()}} when no {\itshape eol} attribute is set
\item fixed a bug importing invalid user modules with no module declaration
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1_socket_a39eb3993cde9b9e0096412d1edbc3a57}{Qore\+::\+Socket\+::accept()}} and \mbox{\hyperlink{class_qore_1_1_socket_adb234af8e02eee33b15a55f0ad37f690}{Qore\+::\+Socket\+::accept\+S\+S\+L()}} where the S\+SL configuration was not copied to the new \mbox{\hyperlink{class_qore_1_1_socket}{Qore\+::\+Socket}}
\item fixed some object encapsulation violation bugs where access to methods of a privately-\/inherited class was allowed from a subclass in certain situations
\item fixed inconsistent object encapsulation enforcement with method references; if a reference to a method is created inside the class, then when executed the call inherits the access rights at the time of creation
\item fixed inconsistent thread gating for code data structures in \mbox{\hyperlink{class_qore_1_1_program}{Program}} containers that could have theoretically lead to crashes in \mbox{\hyperlink{class_qore_1_1_program}{Program}} containers that parse code while threads are running
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_program_a9a2e3da4029c50643169cbb72e57f494}{Qore\+::\+Program\+::import\+Function()}} with function names with a namespace path
\item fixed a bug in closure calls when a closure is called from within a closure and referes to closure-\/bound locally variables in the internal closure call which would previously result in a crash
\item fixed a parse-\/time memory leak in call reference calls when the callable object is resolved from a class constant
\item fixed a bug in maintaining the conditional compilation status when parsing \mbox{\hyperlink{parse_directives_include}{\%include}} directives and \mbox{\hyperlink{parse_directives_requires}{\%requires}} directives with user modules
\item fixed an obscure bug when a thread terminates in a \mbox{\hyperlink{class_qore_1_1_program}{Program}} object after the Program container itself has already been deleted where the termination would hang while waiting for the Program\textquotesingle{}s thread count to reach zero while the last thread doing the waiting also held the last thread reference
\item fixed a bug where incompatible class definitions were not verified at parse time which could cause a crash in debug builds and unpredictable behavior in non-\/debug builds
\item fixed a race condition in finalizing thread-\/local data in \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects during Program destruction that could lead to a runtime crash
\item fixed a crash when user modules have recursive dependencies
\item fixed a bug with \mbox{\hyperlink{parse_directives_push-parse-options}{\%push-\/parse-\/options}} when used multiple times in the same file; now multiple appearances of this parse directive are ignored
\item fixed a bug initializing static class variables in the parse commit phase where a crash could result due to an error in managing parse commit dependencies
\item fixed \mbox{\hyperlink{group__filesystem__functions_ga1f94b219bfc67a292a80cafcd2416ee5}{Qore\+::is\+\_\+writable()}}\+:
\begin{DoxyItemize}
\item on Windows when used with a directory
\item on U\+N\+IX to return a value for the current permissions the program is running under
\end{DoxyItemize}
\item fixed a bug in \mbox{\hyperlink{group__string__functions_gac398df10ac00f3b102ac1896f59391c1}{Qore\+::regex\+\_\+extract()}} and in the \mbox{\hyperlink{operators_regex_extract_operator}{Regular Expression Pattern Extraction Operator}} where the result buffer was not resized when it was too small, limiting regular expressions to nine subpatterns; the maximum has been raised to between 90 and 100 before an exception is raised (since the subpattern buffer is allocated on the stack, we need to enforce a limit)
\item fixed a bug with the \mbox{\hyperlink{operators_cast}{cast$<$$>$() operator where compatible classes were not recognized at runtime that would otherwise be recognized correctly without the cast}}
\item fixed the return type in \mbox{\hyperlink{group__filesystem__functions_ga891ce19bfbec289e7ef2a1e20d44ba4a}{Qore\+::getcwd()}} to \mbox{\hyperlink{data_type_declarations_string_or_nothing_type}{$\ast$string}}
\item fixed a bug in the \mbox{\hyperlink{statements_return}{return statement}} where the runtime return type was used at parse time which did not work when parsing embedded code
\item fixed a bug validating return values in method evaluation that could lead to a qore crash
\item fixed a bug in the \mbox{\hyperlink{parse_directives_requires}{\%requires}} directive when applied to builtin features where code to manage user module dependencies was inappropriately applied
\item fixed a bug nesting 3 levels or more of parse conditionals (\mbox{\hyperlink{parse_directives_ifdef}{\%ifdef}} and \mbox{\hyperlink{parse_directives_ifndef}{\%ifndef}}) where the conditional parse state could be lost (and an assertion was made in debug mode)
\item fixed a bug where ==, $>$, and $<$ operators applied type precedence incorrectly when applying optimizations at parse time in relation to arbitrary-\/precision numeric values
\item fixed a static memory leak in the parser handling out of line method declarations
\item fixed a bug in handling socket disconnection errors in S\+SL operations where the S\+SL helper object was deleted and then used causing a crash
\item fixed a bug where \mbox{\hyperlink{deprecated}{Deprecated List}} and \mbox{\hyperlink{warnings_return-value-ignored}{return-\/value-\/ignored}} warnings were reported at the incorrect source location
\item fixed a bug in \mbox{\hyperlink{group__threading__functions_gae83c32576b59a1ecfa906d9b3c3af557}{Qore\+::set\+\_\+thread\+\_\+init()}} where thread initialization did not occur when foreign threads attached to a \mbox{\hyperlink{class_qore_1_1_program}{Qore\+::\+Program}} object with thread initialization set
\item fixed a bug in call references and objects by replacing string references to the containing Program object with weak references which solved a recursive reference / memory leak issue
\item fixed a memory leak when a thread init call reference was used with \mbox{\hyperlink{class_qore_1_1_program}{Qore\+::\+Program}} objects
\item fixed bugs in \mbox{\hyperlink{namespace_qore}{Qore}} S\+SL socket handling when the remote connection is disconnected while performing an S\+SL upgrade (client or server) that could cause a crash
\item fixed a bug where the sending an invalid H\+T\+TP header to the \mbox{\hyperlink{class_qore_1_1_socket_a2eb897451c69d1c916a038e6648345a9}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Response()}} method could cause a crash
\item fixed bugs in \mbox{\hyperlink{group__library__functions_gab480d27a192337309e6497158df8e54c}{system()}}\+:
\begin{DoxyItemize}
\item the shell was not being used to execute commands with commands where shell meta-\/characters were not found with a manual search which caused such commands to fail; additionally {\ttfamily \&} (ampersand) characters were not recognized as shell meta-\/characters
\item fixed problems with signal handling in child processes on U\+N\+I\+Xes\+: \mbox{\hyperlink{group__library__functions_gab480d27a192337309e6497158df8e54c}{system()}} now always performs a {\ttfamily fork(2)}, enables all signals, and calls {\ttfamily execl(\char`\"{}/bin/sh\char`\"{}, \char`\"{}sh\char`\"{}, \char`\"{}-\/c\char`\"{}, }{\itshape command}{\ttfamily , 0)} in the child process (on U\+N\+IX systems; on Windows, system(3) is used directly as before)
\end{DoxyItemize}
\item fixed a race condition in the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} class when opening new datasources after a connection error in the first datasource which could cause a crash. Now the first datasource is no longer a \char`\"{}special\char`\"{} datasource used for configuration information; configuration information is contained in a separate object which serves as an internal Datasource factory
\item fixed a problem where {\ttfamily S\+I\+G\+C\+H\+LD} was blocked by default which caused deadlocks when spawning child processes that in turn waited on grandchild processes -\/ now Qore no longer blocks {\ttfamily S\+I\+G\+C\+H\+LD} on U\+N\+IX platforms
\item fixed a bug in Binary\+Node\+::clear() where the internal pointer was freed but not set to 0 leading to a subsequent crash when the object is destroyed; affected H\+T\+T\+P\+Client chunked reads of binary data when used with a callback
\item fixed a bug where the runtime exception location could be reported in the wrong location
\item fixed a bug where the bzip2 library can request a buffer size that could not be handled by the bzip2 library which is not handled by qore and causes a crash while decompressing certain input
\item fixed a bug handling closure-\/bound local variables when closures are created in the background operator expression that caused a core dump
\item fixed the precedence of the \mbox{\hyperlink{operators_assignment_operator}{assignment operator (=)}}; now the precedence of this operator is the same as the other assignment operators (\mbox{\hyperlink{operators_plus_equals_operator}{+=}}, \mbox{\hyperlink{operators_minus_equals_operator}{-\/=}}, \mbox{\hyperlink{operators_multiply_equals_operator}{$\ast$=}}, and \mbox{\hyperlink{operators_divide_equals_operator}{/=}}, etc); this does not break any code, but does align Qore with other programming languages (such as C, among others) and allows for expressions such as
\begin{DoxyCode}
a = b += 2
\end{DoxyCode}
 to be correctly parsed
\item fixed a parse-\/time bug in the \mbox{\hyperlink{operators_trim}{trim operator}} where the operator\textquotesingle{}s return type was incorrectly returned as \mbox{\hyperlink{data_type_declarations_int_type}{int}} instead of the type of the lvalue
\item fixed a bug initializing object members with a closure that refers to {\itshape self} 
\item fixed bugs in the documentation and return types of\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_aabc22daa5cea8c428bcea138f6930871}{Qore\+::\+Read\+Only\+File\+::read\+Binary\+File()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_adf4bf9669160cfd74594b9ed0e854e7f}{Qore\+::\+Read\+Only\+File\+::read\+Text\+File()}}
\end{DoxyItemize}
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_get_opt_a3d69f9706fc639793b1371f4696f443c}{Qore\+::\+Get\+Opt\+::parse(softlist)}}, \mbox{\hyperlink{class_qore_1_1_get_opt_add51d1f1f19c5b51d93bc518834274ad}{Qore\+::\+Get\+Opt\+::parse2(softlist)}}, and \mbox{\hyperlink{class_qore_1_1_get_opt_ae2bf4d8e8858fc576d916e506b5c04bf}{Qore\+::\+Get\+Opt\+::parse3(softlist)}} where call-\/by-\/value and copy-\/on-\/write semantics were not enforced and a shared list argument could be modified
\item fixed a bug in zoneinfo file parsing where invalid bands with no U\+TC offset changes against the previous band could cause invalid date/time values to be displayed by \mbox{\hyperlink{namespace_qore}{Qore}} for dates on the invalid transition
\item fixed a bug where imported global variables (\mbox{\hyperlink{class_qore_1_1_program_a5db34046e2722a8519642ad98f412ed3}{Qore\+::\+Program\+::import\+Global\+Variable()}}) were added to the pending global variable list and therefore were removed if a parse exception occurred, hwoever the namespace indexes remained, which could lead to unexpected problems at runtime including a crash. Additionally the pending global variable list was not checked which could lead to a memory leak if the a single global variable name is pending, imported, and then committed to the \mbox{\hyperlink{class_qore_1_1_program}{Program}} object.
\item fixed memory errors managing program feature lists in the Char\+Ptr\+List class by copying string memory instead of using sometimes temporary values in the list
\item fixed minor bugs with directive parsing, mostly related to error reporting
\item fixed bugs in relative date arithmetic where operands were swapped with the \mbox{\hyperlink{operators_minus_operator}{-\/ operator}} if the first operand was a \mbox{\hyperlink{basic_data_types_relative_dates}{relative date/time value}}, additionally an operation with the \mbox{\hyperlink{operators_minus_operator}{-\/ operator}} where the first operand is a \mbox{\hyperlink{basic_data_types_relative_dates}{relative date}} and the second operand is a \mbox{\hyperlink{basic_data_types_absolute_dates}{absolute date}} is now calculated using the \mbox{\hyperlink{basic_data_types_absolute_dates}{absolute date}}\textquotesingle{}s epoch offset (offset in seconds and microseconds from {\ttfamily 1970-\/01-\/01Z}), and a \mbox{\hyperlink{basic_data_types_relative_dates}{relative date/time value}} is produced
\item fixed a bug normalizing the result of date arithmetic between hour and minute components of \mbox{\hyperlink{basic_data_types_relative_dates}{relative date/time value}}
\item fixed a bug where time components of absolute date/time values before the U\+N\+IX epoch were returned with invalid values
\item fixed a bug where the \mbox{\hyperlink{parse_directives_exec-class}{\%exec-\/class}} directive did not check for classes with unimplemented abstract variants
\item fixed a bug where the \mbox{\hyperlink{operators_push}{push}} and \mbox{\hyperlink{operators_unshift}{unshift}} operators applied to a variable declared as softlist did not use the default value
\item fixed a bug where calls to \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a59c32a1cb1c23f5616a57c7b349521ef}{Qore\+::\+H\+T\+T\+P\+Client\+::set\+Connect\+Timeout()}} had no effect (\href{https://github.com/qorelanguage/qore/issues/323}{\tt issue 323})
\item fixed several bugs with logical comparison operators and arbitrary-\/precision numeric values (\href{https://github.com/qorelanguage/qore/issues/330}{\tt issue 330})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_hash_list_iterator}{Qore\+::\+Hash\+List\+Iterator}} (and therefore \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aab3d2e6e69d212dbe05de43136f14367}{Qore\+::zzz8hashzzz9\+::context\+Iterator()}}) would not iterate a simple hash with non-\/list values once but would instead silently ignore the hash (\href{https://github.com/qorelanguage/qore/issues/336}{\tt issue 336})
\item fixed a bug where a warning was not always issued when square brackets were used on unsuitable types (\href{https://github.com/qorelanguage/qore/issues/184}{\tt issue 184}), internally ported the square bracket operator to the C++ Qore\+Operator\+Node hierarchy
\item fixed a bug handling return type information for method and pseudo-\/method calls; uninitialized memory could be used which could cause a runtime crash (\href{https://github.com/qorelanguage/qore/issues/364}{\tt issue 364})
\item corrected the name of the \mbox{\hyperlink{operators_modulo_operator}{modulo operator}} (was incorrectly referred to as the \char`\"{}modula\char`\"{} operator earlier\+: \href{}{\tt issue 389})
\item fixed a bug handling identifiers in parentheses used to dereference hashes or objects; the identifer is not resolved properly whereas previoulsy it was incorrectly interpreted as a string literal (\href{https://github.com/qorelanguage/qore/issues/416}{\tt issue 416})
\item fixed a bug with handling local variables in const initializers (\href{https://github.com/qorelanguage/qore/issues/421}{\tt issue 421})
\item fixed a bug where {\ttfamily select(2)} was called after {\ttfamily E\+I\+N\+TR} without reinitializing the descriptor array argument (\href{https://github.com/qorelanguage/qore/issues/435}{\tt issue 435})
\item fixed a crashing bug on all platforms where select(2) was being called with socket descriptor values $>$ {\ttfamily F\+D\+\_\+\+S\+E\+T\+S\+I\+ZE} (\href{https://github.com/qorelanguage/qore/issues/436}{\tt issue 436})
\item fixed inconsistencies \mbox{\hyperlink{basic_data_types_reldate_comparisons}{comparing relative date/time values}} (\href{https://github.com/qorelanguage/qore/issues/437}{\tt issue 437})
\item fixed a bug where \mbox{\hyperlink{statements_on_exit}{on\+\_\+exit Statements}} and \mbox{\hyperlink{statements_on_error}{on\+\_\+error Statements}} statements were not being executed if an exception was raised in an earlier-\/executed \mbox{\hyperlink{statements_on_exit}{on\+\_\+exit Statements}}, \mbox{\hyperlink{statements_on_error}{on\+\_\+error Statements}}, or \mbox{\hyperlink{statements_on_success}{on\+\_\+success Statements}} statement (\href{https://github.com/qorelanguage/qore/issues/380}{\tt issue 380})
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a970d28332d49ae168e1fc0d8dd279564}{Qore\+::\+H\+T\+T\+P\+Client\+::get()}} and \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a228268e04d51d8e37d7c649349c9e0ff}{Qore\+::\+H\+T\+T\+P\+Client\+::post()}} would try to retrieve a message body even if {\ttfamily Content-\/\+Length\+: 0} was returned (or if no {\ttfamily Content-\/\+Length} header was returned at all) which would result in a deadlock until the server would close the connection (\href{https://github.com/qorelanguage/qore/issues/434}{\tt issue 434})
\item fixed a bug where regular expression substitution would go into an infinite loop when used with an empty pattern and the global flag (\mbox{\hyperlink{group__regex__constants_gaea655c36090c9f1e6bb24cb8de998a04}{Qore\+::\+R\+E\+\_\+\+Global}}, \href{https://github.com/qorelanguage/qore/issues/329}{\tt issue 329})
\item fixed a bug with connection handling in the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} class; an exception is now thrown if a \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} object tries to execute its prepared S\+QL on a connection other than the original connection used to prepare the statement (\href{https://github.com/qorelanguage/qore/issues/465}{\tt issue 465})
\item fixed a bug where \mbox{\hyperlink{group__filesystem__functions_ga0255009acc4b2cb332fd3f9d2aae7c05}{Qore\+::is\+\_\+executable()}} would return N\+O\+T\+H\+I\+NG instead of False (as per documentation) when called with non-\/existent path as it\textquotesingle{}s parameter (\href{https://github.com/qorelanguage/qore/issues/470}{\tt issue 470})
\item fixed precedence of logical and bitwise \mbox{\hyperlink{operators}{Operators}} (\href{https://github.com/qorelanguage/qore/issues/481}{\tt issue 481})
\item fixed a bug where nested lists were not parsed correctly in some cases (\href{https://github.com/qorelanguage/qore/issues/320}{\tt issue 320})
\item fixed a bug where the type of catch parameter was ignored (\href{https://github.com/qorelanguage/qore/issues/28}{\tt issue 28})
\item fixed a bug where namespace hierarchies were not indexed during parse time when added to already-\/committed namespaces which lead to symbol resolution errors for valid code (\href{https://github.com/qorelanguage/qore/issues/538}{\tt issue 538})
\item fixed a bug where a \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} operation attempted in another thread while a callback operation on the same socket was in progress would result in a confusing error message (\href{https://github.com/qorelanguage/qore/issues/530}{\tt issue 530})
\item fixed a bug where local variable declarations in class member initialization expressions caused a crash (\href{https://github.com/qorelanguage/qore/issues/574}{\tt issue 574})
\item fixed a bug where H\+T\+TP data in H\+T\+TP socket events was modified even though it was shared which caused data consistency problems and crashes in the worst case (\href{https://github.com/qorelanguage/qore/issues/576}{\tt issue 576})
\item fixed a bug where the \`{}+=\`{} operator handled N\+O\+T\+H\+I\+NG values incorrectly (\href{https://github.com/qorelanguage/qore/issues/582}{\tt issue 582})
\item fixed a bug where a non-\/numeric define specified on the command line could cause a crash (\href{https://github.com/qorelanguage/qore/issues/583}{\tt issue 583})
\item fixed a bug where the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_aa8a89a3af86f37b4ab0fe4bdea138b56}{Qore\+::\+S\+Q\+L\+::\+S\+Q\+L\+Statement\+::describe()}} method would not grab the transation lock even when statements were implicitly executed (\href{https://github.com/qorelanguage/qore/issues/591}{\tt issue 591})
\item fixed the order of initialization of class members (\href{https://github.com/qorelanguage/qore/issues/42}{\tt issue 42})
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_time_zone_a177b96464e04cdc717cd6adc51f83371}{Qore\+::\+Time\+Zone\+::date(string)}} where the date returned was in the current contextual time zone and not that of the object (\href{https://github.com/qorelanguage/qore/issues/584}{\tt issue 584})
\item fixed a bug parsing windows paths in U\+R\+Ls with \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{Qore\+::parse\+\_\+url()}} (\href{https://github.com/qorelanguage/qore/issues/618}{\tt issue 618})
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_time_zone_ab77972801cee2c9d116a9631dfd631d9}{Qore\+::\+Time\+Zone\+::constructor(string)}} on Windows when used with an absolute path (\href{https://github.com/qorelanguage/qore/issues/626}{\tt issue 626})
\item fixed an I/\+O-\/handling bug in the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Qore\+::\+Read\+Only\+File}} and \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} classes where I/O errors in read operations were silently ignored (\href{https://github.com/qorelanguage/qore/issues/627}{\tt issue 627})
\item fixed bugs in \mbox{\hyperlink{class_qore_1_1_read_only_file_adf4bf9669160cfd74594b9ed0e854e7f}{Qore\+::\+Read\+Only\+File\+::read\+Text\+File()}} and \mbox{\hyperlink{class_qore_1_1_read_only_file_aabc22daa5cea8c428bcea138f6930871}{Qore\+::\+Read\+Only\+File\+::read\+Binary\+File()}} would return \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} instead of an empty object when reading empty files; now empty objects are returned in these cases (\href{https://github.com/qorelanguage/qore/issues/508}{\tt issue 508})
\item fixed a bug in $\ast$printf() outputs on Windows with scientific notation with floating-\/point values (\href{https://github.com/qorelanguage/qore/issues/631}{\tt issue 621})
\item fixed a bug where the precision of numbers during arithmetic operations was not adjusted correctly (\href{https://github.com/qorelanguage/qore/issues/630}{\tt issue 630}, \href{https://github.com/qorelanguage/qore/issues/908}{\tt issue 908})
\item fixed a bug where the type of subtraction of two numbers was inferred as N\+O\+T\+H\+I\+NG during parsing (\href{https://github.com/qorelanguage/qore/issues/636}{\tt issue 636})
\item fixed a bug on Windows with \mbox{\hyperlink{class_qore_1_1_dir_a9e9f05c88ac58cdbf027f8f4d8bcdc40}{Qore\+::\+Dir\+::create()}} (\href{https://github.com/qorelanguage/qore/issues/643}{\tt issue 643})
\item fixed a bug where C\+R\+LF line endings were not handled correctly by the exec-\/class parse directive (\href{https://github.com/qorelanguage/qore/issues/653}{\tt issue 653})
\item fixed a bug on Windows where \mbox{\hyperlink{group__filesystem__functions_ga2d11f815ed935f32a7da9bb58aafbd7b}{Qore\+::glob()}} would return paths beginning with {\ttfamily \char`\"{}.\char`\"{}} by default (\href{https://github.com/qorelanguage/qore/issues/660}{\tt issue 660})
\item fixed a bug on Windows where \mbox{\hyperlink{group__filesystem__functions_ga2d11f815ed935f32a7da9bb58aafbd7b}{Qore\+::glob()}} would fail on {\ttfamily \char`\"{}\textbackslash{}$\ast$\char`\"{}} or {\ttfamily \char`\"{}/$\ast$\char`\"{}} (\href{https://github.com/qorelanguage/qore/issues/664}{\tt issue 664})
\item fixed a bug on Windows where \mbox{\hyperlink{group__filesystem__functions_ga2d11f815ed935f32a7da9bb58aafbd7b}{Qore\+::glob()}} would not return paths in sorted order by default (\href{https://github.com/qorelanguage/qore/issues/665}{\tt issue 665})
\item fixed a bug on Windows where the \mbox{\hyperlink{class_qore_1_1_dir}{Qore\+::\+Dir}} class would incorrectly normalize U\+NC paths by stripping the leading backslash (\href{https://github.com/qorelanguage/qore/issues/666}{\tt issue 666})
\item fixed a bug where the \mbox{\hyperlink{data_type_declarations_int_type}{int}} type restriction would accept any data type at runtime instead of throwing a {\ttfamily R\+U\+N\+T\+I\+M\+E-\/\+T\+Y\+P\+E-\/\+E\+R\+R\+OR} exception (\href{https://github.com/qorelanguage/qore/issues/683}{\tt issue 683})
\item fixed bugs reporting the current method context with certain \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} methods that would report the \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} class instead (\href{https://github.com/qorelanguage/qore/issues/689}{\tt issue 689})
\item fixed a bug handling aborted H\+T\+TP chunked transfers; now any data available for reading on a socket when a chunked transfer is aborted is read instead of having a {\ttfamily S\+O\+C\+K\+E\+T-\/\+S\+E\+N\+D-\/\+E\+R\+R\+OR} thrown when the remote end closes the socket during the transfer (\href{https://github.com/qorelanguage/qore/issues/691}{\tt issue 691})
\item fixed a bug with socket handling where S\+SL send failures did not cause an exception to be thrown in all cases (\href{https://github.com/qorelanguage/qore/issues/732}{\tt issue 732})
\item fixed a bug on Windows where \mbox{\hyperlink{group__filesystem__functions_ga2d11f815ed935f32a7da9bb58aafbd7b}{Qore\+::glob()}} returned files matched without the leading path component (\href{https://github.com/qorelanguage/qore/issues/761}{\tt issue 761})
\item fixed a bug with socket connection refused handling on Windows where connections were waiting until the timeout instead of returning an error immediately (\href{https://github.com/qorelanguage/qore/issues/763}{\tt issue 763})
\item fixed a bug where it was not possible to escape an escape character before a {\ttfamily \textquotesingle{}\$\textquotesingle{}} character in a regular expression substitution target string (\href{https://github.com/qorelanguage/qore/issues/777}{\tt issue 777})
\item fixed a bug where object member references were treated as expressions returning a constant value which could cause a crash when used in an expression used to initialize a constant value at parse time (\href{https://github.com/qorelanguage/qore/issues/817}{\tt issue 817})
\item fixed a bug parsing I\+Pv6 localhost ({\ttfamily \char`\"{}\+::\char`\"{}}) with \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{Qore\+::parse\+\_\+url()}} (\href{https://github.com/qorelanguage/qore/issues/822}{\tt issue 822})
\item fixed a bug in Windows timezone handling caused by erroneous region names (\href{https://github.com/qorelanguage/qore/issues/824}{\tt issue 824})
\item fixed an internal memory-\/handling bug that caused a crash when cleaning up the qore library on Free\+B\+SD with clang++ and possibly other platforms (\href{https://github.com/qorelanguage/qore/issues/839}{\tt issue 839})
\item fixed a bug where {\ttfamily C\+A\+L\+L-\/\+W\+I\+T\+H-\/\+T\+Y\+P\+E-\/\+E\+R\+R\+OR} exceptions were thrown based on the parse options in the caller instead of in the target when calling across a \mbox{\hyperlink{class_qore_1_1_program}{Program}} barrier (\href{https://github.com/qorelanguage/qore/issues/841}{\tt issue 841})
\item fixed a bug where \mbox{\hyperlink{group__filesystem__functions_ga1f94b219bfc67a292a80cafcd2416ee5}{Qore\+::is\+\_\+writable()}} and \mbox{\hyperlink{group__filesystem__functions_gaf04a8a04f9130664f938cf7dc10dbaed}{Qore\+::is\+\_\+readable()}} could return an incorrect value in some cases (\href{https://github.com/qorelanguage/qore/issues/852}{\tt issue 852})
\item fixed a bug where \mbox{\hyperlink{group__string__functions_ga33bb08516773ed10def16bb42d6b8159}{Qore\+::format\+\_\+number()}} would return an invalid string when the number of decimals to be returned was 0 (\href{https://github.com/qorelanguage/qore/issues/851}{\tt issue 851})
\item fixed a bug where the \mbox{\hyperlink{operators_delete}{delete}} and \mbox{\hyperlink{operators_remove}{remove}} operators would incorrectly create hash keys when attempting to delete inside complex hash structures with non-\/existent keys (\href{https://github.com/qorelanguage/qore/issues/855}{\tt issue 855})
\item fixed a bug where duplicate global variable declarations caused a crash (\href{https://github.com/qorelanguage/qore/issues/891}{\tt issue 891})
\item fixed a memory leak in \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} initialization when the minimum connections cannot be established (\href{https://github.com/qorelanguage/qore/issues/994}{\tt issue 994})
\item fixed handling of NaN values in logical operators (\href{https://github.com/qorelanguage/qore/issues/915}{\tt issue 915})
\item fixed sort\+\_\+descending\+\_\+stable so that it keeps (instead of reversing) the original order of items that compare equal (\href{https://github.com/qorelanguage/qore/issues/940}{\tt issue 940})
\item fixed a bug in {\ttfamily copy()} method argument parsing; compatible type declarations were not accepted (\href{https://github.com/qorelanguage/qore/issues/946}{\tt issue 946})
\end{DoxyItemize}\hypertarget{release_notes_qore_0811}{}\section{Qore 0.\+8.\+11}\label{release_notes_qore_0811}
\begin{DoxyParagraph}{Release Summary}
Minor bugfix release for U\+N\+IX, major bugfixes for Windows
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0811_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_0811_new_features}

\begin{DoxyItemize}
\item added the \mbox{\hyperlink{group__network__address__family__constants_ga70894a206b70fd3973f0d4dad1322a02}{Qore\+::\+A\+F\+Map}} and \mbox{\hyperlink{group__network__address__family__constants_gafda5d0bb6a1cac9536eb682ae75c4b5c}{Qore\+::\+A\+F\+Str\+Map}} constants
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util} updates\+:
\begin{DoxyItemize}
\item added logic to the default file serving code to determine if the file is a binary or text file from the M\+I\+ME type
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_af9be5b81abf6192ea802e4c4cdecb284}{H\+T\+T\+P\+Client\+:\+:send\+With\+Send\+Callback()}} and \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_af9be5b81abf6192ea802e4c4cdecb284}{H\+T\+T\+P\+Client\+:\+:send\+With\+Send\+Callback()}} 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
\end{DoxyItemize}\hypertarget{release_notes_qore_0811_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0811_bug_fixes}

\begin{DoxyItemize}
\item Windows fixes\+:
\begin{DoxyItemize}
\item fixed Time\+Zone copying to use the standard name instead of the display name so that the info can be found in the registry
\item \href{../../modules/Util/html/index.html}{\tt Util} module fixes\+:
\begin{DoxyItemize}
\item fixed get\+\_\+random\+\_\+string() on Windows
\item fixed \mbox{\hyperlink{group__filesystem__functions_ga77456f40ff1734bb6d5692e6dbb9e8eb}{absolute\+\_\+path\+\_\+windows()}}
\end{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module fixes\+:
\begin{DoxyItemize}
\item when binding a wildcard address with \mbox{\hyperlink{group__network__address__family__constants_gac4f81abe9d374562b41117c51950fb80}{A\+F\+\_\+\+U\+N\+S\+P\+EC}} on Windows with Http\+Server\+::add\+Listeners() and both I\+Pv6 and I\+Pv4 addresses are returned, bind both addresses since Windows doesn\textquotesingle{}t direct the I\+Pv4 requests to the wildcard-\/bound I\+Pv6 listener
\end{DoxyItemize}
\item fixed file reading by always opening in binary mode
\item added support for the W\+S\+A\+E\+C\+O\+N\+N\+A\+B\+O\+R\+T\+ED socket error
\item replaced Mime\+::\+Multi\+Part\+Message\+::get\+Random\+String() with Util\+::get\+\_\+random\+\_\+string() to make it work on Windows
\end{DoxyItemize}
\item fixed a bug in the D\+BI layer where calling \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_aa8a89a3af86f37b4ab0fe4bdea138b56}{S\+Q\+L\+Statement\+:\+:describe()}} would crash when called with an older module that did not implement this method
\item other fixes in the \href{../../modules/Util/html/index.html}{\tt Util} module (in addition to the Windows-\/specific fixes above)\+:
\begin{DoxyItemize}
\item fixed parse\+\_\+to\+\_\+qore\+\_\+value() with hashes with a comma in the first key name
\item read from /dev/urandom instead of /dev/random since reads from the latter can block for long periods to fill the entropy pool
\end{DoxyItemize}
\item do not start signal thread after a \mbox{\hyperlink{group__library__functions_ga38309c0ab1c849afc031dd8547b1ac65}{fork()}} if signal handling is enabled, pthread\+\_\+create() is not async-\/signal safe (on Free\+B\+SD at least this reliably causes segfaults)
\end{DoxyItemize}\hypertarget{release_notes_qore_0810}{}\section{Qore 0.\+8.\+10}\label{release_notes_qore_0810}
\begin{DoxyParagraph}{Release Summary}
Major release with many many bugfixes and new features such as much improved H\+T\+TP and R\+E\+ST support (ex\+: chunked transfer support + new client and server classes for R\+E\+ST support for chunked transfers and data streaming), improved DB support (ex\+: new \href{../../modules/Schema/html/index.html}{\tt Schema} module, \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} improvements), and much more.
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0810_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_0810_new_features}

\begin{DoxyItemize}
\item better H\+T\+TP support; support for chunked sends and receives for streaming data over H\+T\+TP and other improvements\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_af9be5b81abf6192ea802e4c4cdecb284}{H\+T\+T\+P\+Client\+:\+:send\+With\+Send\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_af175eaef12aedc1759dd0a9dd2965e9f}{H\+T\+T\+P\+Client\+:\+:send\+With\+Recv\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_ad28aeda6922927ee534ddc2b5a9d7528}{H\+T\+T\+P\+Client\+:\+:send\+With\+Callbacks()}}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a2e3bd5ea66d056b0a3f69b4d0e86964e}{H\+T\+T\+P\+Client\+:\+:set\+Persistent()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aa3c8f41a0879b440a999db5c55663d30}{Socket\+:\+:read\+H\+T\+T\+P\+Chunked\+Body\+Binary\+With\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a97ffc465250c06c5b4fbc512bd17ee64}{Socket\+:\+:read\+H\+T\+T\+P\+Chunked\+Body\+With\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a233594adf16bcc5fe5527f26b58540a2}{Socket\+:\+:send\+H\+T\+T\+P\+Message\+With\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a7897a0edda37c1c9335dab74302a3c65}{Socket\+:\+:send\+H\+T\+T\+P\+Response\+With\+Callback()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a16039558967b42619176a9609bce5399}{Socket\+:\+:pending\+Http\+Chunked\+Body()}}
\end{DoxyItemize}
\item added a minimum body size threshold for compression to \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item configurable content encoding for send request message bodies is now supported (ie optional compression)
\end{DoxyItemize}
\item new user modules\+:
\begin{DoxyItemize}
\item \href{../../modules/Schema/html/index.html}{\tt Schema}\+: for D\+B-\/independent schema management
\end{DoxyItemize}
\item new public C++ socket performance instrumentation A\+PI
\item new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__library__functions_gab6595c1e20c2e84bea8a17544ec35a7f}{Qore\+::close\+\_\+all\+\_\+fd()}}
\end{DoxyItemize}
\item new constants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__error__constants_ga921039c89f6e5c4a48564de6bed1d360}{E\+S\+R\+CH}}\+: search error
\end{DoxyItemize}
\item \mbox{\hyperlink{group__misc__functions_ga34248adafed4b00da2a526f8f23017cf}{get\+Module\+Hash()}} and \mbox{\hyperlink{group__misc__functions_ga82506074037fe39372ea4f44e2582a75}{get\+Module\+List()}} no longer return the {\ttfamily \char`\"{}filename\char`\"{}} key when run in a \mbox{\hyperlink{class_qore_1_1_program}{Program}} context with \mbox{\hyperlink{group__parse__options_ga213aab826b55076c29ffeecebbaea237}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+E\+X\+T\+E\+R\+N\+A\+L\+\_\+\+I\+N\+FO}} set
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} updates\+:
\begin{DoxyItemize}
\item added insert operator support; for example, for inserting with values from sequences
\item added new upsert constant maps
\item added static Sql\+Util\+::\+Abstract\+Sql\+Util\+Base\+::get\+Datasource\+Desc() method
\item added new Table\+::insert\+From\+Select$\ast$() variants taking Table arguments
\item added Sql\+Util\+::\+Table\+::check\+Existence() method
\item added support for the {\ttfamily \char`\"{}forupdate\char`\"{}} select option
\end{DoxyItemize}
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util} updates\+:
\begin{DoxyItemize}
\item fixed selects with \char`\"{}limit\char`\"{} but no \char`\"{}offset\char`\"{}
\item convert date/time values to timestamps with microseconds resolution instead of dates with second resolution when dynamically inserting values as strings in S\+QL (binding by value not affected)
\end{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module updates\+:
\begin{DoxyItemize}
\item added the {\ttfamily \char`\"{}write-\/headers\char`\"{}} option to {\ttfamily Abstract\+Csv\+Writer} and subclasses to enable headers to be suppressed
\item added the {\ttfamily \char`\"{}optimal-\/quotes\char`\"{}} option to {\ttfamily Abstract\+Csv\+Writer} and subclasses to enable more efficient csv output (now the default)
\end{DoxyItemize}
\item added \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_a2760e15dfe892c6f37f4f9cab6e86379}{Abstract\+Datasource\+:\+:current\+Thread\+In\+Transaction()}} which is reimplemented as \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a5661e26369193015c195166e52c6d121}{Datasource\+:\+:current\+Thread\+In\+Transaction()}} and \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_ac983fd7cd64d2de924113b8cb540ca11}{Datasource\+Pool\+:\+:current\+Thread\+In\+Transaction()}}; 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 Abstract\+Datasource
\item enhanced module license support
\begin{DoxyItemize}
\item module license strings may now be specified in binary and user modules
\item \mbox{\hyperlink{group__misc__functions_ga34248adafed4b00da2a526f8f23017cf}{Qore\+::get\+Module\+Hash()}} and \mbox{\hyperlink{group__misc__functions_ga82506074037fe39372ea4f44e2582a75}{Qore\+::get\+Module\+List()}} now report license information for each module
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_0810_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0810_bug_fixes}

\begin{DoxyItemize}
\item 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
\item \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module\+: fixed missing username and missing password errors
\item fixed a bug where a qore switch statement with no case conditions and only a default label would erroneously never have it\textquotesingle{}s default code executed
\item fixed a reference leak related to exception handling with invalid arguments with \mbox{\hyperlink{class_qore_1_1_socket_a4c3b78b845de5f48434e527755dec18a}{Qore\+::\+Socket\+::set\+Warning\+Queue()}} and \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_ae2aafddbf5be67012e3b57f846c4105e}{Qore\+::\+H\+T\+T\+P\+Client\+::set\+Warning\+Queue()}}
\item fixed several bugs where the parse location could be reported incorrectly for type errors regarding in-\/object variable references
\item fixed a bug where an error could result with \mbox{\hyperlink{class_qore_1_1_thread_1_1_condition_a8f29b21d4146f40315e25d3bbf840196}{Condition\+:\+:wait()}} with timeouts $>$ 2147483648ms
\item fixed bugs handling \char`\"{}bigint\char`\"{} and \char`\"{}double precision\char`\"{} column types with schema alignments with the \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} module
\item 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
\item fixed a bug where qore could crash on exit with certain openssl versions by calling E\+R\+R\+\_\+remove\+\_\+state(0) in the main thread\textquotesingle{}s cleanup function
\item fixed a bug where qore could crash on exit due to user module destruction not taking into consideration user module dependencies
\item fixed a bug in schema management in \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} 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 Postgre\+S\+QL databases
\item 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
\item 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
\item fixed a bug in the \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module when the yaml binary module is not available
\item fixed programmatic select queries with \char`\"{}limit\char`\"{} but no \char`\"{}offset\char`\"{} in \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util}
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_program_a9a2e3da4029c50643169cbb72e57f494}{Qore\+::\+Program\+::import\+Function()}} where only the committed function list was checked when importing functions with a specific target namespace path
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Qore\+::\+Program\+::import\+Class()}} where only the committed class list was checked when importing functions with a specific target namespace path
\item 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)
\item fixed a memory and reference leak caused by recursive references when closures encapsulating an object\textquotesingle{}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\textquotesingle{}s state weak references instead of strong references
\item fixed schema information classes when the \char`\"{}string-\/numbers\char`\"{} driver option is enabled
\item fixed crashing bugs in \mbox{\hyperlink{group__threading__functions_ga1bf3fa656c5e803e9453a5ed84fd556c}{Qore\+::get\+\_\+thread\+\_\+data()}} in certain use cases
\item fixed a bug in \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} where select and row iterator operations could fail with certain select hash arguments without a {\ttfamily \char`\"{}columns\char`\"{}} entry but where column names were otherwise required
\item fixed a bug in H\+T\+TP response parsing where case-\/signficant comparisons where being made with certain critical header values
\item fixed a bug handling thread cancellation with the \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} class
\item fixed several race conditions and potential deadlocks in \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} destruction with active threads in the pool
\end{DoxyItemize}\hypertarget{release_notes_qore_089}{}\section{Qore 0.\+8.\+9}\label{release_notes_qore_089}
\begin{DoxyParagraph}{Release Summary}
Major release with many new features and also many bugfixes.
\end{DoxyParagraph}
\hypertarget{release_notes_qore_089_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_089_new_features}

\begin{DoxyItemize}
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module updates\+:
\begin{DoxyItemize}
\item new classes\+:
\begin{DoxyItemize}
\item {\ttfamily Csv\+Abstract\+Iterator\+:} base abstract iterator class for iterating line-\/based C\+SV data
\item {\ttfamily Csv\+Data\+Iterator\+:} iterator class allowing for C\+SV string data to be processed line by line on a record basis
\item {\ttfamily Abstract\+Csv\+Writer\+:} a base class for new C\+SV writer implementations
\item {\ttfamily Csv\+File\+Writer\+:} C\+SV file writer class
\item {\ttfamily Csv\+String\+Writer\+:} C\+SV in memory writer class
\end{DoxyItemize}
\item implemented support for allowing subclasses of Csv\+File\+Iterator to implement support for other custom types
\item no need to set {\ttfamily \char`\"{}headers\char`\"{}} in the constructor if {\ttfamily \char`\"{}fields\char`\"{}} are set; headers are assumed to be the field labels in the same order
\end{DoxyItemize}
\item added the \mbox{\hyperlink{group__misc__functions_ga639fba8c278c69ac4d4190ca1db19235}{Qore\+::encode\+\_\+url()}} function with \href{http://tools.ietf.org/html/rfc3986#section-2.1}{\tt R\+FC 3986 section 2.\+1} compliance
\item \mbox{\hyperlink{group__misc__functions_ga51b949c2d20900fdc2e1b8e46988d2b1}{Qore\+::decode\+\_\+url()}} function updated to decode U\+T\+F-\/8 encoded characters according to \href{http://tools.ietf.org/html/rfc3986#section-2.1}{\tt R\+FC 3986 section 2.\+1}
\item added get\+\_\+byte\+\_\+size() and get\+\_\+marketing\+\_\+byte\+\_\+size() to the \href{../../modules/Util/html/index.html}{\tt Util} module
\item the error message now includes the module path used for the search when a module cannot be found in the module path
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} enhancements\+:
\begin{DoxyItemize}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_ae3f91bf804ee55f47169b8ae9669ad40}{Datasource\+Pool\+:\+:clear\+Warning\+Callback()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a8793cfc4c27420eda345f8a8d0224d6d}{Datasource\+Pool\+:\+:set\+Warning\+Callback()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a5101099bc63fe7dd09f6409cff0fe8e4}{Datasource\+Pool\+:\+:get\+Usage\+Info()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a2347794ada3fa9c629e705b7d1e6ee56}{Datasource\+Pool\+:\+:set\+Error\+Timeout()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a4043aba7b45cce75a8962f38ac9c4249}{Datasource\+Pool\+:\+:get\+Error\+Timeout()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a358c35bb971eccbdcf917b9c5e3bed19}{Datasource\+Pool\+:\+:set\+Event\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_ad10f884015b96adea7182c970ac6e1e3}{Datasource\+Pool\+:\+:clear\+Event\+Queue()}}
\item the new methods allow for monitoring \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} objects for pool contention issues (in case the pool needs to be resized), for throwing an exception if a connection is not acquired within the error timeout period (new default\+: 2 minutes), and for D\+BI drivers to raise warnings on an event queue that can be monitored in a separate thread
\item additionally connection acquisition statistics are tracked and returned in \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a5101099bc63fe7dd09f6409cff0fe8e4}{Datasource\+Pool\+:\+:get\+Usage\+Info()}} (total requests, hits, maximum wait time)
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource}{Datasource}} enhancements\+:
\begin{DoxyItemize}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_ad4953ced1fde3271c67b0dc838756ebf}{Datasource\+:\+:set\+Event\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_ac9a78046de816a73c17ced8195e6e2eb}{Datasource\+:\+:clear\+Event\+Queue()}}
\item the new methods allow for D\+BI drivers to raise warnings on an event queue that can be monitored in a separate thread
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} enhancements\+:
\begin{DoxyItemize}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_socket_a4c3b78b845de5f48434e527755dec18a}{Socket\+:\+:set\+Warning\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_socket_a9879dc24c43dbc9784386e36f1c2425b}{Socket\+:\+:clear\+Warning\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_socket_a12b3459b847f89a55af0c2006d9c2667}{Socket\+:\+:get\+Usage\+Info()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_socket_aa11d890255025ccbbf02ff26724b282c}{Socket\+:\+:clear\+Stats()}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_ftp_client}{Ftp\+Client}} enhancements\+:
\begin{DoxyItemize}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_ftp_client_a49a2e47cde50ae8bbcbca8721199dd16}{Ftp\+Client\+:\+:set\+Warning\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_ftp_client_a3c4ed4f609453368ba483ead948d8cf9}{Ftp\+Client\+:\+:clear\+Warning\+Queue()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_ftp_client_a8734c1ff4459851cbc320443d3b921e6}{Ftp\+Client\+:\+:get\+Usage\+Info()}}
\item new method\+: \mbox{\hyperlink{class_qore_1_1_ftp_client_a1732a34fe1f8349fc05ef113b3c5af08}{Ftp\+Client\+:\+:clear\+Stats()}}
\end{DoxyItemize}
\item \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module updates\+:
\begin{DoxyItemize}
\item optimized connection and login code; H\+E\+L\+O/\+E\+H\+LO and authorization are performed when connecting only, not before each email
\item added support for socket performance instrumentation and warning events
\end{DoxyItemize}
\item \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} module updates\+:
\begin{DoxyItemize}
\item added support for socket performance instrumentation and warning events
\end{DoxyItemize}
\item \href{../../modules/TelnetClient/html/index.html}{\tt Telnet\+Client} module updates\+:
\begin{DoxyItemize}
\item added support for socket performance instrumentation and warning events
\end{DoxyItemize}
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client} module updates\+:
\begin{DoxyItemize}
\item added support for socket performance instrumentation and warning events
\end{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module updates\+:
\begin{DoxyItemize}
\item use the new \mbox{\hyperlink{group__misc__functions_ga639fba8c278c69ac4d4190ca1db19235}{Qore\+::encode\+\_\+url()}} function to encode U\+RL paths to ensure that valid requests are sent when spaces, percent characters, and non-\/ascii characters are used in the U\+RL path
\item set the character encoding in the {\ttfamily Content-\/\+Type} request header when sending strings
\item set the {\ttfamily Accept} header correctly in requests (previously only indicated yaml ({\ttfamily \char`\"{}text/x-\/yaml\char`\"{}}) as an acceptible response encoding)
\end{DoxyItemize}
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler} module updates\+:
\begin{DoxyItemize}
\item added support for the {\ttfamily O\+P\+T\+I\+O\+NS} method
\item return a 400 {\ttfamily \char`\"{}\+Bad Request\char`\"{}} error if an unsupported H\+T\+TP method is used in a R\+E\+ST Call
\end{DoxyItemize}
\item added new {\ttfamily Upsert\+Insert\+Only} upsert strategy to \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}
\item new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_aefcaa86868b4993dd5b0f91fa7b5c1ad}{Qore\+::zzz8valuezzz9\+::sizep()}}\+: returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} if the type can return a non-\/zero size (\mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} for containers including \mbox{\hyperlink{basic_data_types_binary}{binary objects}} and \mbox{\hyperlink{basic_data_types_string}{strings}}, \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} for everything else)
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ab5a4673da652f758677d729e40c1e415}{Qore\+::zzz8stringzzz9\+::get\+Line()}}\+: finds lines in a string buffer
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime} module updates\+:
\begin{DoxyItemize}
\item added mime type for W\+S\+DL files ({\ttfamily \char`\"{}application/wsdl+xml\char`\"{}})
\item added mappings for {\ttfamily \char`\"{}xls\char`\"{}} and {\ttfamily \char`\"{}xlst\char`\"{}} extensions to Mime\+Type\+Xml
\end{DoxyItemize}
\item added new modules\+:
\begin{DoxyItemize}
\item \href{../../modules/Mapper/html/index.html}{\tt Mapper}\+: data mapping module
\item \href{../../modules/TableMapper/html/index.html}{\tt Table\+Mapper}\+: data mapping module using \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} and \href{../../modules/Mapper/html/index.html}{\tt Mapper} to map to an S\+QL table target
\item \href{../../modules/FreetdsSqlUtil/html/index.html}{\tt Freetds\+Sql\+Util}\+: provides back-\/end support for MS S\+QL Server and Sybase databases with \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} using the \href{https://github.com/qorelanguage/module-sybase}{\tt freetds module}
\end{DoxyItemize}
\item the \mbox{\hyperlink{parse_directives_include}{\%include}} parse directive now supports environment variable substitution at the beginning of the file path
\end{DoxyItemize}\hypertarget{release_notes_qore_089_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_089_bug_fixes}

\begin{DoxyItemize}
\item fixed a crashing bug handling access to members as default values of normal method arguments (\href{https://github.com/qorelanguage/qore/issues/3240}{\tt issue 3240})
\item fixed a bug in the \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client} module where the {\ttfamily \char`\"{}response-\/code\char`\"{}} key of the info output hash could be missing in some cases (\href{https://github.com/qorelanguage/qore/issues/3237}{\tt issue 3237})
\item fixed bugs handling object-\/local access in member initialization (\href{https://github.com/qorelanguage/qore/issues/3193}{\tt issue 3193})
\item fixed a crashing bug when H\+T\+TP messages with duplicate {\ttfamily Connection}, {\ttfamily Content-\/\+Encoding}, {\ttfamily Transfer-\/\+Encoding}, {\ttfamily Location}, or {\ttfamily Content-\/\+Type} headers are received
\item fixed a bug parsing octal character constants in the lexer when octal digits followed the octal constant (ex\+: {\ttfamily \char`\"{}\textbackslash{}0441\char`\"{}} where the {\ttfamily \char`\"{}1\char`\"{}} would cause an error)
\item allow escaping \char`\"{}\$\char`\"{} character in regular expression substitution target strings, previously it was impossible to output a literal \char`\"{}\$\char`\"{} + a digit, since this would be interpreted as a numbered input pattern expression
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a9a9b553de7854b86ca978a8d10c3c9dd}{H\+T\+T\+P\+Client\+:\+:get\+U\+RL()}} and \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a3018d4114a87d90d914a0ed62e924e83}{H\+T\+T\+P\+Client\+:\+:get\+Proxy\+U\+RL()}} methods where the U\+RL\textquotesingle{}s path was not given with a leading \char`\"{}/\char`\"{} character
\item \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module fixes\+:
\begin{DoxyItemize}
\item fixed {\ttfamily \char`\"{}date\char`\"{}} field handling with empty input (now maps to 1970-\/01-\/01)
\item fixed Csv\+Data\+Iterator\+::next() when header\+\_\+lines $>$ 0 and working with empty input data
\end{DoxyItemize}
\item added support for compiling on O\+SX Mavericks
\item fixed an infinitely recursive call in Table\+::del() in \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}
\item fixed a bug in v$\ast$printf() where {\ttfamily \textquotesingle{}\%\textquotesingle{}} was not handled correctly in all cases
\item fixed bugs in \mbox{\hyperlink{group__date__and__time__functions_ga5ecb2657b5cc84fc2f16ae1a4cc3fae7}{microseconds}} and \mbox{\hyperlink{group__date__and__time__functions_gac8e561799a9f873502e161695670c06d}{milliseconds()}} with large arguments
\item 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
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a196d09ba7c9e3cb9e6a228593152b5fd}{Datasource\+:\+:copy()}} method where implicitly-\/set options were not carried over into the new object
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} 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)
\item fixed bugs in \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} generating \char`\"{}create table\char`\"{} and \char`\"{}align table\char`\"{} S\+QL with D\+Bs where unique indexes automatically create unique constraints (ex\+: My\+S\+QL)
\item fixed a bug in \mbox{\hyperlink{group__filesystem__functions_gaa1536aa5f9d482dd449ad3e5f53a8507}{lchown()}} where \mbox{\hyperlink{group__filesystem__functions_ga3c6e7029d5759c6cabfca1d7e3b27898}{chown()}} was used interally instead of \mbox{\hyperlink{group__filesystem__functions_gaa1536aa5f9d482dd449ad3e5f53a8507}{lchown()}}
\item fixed a bug in \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util} retrieving sequence values with Database\+::get\+Next\+Sequence\+Value()
\item fixed an off-\/by-\/one memory bug in \mbox{\hyperlink{group__date__and__time__functions_gaa990826f93b4f22f786fcfe431c4886d}{Qore\+::date(string, string)}} parsing a 4-\/digit date mask
\item fixed memory leaks in class member and class static variable management
\item fixed memory leaks when an entire class has to be rolled back due to parse errors and the class has pending static variables
\item fixed memory leaks in constant handling with values containing call references
\item fixed a memory leak in constant destruction with parse rollbacks when the constant value was N\+U\+LL
\item fixed an error in the rounding heuristic for arbitrary-\/precision numeric values that could produce invalid results (ex\+: 34.\+9n $\ast$ 100 = 34902n)
\item enforce \mbox{\hyperlink{group__parse__options_ga5e466ed886222f0b57b0a399b455be71}{P\+O\+\_\+\+N\+O\+\_\+\+F\+I\+L\+E\+S\+Y\+S\+T\+EM}} with the \mbox{\hyperlink{parse_directives_include}{\%include}} directive
\item 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
\item fixed a bug in socket timeout handling with select() errors
\item fixed a memory leak in handling abstract methods when multiple abstract methods with the same name but different signatures were declared in a class
\end{DoxyItemize}\hypertarget{release_notes_qore_088}{}\section{Qore 0.\+8.\+8}\label{release_notes_qore_088}
\begin{DoxyParagraph}{Release Summary}
Major new features and bug fixes with a particular focus on enhanced H\+T\+TP capabilities and enhanced database processing
\end{DoxyParagraph}
\hypertarget{release_notes_qore_088_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_088_compatibility}

\begin{DoxyItemize}
\item Fixed method resolution order; it\textquotesingle{}s now possible to call pseudo-\/methods directly on classes that implement \mbox{\hyperlink{qore_classes_methodGate_methods}{method\+Gate() methods}}
\item Added the following abstract methods to \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource}{Abstract\+Datasource}}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_a56a8cd699fe33e3c3b9f57e416608ccd}{Abstract\+Datasource\+:\+:get\+Config\+Hash()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource_a79772d8676975c1ab23710bc91d666ae}{Abstract\+Datasource\+:\+:get\+Config\+String()}}
\end{DoxyItemize}
\item \char`\"{}hard\char`\"{} string comparisons now perform encoding conversions if necessary (however as usual different data types cause the comparison to fail)
\end{DoxyItemize}\hypertarget{release_notes_qore_088_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_088_new_features}

\begin{DoxyItemize}
\item new \mbox{\hyperlink{qore_modules_user_modules}{user modules}} delivered with Qore\+:
\begin{DoxyItemize}
\item \href{../../modules/RestClient/html/index.html}{\tt Rest\+Client}\+: Provides a simple A\+PI for communicating with H\+T\+TP servers implementing \href{http://en.wikipedia.org/wiki/Representational_state_transfer}{\tt R\+E\+ST} services
\item \href{../../modules/RestHandler/html/index.html}{\tt Rest\+Handler}\+: Provides an easy to use interface to the \mbox{\hyperlink{namespace_qore}{Qore}} \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module for implementing server-\/side \href{http://en.wikipedia.org/wiki/Representational_state_transfer}{\tt R\+E\+ST} services
\item \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util}\+: Provides a high-\/level D\+B-\/independent A\+PI for working with database objects
\begin{DoxyItemize}
\item \href{../../modules/MysqlSqlUtil/html/index.html}{\tt Mysql\+Sql\+Util}\+: Provides a high-\/level D\+B-\/independent A\+PI for working with My\+S\+QL database objects; loaded automatically by the \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module when working with My\+S\+QL databases
\item \href{../../modules/OracleSqlUtil/html/index.html}{\tt Oracle\+Sql\+Util}\+: Provides a high-\/level D\+B-\/independent A\+PI for working with Oracle database objects; loaded automatically by the \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module when working with Oracle databases
\item \href{../../modules/PgsqlSqlUtil/html/index.html}{\tt Pgsql\+Sql\+Util}\+: Provides a high-\/level D\+B-\/independent A\+PI for working with Postgre\+S\+QL database objects; loaded automatically by the \href{../../modules/SqlUtil/html/index.html}{\tt Sql\+Util} module when working with Postgre\+S\+QL databases
\end{DoxyItemize}
\item \href{../../modules/Util/html/index.html}{\tt Util}\+: Provides a some miscellaneous generally useful routines
\item \href{../../modules/WebSocketClient/html/index.html}{\tt Web\+Socket\+Client}\+: Provides a client A\+PI for connecting to Web\+Socket servers
\item \href{../../modules/WebSocketHandler/html/index.html}{\tt Web\+Socket\+Handler}\+: Provides an interface to the \mbox{\hyperlink{namespace_qore}{Qore}} \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module for implementing server-\/side Web\+Socket services
\item \href{../../modules/WebSocketUtil/html/index.html}{\tt Web\+Socket\+Util}\+: Provides common client and server code for implementing Web\+Socket protocol services in Qore
\item \href{../../modules/WebUtil/html/index.html}{\tt Web\+Util}\+: Provides server support for implementing complex web services including serving resources with mixed text and Qore code that are automatically rendered on demand
\end{DoxyItemize}
\item improvements in existing \mbox{\hyperlink{qore_modules_user_modules}{user modules}}\+:
\begin{DoxyItemize}
\item much improved \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module, better performance, much better R\+FC compliance, more flexibility
\item new C\+SV generation class in \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util}
\item much better message serialization and email attachment handling in the \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} and \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} modules
\end{DoxyItemize}
\item there is a new \mbox{\hyperlink{class_qore_1_1_thread_1_1_thread_pool}{Thread\+Pool}} class for implementing thread pools that automatically upscale and downscale within user-\/defined limits depending on the load placed on them
\item it\textquotesingle{}s possible to inherit concrete versions of abstract method variants from a parent class that does not define the abstract method, meaning that concrete variants of an abstract method do not have to be implemented in a direct subclass of the class declaring the abstract method~\newline
 this makes using abstract base classes much easier in complex hierarchies using multiple inheritance; now common code can be separated into a single class and inherited by child classes sharing the common implementation
\item major \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} read performance increase by implementing internal read buffering (up to 10x faster socket read performance for certain operations, particularly with H\+T\+TP methods)
\item improved Unicode / U\+T\+F-\/8 support
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ae2329c573986ede4a54e70e9ccef30e2}{Qore\+::zzz8stringzzz9\+::lwr()}}, \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a0b5c301c6742fccb8645968845b00fc1}{Qore\+::zzz8stringzzz9\+::upr()}}, \mbox{\hyperlink{group__string__functions_ga69274a2dc60bef5acb7a8adad8b96b8b}{Qore\+::tolower(string)}}, and \mbox{\hyperlink{group__string__functions_ga55350788372fc736eee9c0102ec82215}{Qore\+::toupper(string)}} now operate on a very wide range of non-\/\+A\+S\+C\+II characters, including Latin, Cyrillic, Greek, Armenian, Georgian, etc characters whereas they were previously limited to working on A\+S\+C\+II characters
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a227ef4978fde1a808f14bc7ead59eb2e}{Qore\+::zzz8stringzzz9\+::unaccent()}} was added which removes accents from strings using a Unicode lookup map from a very wide range of accented Unicode characters to unaccented characters
\end{DoxyItemize}
\item new \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource}{Datasource}} and \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a68c63cda68bd98860f332e6335e7a642}{Qore\+::\+S\+Q\+L\+::\+Datasource\+::get\+Config\+Hash()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a7713f26c809821a7942a60e27f924742}{Qore\+::\+S\+Q\+L\+::\+Datasource\+::get\+Config\+String()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a7ea4705630cbe7276d1bf9e212b87218}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::get\+Config\+Hash()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a1eddfff5b95e355b5608554975984307}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::get\+Config\+String()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a5dd026e94aff8eedf8820db9e83a2e56}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::copy()}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} changes\+:
\begin{DoxyItemize}
\item the \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} class is now a subclass of \mbox{\hyperlink{class_qore_1_1_socket}{Socket}}, so all \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} methods can be called on \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client}{H\+T\+T\+P\+Client}} objects, making it easier to implement protocols based on H\+T\+TP
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a2917c58f43d176b49075d6db1c517ea5}{Qore\+::\+H\+T\+T\+P\+Client\+::get\+Default\+Path()}}\+: added
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a7d57e49bdde9c6fa2d67013f3fb0a4c8}{Qore\+::\+H\+T\+T\+P\+Client\+::set\+Default\+Path()}}\+: added
\item \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a9a9b553de7854b86ca978a8d10c3c9dd}{Qore\+::\+H\+T\+T\+P\+Client\+::get\+U\+R\+L()}}\+: changed\+: now returns \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} if no U\+RL is set instead of an invalid U\+RL
\end{DoxyItemize}
\item new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__object__functions_ga87ca75da87ef4242a4b1ce3a9e5d188b}{call\+\_\+pseudo\+\_\+args()}}
\item \mbox{\hyperlink{group__string__functions_ga8b90bec06c9dabd6d54fff51684f9da6}{substr(binary, softint)}}
\item \mbox{\hyperlink{group__string__functions_gaf00ab0e1f2c880e0da287c102aca9873}{substr(binary, softint, softint)}}
\end{DoxyItemize}
\item new pseudo methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a5b99353f309cc3cdfd0fe7227d99eee5}{Qore\+::zzz8binaryzzz9\+::substr(softint)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a87459df5b2a455d190644ae47a468791}{Qore\+::zzz8binaryzzz9\+::substr(softint, softint)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_ab30735fae927ea3be3e3a710574ff486}{Qore\+::zzz8binaryzzz9\+::to\+Base64()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_ada0665f689a4787b2697c1ff399b7cac}{Qore\+::zzz8binaryzzz9\+::to\+Hex()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a073b50bf1e4e7b646da0d7a6db6180a8}{Qore\+::zzz8binaryzzz9\+::to\+String()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a61fbd9f6e28a6af34d666ecb7b0bdad2}{Qore\+::zzz8datezzz9\+::get\+Epoch\+Seconds()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_ac7dff505bad9f169f79215cdd3f368dc}{Qore\+::zzz8datezzz9\+::get\+Epoch\+Seconds\+Local\+Time()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a1ec48e2108e1b70a2ef9ff85c672e161}{Qore\+::zzz8datezzz9\+::info()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_a2adeb1fcae50106e1a3ed4506d5b12ea}{Qore\+::zzz8floatzzz9\+::abs()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_a93f356ddb1150791325155586accbb90}{Qore\+::zzz8hashzzz9\+::compare\+Keys(hash)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a2853596aba431a8e4ad3e3e7e2417c37}{Qore\+::zzz8intzzz9\+::abs()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a97747fdeeebc700bdf6c101f34d59d82}{Qore\+::zzz8intzzz9\+::encode\+Lsb(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a5b9876a1b6173efa7ae157ce1680871a}{Qore\+::zzz8intzzz9\+::encode\+Msb(int)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_ac442a991ff2423860f44768b9e961918}{Qore\+::zzz8intzzz9\+::to\+Unicode()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8numberzzz9_a638c34b8465f9a9ce773c25e4a263cd9}{Qore\+::zzz8numberzzz9\+::abs()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a53db2b90a03e13947b32a34bfddf553b}{Qore\+::zzz8objectzzz9\+::has\+Callable\+Method()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a21ad831080f7d554f84c849e92e918d0}{Qore\+::zzz8objectzzz9\+::has\+Callable\+Normal\+Method()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a53b9a99bec7d7372eddd523303c5f1e3}{Qore\+::zzz8objectzzz9\+::has\+Callable\+Static\+Method()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a4231a2c883ab4c25e87c2e3b23f8ff06}{Qore\+::zzz8listzzz9\+::range\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a146f90597d71a88584a23c93806c9bb7}{Qore\+::zzz8nothingzzz9\+::range\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_aabf1bb32b32060ffc6a68164157d86aa}{Qore\+::zzz8stringzzz9\+::compare\+Partial()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ac677323f97c583af45f7f77984462e3d}{Qore\+::zzz8stringzzz9\+::get\+Unicode()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a215bc851affd3a2a57b80cefc484f139}{Qore\+::zzz8stringzzz9\+::equal\+Partial()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a87b81daaffa46700be92e0596578b200}{Qore\+::zzz8stringzzz9\+::equal\+Partial\+Path()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a13b13f9681a94272d0e16371d2f22d90}{Qore\+::zzz8stringzzz9\+::to\+Base64()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_af4a4f62237f079383098441132967527}{Qore\+::zzz8stringzzz9\+::to\+Hex()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a227ef4978fde1a808f14bc7ead59eb2e}{Qore\+::zzz8stringzzz9\+::unaccent()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_ad4bcbe12f38c710e0e7e67a68ab0512f}{Qore\+::zzz8valuezzz9\+::to\+Number()}}
\end{DoxyItemize}
\item other new methods and method changes\+:
\begin{DoxyItemize}
\item added new static methods in the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Read\+Only\+File}} class making it easier to read entire files in one call\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_adf4bf9669160cfd74594b9ed0e854e7f}{Qore\+::\+Read\+Only\+File\+::read\+Text\+File()}}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_aabc22daa5cea8c428bcea138f6930871}{Qore\+::\+Read\+Only\+File\+::read\+Binary\+File()}}
\end{DoxyItemize}
\item changes to catch usage errors with the \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter}{Counter}} class\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter_a99a25b2f06f40edd2535b43ede25ef5a}{Qore\+::\+Thread\+::\+Counter\+::constructor()}} will throw an exception if called with an argument $<$ 0
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_counter_a31f5a01212067685e54de06ae29a9984}{Qore\+::\+Thread\+::\+Counter\+::dec()}} will now throw an exception if called when the Counter is already at 0
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue_adbc347a8bc17d1a9aec0dceec5b06cdb}{Qore\+::\+Thread\+::\+Queue\+::empty()}}\+: new method
\item \mbox{\hyperlink{class_qore_1_1_socket_a430d67ff882a9733d02ff1fa745ca159}{Qore\+::\+Socket\+::listen()}}\+: now has a new {\itshape backlog} parameter; the default backlog queue size was changed from 5 to 20
\item \mbox{\hyperlink{class_qore_1_1_socket_ae7c94998847ecd335928ea8f63a712b3}{Qore\+::\+Socket\+::get\+Peer\+Info()}} and \mbox{\hyperlink{class_qore_1_1_socket_a8082e5192f11ceb4884a565543dc58f1}{Qore\+::\+Socket\+::get\+Socket\+Info()}}\+: now takes an optional argument to avoid name lookups
\item \mbox{\hyperlink{class_qore_1_1_socket_ac3e0f0383c3337783a49ff85d8805bad}{Qore\+::\+Socket\+::read\+H\+T\+T\+P\+Header\+String()}}\+: new method
\item \mbox{\hyperlink{class_qore_1_1_dir}{Qore\+::\+Dir}}\+: all list$\ast$() methods now take an optional parameter to return a list of file status value hashes plus {\ttfamily \char`\"{}name\char`\"{}} and optionally {\ttfamily \char`\"{}link\char`\"{}} keys for symbolic links; additionally symbolic links are now followed and files and directories are differentiated based on their targets when processing symbolic links
\end{DoxyItemize}
\item function changes
\begin{DoxyItemize}
\item added optional {\itshape start} and {\itshape end} parameters to the \mbox{\hyperlink{group__string__functions_ga757f5b4682cb6787e7e186ddcc2b2b56}{replace()}} function
\end{DoxyItemize}
\item all \mbox{\hyperlink{data_type_declarations}{data type declarations}} that optionally accept \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} also now accept \mbox{\hyperlink{basic_data_types_null}{N\+U\+LL}} and map \mbox{\hyperlink{basic_data_types_null}{N\+U\+LL}} to \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}}; this makes direct assignments from values derived from S\+QL queries much easier
\item added an optional reference to an integer to the \mbox{\hyperlink{group__misc__functions_gaee11d366f841cd34c9aa6ac8c7c49577}{Qore\+::backquote()}} function to return the return code of the program executed
\item \mbox{\hyperlink{expressions_implicit_index}{implicit index}} references now work in the \mbox{\hyperlink{operators_map}{map}} and \mbox{\hyperlink{operators_select}{select}} operators with lists and iterators
\item the \mbox{\hyperlink{operators_regex_extract_operator}{Regular Expression Pattern Extraction Operator}} now accepts an optional {\ttfamily g} specifier to extract all occurrences of the pattern(s) in a string; also \mbox{\hyperlink{group__string__functions_gac398df10ac00f3b102ac1896f59391c1}{regex\+\_\+extract()}} and \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_af03631fe71b8cde54f4cff41f1e5f4f7}{Qore\+::zzz8stringzzz9\+::regex\+Extract(string, int)}} now accept \mbox{\hyperlink{group__regex__constants_gaea655c36090c9f1e6bb24cb8de998a04}{Qore\+::\+R\+E\+\_\+\+Global}} to extract all occurrences of the pattern(s) in a string
\item the \mbox{\hyperlink{operators_splice}{splice}} and \mbox{\hyperlink{operators_extract}{extract}} operators were extended to work on \mbox{\hyperlink{basic_data_types_binary}{binary objects}} as well as lists and strings
\item printing out binary values with the {\ttfamily \char`\"{}\%y\char`\"{}} \mbox{\hyperlink{group__string__functions_string_formatting}{format specifier}} now produces Y\+A\+M\+L-\/like output for the binary value
\item added path name to error messages in \mbox{\hyperlink{class_qore_1_1_dir}{Dir}} class exception strings
\end{DoxyItemize}\hypertarget{release_notes_qore_088_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_088_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug where the ?\+: operator could thrown spurious exceptions when parsing because it would return the type of the initial boolean expression as the return type of the operator
\item fixed a bug where classes with unimplemented inherited abstract variants would sometimes cause runtime exceptions to be thrown when instantiated but should have instead been caught at parse time
\item fixed a parser bug where out-\/of-\/line class method definitions could not be defined in a namespace block
\item fixed a bug parsing arguments in parse\+\_\+uri\+\_\+query() in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module
\item fixed several bugs where parse exceptions could show the wrong source location\+:
\begin{DoxyItemize}
\item with type errors in function calls
\item when resolving global variables
\item in base class constructor arguments
\item for empty blocks with a missing return statement
\item when validating types used with the return statement (also associated warnings)
\item in methods calls
\item in hash value expressions
\item with redeclaring local variable return types
\item in local variable object instantiations
\end{DoxyItemize}
\item really fixed the bug thought to be fixed in 0.\+8.\+7 \char`\"{}where S\+S\+L errors would cause the affected thread to go into a infinite loop using 100\% C\+P\+U\char`\"{} -\/ this turned out to be easily reproducible on all platforms; when the S\+SL connection was shut down cleanly by the remote end before a response message was returned, an infinite loop would result
\item fixed a bug where it was impossible to output a single \textquotesingle{}\textbackslash{}\textquotesingle{} character in regex substitution expressions; \textquotesingle{}\textbackslash{}\textquotesingle{} was taken as an escape character, and \textquotesingle{}\textbackslash{}\textbackslash{}\textquotesingle{} was output literally, now \textquotesingle{}\textbackslash{}\textbackslash{}\textquotesingle{} is output as \textquotesingle{}\textbackslash{}\textquotesingle{}
\item fixed a bug where a parse-\/time crash would occur when calling the copy() method for a class that does not implement an explicit copy() method
\item fixed a bug where arguments passed to a copy method were ignored; now an exception is thrown
\item fixed a bug where public members and static variables of privately-\/inherited classes were incorrectly treated as public attributes of the child class
\item fixed a bug where slices could be made of objects from outside the class including private members
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_af7fe60e95959cc5eb6cf0046adcb9ec6}{member\+Gate() methods}} were not being respected when taking a slice of an object
\item fixed bugs in the integer Socket\+::recv$\ast$() methods where a {\ttfamily S\+O\+C\+K\+E\+T-\/\+C\+L\+O\+S\+ED} exception was not thrown when the remote end closed the connection
\item fixed a bug related to out-\/of-\/order parse initialization for functions and methods which resulted in the wrong return type being returned for a method with more than 1 variant where the variant could not be matched at parse time
\item fixed a bug where a non-\/variable-\/reference member of an \char`\"{}our\char`\"{} variable declaration list would cause a crash due to passing the incorrect argument in \mbox{\hyperlink{group__string__functions_ga7a74be141f814ef286046c367b21091c}{sprintf()}}
\item fixed sandboxing / protection errors with inherited code; subclasses inheriting code from a parent class with different parse options would cause the child parse options to be used when running the parent class code which caused errors; now parse options are enforced properly on the block level
\item fixed the \mbox{\hyperlink{class_qore_1_1_range_iterator}{Range\+Iterator}} class; it was still abstract due to a missing \mbox{\hyperlink{class_qore_1_1_range_iterator_ad235b23928683ba0929d97f6d6401bb9}{Qore\+::\+Range\+Iterator\+::valid()}} method
\item fixed a bug where the wrong error was being returned after a connection reset (remote connection close) in sockets with integer recv$\ast$() methods which could in some cases lead to an infinite loop
\item fixed a bug where private members of a common base class were not accessible by objects of subclasses sharing the common base class
\item fixed many bugs in \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} and updated the module version to 1.\+1
\item initialize static openssl crypto locks for multi-\/threaded openssl library access; without this crashes can result (for example in error queue management)
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a9a9b553de7854b86ca978a8d10c3c9dd}{Qore\+::\+H\+T\+T\+P\+Client\+::get\+U\+R\+L()}} returned an invalid U\+RL when no U\+RL was set; now it returns \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} in this case
\item fixed a bug managing feature/module lists in inherited \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects; user modules were listed in the child \mbox{\hyperlink{class_qore_1_1_program}{Program}} object even though user module code is not imported in child \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects
\item fixed a bug where an invalid guard condition in critical lvalue storage code can cause unreferenced data to be returned while in a lock which can cause a crash in a multithreaded program
\item fixed a bug where references were not being written to the output variable if an exception was active when the code block exited
\item fixed a bug setting the precision for arbitrary-\/precision numbers with large exponents (like \char`\"{}1e100n\char`\"{})
\item implemented more strict adherence to \href{http://tools.ietf.org/html/rfc2616}{\tt R\+FC 2616} (H\+T\+TP 1.\+1) regarding message-\/body handling in requests and response message generation and parsing
\item fixed a bug with \mbox{\hyperlink{class_qore_1_1_thread_1_1_condition_a8f29b21d4146f40315e25d3bbf840196}{Condition\+:\+:wait()}} on Darwin with negative timeout values where a short timeout was used instead of an indefinite wait
\item fixed bugs in the \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} and \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} modules where mail messages were being serialized incorrectly if there were no attachments (there was no possibility to set the content transfer encoding) and also where it was not possible to set the content-\/type for the message body when it was sent as a part of a multipart message
\item fixed bugs handling arguments declared as type \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} (reference or nothing)
\item fixed bugs in executing code accross \mbox{\hyperlink{class_qore_1_1_program}{Program}} object barriers with reference arguments
\item fixed a bug with the switch statement where character encoding differences would cause strings to mismatch even if they were otherwise identical; now hard comparisons with strings allow for implicit automatic temporary character encoding conversions for the comparison
\item fixed a bug where qore failed to set the time zone region correctly when set from /etc/localtime and this file is a relative symlink rather than absolute
\item fixed a bug where \mbox{\hyperlink{group__string__functions_gafe621446ada382d5b086a1d2a20934c9}{substr()}} and \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ab5ad54b1fe38b46ee071e55563d9d245}{Qore\+::zzz8stringzzz9\+::substr()}} were returning \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} if the arguments could not be satisifed contrary to the documentation and the declared return type, now an empty string is returned in those cases
\item fixed bugs rounding number values between 10 and -\/10 (non-\/inclusive) for display, fixed bugs rounding number value regarding digits after the decimal point for display with \mbox{\hyperlink{group__number__formatting__constants_ga69cc628e70f6f1c4c9ba4997ac09e5b8}{Qore\+::\+N\+F\+\_\+\+Scientific}}
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_dir}{Qore\+::\+Dir}} class where it was not possible to chdir to the root directory {\ttfamily \char`\"{}/\char`\"{}} 
\item fixed a bug where recursive references were allowed and memory leaks would occur due to recursive references; these are now caught at runtime and a {\ttfamily R\+E\+F\+E\+R\+E\+N\+C\+E-\/\+E\+R\+R\+OR} exception is thrown
\item fixed a configure bug with bison $>$= 3
\item fixed a bug in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module when automatically uncompressing supported content-\/encodings to set the resulting string\textquotesingle{}s character encoding correctly
\item fixed a bug in the \mbox{\hyperlink{operators_instanceof}{instanceof}} operator when working with objects and classes created from different source \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects
\item fixed a bug in $\ast$printf() formatting with floating-\/point and number values where no digits were displayed right of the decimal point unless a specific number of digits was specified in the format string
\item fixed the return type of \mbox{\hyperlink{class_qore_1_1zzz8boolzzz9_ab1dbc0ed03411f54af90e04a8172a56a}{Qore\+::zzz8boolzzz9\+::type\+Code()}}; was returning a boolean instead of \mbox{\hyperlink{group__type__code__constants_ga2d3c90a766ca129ff13d243a27b41c90}{Qore\+::\+N\+T\+\_\+\+B\+O\+O\+L\+E\+AN}}
\item fixed a bug there \mbox{\hyperlink{basic_data_types_null}{N\+U\+LL}} was evaluated as \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} in a boolean context rather than \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}
\item fixed a bug where \mbox{\hyperlink{class_qore_1_1_socket_aa255d1dcfbddb208e80684eebecc800d}{Qore\+::\+Socket\+::recv\+Binary()}} would ignore the first data read
\item fixed starting listeners on U\+N\+IX domain sockets on Soalris in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module
\item fixed a bug where number(\char`\"{}\char`\"{}) was being converted to @NaN@n
\item fixed return type of \mbox{\hyperlink{class_qore_1_1_h_t_t_p_client_a1d0fef0b049abca0d26c931c5e8f020b}{H\+T\+T\+P\+Client\+:\+:get\+Connection\+Path()}}
\item fixed several bugs with logical comparison operators and arbitrary-\/precision numeric values where arbitrary-\/precision numeric values were not being prioritized as numeric values and also in some cases were being first converted to doubles and then operated on
\item fixed a bug in the socket code where the socket close condition was not flagged with S\+SL connections when writes failed due to the remote end closing the connection; an error would only be raised on the following socket operation
\item fixed a mismatched delete/malloc error with time zone initialization and the localtime file
\end{DoxyItemize}\hypertarget{release_notes_qore_087}{}\section{Qore 0.\+8.\+7}\label{release_notes_qore_087}
\begin{DoxyParagraph}{Release Summary}
Code embedding improvements
\end{DoxyParagraph}
\hypertarget{release_notes_qore_087_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_087_compatibility}
\begin{DoxyParagraph}{Fixes for Code Inheritance in Program Objects}
The following changes are meant to sanitize code inheritance in child \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects to fix long-\/standing design bugs in code encapsulation by addressing the lack of fine-\/grained control over symbol visibility in inherited code.
\begin{DoxyItemize}
\item \mbox{\hyperlink{qore_modules_mod_public}{public}}\+: The \mbox{\hyperlink{qore_modules_mod_public}{public}} keyword\textquotesingle{}s usage in modules has now been expanded to provide the same functionality generically in \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects; if \mbox{\hyperlink{qore_classes}{classes}}, \mbox{\hyperlink{constants}{constants}}, \mbox{\hyperlink{qore_namespaces}{namespaces}}, \mbox{\hyperlink{qore_functions}{functions}}, or \mbox{\hyperlink{variables_global_variables}{global variables}} are defined with the \mbox{\hyperlink{qore_modules_mod_public}{public}} keyword, then these symbols will be inherited into child \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects as long as no \mbox{\hyperlink{group__parse__options}{parse options}} prohibit it.~\newline
~\newline
 This change was made to give programmers complete control over which symbols are inherited in child \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects, whereas because prior to this change, the control was very course.~\newline
~\newline

\item the default behavior of Qore regarding inherting global variables and functions with user variants was changed to be consistent with namespaces, classes, and constants; that is; public symbols are inherited by default.~\newline
~\newline
 The following constants were renamed\+:
\begin{DoxyItemize}
\item {\ttfamily P\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+U\+S\+E\+R\+\_\+\+F\+U\+N\+C\+\_\+\+V\+A\+R\+I\+A\+N\+TS} is now\+: \mbox{\hyperlink{group__parse__options_ga972fcd1745cc3f4efb6cb2a6e53cd832}{P\+O\+\_\+\+N\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+U\+S\+E\+R\+\_\+\+F\+U\+N\+C\+\_\+\+V\+A\+R\+I\+A\+N\+TS}}
\item {\ttfamily P\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+G\+L\+O\+B\+A\+L\+\_\+\+V\+A\+RS} is now\+: \mbox{\hyperlink{group__parse__options_ga7cd01bb8ba1560c7893cd9655894c550}{P\+O\+\_\+\+N\+O\+\_\+\+I\+N\+H\+E\+R\+I\+T\+\_\+\+G\+L\+O\+B\+A\+L\+\_\+\+V\+A\+RS}}~\newline
~\newline
 This change was made to fix a long-\/standing design problem with symbol inheritance and make the implementation consistent.~\newline
~\newline

\end{DoxyItemize}
\item builtin symbols are no longer inherited from user modules; only independent user symbols; the main change is that if a user module adds new user methods to a builtin class or new user variants to a builtin function, these changes are no longer imported into target \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects.
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{File Method Changes}
The following methods were updated to throw exceptions on all errors rather than a return code for I/O errors in order to avoid hard to debug conditions due to ignoring I/O errors by forgetting to check the return value on the following methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_file_aa0124826c6cc0c6cfa2a81a4612d4844}{Qore\+::\+File\+::f\+\_\+printf()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a04172f5443b2e559269849bf7e653219}{Qore\+::\+File\+::f\+\_\+vprintf()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a96b440e3903aa9099cc312ea8c649beb}{Qore\+::\+File\+::print()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a7fb81ceed3597d9424e9bbd5dd2e55c0}{Qore\+::\+File\+::printf()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a8e508aabefedf9fa70c42d0e5fab5959}{Qore\+::\+File\+::vprintf()}}
\item \mbox{\hyperlink{class_qore_1_1_file_acd30e6f14435bae0393b1ed52bec502d}{Qore\+::\+File\+::write()}}
\item \mbox{\hyperlink{class_qore_1_1_file_ad4f67c2a247f4b7fb9c6e26b51106aba}{Qore\+::\+File\+::writei1()}}
\item \mbox{\hyperlink{class_qore_1_1_file_adcf79ce346b63b85ff517580fd96d0b0}{Qore\+::\+File\+::writei2()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a82dee19cad26e011ba1a0970d42b2130}{Qore\+::\+File\+::writei4()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a9de545742fe95945677bb3049a1900fc}{Qore\+::\+File\+::writei8()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a9004f5ff77ea368263121c33f95c87c5}{Qore\+::\+File\+::writei2\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a6788f0f1bd5b015dd726a6b2d06077bf}{Qore\+::\+File\+::writei4\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_file_aab6932b3995a5b0963e41ef41bdd0b36}{Qore\+::\+File\+::writei8\+L\+S\+B()}}
\end{DoxyItemize}Note that the above changes will hopefully only minimally impact backwards-\/compatibilty since the change is in error handling, and additionally each of the above methods could also throw an exception if called when the object was not open.
\end{DoxyParagraph}
\hypertarget{release_notes_qore_087_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_087_new_features}

\begin{DoxyItemize}
\item new methods offering code encapsulation enhancements
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_a9bc54a95f735cdc10bfb52e5166259b2}{Program\+:\+:load\+Module()}}\+: allows modules to be loaded in a \mbox{\hyperlink{class_qore_1_1_program}{Program}} object directly
\item \mbox{\hyperlink{class_qore_1_1_program_a9bdcf3694aceba4d1add5b38a960c603}{Program\+:\+:import\+Class()}}\+: allows classes to be individually imported in \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects
\end{DoxyItemize}
\item new pseudo-\/methods in \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9}{Qore\+::zzz8nothingzzz9}} to allow for \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9}{Qore\+::zzz8hashzzz9}} pseudo-\/methods to be safely used with \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a213d95ffb43f1439a5ba987a9efc9b87}{Qore\+::zzz8nothingzzz9\+::first\+Key()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a0ce252bde5f2a79322def0893f78b23c}{Qore\+::zzz8nothingzzz9\+::first\+Value()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a6b7ecd3769d24f276a237ac46359ade6}{Qore\+::zzz8nothingzzz9\+::has\+Key()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a36021f943bc18e23b8712f8f57256b20}{Qore\+::zzz8nothingzzz9\+::has\+Key\+Value()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_aa014ed7fdd518629a23dd2ceb4d02e0c}{Qore\+::zzz8nothingzzz9\+::keys()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_ae44acd5f4f9e6710b8078bb5464c8f6f}{Qore\+::zzz8nothingzzz9\+::last\+Key()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a86e91aa90079372efdb645987883ca08}{Qore\+::zzz8nothingzzz9\+::last\+Value()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_abd1df7343941027096a8243b36e35768}{Qore\+::zzz8nothingzzz9\+::values()}}
\end{DoxyItemize}
\item other new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_aef0e1961cbf4e1f2b53b789d0727681f}{Qore\+::zzz8datezzz9\+::duration\+Seconds()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a0a1bf587b81314cbc5cbabd4cc618476}{Qore\+::zzz8datezzz9\+::duration\+Milliseconds()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_afd98bf51bd4870ddc8469e0bc19f2b9c}{Qore\+::zzz8datezzz9\+::duration\+Microseconds()}}
\end{DoxyItemize}
\item removed most restrictions on embedded logic in user modules; user module \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects are subject to the same restrictions as the parent \mbox{\hyperlink{class_qore_1_1_program}{Program}} object (if any)
\item added the \mbox{\hyperlink{group__misc__functions_ga6b1422bc842cbf53cf2bb53ef9322209}{get\+\_\+parse\+\_\+options()}} function so that parse options in the current \mbox{\hyperlink{class_qore_1_1_program}{Program}} can be determined at runtime
\item added the \mbox{\hyperlink{group__misc__functions_gaaa60e9a984c59e662b2e7cac84a3899d}{get\+\_\+ex\+\_\+pos()}} function to help with formatting exception locations where the {\ttfamily source} and {\ttfamily offset} information is present
\item new methods and method variants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_ae7c94998847ecd335928ea8f63a712b3}{Qore\+::\+H\+T\+T\+P\+Client\+::get\+Peer\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a8082e5192f11ceb4884a565543dc58f1}{Qore\+::\+H\+T\+T\+P\+Client\+::get\+Socket\+Info()}}
\item \mbox{\hyperlink{class_qore_1_1_file_a0a9d380a83dc9e70f143c8ad1f85c7b4}{Qore\+::\+File\+::get\+Terminal\+Attributes()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_afb6307ab9be490fa5d770519bca9447c}{Qore\+::\+S\+Q\+L\+::\+Datasource\+::transaction\+Tid()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a5661e26369193015c195166e52c6d121}{Qore\+::\+S\+Q\+L\+::\+Datasource\+::current\+Thread\+In\+Transaction()}}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_ac983fd7cd64d2de924113b8cb540ca11}{Qore\+::\+S\+Q\+L\+::\+Datasource\+Pool\+::current\+Thread\+In\+Transaction()}}
\end{DoxyItemize}
\item new location tags {\ttfamily \char`\"{}source\char`\"{}} and {\ttfamily \char`\"{}offset\char`\"{}} added for parse and runtime exceptions to allow for error-\/reporting to display information about files where sections of a source file are parsed; this allows both the label and line offset in the label and the file name and absolute file line position to be reported in exception information
\begin{DoxyItemize}
\item new parameters added to the following methods and function to accommodate the new location information\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_program_ad59f1b6ce7adaa693086e1b858cbe896}{Program\+:\+:parse()}}
\item \mbox{\hyperlink{class_qore_1_1_program_ac943bad226fcf69ce5007b101828f8c1}{Program\+:\+:parse\+Pending()}}
\item \mbox{\hyperlink{group__misc__functions_ga11da5fd06dcfa57a48a5381268a52086}{parse()}}
\end{DoxyItemize}
\item see \mbox{\hyperlink{struct_qore_1_1_exception_info}{Exception Hash}} and \mbox{\hyperlink{struct_qore_1_1_call_stack_info}{Call Stacks}} for new keys in exception and call stack information hashes
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_aeff0dd69a9ef8f228b54ba5543b2e3c6}{Qore\+::zzz8datezzz9\+::format()}} now accepts {\ttfamily \char`\"{}us\char`\"{}} for microseconds (see \mbox{\hyperlink{group__date__and__time__functions_date_formatting}{Date Formatting Codes}})
\item \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module improvements\+:
\begin{DoxyItemize}
\item added automatic recognition and support of the {\ttfamily \char`\"{}\+S\+T\+A\+R\+T\+T\+L\+S\char`\"{}} command when connecting to an E\+S\+M\+TP server; this way the class will automatically upgrade the connection to a secure T\+L\+S/\+S\+SL connection if the server supports it
\item added support for S\+M\+TP server schemes in the U\+RL in the constructor (ex\+: {\ttfamily \char`\"{}esmtptls\+://user@password\+:smtp.\+example.\+com\char`\"{}})
\item added support for the deprecated (but still in use) {\ttfamily \char`\"{}smtps\char`\"{}} scheme with a default port of 465
\item when throwing an exception when a Message cannot be sent because it is incomplete, the reason for the error is also included in the exception (previously the exception message was generic making problems with the Message object harder to debug)
\end{DoxyItemize}
\item C++ A\+PI Enhancements
\begin{DoxyItemize}
\item added C++ A\+P\+Is to allow for Qore \mbox{\hyperlink{class_qore_1_1_file}{File}} and \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} object arguments to be used by modules
\item added C++ A\+P\+Is for controlling openssl initialization and cleanup by the qore library
\item extended qpp to allow for parsing relative dates in qpp code for assignments/default argument values
\item made it possible to call the C++ function Qore\+Function\+::find\+Variant() from threads where there is no current Qore\+Program object (such as from a thread created by foreign code)
\item added A\+P\+Is to allow foreign threads to be registered/deregistered as Qore threads (for example, to allow Qore code to be called in a callback in a foreign thread created by a library linked with a Qore binary module)
\item added A\+P\+Is to allow for T\+ID reservations to allow (for example) for a callback that is executed in the same foreign thread to always have the same T\+ID
\item the old Datasource\+::exec\+Raw() function with the {\itshape args} parameter was deprecated since args was ignored anyway, a new Datasource\+::exec\+Raw() function was added that has no args parammeter
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_087_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_087_bug_fixes}

\begin{DoxyItemize}
\item fixed a runtime class matching bug when identical user classes were created in different \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects, the match could fail at runtime because the wrong A\+P\+Is were being used
\item fixed a crashing bug in the \mbox{\hyperlink{operators_map}{map}} operator with a select expression when used with an \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} object for the list operand
\item fixed a bug where the generation of internal strings for abstract method signatures tries to resolve class names that are declared out of order, which incorrectly resulted in a parse exception; the fix is to use the class name in the signature before class resolution; the class is resolved in the second stage of parsing (symbol resolution) anyway, if it can\textquotesingle{}t be resolved then the changes to the \mbox{\hyperlink{class_qore_1_1_program}{Program}} are rolled back anyway
\item a potential deadlock was fixed when calling \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit()}} while background threads were running; it was possible for a thread to be canceled while holding a \mbox{\hyperlink{class_qore_1_1_thread_1_1_mutex}{Mutex}} (for example) and then for another thread to deadlock trying to acquire the \mbox{\hyperlink{class_qore_1_1_thread_1_1_mutex}{Mutex}} and therefore for the process to deadlock because pthread\+\_\+mutex\+\_\+lock() is not a cancellation point. The solution was to cancel all threads first, then wait half a second, then call \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit()}}
\item fixed a bug where global variables were being evaluated with strict mathematical boolean evaluation even when \mbox{\hyperlink{parse_directives_perl-bool-eval}{\%perl-\/bool-\/eval}} was enabled (which is the default)
\item fixed bug in \mbox{\hyperlink{group__misc__functions_ga1e6e24f780713c4d10cb9b98fa45cd35}{Qore\+::parse\+Base64\+String()}} and \mbox{\hyperlink{group__misc__functions_ga1f1a63790a7c60a3a61c5d1569fe4e4c}{Qore\+::parse\+Base64\+String\+To\+String()}} when called with an empty string argument; in this case uninitialized memory was returned
\item fixed runtime dynamic memory leaks in the \mbox{\hyperlink{operators_select}{Select From List Operator (select)}} and \mbox{\hyperlink{operators_map}{Map Operator (map)}} operators when used with iterators
\item do thread-\/specific cleanup in the main thread when cleaning up/shutting down the qore library
\item added additional openssl cleanup code for thread-\/local data and when cleaning up the qore library
\item fixed a bug matching function/method variants at runtime
\item fixed a race condition deleting global dynamic handlers in the \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module
\item fixed a bug where declaring an abstract method with parameters and then declaring a concrete reimplementation of the method in a child class with no parameters caused a parse-\/time crash
\item fixed a bug where trying to dynamically call a function that does not exist results in a deadlock due to an error where a mutex is not unlocked
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_socket_af89005a834cbc3a54a532a2aabcc4827}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Message()}} and \mbox{\hyperlink{class_qore_1_1_socket_a2eb897451c69d1c916a038e6648345a9}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Response()}} methods regarding the timeout parameter
\item fixed a bug in an socket S\+SL error message where the method name was printed from non-\/string memory (used wrong ptr for the {\ttfamily \%s} format argument)
\item fixed some major crashing bugs related to reference handling; a global variable assigned a reference to a reference to a local variable would cause a crash
\item \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} type fixes\+: an error in \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} type handling allowed non-\/reference values to be passed to builtin code expecing references which caused a crash; the \mbox{\hyperlink{data_type_declarations_reference_type}{reference}} and \mbox{\hyperlink{data_type_declarations_reference_or_nothing_type}{$\ast$reference}} types would accept any value type
\item attempted to fix a non-\/reproducible bug seen on rhel5 in the \mbox{\hyperlink{class_qore_1_1_socket}{Socket class}} where S\+SL errors would cause the affected thread to go into a infinite loop using 100\% C\+PU
\end{DoxyItemize}\hypertarget{release_notes_qore_0862}{}\section{Qore 0.\+8.\+6.\+2}\label{release_notes_qore_0862}
\begin{DoxyParagraph}{Release Summary}
Iterator improvements and design fixes
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0862_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_0862_compatibility}
\begin{DoxyParagraph}{Fixes for Iterator Class Design Bugs}
Iterators, particular regarding the \mbox{\hyperlink{operators_map}{map}} and \mbox{\hyperlink{operators_select}{select}} operators, were implemented in a confusing and inconsistent way; even the qore documentation was incorrect, and examples were given incorrectly. The following changes will break functionality using the badly-\/implemented behavior of iterators before, but since the fix comes fairly soon after the introduction, hopefully this change will not cause too many problems with existing code. All users polled about the iterator changes in this release saw them as positive and desired changes to the language.
\begin{DoxyItemize}
\item the \mbox{\hyperlink{operators_map}{map}} and \mbox{\hyperlink{operators_select}{select}} operators\textquotesingle{} behavior was changed when used with an \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} object for the list operand; now the implied argument is the result of \mbox{\hyperlink{class_qore_1_1_abstract_iterator_a1f7b94aa7237f59c4f959f4d33333d9a}{Abstract\+Iterator\+:\+:get\+Value()}} instead of the iterator object itself. This addresses a confusing design choice in the original iterator integration with the \mbox{\hyperlink{operators_map}{map}} and \mbox{\hyperlink{operators_select}{select}} operators
\item the second boolean argument was removed from the \mbox{\hyperlink{class_qore_1_1_hash_iterator_a842d257239bb77f2989960dbe1ddabc9}{Qore\+::\+Hash\+Iterator\+::constructor}}(hash$<$auto$>$) \char`\"{}\+Hash\+Iterator\+::constructor(hash<auto>)\char`\"{} and \mbox{\hyperlink{class_qore_1_1_hash_reverse_iterator_a3ec39c8879b71815b2ba2c266d3d89ba}{Hash\+Reverse\+Iterator\+:\+:constructor(hash)}} methods; use the new \mbox{\hyperlink{class_qore_1_1_hash_pair_iterator}{Hash\+Pair\+Iterator}} and \mbox{\hyperlink{class_qore_1_1_object_pair_iterator}{Object\+Pair\+Iterator}} classes instead (\mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aae2e67b218a51791103c21866df5217b}{Qore\+::zzz8hashzzz9\+::pair\+Iterator()}} and \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7d6df627d80aa7f74c7e895fb352c837}{Qore\+::zzz8objectzzz9\+::pair\+Iterator()}})
\item the single boolean argument was removed from \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_ad9c31b0d467e2a1496f57e3feff505ee}{Qore\+::zzz8hashzzz9\+::iterator()}} and \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7f5a44cdfd0b417a750deafa46980ce8}{Qore\+::zzz8objectzzz9\+::iterator()}}; use \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aae2e67b218a51791103c21866df5217b}{Qore\+::zzz8hashzzz9\+::pair\+Iterator()}} and \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7d6df627d80aa7f74c7e895fb352c837}{Qore\+::zzz8objectzzz9\+::pair\+Iterator()}} instead to get the old behavior
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0862_changes}{}\subsection{Changes in Qore}\label{release_notes_qore_0862_changes}

\begin{DoxyItemize}
\item new iterator classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_key_iterator}{Hash\+Key\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_hash_key_reverse_iterator}{Hash\+Key\+Reverse\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_hash_pair_iterator}{Hash\+Pair\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_hash_pair_reverse_iterator}{Hash\+Pair\+Reverse\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_object_key_iterator}{Object\+Key\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_object_key_reverse_iterator}{Object\+Key\+Reverse\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_object_pair_iterator}{Object\+Pair\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_object_pair_reverse_iterator}{Object\+Pair\+Reverse\+Iterator}}
\end{DoxyItemize}
\item new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_a4dde09aa84522bbd942d9339c0315ed5}{Qore\+::zzz8hashzzz9\+::key\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aae2e67b218a51791103c21866df5217b}{Qore\+::zzz8hashzzz9\+::pair\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_aab3d2e6e69d212dbe05de43136f14367}{Qore\+::zzz8hashzzz9\+::context\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a473b74b10e5acd871ae6cc996e7427a6}{Qore\+::zzz8objectzzz9\+::key\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7d6df627d80aa7f74c7e895fb352c837}{Qore\+::zzz8objectzzz9\+::pair\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a63b832e2f9eb516106c180a52f3cf2fe}{Qore\+::zzz8nothingzzz9\+::key\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_afd1c98eb4d569e29284f0d777306be2a}{Qore\+::zzz8nothingzzz9\+::pair\+Iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a017185afed46950e373ebfdd2267bb88}{Qore\+::zzz8nothingzzz9\+::context\+Iterator()}}
\end{DoxyItemize}
\item the internal C++ Qore\+Program\+Helper object has been updated to wait until all background threads in the Qore library have executed before taking the \mbox{\hyperlink{class_qore_1_1_program}{Program}} object out of scope; this allows for callbacks and other code that might be needed by background threads started in user modules (for example) to stay valid until the threads in the user modules also have terminated. Note that this does not affect the case when using \mbox{\hyperlink{parse_directives_exec-class}{\%exec-\/class}} and an application program object goes out of scope with background threads in user modules having non-\/static method call references as callbacks to the application program; see \mbox{\hyperlink{qore_modules_user_module_program_scope}{Program Scope in Object-\/\+Oriented Programs Using User Modules Providing Their Own Threads}} for more information on this topic.
\end{DoxyItemize}\hypertarget{release_notes_qore_0861}{}\section{Qore 0.\+8.\+6.\+1}\label{release_notes_qore_0861}
\begin{DoxyParagraph}{Release Summary}
Major bug fixes and minor new features
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0861_changes}{}\subsection{Changes in Qore}\label{release_notes_qore_0861_changes}

\begin{DoxyItemize}
\item updated the \mbox{\hyperlink{parse_directives_try-module}{\%try-\/module}} parse directive to support a variant without an exception variable for usage in \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects where \mbox{\hyperlink{group__parse__options_ga3a99f2973e97f3986630d8204d7b91fd}{Qore\+::\+P\+O\+\_\+\+N\+O\+\_\+\+T\+O\+P\+\_\+\+L\+E\+V\+E\+L\+\_\+\+S\+T\+A\+T\+E\+M\+E\+N\+TS}} is set
\item added code to raise an \mbox{\hyperlink{warnings_invalid-operation}{invalid-\/operation}} warning with the \mbox{\hyperlink{operators_elements}{elements operator}} when called with a type that can never return a value with this operator
\item updated the \mbox{\hyperlink{class_qore_1_1_file}{File}} class\textquotesingle{}s internal buffer size from 4\+KB to 16\+KB which greatly improves read performance
\item added new public A\+P\+Is for the Qore\+Number\+Node class to allow for proper de/serialization in external modules
\item \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} module\+:
\begin{DoxyItemize}
\item added the Pop3\+Client\+::log\+Password() methods and masked password by default in the debug log
\item updated module to v1.\+1
\end{DoxyItemize}
\item \href{../../modules/Mime/html/index.html}{\tt Mime} module\+:
\begin{DoxyItemize}
\item declared the Multi\+Part\+Message\+::get\+Msg\+And\+Headers() method abstract as originally intended
\item added Multi\+Part\+Message\+::parse\+Body() static method
\item updated module to v1.\+3
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_0861_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0861_bug_fixes}

\begin{DoxyItemize}
\item fixed crashing bugs due to the lack of proper lvalue checks with the expression for the background operator with operators using lvalues with local variables
\item fixed rounding of arbitrary-\/precision numeric values for display purposes when the last significant digit is just to the right of the decimal point (ex\+: was displaying 10.\+2 as \char`\"{}11.\char`\"{} for example)
\item fixed a race condition in static destruction of the library when a background thread calls \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit()}} that could cause a segfault on exit
\item fixed a static memory leak in Program objects when constants contain code references to functions or static methods
\item fixed a bug parsing user modules; the Program context was not set properly which could lead to a crash when parsing user modules loaded from the command-\/line or to incorrect parse options when loaded from user Program code
\item fixed a bug where the \mbox{\hyperlink{warnings_invalid-operation}{invalid-\/operation}} warning with the \mbox{\hyperlink{operators_keys}{keys operator}} was not being triggered in common cases that should have triggered the warning
\item \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module\+:
\begin{DoxyItemize}
\item fixed recognizing mime messages with additional text after the version number (ex\+: {\ttfamily \char`\"{}\+Mime-\/\+Version\+: 1.\+0 (\+Mac O\+S X Mail 6.\+2 \textbackslash{}(1499\textbackslash{}))\char`\"{}})
\item fixed a bug setting the content-\/type of message parts (this fix is now in the \href{../../modules/Mime/html/index.html}{\tt Mime} in the Multi\+Part\+Message\+::get\+Msg\+And\+Headers() method
\item fixed multipart message parsing by using Multi\+Part\+Message\+::parse\+Body() in the \href{../../modules/Mime/html/index.html}{\tt Mime} module; now also parts with subparts are parsed correctly as well
\item fixed a bug where the sender and from values were not being set properly when parsing email messages
\item updated module to v1.\+0.\+3
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{release_notes_qore_086}{}\section{Qore 0.\+8.\+6}\label{release_notes_qore_086}
\begin{DoxyParagraph}{Release Summary}
Major new features and a few bug fixes
\end{DoxyParagraph}
\hypertarget{release_notes_qore_086_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_086_compatibility}
\begin{DoxyParagraph}{Perl-\/\+Style Boolean Evaluation}
Qore\textquotesingle{}s default boolean evaluation mode was changed from strict mathematical to a more intuitive perl-\/ (and Python-\/) like style. This change was implemented to address one of the oldest design bugs in Qore\+: strict mathematical boolean evaluation. See \mbox{\hyperlink{parse_directives_perl-bool-eval}{\%perl-\/bool-\/eval}} for a description of the new default boolean evaluation mode.~\newline
~\newline
 To get the old strict mathematical boolean evaluation, use the \mbox{\hyperlink{parse_directives_strict-bool-eval}{\%strict-\/bool-\/eval}} parse option.~\newline
~\newline
 An example of the change; now the following \mbox{\hyperlink{statements_if}{if statement}} block will be executed as the {\ttfamily {\bfseries if}} expression is now evaluated as \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}\+: 
\begin{DoxyCode}
string str = \textcolor{stringliteral}{"hello"};
\textcolor{keywordflow}{if} (str)
    \mbox{\hyperlink{group__string__functions_ga32070517a9f8a70a32ef48f83a6f128e}{printf}}(\textcolor{stringliteral}{"Qore says hello\(\backslash\)n"});
\end{DoxyCode}
 Previously (i.\+e. with \mbox{\hyperlink{parse_directives_strict-bool-eval}{\%strict-\/bool-\/eval}}) the {\ttfamily {\bfseries if}} expression above would be evaluated as \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} because the string value was converted to an integer 0, however as of Qore 0.\+8.\+6 (with the default \mbox{\hyperlink{parse_directives_perl-bool-eval}{perl-\/bool-\/eval}}) it is \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} since the string is not empty; empty strings and string value {\ttfamily \char`\"{}0\char`\"{}} are evaluated as \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}.~\newline
~\newline
 Perhaps counterintuitively (and the reason this was changed to be the default in qore), the chance for regression errors in qore code is very small, because for all cases where the old logic could be applied (meaning excluding cases where the result was always \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} due to the data types or values being evaluated), the results are the same with the new logic, except for one case; the case where a string has more than one character and begins with a zero (ex\+: {\ttfamily \char`\"{}00\char`\"{}}). In this case, the old logic would always return \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}, because the value was first converted to an integer {\ttfamily 0}, whereas the new logic will return \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}. Note that in the case of a string with a single {\ttfamily \char`\"{}0\char`\"{}}, both the old and new boolean logic returns \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}.~\newline
~\newline
 Basically with this option set, qore\textquotesingle{}s boolean evaluation becomes like perl\textquotesingle{}s and Python\textquotesingle{}s, whereas any expression that has the following values is \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}\+: \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}}, \mbox{\hyperlink{basic_data_types_string}{string}} {\ttfamily \char`\"{}0\char`\"{}} and \mbox{\hyperlink{basic_data_types_string}{empty strings}}, \mbox{\hyperlink{basic_data_types_integer}{integer}}, \mbox{\hyperlink{basic_data_types_float}{float}}, and \mbox{\hyperlink{basic_data_types_number}{number}} {\ttfamily 0} (zero), \mbox{\hyperlink{basic_data_types_absolute_dates}{absolute date}} {\ttfamily 1970-\/01-\/01Z} (ie the start of the epoch with an offset of 0), \mbox{\hyperlink{basic_data_types_relative_dates}{relative date}} {\ttfamily 0s} (or any \mbox{\hyperlink{basic_data_types_relative_dates}{relative date}} with a 0 duration), \mbox{\hyperlink{basic_data_types_null}{N\+U\+LL}}, \mbox{\hyperlink{basic_data_types_binary}{empty binary objects}}, \mbox{\hyperlink{container_data_types_hash}{empty hashes}}, and \mbox{\hyperlink{container_data_types_list}{empty lists}}. All other values are \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}. 
\end{DoxyParagraph}
\begin{DoxyNote}{Note}
also affects the \mbox{\hyperlink{group__type__conversion__functions_ga22c89291d4105fcb558f49fe49aeae44}{boolean(any)}} function
\end{DoxyNote}
\begin{DoxyParagraph}{Changes in the Socket Class}
The \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} class was enhanced to support timeouts with non-\/blocking I/O on all send operations; many Socket methods that send data were originally implemented to return an error code on error, however they would also throw exceptions if the socket were not open, so the error handling was inconsistent (exceptions versus return codes).~\newline
~\newline
 Additionally it was not possible to get error information at all for S\+SL errors if the socket was connected with S\+SL, which, according to Qore\textquotesingle{}s socket design, should be transparent for the programmer.~\newline
~\newline
 For these reasons the implementation was deemed inconsistent and unintuitive; the change was to add optional timeout parameters to all send methods and to allow the methods to throw exceptions (instead of simply returning -\/1 and not being able to determine the cause of the error in many cases).~\newline
~\newline
 The following methods were updated to accept optional timeout parameters and throw exceptions on all errors rather than a return code for I/O errors\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_aa5937114e3c3339bf463303d4208ca86}{Qore\+::\+Socket\+::send()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_ada01381996dde5eb7dda1562f43fbda9}{Qore\+::\+Socket\+::send\+Binary()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a13a4582d75efdb29305b1b54bf66b31b}{Qore\+::\+Socket\+::sendi1()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aaa62ba419d66dac29d8605c6dd5a7e68}{Qore\+::\+Socket\+::sendi2()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a88a630d0cda97256c4b01c1e8b71d6e3}{Qore\+::\+Socket\+::sendi4()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a8820f3ae73f1ce737aaf88b9cfb3c001}{Qore\+::\+Socket\+::sendi8()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a0139b7e63ce4d06edecdb96d64124511}{Qore\+::\+Socket\+::sendi2\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a69c50668b38e98af23ab9fb07ce9adff}{Qore\+::\+Socket\+::sendi4\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a142489a333f9444b7379ad5b2a365780}{Qore\+::\+Socket\+::sendi8\+L\+S\+B()}}
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Abstract Method in Abstract\+Iterator}
The following abstract method was added\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_abstract_iterator_aee1def5d872b487b8917a166d9b263e8}{Qore\+::\+Abstract\+Iterator\+::valid()}} was added (with concrete implementations in all iterator classes derived from this base class delivered with Qore); this method tells if the object is currently pointing to a valid iterator.~\newline
~\newline
 For any user classes inherting \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} directly (as opposed to another concrete iterator class in Qore, where the method has already been added), a concrete implementation of this method will have to be added as well or that class will become \mbox{\hyperlink{qore_classes_abstract}{abstract}} with this release of Qore.
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_086_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_086_new_features}
\begin{DoxyParagraph}{Arbitrary-\/\+Precision Numeric Support}
Qore now uses the \href{http://www.mpfr.org/}{\tt M\+P\+FR} and \href{http://gmplib.org}{\tt G\+MP} libraries to provide arbitrary-\/precision numeric support. This type can be used for high-\/precision mathematics or for storing {\ttfamily N\+U\+M\+E\+R\+IC} (ie {\ttfamily D\+E\+C\+I\+M\+AL} or {\ttfamily N\+U\+M\+B\+ER}) column values when retrieved from databases by Qore D\+BI drivers that support the new capability \mbox{\hyperlink{group__dbi__capabilities_ga8394d1495944bf61d666de40489a038a}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+N\+U\+M\+B\+E\+R\+\_\+\+S\+U\+P\+P\+O\+RT}} (previously these values would be retrieved as Qore strings in order to avoid information loss).~\newline
~\newline
 For more information, see the new \mbox{\hyperlink{basic_data_types_number}{number}} type, \mbox{\hyperlink{data_type_declarations_number_type}{number}}, and \mbox{\hyperlink{class_qore_1_1zzz8numberzzz9}{Qore\+::zzz8numberzzz9}}
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Csv\+Util Module}
The \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module implements the Csv\+File\+Iterator class that allows for easy parsing of csv-\/like text files
\end{DoxyParagraph}
\begin{DoxyParagraph}{\%try-\/module Parse Directive to Handle Module Load Errors at Parse Time}
The new \mbox{\hyperlink{parse_directives_try-module}{\%try-\/module}} parse directive allows for module load errors to be handled at parse time; ex\+: 
\begin{DoxyCode}
%\textcolor{keywordflow}{try}-module($ex) some-module > 1.0
    \mbox{\hyperlink{group__string__functions_ga32070517a9f8a70a32ef48f83a6f128e}{printf}}(\textcolor{stringliteral}{"error loading module %y: %s: %s\(\backslash\)n"}, ex.arg, ex.err, ex.desc);
    \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit}}(1);
%endtry
\end{DoxyCode}

\end{DoxyParagraph}
\begin{DoxyParagraph}{Abstract Class Hierarchy Improvement}
As of this version of qore, concrete implementations of \mbox{\hyperlink{qore_classes_abstract}{abstract methods}} no longer have to have exactly the same return type as the abstract method; it is now sufficient that the return type in the concrete method meets a compatibility test with the return type of the abstract method in the parent class.~\newline
~\newline
 For example the following is now valid (and {\ttfamily My\+Concrete\+Class} is not abstract, whereas previously because the return types in the child class were not exact, {\ttfamily My\+Concrete\+Class} would be considered abstract by qore)\+: 
\begin{DoxyCode}
\textcolor{keyword}{class }MyAbstractClass \{
    abstract any doSomething();
    abstract *string getString();
\}

\textcolor{keyword}{class }MyConcreteClass inherits MyAbstractClass \{
    int doSomething() \{
        \textcolor{keywordflow}{return} 1;
    \}
    string getString() \{
        \textcolor{keywordflow}{return} \textcolor{stringliteral}{"hello"};
    \}
\}
\end{DoxyCode}

\end{DoxyParagraph}
\begin{DoxyParagraph}{D\+BI Improvements}
Three new D\+BI capabilities were implemented, including a new option A\+PI as follows\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__dbi__capabilities_ga8394d1495944bf61d666de40489a038a}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+N\+U\+M\+B\+E\+R\+\_\+\+S\+U\+P\+P\+O\+RT}}\+: D\+BI drivers declaring this capability can accept \mbox{\hyperlink{basic_data_types_number}{number}} values and can also return \mbox{\hyperlink{basic_data_types_number}{number}} values, if a D\+BI driver does not declare this capability, then \mbox{\hyperlink{basic_data_types_number}{number}} values sent for binding by value are automatically converted to \mbox{\hyperlink{basic_data_types_float}{float}} values before being sent to the driver
\item \mbox{\hyperlink{group__dbi__capabilities_ga428f8f4909b2737d03593d8808fe2227}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+H\+A\+S\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+S\+U\+P\+P\+O\+RT}}\+: this indicates that the driver supports the new option A\+PI, allowing options to be set on each connection. See the following for more information\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+:\+:constructor(hash)}}\+: now passes options to the D\+BI driver if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+:\+:constructor(string)}}\+: (new in 0.\+8.\+6) passes options to the D\+BI driver if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_a34834d2da5e1e8f13949810e76a6e1cd}{Datasource\+:\+:get\+Option(string)}}\+: (new in 0.\+8.\+6) returns the value of the given option if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_acf95b2265f01756ea0d51806dc51973b}{Datasource\+:\+:get\+Option\+Hash()}}\+: (new in 0.\+8.\+6) returns a hash of the current option values for the current connection if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_ad64b2409e602054d6e29257442b8601e}{Datasource\+:\+:set\+Option()}}\+: (new in 0.\+8.\+6) allows options to be changed after the object is created
\item \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+Pool\+:\+:constructor(hash)}}\+: now passes options to the D\+BI driver if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+Pool\+:\+:constructor(string)}}\+: (new in 0.\+8.\+6) passes options to the D\+BI driver if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_abf16cc3f2c883bae4e0e6896e6ee2f69}{Datasource\+Pool\+:\+:get\+Option(string)}}\+: (new in 0.\+8.\+6) returns the value of the given option if the driver supports the option A\+PI
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool_a97f8401b0a78a17826a3f15bfaef0a25}{Datasource\+Pool\+:\+:get\+Option\+Hash()}}\+: (new in 0.\+8.\+6) returns a hash of the current option values for the current connection if the driver supports the option A\+PI
\item \mbox{\hyperlink{group__dbi__functions_ga6984501641ab8a4e2c5387743c24fc0c}{dbi\+\_\+get\+\_\+driver\+\_\+options(string)}}\+: (new in 0.\+8.\+6) returns a hash of driver option information without values
\end{DoxyItemize}
\item \mbox{\hyperlink{group__dbi__capabilities_ga9edf0826e734f77115fd8f1001cf4a9e}{D\+B\+I\+\_\+\+C\+A\+P\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+T\+I\+M\+E\+\_\+\+Z\+O\+NE}}\+: indicates that the D\+BI driver will convert any bound date/time values to the server\textquotesingle{}s time zone before binding and also will tag date/time values retrieved from the server with the server\textquotesingle{}s time zone. This capability also implies that the driver supports the new {\ttfamily \char`\"{}timezone\char`\"{}} option.
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Socket Improvements}
The \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} class was updated to support non-\/blocking I/O on all send methods; the following methods were updated to accept optional timeout parameters\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_ab98b2101a71b7660d6d2bad57988d0ef}{Qore\+::\+Socket\+::send2()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a681a441f39cea6a337902a90f4cc897f}{Qore\+::\+Socket\+::send\+Binary2()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_af89005a834cbc3a54a532a2aabcc4827}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Message()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a2eb897451c69d1c916a038e6648345a9}{Qore\+::\+Socket\+::send\+H\+T\+T\+P\+Response()}}
\end{DoxyItemize}The following methods were enhanced to provide better error information when throwing exceptions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_a9c362b07b1d06fce22bde3e6a888832d}{Qore\+::\+Socket\+::recvi1()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a4fba2fa5a88c8c9694c3557056116738}{Qore\+::\+Socket\+::recvi2()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_ac8ca3e12a7616dcad149754ffe8342ea}{Qore\+::\+Socket\+::recvi4()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_adc8295d79e2288b2e8c5143ac270d08c}{Qore\+::\+Socket\+::recvi8()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_ae243f8377cd00cf9be553a1cefc27b12}{Qore\+::\+Socket\+::recvi2\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a6101e09f33fe75e8404c612177fff54c}{Qore\+::\+Socket\+::recvi4\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a7d107840ba3dbac1bd621179a89b121a}{Qore\+::\+Socket\+::recvi8\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_ab77e7118003c6ae4baac594ffd91d980}{Qore\+::\+Socket\+::recvu1()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a2866c8093c3cdd5216bf01c768054e7e}{Qore\+::\+Socket\+::recvu2()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_adbd053f544a6da11c74fa489ac1bbc14}{Qore\+::\+Socket\+::recvu4()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_aa1ea4a31ed5e4a0c1858bfd4e754eee0}{Qore\+::\+Socket\+::recvu2\+L\+S\+B()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a4cd9d50e0649da38ee3292e349f22b7a}{Qore\+::\+Socket\+::recvu4\+L\+S\+B()}}
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Iterator Improvements}
The following improvements were made in qore to support more flexible and ubiquitous iterators\+:
\begin{DoxyItemize}
\item new iterator classes\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_single_value_iterator}{Single\+Value\+Iterator}}\+: allows single values (or any value without an iterator class) to be iterated; this provides the basis for the return type for the new base \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a16b7eeea1bb08b7c3faa69b2aa602fbb}{Qore\+::zzz8valuezzz9\+::iterator()}} method for non-\/container types
\item \mbox{\hyperlink{class_qore_1_1_file_line_iterator}{File\+Line\+Iterator}}\+: allows files to be iterated line by line
\item \mbox{\hyperlink{class_qore_1_1_object_iterator}{Object\+Iterator}}\+: a generic iterator for objects
\item \mbox{\hyperlink{class_qore_1_1_object_reverse_iterator}{Object\+Reverse\+Iterator}}\+: a generic reverse iterator for objects
\item \mbox{\hyperlink{class_qore_1_1_range_iterator}{Range\+Iterator}}\+: a numerical sequence generator (the basis for the return type for the new \mbox{\hyperlink{group__range__functions_gad5b4d3ad3f6c36d2e714bc6ed757a507}{xrange()}} function
\end{DoxyItemize}
\item new pseudo-\/methods were added to return iterator objects based on the value type\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a16b7eeea1bb08b7c3faa69b2aa602fbb}{Qore\+::zzz8valuezzz9\+::iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8hashzzz9_ad9c31b0d467e2a1496f57e3feff505ee}{Qore\+::zzz8hashzzz9\+::iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_ac8e243d7957d6136a6c77d32f320bf24}{Qore\+::zzz8listzzz9\+::iterator()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8objectzzz9_a7f5a44cdfd0b417a750deafa46980ce8}{Qore\+::zzz8objectzzz9\+::iterator()}}
\end{DoxyItemize}The base pseudo-\/method (\mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a16b7eeea1bb08b7c3faa69b2aa602fbb}{Qore\+::zzz8valuezzz9\+::iterator()}}) ensures that any value can be iterated, and the type-\/specific methods ensure that the most suitable iterator for container types is returned for container values; values without an iterator class are iterated with the \mbox{\hyperlink{class_qore_1_1_single_value_iterator}{Single\+Value\+Iterator}}
\item the \mbox{\hyperlink{class_qore_1_1_hash_iterator}{Hash\+Iterator}} and \mbox{\hyperlink{class_qore_1_1_hash_reverse_iterator}{Hash\+Reverse\+Iterator}} classes had an additional optional boolean argument added to their constructors; if \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}, then the \mbox{\hyperlink{class_qore_1_1_hash_iterator_ac476d576e747b685d4284fb02a5cf83e}{Hash\+Iterator\+:\+:get\+Value()}} and \mbox{\hyperlink{class_qore_1_1_hash_iterator_ac476d576e747b685d4284fb02a5cf83e}{Hash\+Reverse\+Iterator\+:\+:get\+Value()}} methods return a hash with the following keys\+: {\ttfamily \char`\"{}key\char`\"{}} and {\ttfamily \char`\"{}value\char`\"{}}, allowing for more convenient iteration with constructions that only use {\ttfamily get\+Value()} methods (such as the \mbox{\hyperlink{statements_foreach}{foreach statement}}); to accommodate this, two new methods were added to the \mbox{\hyperlink{class_qore_1_1_hash_iterator}{Hash\+Iterator}} base class\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_iterator_a0d62ed2e642f1f9f0fc06cbd2d79b14b}{Qore\+::\+Hash\+Iterator\+::get\+Key\+Value()}}
\item \mbox{\hyperlink{class_qore_1_1_hash_iterator_a1300d0cec84d5f08b89fdc3d18f1f229}{Qore\+::\+Hash\+Iterator\+::get\+Value\+Pair()}}
\end{DoxyItemize}
\item all iterator classes had copy methods added to them (ex\+: \mbox{\hyperlink{class_qore_1_1_hash_iterator_ae35efa6b6afd35bc56fdddd9d5622059}{Qore\+::\+Hash\+Iterator\+::copy()}})
\item new Python-\/inspired \mbox{\hyperlink{group__list__functions_gabf1a283eed97fa22a32be14b30add9e6}{range()}} and \mbox{\hyperlink{group__range__functions_gad5b4d3ad3f6c36d2e714bc6ed757a507}{xrange()}} functions (the latter returning a \mbox{\hyperlink{class_qore_1_1_range_iterator}{Range\+Iterator}} object to efficiently iterate large integral sequences or ranges
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Text File Parsing Enhancements}
The following improvements were made in qore to support more flexible file parsing\+:
\begin{DoxyItemize}
\item the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Qore\+::\+Read\+Only\+File}} class was added as a parent class of \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} to allow for a more convenient A\+PI for reading files (the \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} class\textquotesingle{}s A\+PI remains the same as it publically inherits \mbox{\hyperlink{class_qore_1_1_read_only_file}{Qore\+::\+Read\+Only\+File}})
\item the \mbox{\hyperlink{class_qore_1_1_read_only_file_a3407127e38d2a2ffe3c473d02561f788}{Read\+Only\+File\+:\+:read\+Line()}} method (formerlly a method of the \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} class) was enhanced to accept 2 optional arguments, allowing the end of line character(s) to be stripped from the line returned, and also to allow the end of line characters to be specified. If no end of line characters are specified, then the method automatically determines the end of line characters (can be {\ttfamily \char`\"{}\textbackslash{}n\char`\"{}}, {\ttfamily \char`\"{}\textbackslash{}r\char`\"{}}, or {\ttfamily \char`\"{}\textbackslash{}r\textbackslash{}n\char`\"{}}; the last one only if the underlying file is not a T\+TY in order to avoid stalling I/O on an interactive T\+TY)
\item the \mbox{\hyperlink{group__file__stat__constants}{File Stat Constants}} were moved from the \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} class to the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Qore\+::\+Read\+Only\+File}} class
\item added a new \mbox{\hyperlink{class_qore_1_1_file_line_iterator}{File\+Line\+Iterator}} iterator class
\item added a new optional parameter to \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a34c43c49f859529054ef495eb395e6bb}{Qore\+::zzz8stringzzz9\+::split(string, string, bool)}} and \mbox{\hyperlink{group__string__functions_gad3db83c0fd5df500b0cc9d2ddb0e7d85}{Qore\+::split(string, string, string, bool)}} to allow for automatic stripping unquoted fields of leading and trailing whitespace (the default is the old behavior; i.\+e. leave the whitespace as it is read)
\item added a new \mbox{\hyperlink{class_qore_1_1_time_zone}{Time\+Zone}} method for parsing string dates in a specific \mbox{\hyperlink{class_qore_1_1_time_zone}{Time\+Zone}}\+: \mbox{\hyperlink{class_qore_1_1_time_zone_ab22bd3acfbfb1d7b7ce56f54c81897c7}{Qore\+::\+Time\+Zone\+::date(string, string)}}
\item added a new function for parsing text as a boolean value\+: \mbox{\hyperlink{group__string__functions_ga774b6d0f9d5835de7d7362400aa2cdd1}{parse\+\_\+boolean()}}
\item as mentioned above, the new \href{../../modules/CsvUtil/html/index.html}{\tt Csv\+Util} module was added, implementing the Csv\+File\+Iterator class that allows for easy parsing of csv-\/like text files
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Other Improvements and Changes}

\begin{DoxyItemize}
\item the \mbox{\hyperlink{statements_foreach}{foreach statement}} now iterates objects derived from \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} automatically
\item added a \mbox{\hyperlink{group__option__constants_gaad0f8a0998b32e445a8708484acbd100}{H\+A\+V\+E\+\_\+\+S\+Y\+M\+L\+I\+NK}} constant for the \mbox{\hyperlink{group__filesystem__functions_gae895213e0d9f207ab855e4546c791909}{symlink()}} function added in qore 0.\+8.\+5
\item added the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_af7fe60e95959cc5eb6cf0046adcb9ec6}{S\+Q\+L\+Statement\+:\+:member\+Gate()}} method so \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} objects can be dereferenced directly to a column value when iterated with \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement_a34dfdc4d3aa9d3c38817931986506fbd}{S\+Q\+L\+Statement\+:\+:next()}}; also this method will throw exceptions when an unknown column name is used so that typos in column names can be caught (instead of being silently ignored producing hard to find bugs)
\item implemented \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+:\+:constructor(string)}} and \mbox{\hyperlink{class_qore_1_1_serializable_a7bbf6cf2d7ac53a80e8023790c540c5f}{Datasource\+Pool\+:\+:constructor(string)}} variants to allow for creating datasources from a string that can be parsed by \mbox{\hyperlink{group__dbi__functions_gad95f3a076d1818cc722c516543e29858}{Qore\+::\+S\+Q\+L\+::parse\+\_\+datasource(string)}} \char`\"{}parse\+\_\+datasource(string)\char`\"{}
\item added the following new D\+B\+I-\/related functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__dbi__functions_ga5f5a0bf394b3472e206441651bf48e9e}{dbi\+\_\+get\+\_\+driver\+\_\+list()}}
\item \mbox{\hyperlink{group__dbi__functions_ga1b7664b6fef86a36d8f96084fb88885c}{dbi\+\_\+get\+\_\+driver\+\_\+capability\+\_\+list(string)}}
\item \mbox{\hyperlink{group__dbi__functions_ga40597983f24f3b0edc06149246d1cbe2}{dbi\+\_\+get\+\_\+driver\+\_\+capabilities(string)}}
\item \mbox{\hyperlink{group__dbi__functions_ga6984501641ab8a4e2c5387743c24fc0c}{dbi\+\_\+get\+\_\+driver\+\_\+options(string)}}
\item \mbox{\hyperlink{group__dbi__functions_gad95f3a076d1818cc722c516543e29858}{parse\+\_\+datasource(string)}}
\end{DoxyItemize}
\item implemented support for {\ttfamily \char`\"{}\+A\char`\"{}} and {\ttfamily \char`\"{}a\char`\"{}}, (hexadecimal floating-\/point output) {\ttfamily \char`\"{}\+G\char`\"{}}, {\ttfamily \char`\"{}g\char`\"{}}, (compact floating-\/point output) {\ttfamily \char`\"{}\+F\char`\"{}}, (non-\/scientific floating-\/point output) and {\ttfamily \char`\"{}\+E\char`\"{}} and {\ttfamily \char`\"{}e\char`\"{}} (scientific/exponential floating-\/point output) format arguments for \mbox{\hyperlink{basic_data_types_float}{floats}} and \mbox{\hyperlink{basic_data_types_number}{numbers}} (new arbitrary-\/precision \mbox{\hyperlink{basic_data_types_number}{number type values}}); see \mbox{\hyperlink{group__string__functions_string_formatting}{String Formatting}}
\item new pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a073b50bf1e4e7b646da0d7a6db6180a8}{Qore\+::zzz8valuezzz9\+::to\+String()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_aed0897423af7ddcb1ade7df4c4a61364}{Qore\+::zzz8valuezzz9\+::to\+Int()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a11505ca76b6e168b1d143b3fc8d1ba60}{Qore\+::zzz8valuezzz9\+::to\+Float()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a671b4af222d6351eb969c2b1d710d463}{Qore\+::zzz8valuezzz9\+::to\+Bool()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_a456f92c6ee27c0c772223745f918bcbc}{Qore\+::zzz8floatzzz9\+::format(string fmt)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_a4f4b203fef4e2ae785f838c98e5995be}{Qore\+::zzz8intzzz9\+::format(string fmt)}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a766250b7a8d910b7facce5bef7cfe855}{Qore\+::zzz8stringzzz9\+::is\+Data\+Ascii()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ae568ad566fc87c944a64d6ce67dd3d16}{Qore\+::zzz8stringzzz9\+::is\+Data\+Printable\+Ascii()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a3bd7145235f0f4160b29e9ff1a925f4f}{Qore\+::zzz8valuezzz9\+::callp()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8callrefzzz9_a51595cfbda83bbed8fe486c744728c8b}{Qore\+::zzz8callrefzzz9\+::callp()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8intzzz9_aa7540bc9c4c5e8b3ba79e853c462c863}{Qore\+::zzz8intzzz9\+::sign()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8floatzzz9_ab12fc9ef4d1d45cbad74ac1558ec754e}{Qore\+::zzz8floatzzz9\+::sign()}}
\end{DoxyItemize}
\item the value of the \mbox{\hyperlink{group__sql__constants_ga8d5c7d08373364f4773f65e69063cd04}{N\+U\+M\+B\+ER}}, \mbox{\hyperlink{group__sql__constants_ga223c3ce9da5ccb29dd35eab11f161f9f}{N\+U\+M\+E\+R\+IC}}, and \mbox{\hyperlink{group__sql__constants_ga85bba3f8e978509f66f08011b264e9b0}{D\+E\+C\+I\+M\+AL}} \mbox{\hyperlink{group__sql__constants}{S\+QL Constants}} is now {\ttfamily \char`\"{}number\char`\"{}} instead of {\ttfamily \char`\"{}string\char`\"{}} (see also \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_sql_binding}{sql\+\_\+binding}})
\item new constants\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__math__constants_ga2326203043f44a1fe37ffebe35ab8513}{M\+\_\+\+P\+In}}
\item \mbox{\hyperlink{group__math__constants_ga96d58fec2ca2cec95893872b16b84daa}{M\+A\+X\+I\+NT}}
\item \mbox{\hyperlink{group__math__constants_gaba64488e1020a48909a9a33bb1f4e6ab}{M\+I\+N\+I\+NT}}
\end{DoxyItemize}
\item new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__list__functions_gabf1a283eed97fa22a32be14b30add9e6}{range()}}
\item \mbox{\hyperlink{group__range__functions_gad5b4d3ad3f6c36d2e714bc6ed757a507}{xrange()}}
\end{DoxyItemize}
\item new methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_read_only_file_afd64015ff14cb58d2f2c365d36a9c85c}{Qore\+::\+Read\+Only\+File\+::is\+Tty()}} and \mbox{\hyperlink{class_qore_1_1_read_only_file_a9b323248355ff9dc2048ea913664e111}{Qore\+::\+Read\+Only\+File\+::get\+File\+Name()}} (the \mbox{\hyperlink{class_qore_1_1_read_only_file}{Qore\+::\+Read\+Only\+File}} class was added in qore 0.\+8.\+6 otherwise made up of methods formerly belonging to the \mbox{\hyperlink{class_qore_1_1_file}{Qore\+::\+File}} class)
\end{DoxyItemize}
\item added the \mbox{\hyperlink{parse_directives_append-module-path}{\%append-\/module-\/path}} parse directive
\item \mbox{\hyperlink{qore_modules_user_modules}{user modules}} may now use \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects for embedded logic; any \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects created in a \mbox{\hyperlink{qore_modules_user_modules}{user module}} will have its parse options masked to be not less restrictive than the parse options in the current \mbox{\hyperlink{class_qore_1_1_program}{Program}}, and additionally parse options will be locked so that user module are not able to circumvent function restrictions imposed by parse options.
\item updated docs to show functional restrictions tagged at the class level
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_086_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_086_bug_fixes}

\begin{DoxyItemize}
\item fixed a bug in the \mbox{\hyperlink{operators_map}{map operator}} with a select expression when the list operand is \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}}; it was returning a list with one \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} element instead of \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}}
\item applied a patch by Reini Urban to allow for multi-\/arch builds on Debian
\item fixed bugs calculating the byte offset for string searches in the c++ Qore\+String\+::index() and Qore\+String\+::rindex() functions when the offset is negative and the strings have a multi-\/byte character encoding (such as U\+T\+F-\/8)
\item fixed a bug where calling an abstract method from a class where the abstract method is implemented was causing a parse error to be thrown
\item fixed a bug where the wrong source code location was displayed when raising a parse exception in operator expression parse initialization for some operators
\item fixed bugs in regexes in the Http\+Server\+::add\+Listeners() and Http\+Server\+::add\+Listeners\+With\+Handler() methods (\href{../../modules/HttpServer/html/index.html}{\tt Http\+Server} module version updated to 0.\+3.\+5)
\item fixed bugs handling non-\/blocking reads in the \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} class; the timeout setting was only enforced for the first read; subsequent reads were made as blocking reads
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_socket}{Socket}} class when the S\+SL session requires renegotiation during non-\/blocking I/O
\item \mbox{\hyperlink{class_qore_1_1_file_a3ebb12df5983eddf42394bce5033aa75}{File\+:\+:constructor()}} now throws an exception if called with a tty target and \mbox{\hyperlink{parse_directives_no-terminal-io}{\%no-\/terminal-\/io}} is set
\item fixed a bug in split with quote (\mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a34c43c49f859529054ef495eb395e6bb}{Qore\+::zzz8stringzzz9\+::split(string, string, bool)}} and \mbox{\hyperlink{group__string__functions_gad3db83c0fd5df500b0cc9d2ddb0e7d85}{Qore\+::split(string, string, string, bool)}}) if the separator pattern was not found and the single field was not quoted either
\item fixed a bug handling nested \mbox{\hyperlink{parse_directives_ifdef}{\%ifdef}} and \mbox{\hyperlink{parse_directives_ifndef}{\%ifndef}} blocks with \mbox{\hyperlink{parse_directives_else}{\%else}} in the inside block
\item fixed a crashing due to the failure to clear the \char`\"{}\+P\+F\+\_\+\+T\+O\+P\+\_\+\+L\+E\+V\+E\+L\char`\"{} flag when initializing statements, this could cause temporary variables in a statement to be marked as the start of the global thread-\/local variable list, and then after such variables are deleted, then a crash happens when trying to access the global thread-\/local variable list
\item fixed a crashing bug at parse time merging function lists in namespaces declared multiple times
\item fixed a bug in executing user module init() closures
\item fixed a bug where the qore library could crash when destroying a Program object due to a race condition in removing signal handlers managed by the Program object; the Program calls the signal handler manager to remove the signals, but the signals can be removed concurrently to the request while the Program object is iterating the signal set (ie it is modified while being iterated), which causes a crash
\item added code to detect when the same namespace is declared both with and without the \mbox{\hyperlink{qore_modules_mod_public}{public keyword}} when defining user modules which can result in entire namespaces being silently not exported (and can be difficult to debug); now a parse exception is thrown if this happens while parsing a user module
\item added code tags to \mbox{\hyperlink{class_qore_1_1_file}{File}} methods without side effects
\item made many minor documentation fixes
\end{DoxyItemize}\hypertarget{release_notes_qore_0851}{}\section{Qore 0.\+8.\+5.\+1}\label{release_notes_qore_0851}
\begin{DoxyParagraph}{Release Summary}
Bugfix release
\end{DoxyParagraph}
\hypertarget{release_notes_qore_0851_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_0851_bug_fixes}

\begin{DoxyItemize}
\item fixed a race condition accessing global and closure-\/bound thread-\/local variables in multithreaded contexts
\item fixed a bug in transaction management with the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_datasource_pool}{Datasource\+Pool}} class when used with the \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} class
\item fixed an error in the \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} user module where mail headers requiring encoding were not encoded and those not requiring encoding were encoded with Q encoding
\item fixed an error in the \href{../../modules/Mime/html/index.html}{\tt Mime} user module where {\ttfamily \char`\"{}\+\_\+\char`\"{}} characters in q-\/encoded headers were not encoded correctly
\end{DoxyItemize}



 \hypertarget{release_notes_qore_085}{}\section{Qore 0.\+8.\+5}\label{release_notes_qore_085}
\begin{DoxyParagraph}{Release Summary}
Major new features and a few bug fixes
\end{DoxyParagraph}
\hypertarget{release_notes_qore_085_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_085_new_features}
\begin{DoxyParagraph}{Abstract Methods and Interfaces}
Qore now supports the {\bfseries abstract} keyword when declaring methods; an {\bfseries abstract} method has no implementation and must be implemented in child classes with the same signature for the child class to be instantiated.~\newline
~\newline
 Classes with {\bfseries abstract} methods define interfaces; a concrete implementation of the interface is a class that inherits the class with {\bfseries abstract} methods and implements all the {\bfseries abstract} methods.~\newline
~\newline
 Abstract methods are defined with the following syntax\+: 
\begin{DoxyCode}
\textcolor{keyword}{class }MyAbstractInterface \{
    abstract string doSomething(int param);
    abstract bool checkSomething(string arg);
\}
\end{DoxyCode}
 The following abstract classes now exist in Qore\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_abstract_datasource}{Abstract\+Datasource}}
\item \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_abstract_quantified_iterator}{Abstract\+Quantified\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_abstract_bidirectional_iterator}{Abstract\+Bidirectional\+Iterator}}
\item \mbox{\hyperlink{class_qore_1_1_abstract_quantified_bidirectional_iterator}{Abstract\+Quantified\+Bidirectional\+Iterator}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_thread_1_1_abstract_smart_lock}{Abstract\+Smart\+Lock}} (which was already present in Qore but now implements abstract methods)
\end{DoxyItemize}The following new iterator classes have been added to Qore\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_iterator}{Hash\+Iterator}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_reverse_iterator}{Hash\+Reverse\+Iterator}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_list_iterator}{Hash\+List\+Iterator}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_hash_list_reverse_iterator}{Hash\+List\+Reverse\+Iterator}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_list_hash_iterator}{List\+Hash\+Iterator}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_list_hash_reverse_iterator}{List\+Hash\+Reverse\+Iterator}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_list_iterator}{List\+Iterator}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_list_reverse_iterator}{List\+Reverse\+Iterator}}
\end{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_s_q_l_1_1_s_q_l_statement}{S\+Q\+L\+Statement}} (which was already present in Qore but now implements the \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} interface to allow query results to be iterated)
\end{DoxyItemize}Classes inheriting \mbox{\hyperlink{class_qore_1_1_abstract_iterator}{Abstract\+Iterator}} have special support so that objects can be easily iterated in the following list operators\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{operators_map}{Map Operator (map)}}
\item \mbox{\hyperlink{operators_foldr}{Fold Right Operator (foldr)}} and \mbox{\hyperlink{operators_foldl}{Fold Left Operator (foldl)}}
\item \mbox{\hyperlink{operators_select}{Select From List Operator (select)}}
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Universal References}
All restrictions on references have been removed from Qore; references to local variables may now be passed to the \mbox{\hyperlink{operators_background}{background operator}} and passed as arguments to \mbox{\hyperlink{expressions_closure}{closures}}.~\newline
~\newline
 Basically when a reference is taken of a local variable that could result in the local variable being accessed in a multi-\/threaded context, the variable is treated as a closure-\/bound local variable in the sense that it\textquotesingle{}s lifetime is reference-\/counted, and all accesses are wrapped in a dedicated mutual-\/exclusion lock to ensure thread safety.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Pop3\+Client Module}
A \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} module has been added providing an A\+PI for communicating with \href{http://en.wikipedia.org/wiki/Post_Office_Protocol}{\tt P\+O\+P3} servers and retrieving email messages.~\newline
~\newline
 The module uses functionality provided by the new \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module to represent email messages (and attachment data) downloaded from the server.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Mail\+Message Module}
The \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module provides common functionality to the \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} and \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} modules to represent email messages for receiving and sending, respectively. This module was created mostly from functionality removed from the \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} and enhanced to provide support for reading email messages in the new \href{../../modules/Pop3Client/html/index.html}{\tt Pop3\+Client} module.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Smtp\+Client Module Changes}
The Message and Attachment classes were removed from the \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module to the \href{../../modules/MailMessage/html/index.html}{\tt Mail\+Message} module. Backwards-\/compatible definitions for the Message and Attachment classes are provided in the \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client} module to rexport the removed functionality for backwards compatibility.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Other Minor Improvements and Changes}

\begin{DoxyItemize}
\item qpp updated to support abstract methods and multiple inheritance (+ other minor qpp enhancements)
\item improved the {\ttfamily Q\+O\+R\+E\+A\+D\+D\+R\+I\+N\+F\+O-\/\+G\+E\+T\+I\+N\+F\+O-\/\+E\+R\+R\+OR} exception description by adding information about the arguments passed
\item added a string argument to \mbox{\hyperlink{group__string__functions_gad77c02ae2ce2f5c321b98bb64a0e34c2}{char(softint, $\ast$string)}} to accept an output encoding
\item added a \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int(string, int)}} variant to parse a string as a number and give the base
\item added a new parameter to \mbox{\hyperlink{group__misc__functions_ga622e19abea9bd621927bce830b5df09d}{parse\+\_\+url()}} and \mbox{\hyperlink{group__misc__functions_ga6acb2a9487067027a3bdb0d19e2af5fb}{parse\+U\+R\+L()}} to allow for any \mbox{[}\mbox{]} in the hostname to be included in the {\ttfamily \char`\"{}host\char`\"{}} output key for indicating that the \href{http://wikipedia.org/wiki/IPv6}{\tt ipv6} protocol be used
\item added the following pseudo-\/methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a6088d2158ce94d0d6c9159a628f79017}{Qore\+::zzz8valuezzz9\+::lsize()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a203cef22dfa0ec58f1e7fce1397430a4}{Qore\+::zzz8binaryzzz9\+::split()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a9eff25da172a81558e0bfab828bf9919}{Qore\+::zzz8binaryzzz9\+::to\+M\+D5()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a3f9afb50f2f621c133f11330432561d6}{Qore\+::zzz8binaryzzz9\+::to\+S\+H\+A1()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a40a67a7f4d31d72c67f65a71f98e9618}{Qore\+::zzz8binaryzzz9\+::to\+S\+H\+A224()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a3fad715400f0b1901a24e727b887d169}{Qore\+::zzz8binaryzzz9\+::to\+S\+H\+A256()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_a7fa8629838806509270b0a5d48415611}{Qore\+::zzz8binaryzzz9\+::to\+S\+H\+A384()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8binaryzzz9_ab3a42f1beda2facfdbd32f465d9b8fe3}{Qore\+::zzz8binaryzzz9\+::to\+S\+H\+A512()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8datezzz9_a1946f38ad9528c2e80552b8e2bc39f62}{Qore\+::zzz8datezzz9\+::midnight()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a7d460c5baf4290fac22d521d909e7f12}{Qore\+::zzz8listzzz9\+::first()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a5cb7d0b52f91aca98030ec1926beb5c5}{Qore\+::zzz8listzzz9\+::join()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a89cad7498a6102679b4d2a96d3eceef5}{Qore\+::zzz8listzzz9\+::last()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8listzzz9_a66451c32831c9ea7086d2b9fb62df31c}{Qore\+::zzz8listzzz9\+::lsize()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8nothingzzz9_a8070849ca746bcb7a7bc3b65b77aeb16}{Qore\+::zzz8nothingzzz9\+::lsize()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a4713c0132472cf5cf6599ad9517cdc5f}{Qore\+::zzz8stringzzz9\+::regex()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_af03631fe71b8cde54f4cff41f1e5f4f7}{Qore\+::zzz8stringzzz9\+::regex\+Extract()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_afe181b134b4aff3851e3dcb02b9cf7c4}{Qore\+::zzz8stringzzz9\+::split()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ab5ad54b1fe38b46ee071e55563d9d245}{Qore\+::zzz8stringzzz9\+::substr()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a2c63e2b65aafebf67928b88651d4cd39}{Qore\+::zzz8stringzzz9\+::to\+M\+D5()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a577cc1e9e6cb2f001c36f35a4cff4b74}{Qore\+::zzz8stringzzz9\+::to\+S\+H\+A1()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a3341bfb07348577260ece5244f958caf}{Qore\+::zzz8stringzzz9\+::to\+S\+H\+A224()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a11a362bbdba504966590d68bc6839350}{Qore\+::zzz8stringzzz9\+::to\+S\+H\+A256()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_ae572499e8fe84e24455806ba2556e5c5}{Qore\+::zzz8stringzzz9\+::to\+S\+H\+A384()}}
\item \mbox{\hyperlink{class_qore_1_1zzz8stringzzz9_a0a8b0fd0c6dc97af23ad50be3125cb4d}{Qore\+::zzz8stringzzz9\+::to\+S\+H\+A512()}}
\end{DoxyItemize}
\item added the \href{http://code.google.com/p/xxhash/}{\tt xxhash F\+A\+ST algorithm} with unordered\+\_\+map to Qore on supported platforms resuling in nearly 2x haster hash lookups
\item added the \mbox{\hyperlink{class_qore_1_1_read_only_file_a2744f4642700d0f273efbce43f709fb4}{Qore\+::\+File\+::is\+Open()}} method
\item added the \mbox{\hyperlink{group__object__functions_ga94ac4c8106c0f948e95f3e445d7909ad}{Qore\+::call\+\_\+pseudo()}} function to explicitly call a pseudo method on a value
\item added the \mbox{\hyperlink{group__filesystem__functions_gae895213e0d9f207ab855e4546c791909}{Qore\+::symlink()}} function to create symbolic links
\item added \mbox{\hyperlink{group__type__code__map__constants_ga2a480ee5f1ba574e58391be1b3a0eb24}{Qore\+::\+Type\+Code\+Map}} and \mbox{\hyperlink{group__type__code__map__constants_gabd2d01582297bf26346d7fd7e81163cd}{Qore\+::\+Type\+Name\+Map}} to lookup type codes from type names and vice versa
\item added the following functions to allow the time zone to be set per thread\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__threading__functions_ga07fcdce92cacc7cea4b92504a737d7c2}{Qore\+::set\+\_\+thread\+\_\+tz()}}
\item \mbox{\hyperlink{group__threading__functions_gad86831d8ae7b5b1d35e9bb14dc9f6325}{Qore\+::get\+\_\+thread\+\_\+tz()}}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_085_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_085_bug_fixes}

\begin{DoxyItemize}
\item fixed \mbox{\hyperlink{group__date__and__time__functions_gad5572fcb49964bfe3005e144da579361}{format\+\_\+date()}} output for {\ttfamily \char`\"{}\+M\+O\+N\char`\"{}} and {\ttfamily \char`\"{}\+D\+A\+Y\char`\"{}}, etc
\item fixed a memory leak in the parser related to parse exception handling with namespace members
\item fixed an invalid assert() in module handling when an error occurs loading the module (only affected debug builds)
\item tagged digest and crypto functions internally as \mbox{\hyperlink{code_flags_RET_VALUE_ONLY}{R\+E\+T\+\_\+\+V\+A\+L\+U\+E\+\_\+\+O\+N\+LY}}
\item do not kill T\+ID 1 (the initial / main thread) when calling \mbox{\hyperlink{group__library__functions_ga3ec32747f455642fd9ce503094a5cc85}{exit()}} in background threads as a crash can result with some 3rd party libraries that spawn their own threads on some platforms (observed on Darwin \& Solaris 10 at least)
\item fixed a memory bug in the new builtin function A\+PI used by modules built with qpp
\item fixed memory bugs in the type system where uninitialized type pointers could be used causing a crash
\item fixed a memory bug in handling \char`\"{}or nothing\char`\"{} types where a non-\/null pointer would be assumed to be a pointer to the type, however it could actually be a pointer to the N\+O\+T\+H\+I\+NG object, the fix was to ensure that any N\+O\+T\+H\+I\+NG objects in argument lists would be substituted with a null pointer
\item fixed a bug in parse-\/time variant matching where an argument with parse-\/time type \char`\"{}object\char`\"{} would be matched as a perfect match to any parameter with any class restriction; this would cause run-\/time type errors if another valid class was passed that matched another variant of the method or function
\item fixed a build bug that caused qore to be built twice
\end{DoxyItemize}



 \hypertarget{release_notes_qore_084}{}\section{Qore 0.\+8.\+4}\label{release_notes_qore_084}
\begin{DoxyParagraph}{Release Summary}
Major new features and changes that can affect backwards-\/compatibility, plus 40 bug fixes
\end{DoxyParagraph}
\hypertarget{release_notes_qore_084_compatibility}{}\subsection{Changes That Can Affect Backwards-\/\+Compatibility}\label{release_notes_qore_084_compatibility}
\begin{DoxyParagraph}{Namespace Changes}
Qore\textquotesingle{}s internal namespace handling was nearly completely rewritten for Qore 0.\+8.\+4. This is because the old code was inefficient and applied namespaces inconsistently to \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects.~\newline
~\newline
 The main change that can cause backwards-\/compatibility issues is that now functions are full namespace members. If no namespace is explicitly given in a function definition, the function is a member of the unnamed root namespace.~\newline
~\newline
 Also the distinction between builtin and user functions was removed. Internally, there is only one kind of function object, which can contain both builtin and user function variants (overloaded variants of the same function with the same name but different arguments).~\newline
~\newline
 All Qore builtin functions were moved to the \mbox{\hyperlink{namespace_qore}{Qore}} namespace.~\newline
~\newline
 Other namespace changes\+:
\begin{DoxyItemize}
\item loading namespaces provided by builtin modules into a \mbox{\hyperlink{class_qore_1_1_program}{Program}} object is now an atomic operation that may fail, if, for example, objects have already been defined in the target \mbox{\hyperlink{class_qore_1_1_program}{Program}} with the same name as objects provided by the builtin module. Previously this could cause undefined behavior.
\item namespace lookups are now truly breadth-\/first as documented; previously the algorithm was depth-\/first (contrary to the documentation)
\item namespace lookups are now done (both at parse time and runtime) with the help of symbol lookup tables for fast lookups; tables are maintained for both committed and temporary uncomitted parse symbols; this leads to up to 3x faster parsing for Qore code
\item global variables are also now full namespace members, however this does not cause problems with backwards-\/compatibility
\end{DoxyItemize}
\end{DoxyParagraph}
\hypertarget{release_notes_qore_084_new_features}{}\subsection{New Features in Qore}\label{release_notes_qore_084_new_features}
\begin{DoxyParagraph}{User Modules}
It is now possible to develop user modules in Qore; several user modules are now included in the Qore distribution, forming Qore-\/language components of Qore\textquotesingle{}s runtime library.~\newline
~\newline
 User modules delivered with Qore 0.\+8.\+4\+:
\begin{DoxyItemize}
\item \href{../../modules/HttpServer/html/index.html}{\tt Http\+Server}\+: a multi-\/threaded H\+T\+TP server implementation
\item \href{../../modules/SmtpClient/html/index.html}{\tt Smtp\+Client}\+: an S\+M\+TP client library
\item \href{../../modules/TelnetClient/html/index.html}{\tt Telnet\+Client}\+: a T\+E\+L\+N\+ET client implementation
\item \href{../../modules/Mime/html/index.html}{\tt Mime}\+: a set of M\+I\+ME definitions and functions for manipulating M\+I\+ME data
\end{DoxyItemize}There are also new example programs for the above modules in the examples/ directory.~\newline
~\newline
 User modules are subject to Qore\textquotesingle{}s functional restriction framework.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Namespace Changes}
As listed above\+:~\newline

\begin{DoxyItemize}
\item global variables and functions are now full namespace members
\item all builtin functions are now in the \mbox{\hyperlink{namespace_qore}{Qore}} namespace
\item real depth-\/first searches are used for namespace symbols
\item symbols are resolved first in the current namespace when parsing declarations/code in a namespace
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{The final Keyword}
Classes and methods can now be declared \char`\"{}final\char`\"{} to prevent subclassing or overriding in a subclass
\end{DoxyParagraph}
\begin{DoxyParagraph}{Pseudo Methods}
Pseudo-\/methods are class methods that can be implemented on any value; they are also part of class hierarchy. The methods that can be executed on the value depend on the value\textquotesingle{}s type, and all \char`\"{}pseudo-\/classes\char`\"{} inherit methods from a common base class.~\newline
~\newline
 For example\+: 
\begin{DoxyCode}
\textcolor{stringliteral}{"string"}.\mbox{\hyperlink{group__string__functions_gafc530772b929b2148ae2733569bada58}{strlen}}()
<abf05da3>.size()
500.typeCode()
\end{DoxyCode}
 Are examples of pseudo-\/methods on literal values.~\newline
~\newline
 Some expensive operations such as getting the first or last key (or value) of a hash are now cheap using pseudo-\/methods, for example\+: 
\begin{DoxyCode}
hash.firstKey()
hash.lastValue()
\end{DoxyCode}

\end{DoxyParagraph}
\begin{DoxyParagraph}{New Doxygen-\/\+Based Documentation}
The Qore reference documentation is now generated by Doxygen, and is generated directly from the Qore sources. In fact, a new preprocessor known as \char`\"{}qpp\char`\"{} was developed for Qore 0.\+8.\+4 to facilitate and enforce doxygen documentation on Qore\textquotesingle{}s runtime library (as well as abstract the relatively complex A\+P\+Is used to bind C++ code to the Qore runtime library from the C++ programmer).~\newline
~\newline
 The documentation is more comprehensive, and corresponds much closer to the actual internal implementation since the documentation is now also contained in and directly generated from the internal C++ implementation of Qore.~\newline
~\newline
 For example, there is the \mbox{\hyperlink{class_qore_1_1zzz8valuezzz9_a3a66486cee14aa073cf90fbed5a23edd}{Qore\+::zzz8valuezzz9\+::val()}} method. This method is implemented in the base pseudo class and is reimplemented in other pseudo-\/classes for other runtime data types as necessary. This method returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} if the value has a value in the same sense as Perl\textquotesingle{}s boolean context evaluation. For example, if the value is a hash with no keys, it returns \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}; if it is a hash with keys, it returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}; if it is an empty string, it returns \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}}; if it is a non-\/empty string, it returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}}, etc.
\end{DoxyParagraph}
\begin{DoxyParagraph}{L\+Value Handling Changes}
lvalue handling was rewritten as the old implementation was ugly and subject to deadlocks (in rare corner cases).~\newline
~\newline
 Furthermore, medium-\/term, an architectural goal of Qore is to store all ints, floats, and bools internally as the basic C++ type instead of using a class wrapper for each value, which needs dynamic allocation and destruction, which takes up more memory and negatively affects execution speed.~\newline
~\newline
 With Qore 0.\+8.\+4, all local and global variables are stored using optimized C++ types when declared with the appropriate type restrictions; for example\+: 
\begin{DoxyCode}
int i0;
our int i1;
\end{DoxyCode}
 These declares local and global variables that can only be assigned integer values; in Qore 0.\+8.\+4 the value internally will be stored as an \char`\"{}int64\char`\"{} value (and not a dynamically-\/allocated Qore\+Big\+Int\+Node object).~\newline
~\newline
 The same holds for\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{data_type_declarations_int_type}{int}}
\item \mbox{\hyperlink{data_type_declarations_softint_type}{softint}}
\item \mbox{\hyperlink{data_type_declarations_float_type}{float}}
\item \mbox{\hyperlink{data_type_declarations_softfloat_type}{softfloat}}
\item \mbox{\hyperlink{data_type_declarations_bool_type}{bool}}
\item \mbox{\hyperlink{data_type_declarations_softbool_type}{softbool}}
\end{DoxyItemize}Note that the optimized lvalue handling has not yet been applied to all lvalues, in particular non-\/static object members with declared types are not yet implemented with optimized storage; to do this requires a rewrite of Qore\textquotesingle{}s A\+PI and A\+BI (will happen in the next major release of Qore).~\newline
~\newline
 This change leads to improved integer and floating-\/point performance and a smaller runtime memory footprint.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Runtime Optimizations}
In addition to the up to 3x faster parsing (as decribed in the namespace changes above), Qore 0.\+8.\+4 contains many runtime optimizations designed to reduce the number of dynamic memory allocations performed at runtime.~\newline
~\newline
 The optimizations included in this version of Qore are only a half-\/measure compared to future changes that will necessitate a new binary Qore A\+PI.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Per-\/\+Thread Initialization}
the new \mbox{\hyperlink{group__threading__functions_gae83c32576b59a1ecfa906d9b3c3af557}{set\+\_\+thread\+\_\+init()}} function allows a call reference or closure to be set which will be automatically executed when new threads are started (or a new thread accesses a \mbox{\hyperlink{class_qore_1_1_program}{Program}} object) which can be used to transparently initialize thread-\/local data.
\end{DoxyParagraph}
\begin{DoxyParagraph}{More Control Over Thread Resource Exceptions}
new functions\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{group__threading__functions_ga4e62409b8a1b414276d033267e7299e4}{throw\+\_\+thread\+\_\+resource\+\_\+exceptions\+\_\+to\+\_\+mark()}}
\item \mbox{\hyperlink{group__threading__functions_gafa1c0f9e429a945b66fb261c7fa1b5bd}{mark\+\_\+thread\+\_\+resources()}}
\end{DoxyItemize}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)
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Socket Methods}
new methods\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{class_qore_1_1_socket_ad471f7399655c3fb211c72b55ca568d9}{Qore\+::\+Socket\+::upgrade\+Client\+To\+S\+S\+L()}}
\item \mbox{\hyperlink{class_qore_1_1_socket_a83385d31d5b112409424269f025de5ea}{Qore\+::\+Socket\+::upgrade\+Server\+To\+S\+S\+L()}}
\end{DoxyItemize}Allow upgrading an already-\/existing socket connection to S\+SL
\end{DoxyParagraph}
\begin{DoxyParagraph}{Better Socket Error Messages}
More information has been added to socket exceptions to provide better feedback when errors occur.
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Socket Event Fields}

\begin{DoxyItemize}
\item added {\ttfamily \char`\"{}type\char`\"{}} and {\ttfamily \char`\"{}typename\char`\"{}} keys to the \mbox{\hyperlink{event_handling_EVENT_HOSTNAME_RESOLVED}{E\+V\+E\+N\+T\+\_\+\+H\+O\+S\+T\+N\+A\+M\+E\+\_\+\+R\+E\+S\+O\+L\+V\+ED}} event
\item added {\ttfamily \char`\"{}type\char`\"{}}, {\ttfamily \char`\"{}typename\char`\"{}}, and {\ttfamily \char`\"{}address\char`\"{}} keys to the \mbox{\hyperlink{event_handling_EVENT_CONNECTING}{E\+V\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+NG}} event
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Support For Blocking Writes in the Queue Class}
\mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} objects can now be used as a blocking message channel (similar to a Go channel); if a maximum size is given to the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} constructor, then trying to write data to the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} when it is full will block until the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}}\textquotesingle{}s size goes below the maximum size; optional timeout parameters have been added to \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}} methods that write to the \mbox{\hyperlink{class_qore_1_1_thread_1_1_queue}{Queue}}.
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Queue\+:\+:clear() Method}
Does just what you think it does \+:)
\end{DoxyParagraph}
\begin{DoxyParagraph}{date(string, string) Improvement}
added the possibility to specify microseconds when parsing dates against a mask with the \mbox{\hyperlink{group__date__and__time__functions_gaa80ee453b6a5653ac685d7e290c74e3f}{date()}} function
\end{DoxyParagraph}
\begin{DoxyParagraph}{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
\end{DoxyParagraph}
\begin{DoxyParagraph}{Class Recognition/\+Compatibility Between Program Objects}
The problem is that a user class created from the same source code in two different \mbox{\hyperlink{class_qore_1_1_program}{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 \mbox{\hyperlink{class_qore_1_1_program}{Program}} object.~\newline
~\newline
 This problem is analogous to a similar problem with java in that classes built from the same source but from different classloaders are also recognized as different classes.~\newline
~\newline
 In Qore 0.\+8.\+4 a class signature is created of all public and private objects, and an S\+H\+A1 hash is maintained of the class signature, and if the class names and signatures match, then the classes are assumed to be identical, even if they have different internal class I\+Ds (because they were created in different \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects, for example).
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Time\+Zone\+:\+:date(string) Method}
to support creating arbitrary dates in a given \mbox{\hyperlink{class_qore_1_1_time_zone}{Time\+Zone}}
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Get\+Opt\+:\+:parse3() method}
This method will display any errors on \mbox{\hyperlink{group__io__constants_ga697e4968984d273562f14bfed155b4a8}{stderr}} and exit the program (which is the most typical way of handling command line errors anyway)
\end{DoxyParagraph}
\begin{DoxyParagraph}{+= Operator Optimization For object += hash}
this operation is faster in this release
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Parse Option P\+O\+\_\+\+N\+O\+\_\+\+M\+O\+D\+U\+L\+ES}
Using this option disables module loading
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Parse Option P\+O\+\_\+\+N\+O\+\_\+\+E\+M\+B\+E\+D\+D\+E\+D\+\_\+\+L\+O\+G\+IC}
Using this option disables all dynamic parsing
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Parse Directives}

\begin{DoxyItemize}
\item \mbox{\hyperlink{parse_directives_assume-global}{\%assume-\/global}}\+: the opposite of \mbox{\hyperlink{parse_directives_assume-local}{\%assume-\/local}}
\item \mbox{\hyperlink{parse_directives_old-style}{\%old-\/style}}\+: the opposite of \mbox{\hyperlink{parse_directives_new-style}{\%new-\/style}}
\item \mbox{\hyperlink{parse_directives_require-dollar}{\%require-\/dollar}}\+: the opposite of \mbox{\hyperlink{parse_directives_allow-bare-refs}{\%allow-\/bare-\/refs}}
\item \mbox{\hyperlink{parse_directives_push-parse-options}{\%push-\/parse-\/options}}\+: allows parse options to be saved and restored when the current file is done parsing; very useful for include files
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{New Context Functions}

\begin{DoxyItemize}
\item \mbox{\hyperlink{group__context__functions_ga105b00b74b4fba117cbf3582d1ad7363}{cx\+\_\+value()}}\+: returns the value of the given key
\item \mbox{\hyperlink{group__context__functions_gaf0dfc0d47bd06a2c1a6e76e3381f61eb}{cx\+\_\+first()}}\+: returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} if iterating the first row
\item \mbox{\hyperlink{group__context__functions_gad5b21ea6273b824301e13be824205957}{cx\+\_\+last()}}\+: returns \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} if iterating the last row
\item \mbox{\hyperlink{group__context__functions_gaf6605e041e703be65489058a15055ea7}{cx\+\_\+pos()}}\+: returns the current row number (starting from 0)
\item \mbox{\hyperlink{group__context__functions_ga31bcc663a5fb7d93585a051c9b0ca694}{cx\+\_\+total()}}\+: returns the total number of rows in the set
\end{DoxyItemize}
\end{DoxyParagraph}
\begin{DoxyParagraph}{S\+O\+C\+K\+E\+T-\/\+H\+T\+T\+P-\/\+E\+R\+R\+OR Exception Enhancement}
The invalid header info received is reported in the exception\textquotesingle{}s {\ttfamily \char`\"{}arg\char`\"{}} key
\end{DoxyParagraph}
\begin{DoxyParagraph}{Improved Parse Error Messages}
Improved some parse error messages dealing with namespace and class declaration errors
\end{DoxyParagraph}
\begin{DoxyParagraph}{Added N\+T\+\_\+\+C\+L\+O\+S\+U\+RE Constant}
type code for runtime closure values
\end{DoxyParagraph}
\hypertarget{release_notes_qore_084_bug_fixes}{}\subsection{Bug Fixes in Qore}\label{release_notes_qore_084_bug_fixes}

\begin{DoxyItemize}
\item fixed a race condition with \mbox{\hyperlink{class_qore_1_1_program}{Program}} objects when a signal handler is left active and the \mbox{\hyperlink{class_qore_1_1_program}{Program}} terminates
\item fixed a bug in the \mbox{\hyperlink{class_qore_1_1_file}{File}} class where the encoding given in the constructor was ignored; if no encoding was given in the File\+::open$\ast$() method then the \mbox{\hyperlink{class_qore_1_1_file}{File}}\textquotesingle{}s encoding would always be set to the default encoding, now it\textquotesingle{}s set to the encoding given in the constructor (as documented)
\item runtime checks have been implemented so that references to local variables cannot be passed to a closure; this would cause a runtime crash
\item a fix has been made to the \mbox{\hyperlink{operators_delete}{delete}} and \mbox{\hyperlink{operators_remove}{remove}} operators; lists will not be extended when trying to remove/delete list elements that do not exist
\item fixed some bugs showing the error location with bugs in the second stage of parsing (symbol resolution)
\item apply type filters to blocks with a designated return type but no \mbox{\hyperlink{statements_return}{return statement}}
\item fixed crashing bugs on some 32bit platforms where size\+\_\+t was assumed to be 64 bits
\item fixed a crashing bug parsing invalid \mbox{\hyperlink{parse_directives_requires}{\%requires}} directives in the scanner
\item fixed a bug in \mbox{\hyperlink{group__library__functions_ga9bfa54e2c02b92b2a01f3cde2472ce6a}{usleep()}} with relative date/time values (added a new \mbox{\hyperlink{group__library__functions_ga9bfa54e2c02b92b2a01f3cde2472ce6a}{usleep()}} variant to support this)
\item fixed a typo in the command-\/line help for the qore binary with unknown parse options
\item fixed \mbox{\hyperlink{group__option__constants_ga2b260e5d44de1d493adb8d97789f047f}{H\+A\+V\+E\+\_\+\+S\+I\+G\+N\+A\+L\+\_\+\+H\+A\+N\+D\+L\+I\+NG}} to be \mbox{\hyperlink{group__boolean__constants_ga9da2b9a8003cd3788e48305f8a00540f}{False}} if signal handling is disabled on platforms where signal handling is otherwise available
\item fixed a scanner bug parsing out of line class definitions with a root-\/justified namespace path (ex\+: {\ttfamily \char`\"{}class \+::\+X\+::\+Class\+Name ...\char`\"{}})
\item merging code from binary modules at parse time and at runtime is now transaction-\/safe (before it would cause memory errors and/or a crash), now if errors are detected then an exception is raised and changes are not applied.
\item fixed a crashing bug in the C++ A\+PI function Qore\+Hash\+Node\+::set\+Key\+Value() when the value is 0 and an exception occurs or is already active before the call is made
\item fixed a bug in date parsing with a format string -\/ off by one with integer months -\/ added a regression test for this case
\item fixed a memory error with the \mbox{\hyperlink{statements_rethrow}{rethrow statement}} in enclosing but nested try-\/catch blocks
\item fixed a crashing bug where qore would try to instantiate a class for a type that did not represent a class (ex\+: {\ttfamily \char`\"{}int i();\char`\"{}})
\item fixed a memory leak in the \mbox{\hyperlink{data_type_declarations_softlist_type}{softlist}} and \mbox{\hyperlink{data_type_declarations_softlist_or_nothing_type}{$\ast$softlist}} type implementation
\item make sure and raise a {\ttfamily S\+O\+C\+K\+E\+T-\/\+C\+L\+O\+S\+ED} error when reading a H\+T\+TP header if no data is received
\item make sure and convert encodings with \mbox{\hyperlink{group__string__functions_gadaea9cfa0f698a6fb0650f70cf8d929e}{index()}} and \mbox{\hyperlink{group__string__functions_ga55663008aa59489b869e558b29c7c22d}{rindex()}} functions if the encodings don\textquotesingle{}t match
\item build fix\+: only use a lib64 directory if the directory exists already
\item raise a parse exception in the scanner if a numeric overflow occurs in literal integer values
\item fixed a bug in \mbox{\hyperlink{class_qore_1_1_thread_1_1_abstract_smart_lock_afafe6ef19203993a7c5dd87e00068325}{Abstract\+Smart\+Lock\+:\+:lock\+T\+ID()}}
\item fixed a major crashing error in the C++ A\+PI function Qore\+String\+Node\+::create\+And\+Convert\+Encoding(); this function is used by the xml module when parsing X\+M\+L-\/\+R\+PC sent in a non-\/\+U\+T\+F-\/8 character encoding
\item fixed \mbox{\hyperlink{class_qore_1_1_read_only_file_ab6946821b81fc2b9b4f07ef27ebacd45}{Qore\+::\+File\+::getchar()}} to always retrieve 1 character (even for multi-\/byte character encodings)
\item fixed string evaluation in a boolean context to return \mbox{\hyperlink{group__boolean__constants_ga3ba2df91713a6249449347131ea526c3}{True}} with floating-\/point numbers between -\/1.\+0 and 1.\+0 exclusive
\item printf formatting fix\+: output Y\+A\+M\+L-\/style {\ttfamily \char`\"{}null\char`\"{}} for \mbox{\hyperlink{basic_data_types_nothing}{N\+O\+T\+H\+I\+NG}} with \%y
\item scanner fix\+: accept {\ttfamily \char`\"{}\textbackslash{}r\char`\"{}} as whitespace to allow better parsing of sources with Windows E\+OL markers
\item fixed parse-\/time type processing/checks for the keys, + and $\ast$ operators
\item foreach statement fix\+: unconditionally evaluate the hash when iterating as otherwise it could change during iteration which could cause a crash
\item fixed another parse-\/time variant matching bug where the variant-\/matching algorithm was too aggressive and excluded possible matches at parse time which could result in a false parse-\/time definitive match even though a better match could be available at runtime
\item fixed a static memory leak when signal handlers are left registered when the qore library terminates
\item fixed static memory leaks and 1 dynamic memory leak in \mbox{\hyperlink{group__string__functions_gaabfb10141a51d31ef100d9fd3a02252e}{strmul()}}
\item fixed a crashing bug in handling recursive constant references
\item fixed a bug in the C++ A\+PI function Hash\+Iterator\+::delete\+Key() when the node\textquotesingle{}s value is N\+U\+LL
\item fixed time zone/\+D\+ST calculations for time zone regions with D\+ST with dates before the epoch but after the last D\+ST transition before the epoch
\item fixed a memory error where invalid source expressions referenced in a regular expression substitution expression would cause a crash (ex\+:\begin{DoxyVerb}str =~ s/public (name)/$2/g \end{DoxyVerb}

\item fixed a memory error in regular expression substitution where the unconverted string (if not given in U\+T\+F-\/8 encoding) was used when copying source expressions to the target string
\item fixed a bug where a recursive class inheritance tree would cause a crash
\item fixed a bug where a static class method could not access private members of the class 
\end{DoxyItemize}