should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,8 @@
# name: test/sql/settings/access_mode.test
# description: Test access mode setting
# group: [settings]
statement error
SET access_mode='read_only'
----
Cannot change access_mode setting while database is running

View File

@@ -0,0 +1,199 @@
# name: test/sql/settings/allowed_directories.test
# description: Test allowed_directories setting together with enable_external_access = false
# group: [settings]
require skip_reload
# enable_external_access = false disables extension loading
require no_extension_autoloading "EXPECTED: Test disable autoloading"
require parquet
require json
# we can set allowed_directories as much as we want
statement ok
SET allowed_directories=['data/csv/glob']
statement ok
RESET allowed_directories
statement ok
SET allowed_directories=['data/csv/glob', 'data/csv/glob/1', 'data/parquet-testing/glob', 'data/json', '__TEST_DIR__']
statement ok
SET enable_external_access=false
# ...until enable_external_access is false
statement error
RESET allowed_directories
----
Cannot change allowed_directories when enable_external_access is disabled
statement error
SET allowed_directories=[]
----
Cannot change allowed_directories when enable_external_access is disabled
# we can read CSV files from the allowed_directories
query III
SELECT * FROM 'data/csv/glob/f_1.csv'
----
1 alice alice@email.com
2 eve eve@email.com
3r bob NULL
# also within contained directories
query I
SELECT * FROM 'data/csv/glob/a1/a1.csv'
----
2019-06-05
2019-06-15
2019-06-25
# we can also use "..", as long as we remain inside our directory
query III
SELECT * FROM 'data/csv/glob/a1/../f_1.csv'
----
1 alice alice@email.com
2 eve eve@email.com
3r bob NULL
# and we can use ./
query III
SELECT * FROM 'data/csv/glob/./f_1.csv'
----
1 alice alice@email.com
2 eve eve@email.com
3r bob NULL
# we cannot read files that are not in the allowed directories
statement error
SELECT * FROM 'data/csv/all_quotes.csv'
----
Permission Error
# also not through usage of ".."
statement error
SELECT * FROM 'data/csv/glob/../all_quotes.csv'
----
Permission Error
# //.. edge case
statement error
SELECT * FROM 'data/csv/glob//../all_quotes.csv'
----
Permission Error
statement error
SELECT * FROM 'data/csv/glob/a1/../../all_quotes.csv'
----
Permission Error
# we can also sniff csv files
statement ok
SELECT * FROM sniff_csv('data/csv/glob/f_1.csv')
# but not outside of allowed directories
statement error
SELECT * FROM sniff_csv('data/csv/all_quotes.csv')
----
Permission Error
# we can also glob allowed directories
query I
SELECT replace(fname, '\', '/') as fname FROM glob('data/csv/glob/*.csv') t(fname)
----
data/csv/glob/f_1.csv
data/csv/glob/f_2.csv
data/csv/glob/f_3.csv
statement error
SELECT * FROM glob('data/csv/**.csv')
----
Permission Error
# we can write to our test dir
statement ok
COPY (SELECT 42 i) TO '__TEST_DIR__/permission_test.csv' (FORMAT csv)
statement ok
CREATE TABLE integers(i INT);
statement ok
COPY integers FROM '__TEST_DIR__/permission_test.csv'
query I
FROM integers
----
42
# but not to other directories
statement error
COPY (SELECT 42 i) TO 'permission_test.csv' (FORMAT csv)
----
Permission Error
statement error
COPY integers FROM 'permission_test.csv'
----
Permission Error
# we can attach databases in allowed directories
statement ok
ATTACH '__TEST_DIR__/attached_dir.db' AS a1
statement ok
CREATE TABLE a1.integers(i INTEGER);
# but not in other directories
statement error
ATTACH 'test.db'
----
Permission Error
# we cannot load or install extensions with enable_external access
statement error
LOAD my_ext
----
Permission Error
statement error
INSTALL my_ext
----
Permission Error
# export/import also work with allowed_directories
statement ok
EXPORT DATABASE a1 TO '__TEST_DIR__/export_test'
statement error
EXPORT DATABASE a1 TO 'export_test'
----
Permission Error
statement error
IMPORT DATABASE '__TEST_DIR__/export_test'
----
Table with name "integers" already exists!
statement error
IMPORT DATABASE 'export_test'
----
Permission Error
# we can read parquet/json files
query II
SELECT * FROM 'data/parquet-testing/glob/t1.parquet'
----
1 a
statement error
SELECT * FROM 'data/parquet-testing/aws2.parquet'
----
Permission Error
query II
SELECT * FROM 'data/parquet-testing/glob/t1.parquet'
----
1 a

View File

@@ -0,0 +1,57 @@
# name: test/sql/settings/allowed_paths.test
# description: Test allowed_paths setting together with enable_external_access = false
# group: [settings]
require skip_reload
# enable_external_access = false disables extension loading
require no_extension_autoloading "EXPECTED: Test disable loading of extensions"
# we can set allowed_directories as much as we want
statement ok
SET allowed_paths=['data/csv/glob/f_1.csv']
statement ok
RESET allowed_paths
statement ok
SET allowed_paths=['data/csv/glob/f_1.csv', '__TEST_DIR__/allowed_file.csv']
statement ok
SET enable_external_access=false
# ...until enable_external_access is false
statement error
RESET allowed_paths
----
Cannot change allowed_paths when enable_external_access is disabled
statement error
SET allowed_paths=[]
----
Cannot change allowed_paths when enable_external_access is disabled
# we can read our allowed files
query III
SELECT * FROM 'data/csv/glob/f_1.csv'
----
1 alice alice@email.com
2 eve eve@email.com
3r bob NULL
# but not files that are not allowed
statement error
SELECT * FROM 'data/csv/glob/a1/a1.csv'
----
Permission Error
# we can also write to our allowed file
statement ok
COPY (SELECT 42 i) TO '__TEST_DIR__/allowed_file.csv'
# but not to not-allowed files
statement error
COPY (SELECT 42 i) TO '__TEST_DIR__/not_allowed_file.csv'
----
Permission Error

View File

@@ -0,0 +1,53 @@
# name: test/sql/settings/connection_local_settings.test
# description: Exhaustive setting tests
# group: [settings]
require skip_reload
statement ok
CREATE TABLE tbl AS FROM (VALUES (1), (2), (3), (NULL)) t(i)
# global settings: ASC NULLS FIRST
statement ok
SET default_order = 'ASCENDING';
statement ok
SET default_null_order = 'NULLS FIRST';
# con1: DESC NULLS FIRST
statement ok con1
SET SESSION default_order = 'DESCENDING';
statement ok con1
SET SESSION default_null_order = 'NULLS FIRST';
# con2: ASC NULLS LAST
statement ok con2
SET SESSION default_order = 'ASCENDING'
statement ok con2
SET SESSION default_null_order = 'NULLS LAST'
query I
SELECT * FROM tbl ORDER BY i
----
NULL
1
2
3
query I con1
SELECT * FROM tbl ORDER BY i
----
NULL
3
2
1
query I con2
SELECT * FROM tbl ORDER BY i
----
1
2
3
NULL

View File

@@ -0,0 +1,118 @@
# name: test/sql/settings/default_null_order_extended.test
# description: Test extended default null order settings
# group: [settings]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i integer);
statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL);
# NULLS FIRST
statement ok
SET default_null_order='nulls_first';
query I
SELECT * FROM integers ORDER BY i;
----
NULL
1
2
3
query I
SELECT * FROM integers ORDER BY i DESC;
----
NULL
3
2
1
query II
SELECT FIRST(i ORDER BY i), LAST(i ORDER BY i) FROM integers
----
NULL 3
query II
SELECT FIRST(i ORDER BY i DESC), LAST(i ORDER BY i DESC) FROM integers
----
NULL 1
query II
SELECT list_sort(LIST(i)), list_reverse_sort(LIST(i)) FROM integers
----
[NULL, 1, 2, 3] [NULL, 3, 2, 1]
# SQLite-style null order
statement ok
SET default_null_order='sqlite';
query I
SELECT * FROM integers ORDER BY i;
----
NULL
1
2
3
query I
SELECT * FROM integers ORDER BY i DESC;
----
3
2
1
NULL
query II
SELECT FIRST(i ORDER BY i), LAST(i ORDER BY i) FROM integers
----
NULL 3
query II
SELECT FIRST(i ORDER BY i DESC), LAST(i ORDER BY i DESC) FROM integers
----
3 NULL
query II
SELECT list_sort(LIST(i)), list_reverse_sort(LIST(i)) FROM integers
----
[NULL, 1, 2, 3] [3, 2, 1, NULL]
# Postgres-style NULL order
statement ok
SET default_null_order='postgres';
query I
SELECT * FROM integers ORDER BY i;
----
1
2
3
NULL
query I
SELECT * FROM integers ORDER BY i DESC;
----
NULL
3
2
1
query II
SELECT FIRST(i ORDER BY i), LAST(i ORDER BY i) FROM integers
----
1 NULL
query II
SELECT FIRST(i ORDER BY i DESC), LAST(i ORDER BY i DESC) FROM integers
----
NULL 1
query II
SELECT list_sort(LIST(i)), list_reverse_sort(LIST(i)) FROM integers
----
[1, 2, 3, NULL] [NULL, 3, 2, 1]

View File

@@ -0,0 +1,97 @@
# name: test/sql/settings/drop_set_schema.test
# group: [settings]
# 'db2' is an in-memory database, which no longer exists after restarting
# So we have to exclude this test from Force Restart runs
require skip_reload
statement ok
pragma enable_verification;
# Create a new schema
statement ok
create schema my_schema;
# Verify that 'main' is the default
query I
select current_schema();
----
main
# Set it as the default schema
statement ok
SET schema='my_schema';
# Verify that it changed
query I
select current_schema();
----
my_schema
# Then drop it
statement ok
drop schema my_schema;
# The 'current_schema' setting should be reset to the default ('main')
query I
select current_schema();
----
main
# Create two new schemas
statement ok
create schema schema1;
statement ok
create schema schema2;
# Set the current schema to 'schema1'
statement ok
set schema='schema1';
query I
select current_schema();
----
schema1
# Then drop 'schema2'
statement ok
drop schema schema2;
# The current schema should be unaffected
query I
select current_schema();
----
schema1
# Create a new in memory db
statement ok
ATTACH ':memory:' as db2;
# Create an identically named schema
statement ok
create schema db2.schema1;
# USE would change the current_schema, so we can't use that
#statement ok
#USE db2;
# Drop this schema
statement ok
drop schema db2.schema1;
# The current schema should again be unaltered
query I
select current_schema();
----
schema1
# Only when we drop the other 'schema1' should it be altered again
statement ok
drop schema schema1;
query I
select current_schema();
----
main

View File

@@ -0,0 +1,29 @@
# name: test/sql/settings/errors_as_json.test
# description: Test errors_as_json setting
# group: [settings]
statement ok
PRAGMA enable_verification
statement ok
SET errors_as_json=true
statement error
SELECT * FROM nonexistent_table
----
MISSING_ENTRY
statement error
SELECT cbl FROM (VALUES (42)) t(col)
----
COLUMN_NOT_FOUND
statement error
SECT cbl FROM (VALUES (42)) t(col)
----
<REGEX>:.*Parser Error.*syntax error at or near.*
statement error
select corr('hello', 'world')
----
NO_MATCHING_FUNCTION

View File

@@ -0,0 +1,42 @@
# name: test/sql/settings/integer_division_setting.test
# description: Test integer division setting
# group: [settings]
statement ok
PRAGMA enable_verification
query I
SELECT 1/2
----
0.5
query I
SELECT 1//2
----
0
statement ok
SET integer_division=true
query I
SELECT 1/2
----
0
query I
SELECT 1//2
----
0
statement ok
SET integer_division=false
query I
SELECT 1/2
----
0.5
query I
SELECT 1//2
----
0

View File

@@ -0,0 +1,30 @@
# name: test/sql/settings/lock_configuration_schema.test
# description: Test lock configuration and schema changes
# group: [settings]
statement ok
PRAGMA enable_verification
statement ok
create schema s1;
statement ok
create schema s2;
statement ok
use s1;
statement ok
use s2;
statement ok
SET lock_configuration=true;
statement ok
use s1;
statement ok
reset schema;
statement ok
reset search_path

View File

@@ -0,0 +1,19 @@
# name: test/sql/settings/reset/reset_threads.test
# description: Test RESET setting for 'threads'
# group: [reset]
# Check default value of threads
query I nosort default_value
select current_setting('threads')
----
# Set the 'threads' setting to something else
statement ok
pragma threads=42
statement ok
RESET threads;
# Verify that the result is the same as the default
query I nosort default_value
select current_setting('threads')

View File

@@ -0,0 +1,25 @@
# name: test/sql/settings/set_schema_temp_main.test
# group: [settings]
statement ok
pragma enable_verification;
statement error
CREATE SCHEMA temp.s1;
----
Cannot create non-temporary entry "s1" in temporary catalog
statement error
CREATE SCHEMA system.s1;
----
Cannot create schema in system catalog
statement error
set schema = 'temp';
----
SET schema cannot be set to internal schema "temp"
statement error
set schema = 'system';
----
SET schema cannot be set to internal schema "system"

View File

@@ -0,0 +1,26 @@
# name: test/sql/settings/setting_alias.test
# description: Test behavior of aliased settings
# group: [settings]
require skip_reload
query II
SELECT current_setting('null_order'), (SELECT value FROM duckdb_settings() WHERE name='null_order')
----
NULLS_LAST NULLS_LAST
statement ok
SET null_order='NULLS_FIRST'
query II
SELECT current_setting('null_order'), (SELECT value FROM duckdb_settings() WHERE name='null_order')
----
NULLS_FIRST NULLS_FIRST
statement ok
RESET null_order
query II
SELECT current_setting('null_order'), (SELECT value FROM duckdb_settings() WHERE name='null_order')
----
NULLS_LAST NULLS_LAST

View File

@@ -0,0 +1,50 @@
# name: test/sql/settings/setting_collation.test
# description: Test COLLATION setting
# group: [settings]
statement ok
PRAGMA default_collation='NOCASE'
statement ok
CREATE TABLE collate_test(s VARCHAR)
statement ok
INSERT INTO collate_test VALUES ('hEllO'), ('WöRlD'), ('wozld')
query I
SELECT COUNT(*) FROM collate_test WHERE 'BlA'='bLa'
----
3
query T
SELECT * FROM collate_test WHERE s='hello'
----
hEllO
query T
SELECT * FROM collate_test ORDER BY s
----
hEllO
wozld
WöRlD
statement ok
PRAGMA default_collation='NOCASE.NOACCENT'
query T
SELECT * FROM collate_test ORDER BY s
----
hEllO
WöRlD
wozld
statement error
PRAGMA default_collation='unknown'
----
<REGEX>:Catalog Error.*Collation.*does not exist.*
statement ok
SET GLOBAL default_collation='NOCASE'
statement ok
SET SESSION default_collation='NOCASE'

View File

@@ -0,0 +1,25 @@
# name: test/sql/settings/setting_disabled_optimizer.test
# description: Test disabled optimizers setting
# group: [settings]
statement ok
SET disabled_optimizers=''
statement ok
SET disabled_optimizers TO 'expression_rewriter'
statement ok
SET disabled_optimizers TO 'expression_rewriter,filter_pushdown,join_order'
statement ok
SELECT current_setting('disabled_optimizers');
statement error
SET disabled_optimizers TO 'expression_rewriteX'
----
<REGEX>:Parser Error.*Optimizer.*not recognized.*
statement error
SET disabled_optimizers TO 'unknown_optimizer'
----
<REGEX>:Parser Error.*Optimizer.*not recognized.*

View File

@@ -0,0 +1,78 @@
# name: test/sql/settings/setting_exhaustive.test
# description: Exhaustive setting tests
# group: [settings]
# debug_window_mode
statement error
SET debug_window_mode='unknown';
----
<REGEX>:.*unrecognized value.*
# default_order
foreach default_order ASC DESC
statement ok
SET default_order='${default_order}';
statement ok
SELECT * FROM duckdb_settings();
endloop
statement error
SET default_order='unknown';
----
<REGEX>:Invalid Input Error.*Expected ASC or DESC.*
# enable_external_access
statement error
SET enable_external_access=true
----
<REGEX>:Invalid Input Error.*Cannot change enable_external_access setting.*
# enable_profiling
statement ok
SET profile_output='__TEST_DIR__/profile_output'
foreach enable_profiling json query_tree query_tree_optimizer
statement ok
SET enable_profiling='${enable_profiling}';
statement ok
SELECT * FROM duckdb_settings();
endloop
statement error
SET enable_profiling='unknown';
----
<REGEX>:Parser Error.*Unrecognized print format.*
# enable_progress_bar
statement ok
PRAGMA disable_print_progress_bar
statement ok
SET enable_progress_bar=true;
statement error
SET GLOBAL enable_progress_bar=true;
----
<REGEX>:Catalog Error.*cannot be set globally.*
# explain_output
foreach explain_output all optimized_only physical_only
statement ok
SET explain_output='${explain_output}';
statement ok
SELECT * FROM duckdb_settings();
endloop
statement error
SET explain_output='unknown';
----
<REGEX>:.*unrecognized value.*

View File

@@ -0,0 +1,38 @@
# name: test/sql/settings/setting_null_order.test
# description: Test NULL order setting
# group: [settings]
foreach statement_type PRAGMA SET
foreach null_order_type null_order default_null_order
statement ok
${statement_type} ${null_order_type}='nulls_last'
query I
SELECT * FROM range(3) UNION ALL SELECT NULL ORDER BY 1
----
0
1
2
NULL
statement ok
${statement_type} ${null_order_type}='nulls_first'
query I
SELECT * FROM range(3) UNION ALL SELECT NULL ORDER BY 1
----
NULL
0
1
2
statement error
${statement_type} ${null_order_type}='unknown_null_order'
----
<REGEX>:Parser Error.*Unrecognized parameter for option.*
endloop
endloop

View File

@@ -0,0 +1,32 @@
# name: test/sql/settings/setting_order.test
# description: Test ORDER setting
# group: [settings]
foreach statement_type PRAGMA SET
statement ok
${statement_type} default_order='desc'
query I
SELECT * FROM range(3) ORDER BY 1
----
2
1
0
statement ok
${statement_type} default_order='asc'
query I
SELECT * FROM range(3) ORDER BY 1
----
0
1
2
statement error
${statement_type} default_order='unknown_order'
----
<REGEX>:Invalid Input Error.*Unrecognized parameter.*
endloop

View File

@@ -0,0 +1,41 @@
# name: test/sql/settings/setting_preserve_identifier_case.test
# description: Test preserve_identifier_case setting
# group: [settings]
query I
SELECT value FROM duckdb_settings() WHERE name='preserve_identifier_case'
----
true
statement ok
CREATE SCHEMA MYSCHEMA;
statement ok
CREATE TABLE MYSCHEMA.INTEGERS(I INTEGER);
query III
SELECT duckdb_tables.schema_name, duckdb_tables.table_name, column_name FROM duckdb_tables JOIN duckdb_columns USING (table_oid);
----
MYSCHEMA INTEGERS I
statement ok
DROP SCHEMA MYSCHEMA CASCADE
statement ok
SET preserve_identifier_case TO false;
query I
SELECT value FROM duckdb_settings() WHERE name='preserve_identifier_case'
----
false
statement ok
CREATE SCHEMA MYSCHEMA;
statement ok
CREATE TABLE MYSCHEMA.INTEGERS(I INTEGER);
query III
SELECT duckdb_tables.schema_name, duckdb_tables.table_name, column_name FROM duckdb_tables JOIN duckdb_columns USING (table_oid);
----
myschema integers i

View File

@@ -0,0 +1,14 @@
# name: test/sql/settings/setting_profiling_mode.test
# description: Test profiling mode setting
# group: [settings]
statement ok
SET profiling_mode='standard';
statement ok
SET profiling_mode='detailed';
statement error
SET profiling_mode='unknown';
----
<REGEX>:.*Parser Error.*Unrecognized profiling mode.*

View File

@@ -0,0 +1,20 @@
# name: test/sql/settings/setting_threads.test
# description: Test THREADS setting
# group: [settings]
foreach thread_type threads worker_threads
statement ok
SET ${thread_type} TO '3'
statement error
SET ${thread_type} TO '-1'
----
<REGEX>:Syntax Error.*Must have at least 1 thread.*
statement error
SET ${thread_type} TO 'blabla'
----
<REGEX>:Invalid Input Error.*Failed to cast value.*
endloop

View File

@@ -0,0 +1,36 @@
# name: test/sql/settings/settings_icu.test
# description: Test ICU settings friendliness
# group: [settings]
require icu
statement ok
SET Calendar='gregorian';
# Time Zones are CamelCase
statement ok
SET TimeZone='pacific/honolulu';
query IIIII
SELECT name, value, description, input_type, scope FROM duckdb_settings() WHERE name = 'TimeZone';
----
TimeZone Pacific/Honolulu The current time zone VARCHAR LOCAL
statement error
SET TimeZone='Pacific/Honolooloo';
----
Pacific/Honolulu
# Calendars are lowercase
statement ok
SET Calendar='Coptic';
query IIIII
SELECT name, value, description, input_type, scope FROM duckdb_settings() WHERE name = 'Calendar';
----
Calendar coptic The current calendar VARCHAR LOCAL
statement error
SET Calendar='muslim';
----
islamic

View File

@@ -0,0 +1,50 @@
# name: test/sql/settings/test_disabled_file_systems.test
# description: Test disabled file systems
# group: [settings]
require skip_reload
statement ok
PRAGMA enable_verification
query I
SELECT current_setting('disabled_filesystems')
----
(empty)
# nop
statement ok
RESET disabled_filesystems;
statement ok
RESET disabled_filesystems;
statement ok
SET disabled_filesystems='';
# we can read from the local file system
statement ok
SELECT * FROM read_csv_auto('data/csv/auto/skip_row.csv')
statement ok
SET disabled_filesystems='LocalFileSystem';
statement error
RESET disabled_filesystems;
----
File system "LocalFileSystem" has been disabled previously
statement error
SELECT * FROM read_csv_auto('data/csv/auto/skip_row.csv')
----
File system LocalFileSystem has been disabled by configuration
statement error
SET disabled_filesystems='LocalFileSystem,LocalFileSystem';
----
Duplicate disabled file system
statement error
SET disabled_filesystems='';
----
has been disabled previously

View File

@@ -0,0 +1,54 @@
# name: test/sql/settings/test_lock_configuration.test
# description: Test lock configuration
# group: [settings]
statement ok
PRAGMA enable_verification
query I
SELECT current_setting('lock_configuration')
----
false
statement ok
SET memory_limit='8GB';
# nop
statement ok
RESET lock_configuration;
# nop
statement ok
SET lock_configuration=false;
statement ok
SET memory_limit='8GB';
# lock the config
statement ok
SET lock_configuration=true;
statement error
SET memory_limit='10GB';
----
configuration has been locked
statement error
SET lock_configuration=false;
----
configuration has been locked
statement error
RESET memory_limit;
----
configuration has been locked
statement error
RESET lock_configuration;
----
configuration has been locked
query I
SELECT current_setting('lock_configuration')
----
true

View File

@@ -0,0 +1,28 @@
# name: test/sql/settings/user_agent.test
# description: Test user agent setting
# group: [settings]
statement error
SET custom_user_agent='something else'
----
Cannot change custom_user_agent setting while database is running
statement error
RESET custom_user_agent
----
Cannot change custom_user_agent setting while database is running
query T
SELECT current_setting('custom_user_agent')
----
(empty)
statement error
SET duckdb_api='something else'
----
Cannot change duckdb_api setting while database is running
query T
SELECT regexp_matches(user_agent, '^duckdb/.*(.*)') FROM pragma_user_agent()
----
true