Skip to content

Commit 27bdc6d

Browse files
committed
anonymizer with test
Signed-off-by: Jialiang Liang <jiallian@amazon.com>
1 parent 80ef1f1 commit 27bdc6d

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

ppl/src/main/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizer.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.opensearch.sql.ast.tree.Patterns;
7373
import org.opensearch.sql.ast.tree.Project;
7474
import org.opensearch.sql.ast.tree.RangeBin;
75+
import org.opensearch.sql.ast.tree.Regex;
7576
import org.opensearch.sql.ast.tree.RareTopN;
7677
import org.opensearch.sql.ast.tree.Relation;
7778
import org.opensearch.sql.ast.tree.Rename;
@@ -442,6 +443,20 @@ public String visitParse(Parse node, String context) {
442443
: StringUtils.format("%s | %s %s '%s'", child, commandName, source, regex);
443444
}
444445

446+
@Override
447+
public String visitRegex(Regex node, String context) {
448+
String child = node.getChild().get(0).accept(this, context);
449+
String operator = node.isNegated() ? "!=" : "=";
450+
String pattern = MASK_LITERAL;
451+
452+
if (node.getField() != null) {
453+
String field = visitExpression(node.getField());
454+
return StringUtils.format("%s | regex %s%s%s", child, field, operator, pattern);
455+
} else {
456+
return StringUtils.format("%s | regex %s", child, pattern);
457+
}
458+
}
459+
445460
@Override
446461
public String visitFlatten(Flatten node, String context) {
447462
String child = node.getChild().getFirst().accept(this, context);
@@ -734,5 +749,11 @@ public String visitCast(Cast node, String context) {
734749
String expr = analyze(node.getExpression(), context);
735750
return StringUtils.format("cast(%s as %s)", expr, node.getConvertedType().toString());
736751
}
752+
753+
@Override
754+
public String visitQualifiedName(
755+
org.opensearch.sql.ast.expression.QualifiedName node, String context) {
756+
return String.join(".", node.getParts());
757+
}
737758
}
738759
}

ppl/src/test/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizerTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,17 @@ public void testPatterns() {
511511
+ " variable_count_threshold=5"));
512512
}
513513

514+
@Test
515+
public void testRegex() {
516+
assertEquals("source=t | regex field=***", anonymize("source=t | regex field='pattern'"));
517+
assertEquals(
518+
"source=t | regex field!=***", anonymize("source=t | regex field!='pattern'"));
519+
assertEquals("source=t | regex ***", anonymize("source=t | regex 'pattern'"));
520+
assertEquals(
521+
"source=t | regex email=*** | fields + email",
522+
anonymize("source=t | regex email='.*@domain.com' | fields email"));
523+
}
524+
514525
private String anonymize(String query) {
515526
AstBuilder astBuilder = new AstBuilder(query, settings);
516527
return anonymize(astBuilder.visit(parser.parse(query)));

0 commit comments

Comments
 (0)