3636import java .util .Map ;
3737import java .util .Set ;
3838
39+ import org .springframework .data .repository .query .parser .Part .IgnoreCaseType ;
40+
3941import com .aerospike .client .Value ;
4042import com .aerospike .client .command .ParticleType ;
4143import com .aerospike .client .query .Filter ;
6163public class Qualifier implements Map <String , Object >, Serializable {
6264 private static final long serialVersionUID = -2689196529952712849L ;
6365 private static final String FIELD = "field" ;
66+ private static final String IGNORE_CASE = "ignoreCase" ;
6467 private static final String VALUE2 = "value2" ;
6568 private static final String VALUE1 = "value1" ;
6669 private static final String OPERATION = "operation" ;
6770 protected Map <String , Object > internalMap ;
6871
6972 public enum FilterOperation {
70- EQ , GT , GTEQ , LT , LTEQ , NOTEQ , BETWEEN , START_WITH , ENDS_WITH ,CONTAINING ,
73+ EQ , GT , GTEQ , LT , LTEQ , NOTEQ , BETWEEN , START_WITH , ENDS_WITH , CONTAINING ,
7174 LIST_CONTAINS , MAP_KEYS_CONTAINS , MAP_VALUES_CONTAINS ,
7275 LIST_BETWEEN , MAP_KEYS_BETWEEN , MAP_VALUES_BETWEEN , GEO_WITHIN
7376 }
@@ -78,14 +81,19 @@ public Qualifier() {
7881 }
7982
8083 public Qualifier (String field , FilterOperation operation , Value value1 ) {
84+ this (field , operation , IgnoreCaseType .NEVER , value1 );
85+ }
86+
87+ public Qualifier (String field , FilterOperation operation , IgnoreCaseType ignoreCase , Value value1 ) {
8188 this ();
8289 internalMap .put (FIELD , field );
8390 internalMap .put (OPERATION , operation );
8491 internalMap .put (VALUE1 , value1 );
92+ internalMap .put (IGNORE_CASE , ignoreCase );
8593 }
8694
8795 public Qualifier (String field , FilterOperation operation , Value value1 , Value value2 ) {
88- this (field , operation , value1 );
96+ this (field , operation , IgnoreCaseType . NEVER , value1 );
8997 internalMap .put (VALUE2 , value2 );
9098 }
9199
@@ -194,15 +202,21 @@ public String luaFilterString() {
194202 value2 = luaValueString (getValue2 ());
195203 return String .format ("rangeValue(%s, %s, %s)" , luaFieldString (getField ()), value1 , value2 );
196204 case START_WITH :
197- return String .format ("string.sub(%s,1,string.len(%s))==%s" , luaFieldString (getField ()), value1 , value1 );
205+ if (IgnoreCaseType .ALWAYS == internalMap .get (IGNORE_CASE ))
206+ return String .format ("string.upper(string.sub(%s,1,string.len(%s)))==%s" , luaFieldString (getField ()), value1 , value1 .toUpperCase ());
207+ else
208+ return String .format ("string.sub(%s,1,string.len(%s))==%s" , luaFieldString (getField ()), value1 , value1 );
198209 case ENDS_WITH :
199210 return String .format ("%s=='' or string.sub(%s,-string.len(%s))==%s" ,
200211 value1 ,
201212 luaFieldString (getField ()),
202213 value1 ,
203214 value1 );
204215 case CONTAINING :
205- return String .format ("string.find(%s, %s)" , luaFieldString (getField ()), value1 );
216+ if (IgnoreCaseType .ALWAYS == internalMap .get (IGNORE_CASE ))
217+ return String .format ("string.find(string.upper(%s), %s)" , luaFieldString (getField ()), value1 .toUpperCase ());
218+ else
219+ return String .format ("string.find(%s, %s)" , luaFieldString (getField ()), value1 );
206220 case GEO_WITHIN :
207221 return String .format ("%s %d %s %s)" , getField (), ParticleType .GEOJSON , value1 , value1 );
208222 }
0 commit comments