Files
email-tracker/external/duckdb/test/sql/logging/logging_call_functions.test
2025-10-24 19:21:19 -05:00

224 lines
5.0 KiB
SQL

# name: test/sql/logging/logging_call_functions.test
# description: Test logging
# group: [logging]
require noforcestorage
# Create test view to get log settings
statement ok
CREATE VIEW log_settings AS select name, value from duckdb_settings() where name in ['logging_level', 'logging_mode', 'logging_storage', 'enable_logging', 'enabled_log_types', 'disabled_log_types'] ORDER BY name
####
# Most simple way to enable logging: turns on default behaviour
###
statement ok
CALL enable_logging();
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level INFO
logging_mode LEVEL_ONLY
logging_storage memory
statement ok
CALL disable_logging()
# Logging now disabled again
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 0
enabled_log_types (empty)
logging_level INFO
logging_mode LEVEL_ONLY
logging_storage memory
####
# Enabling logging at a specific level
###
statement ok
CALL enable_logging(level='DEBUG');
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level DEBUG
logging_mode LEVEL_ONLY
logging_storage memory
# Note: disable_logging resets the log config
statement ok
CALL disable_logging()
# disable logging turns off logging only
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 0
enabled_log_types (empty)
logging_level DEBUG
logging_mode LEVEL_ONLY
logging_storage memory
####
# Enabling logging of a specific type
###
statement ok
CALL enable_logging('QueryLog');
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types QueryLog
logging_level INFO
logging_mode ENABLE_SELECTED
logging_storage memory
####
# Enabling logging of multiple types (note that log level will match lowest level of the types)
###
statement ok
CALL enable_logging(['QueryLog', 'FileSystem']);
# Use sorted list to avoid indeterministic result
query II
SELECT name, list_sort(split(value, ',')) FROM log_settings;
----
disabled_log_types ['']
enable_logging [1]
enabled_log_types [FileSystem, QueryLog]
logging_level [TRACE]
logging_mode [ENABLE_SELECTED]
logging_storage [memory]
# Due to different file locking behaviour, this currently fails on windows
require notwindows
####
# Configuring a different log storage, using the config param to pass arbitrary (extensible!) options
###
statement ok
CALL enable_logging('FileSystem', storage='file', storage_config={'path': '__TEST_DIR__/logging_call_functions_test_log'});
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types FileSystem
logging_level TRACE
logging_mode ENABLE_SELECTED
logging_storage file
####
# Syntactic sugar exists to easily pass some log_storage related settings
###
statement ok
CALL enable_logging(storage='file', storage_path='__TEST_DIR__/logging_call_functions');
statement ok
CALL disable_logging()
####
# For the storage_path setting we can even omit the storage and it will automatically set it to storage='file'
###
statement ok
CALL enable_logging(storage_path='__TEST_DIR__/logging_call_functions');
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level INFO
logging_mode LEVEL_ONLY
logging_storage file
# Reset
statement ok
CALL enable_logging()
####
# Some invalid invocations throw nice errors
###
statement error
CALL enable_logging(hocus_pocus='this is bogus');
----
Binder Error: Invalid named parameter "hocus_pocus" for function enable_logging
# enable_logging is currently not atomic TODO: fix this
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level INFO
logging_mode LEVEL_ONLY
logging_storage memory
# Unknown storage option: this error is thrown by the log storage, because not all log storages implement the same params
statement error
CALL enable_logging(storage='file', level='DEBUG', storage_config={'hocus_pocus': 'this is bogus', 'path': '__TEST_DIR__/hi.csv'});
----
Invalid Input Error: Unrecognized log storage config option for storage: 'FileLogStorage': 'hocus_pocus'
# enable_logging is currently not atomic TODO: fix this
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level DEBUG
logging_mode LEVEL_ONLY
logging_storage file
statement ok
CALL disable_logging();
# The path param does not exist for the memory storage
statement error
CALL enable_logging(storage='memory', storage_config={'path': 'bla'});
----
Invalid Input Error: Unrecognized log storage config option for storage: 'InMemoryLogStorage': 'path'
# storage_config should be a struct
statement error
CALL enable_logging(storage_config='hi')
----
Invalid Input Error: EnableLogging: storage_config must be a struct
# Logging config remains untouched TODO: fix
query II
FROM log_settings;
----
disabled_log_types (empty)
enable_logging 1
enabled_log_types (empty)
logging_level INFO
logging_mode LEVEL_ONLY
logging_storage memory