public static QueryValue CreateFromUserQuery (string input, QueryField field) { if (field == null) { QueryValue val = new StringQueryValue (); val.ParseUserQuery (input); return val; } else { foreach (QueryValue val in field.CreateQueryValues ()) { val.ParseUserQuery (input); if (!val.IsEmpty) { return val; } } } return null; }
public void QueryValueSql () { QueryValue qv; qv = new DateQueryValue (); qv.ParseUserQuery ("2007-03-9"); Assert.AreEqual (new DateTime (2007, 3, 9), qv.Value); Assert.AreEqual ("2007-03-09", qv.ToUserQuery ()); Assert.AreEqual ("1173420000", qv.ToSql ()); qv = new StringQueryValue (); qv.ParseUserQuery ("foo 'bar'"); Assert.AreEqual ("foo 'bar'", qv.Value); Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ()); Assert.AreEqual ("foo bar", qv.ToSql ()); qv = new StringQueryValue (); qv.ParseUserQuery ("Foo Baño"); Assert.AreEqual ("Foo Baño", qv.Value); Assert.AreEqual ("Foo Baño", qv.ToUserQuery ()); Assert.AreEqual ("foo bano", qv.ToSql ()); qv = new ExactStringQueryValue (); qv.ParseUserQuery ("foo 'bar'"); Assert.AreEqual ("foo 'bar'", qv.Value); Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ()); Assert.AreEqual ("foo ''bar''", qv.ToSql ()); qv = new IntegerQueryValue (); qv.ParseUserQuery ("22"); Assert.AreEqual (22, qv.Value); Assert.AreEqual ("22", qv.ToUserQuery ()); Assert.AreEqual ("22", qv.ToSql ()); qv = new FileSizeQueryValue (); qv.ParseUserQuery ("2048 KB"); Assert.AreEqual (2097152, qv.Value); Assert.AreEqual ("2.048 KB", qv.ToUserQuery ()); Assert.AreEqual ("2097152", qv.ToSql ()); // TODO this will break once an it_IT translation for "days ago" etc is committed qv = new RelativeTimeSpanQueryValue (); qv.ParseUserQuery ("2 days ago"); Assert.AreEqual (-172800, qv.Value); Assert.AreEqual ("2 days ago", qv.ToUserQuery ()); // TODO this will break once an it_IT translation for "minutes" etc is committed qv = new TimeSpanQueryValue (); qv.ParseUserQuery ("4 minutes"); Assert.AreEqual (240, qv.Value); Assert.AreEqual ("4 minutes", qv.ToUserQuery ()); Assert.AreEqual ("240000", qv.ToSql ()); }
[Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312 public void EscapeSqliteWildcards3 () { QueryValue val = new StringQueryValue (); val.ParseUserQuery ("Metallic/\\"); Assert.AreEqual ( "(CoreAlbums.TitleLowered LIKE '%metallic%' ESCAPE '\\' AND CoreAlbums.TitleLowered IS NOT NULL)", AlbumField.ToSql (StringQueryValue.Contains, val) ); }
public void EscapeSingleQuotes () { QueryValue val = new StringQueryValue (); val.ParseUserQuery ("Kelli O'Hara"); Assert.AreEqual ( "(CoreArtists.NameLowered LIKE '%kelli ohara%' ESCAPE '\\' AND CoreArtists.NameLowered IS NOT NULL)", ArtistField.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) ); }
[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) ); }