1717import java .util .Objects ;
1818import java .util .Set ;
1919import java .util .function .Function ;
20+ import java .util .regex .Pattern ;
2021
2122import org .eclipse .rdf4j .model .IRI ;
2223import org .eclipse .rdf4j .model .Literal ;
3031import org .eclipse .rdf4j .sail .shacl .ast .planNodes .PatternFilter ;
3132import org .eclipse .rdf4j .sail .shacl .ast .planNodes .PlanNode ;
3233import org .eclipse .rdf4j .sail .shacl .wrapper .data .ConnectionsGroup ;
34+ import org .slf4j .Logger ;
35+ import org .slf4j .LoggerFactory ;
3336
3437public class PatternConstraintComponent extends AbstractSimpleConstraintComponent {
3538
39+ private static final Logger logger = LoggerFactory .getLogger (PatternConstraintComponent .class );
40+
3641 String pattern ;
3742 String flags ;
43+ private final Pattern compiledPattern ;
3844
3945 public PatternConstraintComponent (String pattern , String flags ) {
4046 super ();
@@ -44,6 +50,52 @@ public PatternConstraintComponent(String pattern, String flags) {
4450 if (flags == null ) {
4551 this .flags = "" ;
4652 }
53+
54+ if (flags != null && !flags .isEmpty ()) {
55+ int flag = 0b0;
56+
57+ if (flags .contains ("i" )) {
58+ flag = flag | Pattern .CASE_INSENSITIVE ;
59+ logger .trace ("PatternFilter constructed with case insensitive flag" );
60+ }
61+
62+ if (flags .contains ("d" )) {
63+ flag = flag | Pattern .UNIX_LINES ;
64+ logger .trace ("PatternFilter constructed with UNIX lines flag" );
65+ }
66+
67+ if (flags .contains ("m" )) {
68+ flag = flag | Pattern .MULTILINE ;
69+ logger .trace ("PatternFilter constructed with multiline flag" );
70+ }
71+
72+ if (flags .contains ("s" )) {
73+ flag = flag | Pattern .DOTALL ;
74+ logger .trace ("PatternFilter constructed with dotall flag" );
75+ }
76+
77+ if (flags .contains ("u" )) {
78+ flag = flag | Pattern .UNICODE_CASE ;
79+ logger .trace ("PatternFilter constructed with unicode case flag" );
80+ }
81+
82+ if (flags .contains ("x" )) {
83+ flag = flag | Pattern .COMMENTS ;
84+ logger .trace ("PatternFilter constructed with comments flag" );
85+ }
86+
87+ if (flags .contains ("U" )) {
88+ flag = flag | Pattern .UNICODE_CHARACTER_CLASS ;
89+ logger .trace ("PatternFilter constructed with unicode character class flag" );
90+ }
91+
92+ this .compiledPattern = Pattern .compile (pattern , flag );
93+ logger .trace ("PatternFilter constructed with pattern: {} and flags: {}" , pattern , flags );
94+
95+ } else {
96+ this .compiledPattern = Pattern .compile (pattern , 0b0);
97+ logger .trace ("PatternFilter constructed with pattern: {} and no flags" , pattern );
98+ }
4799 }
48100
49101 @ Override
@@ -87,7 +139,7 @@ public ConstraintComponent deepClone() {
87139
88140 @ Override
89141 Function <PlanNode , FilterPlanNode > getFilterAttacher (ConnectionsGroup connectionsGroup ) {
90- return (parent ) -> new PatternFilter (parent , pattern , flags , connectionsGroup );
142+ return (parent ) -> new PatternFilter (parent , compiledPattern , connectionsGroup );
91143 }
92144
93145 @ Override
0 commit comments