diff --git a/core/src/main/java/org/opensearch/sql/analysis/AnalysisContext.java b/core/src/main/java/org/opensearch/sql/analysis/AnalysisContext.java index b27e435a6cf..2fc0ddbe1a3 100644 --- a/core/src/main/java/org/opensearch/sql/analysis/AnalysisContext.java +++ b/core/src/main/java/org/opensearch/sql/analysis/AnalysisContext.java @@ -71,4 +71,11 @@ public TypeEnvironment pop() { environment = curEnv.getParent(); return curEnv; } + + /** + * Push a new isolated environment without parent access. + */ + public void pushIsolated() { + environment = new TypeEnvironment(null); + } } diff --git a/core/src/main/java/org/opensearch/sql/analysis/Analyzer.java b/core/src/main/java/org/opensearch/sql/analysis/Analyzer.java index 2fdd8d6b843..e8a0d45f5c4 100644 --- a/core/src/main/java/org/opensearch/sql/analysis/Analyzer.java +++ b/core/src/main/java/org/opensearch/sql/analysis/Analyzer.java @@ -419,7 +419,7 @@ public LogicalPlan visitProject(Project node, AnalysisContext context) { child = processNestedAnalysis(node.getProjectList(), namedExpressions, child, context); - context.push(); + context.pushIsolated(); TypeEnvironment newEnv = context.peek(); namedExpressions.forEach( expr -> diff --git a/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTest.java b/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTest.java index 6324e7ee5bd..0fc9e026213 100644 --- a/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTest.java +++ b/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTest.java @@ -898,9 +898,6 @@ public void remove_source() { AstDSL.field("double_value"))); } - @Disabled( - "the project/remove command should shrink the type env. Should be enabled once " - + "https://github.com/opensearch-project/sql/issues/917 is resolved") @Test public void project_source_change_type_env() { SemanticCheckException exception =