diff --git a/RepoDb.Core/RepoDb.Tests/RepoDb.UnitTests/Extensions/QueryFields/LiteralQuerFieldTest.cs b/RepoDb.Core/RepoDb.Tests/RepoDb.UnitTests/Extensions/QueryFields/LiteralQuerFieldTest.cs new file mode 100644 index 00000000..efd5c345 --- /dev/null +++ b/RepoDb.Core/RepoDb.Tests/RepoDb.UnitTests/Extensions/QueryFields/LiteralQuerFieldTest.cs @@ -0,0 +1,31 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using RepoDb.Extensions.QueryFields; + +namespace RepoDb.UnitTests.Extensions.QueryFields +{ + [TestClass] + public class LiteralQuerFieldTest + { + [TestMethod] + public void TestLiteralQueryFieldConstructor() + { + // Prepare + var literalQueryField = new LiteralQueryField("[Id] BETWEEN 10 AND 100"); + + // Assert + Assert.AreEqual("fake", literalQueryField.Field.Name); + Assert.AreEqual("[Id] BETWEEN 10 AND 100", literalQueryField.Literal); + } + + [TestMethod] + public void TestLiteralQueryFieldGetString() + { + // Prepare + var literalQueryField = new LiteralQueryField("[Id] BETWEEN 10 AND 100"); + + // Assert + Assert.AreEqual("[Id] BETWEEN 10 AND 100", literalQueryField.GetString(0, null)); + } + } +} + diff --git a/RepoDb.Core/RepoDb/Extensions/QueryFields/LiteralQueryField.cs b/RepoDb.Core/RepoDb/Extensions/QueryFields/LiteralQueryField.cs new file mode 100644 index 00000000..ba619738 --- /dev/null +++ b/RepoDb.Core/RepoDb/Extensions/QueryFields/LiteralQueryField.cs @@ -0,0 +1,56 @@ +using System; +using System.Data; +using RepoDb.Enumerations; +using RepoDb.Interfaces; + +namespace RepoDb.Extensions.QueryFields +{ + /// + /// Query field that uses exactl what is passed. + /// + /// + /// See sample code below that uses a BETWEEN function. + /// + /// var where = new LiteralQueryField("ColumnName BETWEEN 1 AND 10"); + /// var result = connection.Query<Entity>(where); + /// + /// + public class LiteralQueryField : QueryField + { + #region Properties + + public string Literal { get; set; } + + #endregion + + #region Constructors + + /// + /// Creates a new instance of object. + /// + /// The content of the where as is. + public LiteralQueryField(string literal) + // Both of the parameters are actually ignored. + : base("fake", Operation.Equal, null, null) + { + Literal = literal; + } + + #endregion + + #region Methods + + /// + /// Gets the string representations (column-value pairs) of the current object with the formatted-function transformations. + /// + /// The target index. + /// The database setting currently in used. + /// The string representations of the current object using the LOWER function. + public override string GetString(int index, + IDbSetting dbSetting) => + Literal; + + #endregion + } +} +