Skip to content

Commit

Permalink
(opensearch-project#1506) Remove reservedSymbolTable and replace with…
Browse files Browse the repository at this point in the history
… HIDDEN_FIELD_NAME (opensearch-project#1936)

* (opensearch-project#1506) Remove reservedSymbolTable and replace with HIDDEN_FIELD_NAME (#323)

* opensearch-project#1506: Remove reservedSymbolTable and use HIDDEN_FIELD_NAME instead

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>

* opensearch-project#1506: Remove reservedSymbolTable and use HIDDEN_FIELD_NAME instead

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>

* opensearch-project#1506: Fix checkstyle errors

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>

---------

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>

* opensearch-project#1506: spotless apply

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>

---------

Signed-off-by: acarbonetto <andrewc@bitquilltech.com>
  • Loading branch information
acarbonetto authored Aug 15, 2023
1 parent c99549a commit 5381a6f
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 14 deletions.
4 changes: 2 additions & 2 deletions core/src/main/java/org/opensearch/sql/analysis/Analyzer.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public LogicalPlan visitRelation(Relation node, AnalysisContext context) {
table.getFieldTypes().forEach((k, v) -> curEnv.define(new Symbol(Namespace.FIELD_NAME, k), v));
table
.getReservedFieldTypes()
.forEach((k, v) -> curEnv.addReservedWord(new Symbol(Namespace.FIELD_NAME, k), v));
.forEach((k, v) -> curEnv.define(new Symbol(Namespace.HIDDEN_FIELD_NAME, k), v));

// Put index name or its alias in index namespace on type environment so qualifier
// can be removed when analyzing qualified name. The value (expr type) here doesn't matter.
Expand Down Expand Up @@ -215,7 +215,7 @@ public LogicalPlan visitTableFunction(TableFunction node, AnalysisContext contex
table.getFieldTypes().forEach((k, v) -> curEnv.define(new Symbol(Namespace.FIELD_NAME, k), v));
table
.getReservedFieldTypes()
.forEach((k, v) -> curEnv.addReservedWord(new Symbol(Namespace.FIELD_NAME, k), v));
.forEach((k, v) -> curEnv.define(new Symbol(Namespace.HIDDEN_FIELD_NAME, k), v));
curEnv.define(
new Symbol(
Namespace.INDEX_NAME, dataSourceSchemaIdentifierNameResolver.getIdentifierName()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ public Expression visitQualifiedName(QualifiedName node, AnalysisContext context
typeEnv != null;
typeEnv = typeEnv.getParent()) {
Optional<ExprType> exprType =
typeEnv.getReservedSymbolTable().lookup(new Symbol(Namespace.FIELD_NAME, part));
Optional.ofNullable(typeEnv.lookupAllFields(Namespace.HIDDEN_FIELD_NAME).get(part));
if (exprType.isPresent()) {
return visitMetadata(
qualifierAnalyzer.unqualified(node), (ExprCoreType) exprType.get(), context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ public class TypeEnvironment implements Environment<Symbol, ExprType> {
@Getter private final TypeEnvironment parent;
private final SymbolTable symbolTable;

@Getter private final SymbolTable reservedSymbolTable;

/**
* Constructor with empty symbol tables.
*
Expand All @@ -35,7 +33,6 @@ public class TypeEnvironment implements Environment<Symbol, ExprType> {
public TypeEnvironment(TypeEnvironment parent) {
this.parent = parent;
this.symbolTable = new SymbolTable();
this.reservedSymbolTable = new SymbolTable();
}

/**
Expand All @@ -47,7 +44,6 @@ public TypeEnvironment(TypeEnvironment parent) {
public TypeEnvironment(TypeEnvironment parent, SymbolTable symbolTable) {
this.parent = parent;
this.symbolTable = symbolTable;
this.reservedSymbolTable = new SymbolTable();
}

/**
Expand Down Expand Up @@ -123,8 +119,4 @@ public void remove(ReferenceExpression ref) {
public void clearAllFields() {
lookupAllFields(FIELD_NAME).keySet().forEach(v -> remove(new Symbol(Namespace.FIELD_NAME, v)));
}

public void addReservedWord(Symbol symbol, ExprType type) {
reservedSymbolTable.store(symbol, type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public enum Namespace {
INDEX_NAME("Index"),
FIELD_NAME("Field"),
HIDDEN_FIELD_NAME("HiddenField"),
FUNCTION_NAME("Function");

private final String name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,13 +216,13 @@ public void qualified_name_with_qualifier() {
public void qualified_name_with_reserved_symbol() {
analysisContext.push();

analysisContext.peek().addReservedWord(new Symbol(Namespace.FIELD_NAME, "_reserved"), STRING);
analysisContext.peek().addReservedWord(new Symbol(Namespace.FIELD_NAME, "_priority"), FLOAT);
analysisContext.peek().define(new Symbol(Namespace.HIDDEN_FIELD_NAME, "_reserved"), STRING);
analysisContext.peek().define(new Symbol(Namespace.HIDDEN_FIELD_NAME, "_priority"), FLOAT);
analysisContext.peek().define(new Symbol(Namespace.INDEX_NAME, "index_alias"), STRUCT);
assertAnalyzeEqual(DSL.ref("_priority", FLOAT), qualifiedName("_priority"));
assertAnalyzeEqual(DSL.ref("_reserved", STRING), qualifiedName("index_alias", "_reserved"));

// reserved fields take priority over symbol table
// cannot replace an existing field type
analysisContext.peek().define(new Symbol(Namespace.FIELD_NAME, "_reserved"), LONG);
assertAnalyzeEqual(DSL.ref("_reserved", STRING), qualifiedName("index_alias", "_reserved"));

Expand Down

0 comments on commit 5381a6f

Please sign in to comment.