In my application, I have used core data as offline persistence database. Everything is working as expected until my client expects a bit modification in searching records.
What I have to do is if one tries to search with e my query should get all record which has character as é è ê ë ... or whatever another form of 'e' in the non-English language.
This can be achieved in SQL query by COLLATE with the column name. But not able to create NSPredicate with COLLATE, Can anyone help me on this?
My code is something like
let recordFetch = NSFetchRequest<NSFetchRequestResult>(entityName: table)
recordFetch.predicate = NSPredicate(format: "MyItem CONTAINS[cd] 'tem' OR MyItemIndex.MyItemStyleIndex.MyItemStyle.MyItemStyle CONTAINS[cd] 'tem' OR MyItemIndex.breweryIndex.brewery CONTAINS[cd] 'tem'")
let fetchedEmployees = try context.fetch(recordFetch)
return fetchedEmployees as! Array<NSFetchRequestResult>
My Debug log of SQL Query is:
SELECT DISTINCT 0, t0.Z_PK, t0.Z_OPT, t0.ZMYITEM, t0.ZMYITEMAPPEARANCEDESCRIPTION, t0.ZMYITEMAROMADESCRIPTION, t0.ZMYITEMBREWINGMETHOD, t0.ZMYITEMHISTORY, t0.ZMYITEMHOPS, t0.ZMYITEMID, t0.ZMYITEMLANGUAGEID, t0.ZMYITEMMALT, t0.ZMYITEMMOUTHFEELDESCRIPTION, t0.ZMYITEMSLOGAN, t0.ZMYITEMSUMMARY, t0.ZMYITEMTASTEDESCRIPTION, t0.ZINGREDIENTSDESCRIPTION, t0.ZISUPLOADED, t0.ZLANGUAGEID, t0.ZMYITEMINDEX, t0.ZLANGUAGE FROM ZMYITEM t0 LEFT OUTER JOIN ZMYITEMINDEX t1 ON t0.ZMYITEMINDEX = t1.Z_PK LEFT OUTER JOIN ZMYITEMSTYLEINDEX t2 ON t1.ZMYITEMSTYLEINDEX = t2.Z_PK LEFT OUTER JOIN ZMYITEMSTYLE t3 ON t2.Z_PK = t3.ZMYITEMSTYLEINDEX LEFT OUTER JOIN ZBREWERYINDEX t4 ON t1.ZBREWERYINDEX = t4.Z_PK JOIN ZLANGUAGE t5 ON t0.ZLANGUAGE = t5.Z_PK WHERE (( NSCoreDataStringSearch( t0.ZMYITEM, ?, 385, 0) OR NSCoreDataStringSearch( t3.ZMYITEMSTYLE, ?, 385, 0) OR NSCoreDataStringSearch( t4.ZBREWERY, ?, 385, 0)) AND t5.ZLANGUAGECODE = ?) ORDER BY t1.ZCURRENTAVERAGESCORE DESC LIMIT 50
Yes, its working now with contains[cd]... may be some caching issue.
Thanks