Talat Uyarer created FLINK-40637:
------------------------------------
Summary: Catalog view expansion falls back to the session database
for unresolved references
Key: FLINK-40637
URL: https://issues.apache.org/jira/browse/FLINK-40637
Project: Flink
Issue Type: Bug
Components: Table SQL / Planner
Reporter: Talat Uyarer
When the planner expands a catalog view, references in the view's expanded
query that cannot be resolved against the view's own catalog/database are
silently resolved
against the reader's current session database instead of failing. The same view
can
therefore return data in one session and fail (or read a different table) in
another.
[FLIP-71|https://cwiki.apache.org/confluence/spaces/FLINK/pages/130027509/FLIP-71+E2E+View+support+in+FLINK+SQL]
stores the expanded form "to remember query context such as current database",
so for views written by Flink's own catalogs every reference is already fully
qualified and the fallback is unobservable. External catalogs backing
cross-engine
view formats such as Apache Iceberg views store the original, portable SQL and
return it from CatalogView#getExpandedQuery(), which makes the fallback
reachable.
How you can reproduce (I tested in Flink 2.3, any external catalog whose
getExpandedQuery can contain an unqualified reference; observed with the
Iceberg connector):
1. USE CATALOG c; USE db2;
2. CREATE TABLE t (id BIGINT); INSERT INTO t VALUES (7);
3. Create view c.db.v whose stored/expanded SQL is: SELECT id FROM t
4. SELECT * FROM c.db.v – from a session in db2: returns 7
5. USE db;
SELECT * FROM c.db.v – fails: "Object 't' not found"
Step 4 succeeds only because resolution fell back to the session database after
missing in the view's database. the view's meaning depends on who reads it.
Expected behaviour is view expansion should be hermetic — resolve references
against the view's
own catalog/database (per FLIP-71's stored-context model) and fail with a clear
error
if a reference cannot be resolved there, rather than consulting the reader's
session.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)