Qore Programming Language Reference Manual
0.8.12.2
|
SqlStatementOutboundMapper::iterator()
method; corrected the iterator object return value which was causing AbstractMapperIterator::mapBulk()
to fail (issue 979)SqlStatementOutboundMapper
; it would throw an error if the required "table"
or "sh"
options were used and only worked with subclasses that declared these options (issue 981)AbstractSqlStatementOutboundMapper::iterator()
failed to use options when creating the new Mapper
object (issue 1088)self
in base class constructor arguments (issue 1169)copy()
method as synchronized would result in a crash when the method was called (issue 1188)list l = 1, 2, 3;
were valid assignments. Due to operator precedence, such statements should normally be interpreted as (list l = 1), 2, 3;
, which is not a valid expression. Not only were the rules applied with only some assignment operators, but such lists were only rewritten if used as top-level statements, therefore the rules were applied inconsistenctly depending on where the expression was located in the parse tree. As of Qore 0.8.12, these inconsistencies have been eliminated by default from Qore; all lists are processed according to the precedence rules defined in Operators. This could break old code that relied on the old, broken behavior. To get the old behavior, use the %broken-list-parsing parse directive."_"
; the following is now a valid (with %new-style):{}
; for example:SOCKET-THROUGHPUT-WARNING
event is no longer raised on the warning queue if the transfer size is less than 1024 bytes; this affects:
%requires(reexport)
form of the %requires parse directive."tolwr"
option in structured text parsing classesAbstractCsvWriter
will set "headers"
from the "fields"
option if "headers"
are not explicitly setCsvStringWriter
class for API compatibility with the corresponding FixedLengthDataWriter methodsAbstractCsvWriter::write()
quote_escape
option implemented in AbstractCsvWriter
"datamap"
and "info_log"
options for CSV generationFixedLengthUtil
, record type rules and default value in field specificationAbstractCsvWriter
and AbstractCsvIterator
using resolve_type
and headers
options"constant"
field tag, allowing a contant value for an output field to be specified directly in the mapper hash"default"
field tag, giving a default value if no input value is specified"date_format"
mapper option"number_format"
mapper options"number"
field type: now leaves numeric values in their original type, converts all other types to a number"crec"
option"input"
option with input record validation"output"
option with output record validation"info_log"
option and removed the "trunc"
option"runtime"
field tag"index"
field tag"returning"
clause in insert statements; now such inserts are made in a single round trip instead of n + 1 where n is the number of sequences in the insertunstable_input:
to accommodate unstable input data and disable the insert optimization (default: False)insert_block:
for DB drivers supporting bulk DML, the number of rows inserted at once (default: 500, only used when unstable_input
is False) and bulk inserts are supported in the table object"+"
(plus) to " "
(space) in the query portion of URIs in parse_uri_query()"ssl"
key to the listener socket info hashroot_path
to the context hash if the path was matched by a URL path prefix (issue 570)"returning"
clause in supported drivers to avoid server round trips"desc"
keyword in orderby expressions"wop_or()"
function to allow complex SQL expressions to be generated with "or"
as well as "and"
"cop_cast()"
operator for converting [column] value into another datatype"cop_sum()"
aggregate operator for returning sum of column values"uop_plus()"
, "uop_minus()"
, "uop_multiply()"
, "uop_divide()"
"cop_coalesce()"
column operation function to support the "COALESCE"
operator in queries (issue 671)SqlUtil::cop_substr()
and SqlUtil::uop_substr()
operators (issue 801)SqlUtil::op_substr()
where operator (issue 883)"omit_update"
upsert option for asymmetrical upserts (updates only update a subset of the columns inserted) (issue 791)"UpsertUpdateOnly"
upsert option (issue 793)bool
, float
, int
, timetz
, timestamptz
, varbit
binary
, varbinary
glob_to_regex()
lpad()
and rpad()
ordinal()
plural()
regex_escape()
zip()
parse_to_qore_value()
now respects parentheses when parsing lists and hashes (issue 846)QDBI_METHOD_ABORT_TRANSACTION_START
DBI method; transactions are always assumed to be in progress even if an exec call throws an exception in the first statement in a new transaction; this is necessary to handle bulk DML where a single statement can partially succeed and partially fail; the ABI remains unchanged; drivers that set this DBI method will no longer have it called because it's not necessary; in the upcoming API/ABI change this C++ DBI method will be removed entirelyGetDiskFreeSpaceEx()
issue 618)HttpServer::http_get_url_from_bind()
(issue 821)"/"
chars were sometimes present in the request URI path"/"
char was sometimes added to the request URI path (issue 899)"format"
field option was not usable with fields assigned type "*date"
UpsertSelectFirst
which means that insert-only reference data could also be updated"desc"
string was added only to the last column but should have been added to all columns"op_in()"
where invalid SQL was generated with an argument of 0 (issue 500)cop_seq()
and cop_seq_currval()
(issue 624)join_inner()
where the cond argument was ignored (issue 645)"uop_lower()"
and "uop_upper()"
operators to allow nesting (issue 657)AbstractTable::update()
with sequence operators (issue 942)cop_seq()
and cop_seq_currval()
(issue 624)"begin"
call to make the savepoint work with PostgreSQL 9.3+ servers"time"
columns; they were being issued as "time6"
instead of "time(6)" (issue 385)"bit"
, "bit varying"
, "char"
, "character"
, "character varying"
, "char varying"
, "oid"
, "varchar"
cop_seq()
and cop_seq_currval()
(issue 624)varbinary
type (issue 403)binary
type (issue 524)schema
member incorrectly set by AbstractDatasource::getUserName() instead of AbstractDatasource::getDBName() (issue 519)FileHandler::tryServeRequest()
where index files could be incorrectly served with a "204 No Content"
response (issue 616)SOCKET-NOT-OPEN
errors when closing (server already closed the connection)AbstractRestStreamRequestHandler
object so they can be properly logged (issue 734)"/"
chars were handled incorrectly (issue 900)normalize_dir_windows()
handling of UNC paths (issue 813)%n
, %N
, or %y
could be added to another string with a different character encoding without any automatic conversions, therefore resulting in an improperly-encoded stringContent-Encoding
header would cause a crash737.38.toNumber() -> 737.3799999999999954525264911353588104248
&
(ampersand) characters were not recognized as shell meta-charactersfork(2)
, enables all signals, and calls execl("/bin/sh", "sh", "-c",
command, 0)
in the child process (on UNIX systems; on Windows, system(3) is used directly as before)SIGCHLD
was blocked by default which caused deadlocks when spawning child processes that in turn waited on grandchild processes - now Qore no longer blocks SIGCHLD
on UNIX platforms1970-01-01Z
), and a relative date/time value is producedselect(2)
was called after EINTR
without reinitializing the descriptor array argument (issue 435)FD_SETSIZE
(issue 436)Content-Length: 0
was returned (or if no Content-Length
header was returned at all) which would result in a deadlock until the server would close the connection (issue 434)"."
by default (issue 660)"\*"
or "/*"
(issue 664)RUNTIME-TYPE-ERROR
exception (issue 683)SOCKET-SEND-ERROR
thrown when the remote end closes the socket during the transfer (issue 691)'$'
character in a regular expression substitution target string (issue 777)"::"
) with Qore::parse_url() (issue 822)CALL-WITH-TYPE-ERROR
exceptions were thrown based on the parse options in the caller instead of in the target when calling across a Program barrier (issue 841)copy()
method argument parsing; compatible type declarations were not accepted (issue 946)"filename"
key when run in a Program context with Qore::PO_NO_EXTERNAL_INFO set"forupdate"
select option"write-headers"
option to CsvUtil::AbstractCsvWriter
and subclasses to enable headers to be suppressed"optimal-quotes"
option to CsvUtil::AbstractCsvWriter
and subclasses to enable more efficient csv output (now the default)"columns"
entry but where column names were otherwise requiredCsvAbstractIterator:
base abstract iterator class for iterating line-based CSV dataCsvDataIterator:
iterator class allowing for CSV string data to be processed line by line on a record basisAbstractCsvWriter:
a base class for new CSV writer implementationsCsvFileWriter:
CSV file writer classCsvStringWriter:
CSV in memory writer class"headers"
in the constructor if "fields"
are set; headers are assumed to be the field labels in the same orderContent-Type
request header when sending stringsAccept
header correctly in requests (previously only indicated yaml ("text/x-yaml"
) as an acceptible response encoding)OPTIONS
method"Bad Request"
error if an unsupported HTTP method is used in a REST CallUpsertInsertOnly
upsert strategy to SqlUtil"application/wsdl+xml"
)"xls"
and "xlst"
extensions to MimeTypeXmlConnection
, Content-Encoding
, Transfer-Encoding
, Location
, or Content-Type
headers is received"\0441"
where the "1"
would cause an error)"date"
field handling with empty input (now maps to 1970-01-01)'%'
was not handled correctly in all cases"name"
and optionally "link"
keys for symbolic links; additionally symbolic links are now followed and files and directories are differentiated based on their targets when processing symbolic linksg
specifier to extract all occurrences of the pattern(s) in a string; also regex_extract() and <string>::regexExtract(string, int) now accept Qore::RE_Global to extract all occurrences of the pattern(s) in a string"%y"
format specifier now produces YAML-like output for the binary valueSOCKET-CLOSED
exception was not thrown when the remote end closed the connection"/"
REFERENCE-ERROR
exception is thrownPO_INHERIT_USER_FUNC_VARIANTS
is now: PO_NO_INHERIT_USER_FUNC_VARIANTSPO_INHERIT_GLOBAL_VARS
is now: PO_NO_INHERIT_GLOBAL_VARSsource
and offset
information is present"source"
and "offset"
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"us"
for microseconds (see Date Formatting Codes)"STARTTLS"
command when connecting to an ESMTP server; this way the class will automatically upgrade the connection to a secure TLS/SSL connection if the server supports it"esmtptls://user@password:smtp.example.com"
)"smtps"
scheme with a default port of 465%s
format argument)"Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))"
)if
expression is now evaluated as True: Previously (i.e. with %strict-bool-eval) the if
expression above would be evaluated as False because the string value was converted to an integer 0, however as of Qore 0.8.6 (with the default perl-bool-eval) it is True since the string is not empty; empty strings and string value "0"
are evaluated as False."00"
). In this case, the old logic would always return False, because the value was first converted to an integer 0
, whereas the new logic will return True. Note that in the case of a string with a single "0"
, both the old and new boolean logic returns False."0"
and empty strings, integer, float, and number 0
(zero), absolute date 1970-01-01Z
(ie the start of the epoch with an offset of 0), relative date 0s
(or any relative date with a 0 duration), NULL, empty binary objects, empty hashes, and empty lists. All other values are True. NUMERIC
(ie DECIMAL
or NUMBER
) column values when retrieved from databases by Qore DBI drivers that support the new capability DBI_CAP_HAS_NUMBER_SUPPORT (previously these values would be retrieved as Qore strings in order to avoid information loss).MyConcreteClass
is not abstract, whereas previously because the return types in the child class were not exact, MyConcreteClass
would be considered abstract by qore): "timezone"
option."key"
and "value"
, allowing for more convenient iteration with constructions that only use getValue()
methods (such as the foreach statement); to accommodate this, two new methods were added to the HashIterator base class:
"\n"
, "\r"
, or "\r\n"
; the last one only if the underlying file is not a TTY in order to avoid stalling I/O on an interactive TTY)"A"
and "a"
, (hexadecimal floating-point output) "G"
, "g"
, (compact floating-point output) "F"
, (non-scientific floating-point output) and "E"
and "e"
(scientific/exponential floating-point output) format arguments for floats and numbers (new arbitrary-precision number type values); see String Formatting"number"
instead of "string"
(see also sql_binding)"_"
characters in q-encoded headers were not encoded correctlyQOREADDRINFO-GETINFO-ERROR
exception description by adding information about the arguments passed"host"
output key for indicating that the ipv6 protocol be used"MON"
and "DAY"
, etc"type"
and "typename"
keys to the EVENT_HOSTNAME_RESOLVED event"type"
, "typename"
, and "address"
keys to the EVENT_CONNECTING event"arg"
key"class ::X::ClassName ..."
)"int i();"
)SOCKET-CLOSED
error when reading a HTTP header if no data is received"null"
for NOTHING with %y"\r"
as whitespace to allow better parsing of sources with Windows EOL markersstr =~ s/public (name)/$2/g