Version 19.0
2017 08 18 - v19.0
This release fix several issues reported by users during last year.
It also adds several new features and configuration directives.
New features:
- Add export of Oracle HASH partitioning when PG_SUPPORTS_PARTITION
is enabled. This is a PostgreSQL 11 feature.
- Add SUBTYPE translation into DOMAIN with TYPE and PACKAGE export.
- Add automatic translation of
KEEP (DENSE_RANK FIRST|LAST ORDER BY ...) OVER (PARTITION BY ...)
into
FIRST|LAST_VALUE(...) OVER (PARTITION BY ... ORDER BY ...).
- Add PCTFREE to FILLFACTOR conversion when PCTFREE is upper than
the default value: 10.
- Replace DELETE clause not followed with FROM (optional in Oracle).
- Remove Oracle extra clauses in TRUNCATE command.
- Allow use of NUMBER(*) in DATA_TYPE directive to convert all
NUMBER(*) into the given type whatever is the length. Ex:
DATA_TYPE NUMBER(*):bigint.
- Add a PARALLEL hint to all Oracle queries used to migrate data.
- Add export of Identity Columns from Oracle Database 12c.
- Add translation of UROWID datatype and information in documentation
about why default corresponding type OID will fail at data import.
- Remove unwanted and unused keywords from CREATE TABLE statements:
PARALLEL and COMPRESS.
- Remove TEMPORARY in DROP statements.
- Improve speed of escape_copy() function used for data export.
- Add translation of Oracle functions NUMTOYMINTERVAL() and
NUMTODSINTERVAL().
- Add counting of jobs defined in Oracle scheduler in the migration
assessment feature.
- Add CSMIG in the list of Oracle default system schema
- Fully rewrite data export for table with nested user defined types
DBD::Oracle fetchall_arrayref() is not able to associate complex
custom types to the returned arrays, changed this call to use
fetchrow_array() also used to export BLOB.
- QUERY export will now output translated queries as well as
untranslated ones. This break backward compatibility, previously
only translated query was dumped.
- Auto detect UTF-8 input files to automatically use utf8 encoding.
- Support translation of MySQL global variables.
- Add translation of preprocessor in Oracle external table into
program in foreign table definition. Allow translation of external
table from file.
- Add translation to NVL2() Oracle function.
- Translate CONVERT() MySQL function.
- Translate some form of GROUP_CONCAT() that was not translated.
- Remove call to CHARSET in cast() function, replace it by COLLATE
every where else. This must cover most of the cases but some
specials use might not, so please reports any issue with this
behavior.
- Add -c | --config command line option to ora2pg_scanner to set
custom configuration file to be used instead of ora2pg default:
/etc/ora2pg/ora2pg.conf
- Improve CONNECT BY and OUTER JOIN translation.
- And lot of MySQL to PostgreSQL improvements.
Several new configuration directives have been added:
- Add DEFAULT_PARALLELISM_DEGREE to control PARALLEL hint use
when exporting data from Oracle. Default is disabled.
- Make documentation about KEEP_PKEY_NAMES more explicit about
kind of constraints affected by this directive.
- Add PG_SUPPORTS_IDENTITY configuration directive to enable
export of Oracle identity columns into PostgreSQL 10 feature.
If PG_SUPPORTS_IDENTITY is disabled and there is IDENTITY column
in the Oracle table, they are exported as serial or bigserial
columns. When it is enabled they are exported as IDENTITY columns
like:
CREATE TABLE identity_test_tab (
id bigint GENERATED ALWAYS AS IDENTITY,
description varchar(30)
) ;
If there is non default sequence option set in Oracle, they will
be appended after the IDENTITY keyword. Additionally in both cases
Ora2Pg will create a file AUTOINCREMENT_output.sql with a function
to update the associated sequences with the restart value set to
"SELECT max(colname)+1 FROM tablename". Of course this file must
be imported after data import otherwise sequence will be kept to
start value.
- Add DISABLE_UNLOGGED configuration directive. By default Ora2Pg
export Oracle tables with the NOLOGGING attribute into UNLOGGED
tables. You may want to fully disable this feature because you
will lost all data from unlogged table in case of PostgreSQL crash.
Set it to 1 to export all tables as normal table. When creating a
new migration project using --init_project, this directive is
activated by default. This is not the case in the default
configuration file for backward compatibility.
- Add FORCE_SECURITY_INVOKER configuration directive. Ora2Pg use
the function's security privileges set in Oracle and it is often
defined as SECURITY DEFINER. To override those security privileges
for all functions and use SECURITY DEFINER instead, enable this
directive.
- Add AUTONOMOUS_TRANSACTION in configuration to enable translation
of autonomous transactions into a wrapper function using dblink
or pg_background extension. If you don't want to use this feature
and just want to export the function as a normal one without the
pragma call, disable this directive.
- Add documentation about COMMENT_SAVEPOINT configuration directive.
- Major rewrite in PACKAGE parser to better support global variables
detection. Global variable that have no default values are now
always initialized to empty string in file global_variables.conf
so that we see that they exists. This might not change the global
behavior.
I especially want to thank Pavel Stehule and Eric Delanoe who spent
lot of time this year to help me to improve the PL/SQL to plpgsql
translation and also Krasiyan Andreev who help a lot to finalize
the MySQL to PostgreSQL migration features.
Here is a complete list of changes and acknowledgments:
- Fix translation of "varname cursor%ROWTYPE;". Thanks to Philippe
Beaudoin for the report.
- Fix return of autonomous transaction dblink call when function has
OUT parameter. Thanks to Pavel Stehule for the report.
- Add Oracle to PostgreSQL translation of windows functions
KEEP (DENSE_RANK FIRST|LAST ORDER BY ...) OVER (PARTITION BY ...)
Thanks to Swapnil bhoot929 for the feature request.
- Fix "ORA-03113: end-of-file on communication channel" that what
generated by a too long query send to Oracle. The size of queries
sent to Oracle to retrieve object information depend of the ALLOW
and EXCLUDE directives. If you have lot of objects to filter you
can experience this kind of non explicit error. Now Ora2pg use
bind parameter to pass the filters values to reduce the size of
the prepared query. Thanks to Stephane Tachoire for the report.
- Add SUBTYPE translation into DOMAIN with TYPE and PACKAGE export.
Thanks to Francesco Loreti for the feature request.
- Fix PLS_INTEGER replacement.
- Remove precision for RAW|BLOB as type modifier is not allowed for
type "bytea".
- Fix call of schema.pckg.function() in indexes with a replacement
with pckg.function(). Thanks to w0pr for the report.
- Fix translation of UPDATE trigger based on columns:
"BEFORE UPDATE OF col1,col2 ON table".
Thanks to Eric Delanoe for the report.
- Remove single / from input file that was causing a double END in
some case. Thanks to Philippe Beaudoin for the report.
- Limit translation of PCTFREE into FILLFACTOR when PCTFREE is upper
than the Oracle default value: 10. With PostgreSQL 100 (complete
packing) is the default.
- Add PCTFREE to FILLFACTOR conversion. Thanks to Maxim Zakharov
for the patch.
- Remove TRUNCATE extra clauses. Thanks to e7e6 for the patch.
- Fix type conversion when extra \n added after ;. Thanks to
Maxim Zakharov for the patch.
- Fix DELETE clause not followed with FROM (optional in Oracle).
Thanks to Philippe Beaudoin for the patch.
- Limit call to ALL_TAB_IDENTITY_COLS to version 12+. Thanks to
Andy Garfield for the report.
- Fix comment parsing. Thanks to Philippe Beaudoin for the report.
- Allow use of NUMBER(*) in DATA_TYPE directive to convert all
NUMBER(*) into the given type whatever is the length.
Thanks to lingeshpes for the feature request.
- Fix bug in function-based index export. Thanks to apol1234 for
the report.
- Add PARALLEL hint to all data export queries. Thanks to jacks33
for the report.
- Make documentation about KEEP_PKEY_NAMES more explicit about kind
of constraints affected by this directive.
- Fix export of identity columns by enclosing options between
parenthesis and replacing CACHE 0 by CACHE 1. Thanks to swmcguffin
devtech for the report.
- Add parsing of identity columns from file.
- Fix unwanted replacement of IF () in MySQL code. Thanks to
Krasiyan Andreev for the report.
- Fix to_char() translation, thanks to Eric Delanoe for the report.
- Fix untranslated PERFORM into exception. Thanks to Pavel Stehule
for the report.
- Add _get_entities() function to MySQL export. It returns nothing,
AUTO_INCREMENT column are translated with corresponding types,
smallserial/serial/bigserial.
- Fix look at encrypted column on Oracle prior to 10. Thanks to
Stephane Tachoires for the patch.
- Add export of Identity Columns from Oracle Database 12c. Thanks
to swmcguffin-devtech for the feature request.
- Prevent Ora2Pg to scan ALL_SCHEDULER_JOBS for version prior to 10
Thanks to Stephane Tachoires for the patch.
- Fix pull request #648 to log date only when debug is enabled and
use POSIX strftime instead of custom gettime function.
- Add system time to debug log info. Thanks to danghb for the patch.
- Fix parsing of trigger from file and exception.
- Fix very slow export of mysql tablespace when number of table is
large. Thanks to yafeishi for the report.
- Fix translation of CAST( AS unsigned). Thanks to Krasiyan Andreev.
- Fix MySQL character length to use character_maximum_length
instead of equal character_octet_length. Thanks to yafeishi for
the report.
- Fix custom replacement of MySQL data type. Thanks to Krasiyan
Andreev for the report.
- Fix replacement of call to open cursor with empty parenthesis.
Thanks to Philippe Beaudoin for the report.
- Fix MySQL data type conversion in function declaration. Thanks to
Krasiyan Andreev for the report.
- Fix error with -INFINITY as default value for date or timestamp
columns.
- Fix procedure call rewrite with unwanted comma on begin of
parameter list. Thanks to Pavel Stehule for the report.
- Fix handling of foreign keys when exporting data and DROP_FKEYS
is enabled and ALLOW/EXCLUDE directive is set. Now Ora2Pg will
first drop all foreign keys of a table in the export list and all
foreign keys of other tables pointing to the table. After data
import, it will recreate all of these foreign keys. Thanks to
Eric Delanoe for the report.
- Fix broken transformation of procedure call with default parameter
Thanks to Pavel Stehule for the report.
- Translate call to TIMESTAMP in partition range values into a cast.
Thanks to markiech for the report.
- Fix CONNECT BY translation when the query contain an UNION. Thanks
to mohammed-a-wadod for the report.
- Fix CONNECT BY with PRIOR on the right side of the predicat.
- Fix outer join translation when the (+) was in a function, ex:
WHERE UPPER(trim(VW.FRIDAY))= UPPER(trim(FRIDAY.NAME(+))).
- Order outer join pending tables in from clause.
- Order by object name comments and indexes export.
- Fix outer join translation when the table is not in the from
clause. Thanks to Cyrille Lintz for the report.
- Try to fix potential Oracle schema prefixing PostgreSQL schema
name in CREATE SCHEMA. Thanks to Cyrille Lintz for the report.
- Fix error in TRIM() translation. Thanks to Cyrille Lintz for the
report.
- Add translation of UROWID datatype and information in documentation
about why default corresponding type OID will fail at data import.
Thanks to Cyrille Lintz for the report.
- Fix bug in exporting boolean default values in column definition.
- Fix bug in column parsing in CREATE TABLE.
- Adapt default value for data type changed to boolean.
- Fix bad handling of -D (data_type) option.
- Change behavior in the attempt to set MySQL global variable type.
Now variable type will be timestamp if the variable name contains
datetime, time if the name contains only time and date for date.
Thanks to Krasiyan Andreev for the report.
- Fix function replacement in MySQL declare section. Thanks to
Krasiyan Andreev fr the report.
- Apply REPLACE_ZERO_DATE to default value in table declaration.
Thanks to Krasiyan Andreev for the report.
- Add support to embedded comment in table DDL.
- Fix replacement of data type for MySQL code. Thanks to Krasiyan
Andreev for the report.
- Fix MySQL type replacement in function. Thanks to Krasiyan Andreev
for the report.
- Improve speed of escape_copy() function used for data export.
Thanks to pgnickb for the profiling.
- Add translation of Oracle functions NUMTOYMINTERVAL() and
NUMTODSINTERVAL(). Thanks to Pavel Stehule for the report.
- Counting jobs defined in Oracle scheduler. Thanks to slfbovey
for the patch.
- Fix several issue in create table DDL parser:
- remove double quote of object name when a list of column is
entered
- split of table definition to extract column and constraint
parts is now more efficient
- remove dot in auto generated constraint name when a schema
is given in table name
- fix default values with space that was breaking the parser
- Remove use of bignum perl module that reports error on some
installation. Thanks to Cyrille Lintz for the report.
- Fix a typo preventing perldoc to complete. Thanks to slfbovey
for the patch.
- Fully rewrite data export for table with nested user defined types
DBD::Oracle fetchall_arrayref() is not able to associate complex
custom types to the returned arrays, changed this call to use
fetchrow_array() also used to export BLOB. Thanks to lupynos for
the report.
- Fix renaming of temporary files during partitions data export.
- Fix Oracle use of empty string as default value for integers.
Oracle allow such declaration: SOP NUMBER(5) DEFAULT '' which
PostgreSQL does not support. Ora2Pg now detect this syntax and
replace empty string with NULL. Thanks to ricdba for the report.
- Add detection of Oracle version before setting datetime format,
needed for Oracle 8i compatibility.
- Export of tables from Oracle database are now ordered by name by
default. Thanks to Markus Roth for the report.
- Fix an other case of missing translation of UNSIGNED into bigint.
Thanks to Krasiyan Andreev for the report.
- Force replacement of double quote into single quote for MySQL view
and function code.
- Fix case when SET @varname := ... is used multiple time in the
same function. Thanks to Krasiyan Andreev for the report.
- Fix case where SET @varname := ... was not translated. Thanks to
Krasiyan Andreev for the report.
- Adjust the regex pattern of last patch.
- Fix unwanted newline after hint replacement that could break
comments. Thanks to Pavel Stehule for the report.
- Fix if() replacement in query. Thanks to Krasiyan Andreev for the
report.
- Remove extra parenthesis in some form of JOIN. Thanks to Krasiyan
Andreev for the report.
- Fix untranslated call to UNSIGNED, now translated as bigint.
- Thanks to Krasiyan Andreev for the report.
- Fix translation of double(p,s) into decimal(p,s).
- Remove use of SET when an assignment is done through a SELECT
statement. Thanks to Krasiyan Andreev for the report.
- Fix non-quoted reserved keywords in INSERT / COPY statements when
exporting data. Thanks to Pavel Stehule for the report.
- Fix partition data export to file, temporary files for partition
output was not renamed at export end then data was not loaded.
- Fix double operator := during function with out param rewrite.
- Fix commit f1166e5 to apply changes when FILE_PER_FUNCTION is
disable or when an input file is given.
- Fix translation of LOCATE(). Thanks to Krasiyan Andreev for the
report.
- Fix case where MySQL GROUP_CONCAT() function was not translated.
Thanks to Krasiyan Andreev for the report.
- Fix :new and :old translation in triggers.
- Fully rewrite function call qualification process, the second pass
now is only use to requalify call to pkg.fct into pkg_ftc when
PACKAGE_AS_SCHEMA is disable. The replacement of all function
calls using double quote when a non supported character is used or
when PRESERVE_CASE is enabled has been completely removed as this
takes too much time to process for just very few case. So by
default now Ora2Pg will not go through the second pass. This can
change in the future especially if this is more performant to
process PERFORM replacement. Thanks a lot to Eric Delanoe for his
help on this part.
- Exclude function and procedure not from package to be used in
requalify call. Thanks to Eric Delanoe for the report.
- Fix function name qualification in multiprocess mode.
- Fix unqualified function call due to unclose file handle.
- Prevent try to requalify function call if the function is
not found in the file content.
- Remove ALGORITHM=.*, DEFINER=.* and SQL SECURITY DEFINER from
MySQL DDL code.
- An other missing change to previous commit on qualifying function
call.
- Limit function requalification to export type: VIEW, TRIGGER,
QUERY, FUNCTION, PROCEDURE and PACKAGE.
- Auto detect UTF-8 input files to automatically use utf8 encoding.
- Remove all SHOW ERRORS and other call to SHOW in Oracle package
source as they was badly interpreted as global variable.
- Fix MySQL CREATE TABLE ... SELECT statement.
- Fix pending translation issue on some DATE_FORMAT() case.
Thanks to Krasiyan Andreev for the report.
- Fix translation of IN (..) in MySQL view. Thanks to Krasiyan
Andreev for the report.
- Fix MySQL date format with digit.
- Fix DATE_FORMAT, WHILE and IFNULL translation issues.
- Fix not translated MySQL IF() function.
- Fix other MySQL translation issues for @variable. Thanks to
Krasiyan Andreev for the report.
- Fix issue in MySQL IF translation with IN clause. Thanks to
Krasiyan Andreev for the report.
- Clarify comment about XML_PRETTY directive. Thanks to TWAC
for the report.
- Fix remaining MySQL translation issues for @variable reported
in issue #590.
- Fix no translated := in SET statement.
- Fix output order of translated function.
- Fix non printable character or special characters that make
file encoding to ISO-8859 instead of utf8. Thanks to twac for
the report.
- Prevent MySQL global variable to be declared twice. Thanks to
Krasiyan Andreev for the report.
- Support translation of MySQL global variables. Session variable
@@varname are translated to PostgreSQL GUC variable and global
variable @varname are translated to local variable defined in a
DECLARE section. Ora2Pg tries to gather the data type by using
integer by default, varchar if there is a constant string ('...')
in the value and a timestamp if the variable name have the keyword
date or time inside. Thanks to Krasiyan Andreev for the feature
request.
- Fix DATE_ADD() translation.
- Add translation of preprocessor in Oracle external table into
program in foreign table definition. Thanks to Thomas Reiss for
the report. Allow translation of external table from file.
- Fix case where IF EXISTS might not be append when it is not
supported by PG.
- Translate CONVERT() MySQL function. Thanks to Krasiyan Andreev
for the report.
- Translate some form of GROUP_CONCAT() that was not translated.
Thanks to Krasiyan Andreev for the report.
- Apply same principe with COMMIT in MySQL function code than in
Oracle code. It is kept untouched to be able to detect a possible
change of code logic. It can be automatically commented if
COMMENT_COMMIT_ROLLBACK is enabled. Also I have kept the START
TRANSACTION call but it is automatically commented.
- Add mysql_enable_utf8 => 1 to MySQL connection to avoid issues
with encoding. Thanks to Krasiyan Andreev for the report.
- Prevent removing of comment on MySQL function and add a "COMMENT
ON FUNCTION" statement at end of the function declaration. Thanks
to Krasiyan Andreev for the report.
- Fix translation of types in MySQL function parameter. Thanks to
Krasiyan Andreev for the report.
- Remove START TRANSACTION from MySQL function code. Thanks to
Krasiyan Andreev for the report.
- Fix previous patch, we do not need to look forward for function
or procedure definition in VIEW export and there is no package
with MySQL. Thanks to Krasiyan Andreev for the report.
- Fix call to useless function for MySQL function.
- Add rewrite of MySQL function call in function or procedure code
translation and some other translation related to MySQL code.
- Fix ora2pg_scanner when exporting schema with $ in its name.
Thanks to Aurelien Robin for the report.
- Disable number of microsecond digit for Oracle version 9. Thanks
to Aurelien Robin for the report.
- Do not look at encrypted column for DB version < 10. Thanks to
Aurelien Robin for the report.
- Fix MySQL call to charset in cast function. MySQL charset "utf8"
is also set to COLLATE "C.UTF-8". Thanks to Krasiyan Andreev for
the report.
- Fix two bug in CONNECT BY and OUTER JOIN translation.
- Forgot to handle exception to standard call to IF in MySQL IF()
translation. Thanks to Krasiyan Andreev for the report.
- Forgot to apply previous changes to procedure.
- Fix IF() MySQL replacement when nested and when containing an
IN (...) clause. Thanks to Krasiyan Andreev for the report.
- Fix double BEGIN on MySQL function export. Thanks to Krasiyan
Andreev for the report.
- Fix enum check constraint name when PRESERVE_CASE is enabled.
- Fix case where object with LINESTRING and CIRCULARSTRING was
exported as MULTILINESTRING instead of MULTICURVE.
- Fix export of MULTICURVE with COMPOUNDCURVE. Thanks to Petr Silhak
for the report.
- Fix several issue in MySQL table DDL export. Thanks to Krasiyan
Andreev for the report.
- Fix MySQL auto_increment data type translation and columns export
order.
- Fix translation of MySQL function CURRENT_TIMESTAMP(). Thanks to
Krasiyan Andreev for the report.
- Fix export of MySQL alter sequence name when exporting auto
increment column. Thanks to Krasiyan Andreev for the report.
- Replace IF() call with CASE ... END in VIEW and QUERY export for
MySQL. Thanks to Krasiyan Andreev for the feature request.
- Replace backquote with double quote on mysql statements when read
from file.
- Fix bug in REGEXP_SUBSTR replacement.
- Prevent replacement with same function name from an other package.
Thanks to Eric Delanoe for the report.
- Apply same STRICT rule for SELECT INTO to EXECUTE INTO. Thanks to
Pavel Stehule for the report.
- Fix extra parenthesis removing when a OR clause is present. Thanks
to Pavel Stehule for the report.
- Keep autonomous pragma commented when conversion is desactivated
to be able to identify functions using this pragma.
- Fix bug in replacement of package function in string constant.
- Fix malformed replacement of array element calls. Thanks to Eric
Delanoe for the report.
- Fix unwanted replacement of TO_NUMBER function. Thanks to Torquem
for the report.
- Add an example of DSN for MySQL in ORACLE_DSN documentation.
Thanks to François Honore for the report.
- Fix typo in default dblink connection string. Thanks to Pavel
Stehule for the report.
- Add information about Oracle Instant Client installation. Thanks
to Jan Birk for the report.
- Replace Oracle array syntax arr(i).x into arr[i].x into PL/SQL
code. Thanks to Eric Delanoe for the report.
- Use a more generic connection string for DBLINK. It will use
unix socket by default to connect and the password must be set
in .pgpass. This will result in the following connection string:
format('port=%s dbname=%s user=%', current_setting('port'),
current_database(), current_user)
If you want to redefine this connection string use DBLINK_CONN
configuration directive. Thanks to Pavel Stehule for the feature
request.
- Fix missing RETURN NEW in some trigger translation. Thanks to
Pavel Stehule for the report.
- Fix a missing but non mandatory semi-comma.
- Keep PKs/unique constraints which are deferrable in Oracle also
deferrable in PostgreSQL. Thank to Sverre Boschman for the patch.
- Fix parsing and translation of CONNECT BY. Thanks to bhoot929
for the report.
- Fix FDW export when exporting all schema. Thanks to Laurenz Albe
for the report.
- Add a note about multiple value in export type that can not
include COPY or INSERT together with others export type.
- Fix duplicate condition. Thanks to Eric Delanoe for the report.
- Fix unwanted translation into PERFORM after INTERSECT.
- Comment savepoint in code. Thanks to Pavel Stehule for the patch.
- Fix "ROLLBACK TO" that was not commented. Thanks to Pavel Stehule
for the report.
- Fix restore of constant string when additional string constant
regex are defined in configuration file.
- Fix translation of nextval with sequence name prefixed with their
schema.
- Cast call to TO_DATE(LOCALTIMESTAMP,...) translated into
TO_DATE(LOCALTIMESTAMP::text,...). Thanks to Keshav kumbham
for the report.
- Remove double quote added automatically by Oracle on view
definition when PRESERVE_CASE is not enable. Thanks to JeeIPI for
the report.
- Fix translation of FROM_TZ with a call to function as first
parameter. Thanks to TrungPhan for the report.
- Fix package export when FILE_PER_FUNCTION is set. Thanks to
Julien Rouhaud for the report.
- Add translation of REGEXP_SUBSTR() with the following rules:
Translation of REGEX_SUBSTR( string, pattern, [pos], [nth])
converted into
SELECT array_to_string(a, '')
FROM regexp_matches(substr(string, pos), pattern, 'g')
AS foo(a)
LIMIT 1 OFFSET (nth - 1);
Optional fifth parameter of match_parameter is appended to 'g'
when present. Thanks to bhoot929 for the feature request.
- Add count of REGEX_SUBSTR to migration assessment cost.
- Add translation support of FROM_TZ() Oracle function. Thanks
to trPhan for the feature request.
- Forces ora2pg to output a message when a custom exception code
has less than 5 digit.
- Fix errcode when Oracle custom exception number have less than
five digit. Thanks to Pavel Stehule for the report.
- Fix case where custom errcode are not converted. Thanks to Pavel
Stehule for the report.
- Fix print of single semicolon with empty line in index export.
- Fix problem with TO_TIMESTAMP_TZ conversion. Thanks to Keshav-
kumbham for the report.
- Fix unwanted double quote in index column with DESC sorting.
Thanks to JeeIPI for the report.
- Fix non detection case of tables in from clause for outer join
translation. Thanks to Keshav for the report.
- Fix unwanted replacement of = NULL into IS NULL in update
statement. Thanks to Pavel Stehule for the report.
- Force schema name used in TEST action to lowercase. Thanks to
venkatabn for the report.
- Fix export of spatial geometries with CURVEPOLYGON + COMPOUNDCURVE
Thanks to kabog for the report.