public override string GetSqlFilter() { if (Selection.AllSelected) { return(null); } StringBuilder sb = new StringBuilder("("); bool first = true; //QueryListNode or = new QueryListNode (Keyword.Or); foreach (object o in GetSelectedObjects()) { if (o != select_all_item) { string sql = null; QueryValue qv = QueryValue.CreateFromStringValue(o.ToString(), field); //QueryListNode and = new QueryListNode (Keyword.And, or); if (qv != null) { if (qv is IntegerQueryValue) { /*QueryTermNode term = new QueryTermNode (); * term.Field = field; * field.ToSql (IntegerQueryValue.GreaterThanEqual, qv); * field.ToSql (IntegerQueryValue.GreaterThanEqual, qv);*/ } else if (qv is StringQueryValue) { // TODO this might need fixing //sql = field.ToSql (StringQueryValue.Equal, qv, true); sql = field.ToSql(StringQueryValue.Equal, qv); } } else { // TODO this might need fixing //sql = field.ToSql (NullQueryValue.IsNullOrEmpty, NullQueryValue.Instance, true); sql = field.ToSql(NullQueryValue.IsNullOrEmpty, NullQueryValue.Instance); } if (sql != null) { if (first) { first = false; } else { sb.Append(" OR "); } sb.Append(sql); } } } sb.Append(")"); return(first ? null : sb.ToString()); }
[Test] // http://bugzilla.gnome.org/show_bug.cgi?id=612152 public void EscapeUri() { QueryValue val = new ExactUriStringQueryValue(); val.ParseUserQuery("space 3quotes`'\"underscore_percentage%slash/backslash\\"); Assert.AreEqual( @"(CoreTracks.Uri IS NOT NULL AND CoreTracks.Uri LIKE '%space\%203quotes\%60''\%22underscore\_percentage\%25slash/backslash\%5C%' ESCAPE '\')", UriField.ToSql(StringQueryValue.Contains, val) ); }
[Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312 public void EscapeSqliteWildcards1() { QueryValue val = new StringQueryValue(); val.ParseUserQuery("100% Techno"); Assert.AreEqual( "(CoreAlbums.TitleLowered IS NOT NULL AND CoreAlbums.TitleLowered LIKE '%100 techno%' ESCAPE '\\')", AlbumField.ToSql(StringQueryValue.Contains, val) ); }
public void CustomFormatParenthesisBugFixed() { QueryValue val = new StringQueryValue(); val.ParseUserQuery("mp3"); Assert.AreEqual( "(CoreTracks.MimeType LIKE '%mp3%' ESCAPE '\\' OR CoreTracks.Uri LIKE '%mp3%' ESCAPE '\\')", MimeTypeField.ToSql(StringQueryValue.Contains, val) ); }
public void EscapeSingleQuotes() { QueryValue val = new StringQueryValue(); val.ParseUserQuery("Kelli O'Hara"); Assert.AreEqual( "(CoreArtists.NameLowered IS NOT NULL AND CoreArtists.NameLowered LIKE '%kelli ohara%' ESCAPE '\\')", ArtistField.ToSql(StringQueryValue.Contains, val) ); }