- Run Travis tests with lowest (3.6) and highest (3.9) supported Python versions only.
- Updated description and classifiers for PyPi.
- Fixed the problem with
delimit
HTTP transport parameter expectingNONE
value instead ofNEVER
.
- Added
protocol_version
connection option to adjust the protocol version requested by client (default:pyexasol.PROTOCOL_V1
). - Added
.protocol_version()
function to check the actual protocol version of established connection.
- Added
.meta.execute_meta_nosql()
function to run no SQL metadata commands introduced in Exasol v7.0+. - Function
.meta.execute_snapshot()
is not public. You may use it run complex metadata SQL queries in snapshot isolation mode.
- Added ability to execute no SQL metadata commands AND process the response as normal SQL-like result set. It does not change anything in public interface, but it might have an impact if you use custom overloaded
ExaStatement
class.
- Re-throw
BrokenPipeError
(and other sub-classes ofConnectionError
) asExaCommunicationError
. This type of errors might not be handled in WebSocket client library in certain cases.
- Added optional
disconnect
command executed during.close()
. It is now enabled by default , but can be disabled with explicit.close(disconnect=False)
to revert to original behaviour; - Added
csv_cols
to HTTP transport parameters. It allows to skip some columns in CSV and adjust numeric and date format during IMPORT and EXPORT. It is still recommended to implement your own data transformation layer, sincecsv_cols
capabilities are limited;
- Added
.meta
sub-set of functions to execute lock-free meta data requests using/*snapshot execution*/
SQL hint; - Deprecated some
.ext
functions executing queries similar to.meta
(code remains in place for compatibility); - Added connection option
connection_timeout
in addition to existing optionsocket_timeout
.Connection_timeout
is applied during initial connection only andsocket_timeout
is applied for all other requests, including actual login procedure. - Reworked error handling for HTTP transport to take care of even more complex failure scenarios;
- Reworked internals of SQL builder for IMPORT / EXPORT parameters;
ExaStatement
should now properly release result set handle after fetching and object termination;- Removed
weakref
, it was not related to previous garbage collector problems; - Renamed previously added
.connection_time
to.login_time
, which is more accurate name for this timer; - Query text length in
ExaQueryError
exception is now limited to 20k characters to prevent logs from bloating; - Fixed
open_schema
function withquote_ident=True
; .last_statement()
now always returns lastExaStatement
executed on this connection. Previously it was skipping technical queries fromExaExtension
(.ext);
- Added option
client_os_username
to specify custom client OS username. Previously username was always detected automatically withgetpass.getuser()
, but it might not work in some environments, like OpenShift.
- Added
.connection_time
property to measure execution time of two login requests required to establish connection.
- Reworked
close()
method. It is now sending basicOP_CLOSE
WebSocket frame instead ofdisconnect
command. - Method
close()
is now called implicitly during destruction ofExaConnection
object to terminate IDLE session and free resources on Exasol server side immediately. ExaFormatter
,ExaExtension
,ExaLogger
objects now have weak reference to the mainExaConnection
object. It helps to prevent circular reference problem which stoppedExaConnection
object from being processed by Python garbage collector.- Connection will be closed automatically after receiving
WebSocketException
and raisingExaCommunicationError
. It should prevent connection from being stuck in invalid state.
- Reworked script output code and moved it into
pyexasol_utils
module. The new way to start script output server in debug mode is:python -m pyexasol_utils.script_output
. Old call will produce the RuntimeException with directions. - Removed
.utils
sub-module. - Renamed
pyexasol_utils.http
intopyexasol_utils.http_transport
for consistency.
- Fixed bug of
.execute_udf_output()
not working with emptyudf_output_bind_address
. - Added function
_encrypt_password()
, logic was moved from.utils
. - Added function
_get_stmt_output_dir()
, logic was moved from.utils
. It is now possible to overload this function.
- Metadata functions (starting with
.ext.get_sys_*
) are now using/*snapshot execution*/
SQL hint described in IDEA-476 to prevent locks.
- Added
insert_multi
function to allow faster INSERT's for small data sets using prepared statement.
- DSN hostname ranges with zero-padding are now supported (e.g.
myhost01..16
). - Context manager ("with" statement) is now supported for connection object.
- Context manager ("with" statement) is now supported for statement object.
- Added read-only
.options
property holding original arguments used to create ExaConnection object. - Added read-only
.login_info
property holding response data of LOGIN command. - Added documentation for read-only
.attr
property holding attributes of current connection (autocommit state, etc.). - Removed undocumented
.meta
property, renamed it to.login_info
. - Removed undocumented
.last_stmt
property. Please use.last_statement()
function instead. - Removed most of exposed properties related to connection options (e.g.
.autocommit
). Please use.options
or.attr
instead.
- Added documentation for read-only
.execution_time
property holding wall-clock execution time of SQL statement.