Skip to content

Commit f8ab00a

Browse files
committed
Add ::TEXT cast for LIKE queries
E.g. LIKE doesn't work on TEXT.
1 parent be5973a commit f8ab00a

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

sope-gdl1/PostgreSQL/PostgreSQL72Expression.m

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ - (id)selectExpressionForAttributes:(NSArray *)attributes
4141
lock:(BOOL)flag
4242
qualifier:(EOSQLQualifier *)qualifier
4343
fetchOrder:(NSArray *)fetchOrder
44-
channel:(EOAdaptorChannel *)channel {
44+
channel:(EOAdaptorChannel *)channel
45+
{
4546

4647
lock = flag;
4748
[super selectExpressionForAttributes:attributes
@@ -52,6 +53,27 @@ - (id)selectExpressionForAttributes:(NSArray *)attributes
5253
return self;
5354
}
5455

56+
- (NSString *)sqlStringForKeyValueQualifier:(EOKeyValueQualifier *)_q {
57+
SEL sel = [_q selector];
58+
if (sel_isEqual(sel, EOQualifierOperatorLike) ||
59+
sel_isEqual(sel, EOQualifierOperatorCaseInsensitiveLike))
60+
{
61+
NSMutableString *s = [NSMutableString stringWithCapacity:100];
62+
[s appendString:[[self class]
63+
formatSQLString:[self sqlStringForAttributeNamed:[_q key]]
64+
format:nil]];
65+
// Cast, LIKE only works on TEXT in modern PostgreSQL.
66+
[s appendString:
67+
sel_isEqual(sel, EOQualifierOperatorCaseInsensitiveLike)
68+
? @"::TEXT ILIKE ": @"::TEXT LIKE "];
69+
id v = [[self class] sqlPatternFromShellPattern:[_q value]];
70+
[s appendString:[self sqlStringForValue:v attributeNamed:[_q key]]];
71+
return s;
72+
}
73+
74+
return [super sqlStringForKeyValueQualifier: _q];
75+
}
76+
5577
- (NSString *)fromClause {
5678
NSMutableString *fromClause;
5779
NSEnumerator *enumerator;

0 commit comments

Comments
 (0)