@@ -13,3 +13,99 @@ def test_table_fail(self, duckdb_cursor):
1313 conn .close ()
1414 with pytest .raises (duckdb .ConnectionException , match = "Connection already closed" ):
1515 table_names = conn .get_table_names ("SELECT * FROM my_table1, my_table2, my_table3" )
16+
17+ def test_qualified_parameter_basic (self ):
18+ conn = duckdb .connect ()
19+
20+ # Default (qualified=False)
21+ table_names = conn .get_table_names ("SELECT * FROM test_table" )
22+ assert table_names == {'test_table' }
23+
24+ # Explicit qualified=False
25+ table_names = conn .get_table_names ("SELECT * FROM test_table" , qualified = False )
26+ assert table_names == {'test_table' }
27+
28+ def test_qualified_parameter_schemas (self ):
29+ conn = duckdb .connect ()
30+
31+ # Default (qualified=False)
32+ query = "SELECT * FROM test_schema.schema_table, main_table"
33+ table_names = conn .get_table_names (query )
34+ assert table_names == {'schema_table' , 'main_table' }
35+
36+ # Test with qualified names
37+ table_names = conn .get_table_names (query , qualified = True )
38+ assert table_names == {'test_schema.schema_table' , 'main_table' }
39+
40+ def test_qualified_parameter_catalogs (self ):
41+ conn = duckdb .connect ()
42+
43+ # Test with qualified names including catalogs
44+ query = "SELECT * FROM catalog1.test_schema.catalog_table, regular_table"
45+
46+ # Default (qualified=False)
47+ table_names = conn .get_table_names (query )
48+ assert table_names == {'catalog_table' , 'regular_table' }
49+
50+ # With qualified=True
51+ table_names = conn .get_table_names (query , qualified = True )
52+ assert table_names == {'catalog1.test_schema.catalog_table' , 'regular_table' }
53+
54+ def test_qualified_parameter_quoted_identifiers (self ):
55+ conn = duckdb .connect ()
56+
57+ # Test with quoted identifiers
58+ query = 'SELECT * FROM "Schema.With.Dots"."Table.With.Dots", "Table With Spaces"'
59+
60+ # Default (qualified=False)
61+ table_names = conn .get_table_names (query )
62+ assert table_names == {'Table.With.Dots' , 'Table With Spaces' }
63+
64+ # With qualified=True
65+ table_names = conn .get_table_names (query , qualified = True )
66+ assert table_names == {'"Schema.With.Dots"."Table.With.Dots"' , '"Table With Spaces"' }
67+
68+ def test_expanded_views (self ):
69+ conn = duckdb .connect ()
70+ conn .execute ('CREATE TABLE my_table(i INT)' )
71+ conn .execute ('CREATE VIEW v1 AS SELECT * FROM my_table' )
72+
73+ # Test that v1 expands to my_table
74+ query = 'SELECT col_a FROM v1'
75+
76+ # Default (qualified=False)
77+ table_names = conn .get_table_names (query )
78+ assert table_names == {'my_table' }
79+
80+ # With qualified=True
81+ table_names = conn .get_table_names (query , qualified = True )
82+ assert table_names == {'my_table' }
83+
84+ def test_expanded_views_with_schema (self ):
85+ conn = duckdb .connect ()
86+ conn .execute ('CREATE SCHEMA my_schema' )
87+ conn .execute ('CREATE TABLE my_schema.my_table(i INT)' )
88+ conn .execute ('CREATE VIEW v1 AS SELECT * FROM my_schema.my_table' )
89+
90+ # Test that v1 expands to my_table
91+ query = 'SELECT col_a FROM v1'
92+
93+ # Default (qualified=False)
94+ table_names = conn .get_table_names (query )
95+ assert table_names == {'my_table' }
96+
97+ # With qualified=True
98+ table_names = conn .get_table_names (query , qualified = True )
99+ assert table_names == {'my_schema.my_table' }
100+
101+ def test_select_function (self ):
102+ conn = duckdb .connect ()
103+ query = 'SELECT EXTRACT(second FROM i) FROM timestamps;'
104+
105+ # Default (qualified=False)
106+ table_names = conn .get_table_names (query )
107+ assert table_names == {'timestamps' }
108+
109+ # With qualified=True
110+ table_names = conn .get_table_names (query , qualified = True )
111+ assert table_names == {'timestamps' }
0 commit comments