PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/ServiceStack.OrmLite.Tests/CaptureSqlCommandFilterTests.cs

https://github.com/ServiceStack/ServiceStack.OrmLite
C# | 268 lines | 216 code | 52 blank | 0 comment | 12 complexity | f52ecc28612a56b845670bb018d47a68 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using ServiceStack.OrmLite.Tests.Shared;
  5. using ServiceStack.Text;
  6. namespace ServiceStack.OrmLite.Tests
  7. {
  8. [TestFixtureOrmLite]
  9. public class CaptureSqlCommandFilterTests : OrmLiteProvidersTestBase
  10. {
  11. public CaptureSqlCommandFilterTests(DialectContext context) : base(context) {}
  12. [Test]
  13. public void Can_capture_command_each_type_of_API()
  14. {
  15. using var captured = new CaptureSqlFilter();
  16. using var db = OpenDbConnection();
  17. db.CreateTable<Person>();
  18. db.Select<Person>(x => x.Age > 40);
  19. db.Single<Person>(x => x.Age == 42);
  20. db.Count<Person>(x => x.Age < 50);
  21. db.Insert(new Person { Id = 7, FirstName = "Amy", LastName = "Winehouse" });
  22. db.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix" });
  23. db.Delete<Person>(new { FirstName = "Jimi", Age = 27 });
  24. db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age",
  25. new { age = 50 });
  26. db.SqlList<Person>("exec sp_name @firstName, @age",
  27. new { firstName = "aName", age = 1 });
  28. db.ExecuteNonQuery("UPDATE Person SET LastName={0} WHERE Id={1}"
  29. .SqlFmt(DialectProvider, "WaterHouse", 7));
  30. captured.SqlCommandHistory.PrintDump();
  31. }
  32. [Test]
  33. public void Can_capture_command_CreateTable_APIs()
  34. {
  35. using (var db = OpenDbConnection())
  36. {
  37. db.DropTable<Person>();
  38. }
  39. using (var captured = new CaptureSqlFilter())
  40. using (var db = OpenDbConnection())
  41. {
  42. int i = 0;
  43. i++; db.CreateTable<Person>();
  44. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  45. Does.Contain("create table person"));
  46. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i)
  47. .Or.EqualTo(i + 1)); //Check table if exists
  48. captured.SqlCommandHistory.PrintDump();
  49. }
  50. }
  51. [Test]
  52. public void Can_capture_command_Select_APIs()
  53. {
  54. using var captured = new CaptureSqlFilter();
  55. using var db = OpenDbConnection();
  56. int i = 0;
  57. i++; db.Select<Person>(x => x.Age > 40);
  58. var p = "@0"; //Normalized
  59. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  60. Is.EqualTo("select id, firstname, lastname, age from person where (age > {0})".Fmt(p)));
  61. i++; db.Select(db.From<Person>().Where(x => x.Age > 40));
  62. i++; db.Select<Person>("Age > 40");
  63. i++; db.Select<Person>("SELECT * FROM Person WHERE Age > 40");
  64. i++; db.Select<Person>("Age > @age", new { age = 40 });
  65. i++; db.Select<Person>("SELECT * FROM Person WHERE Age > @age", new { age = 40 });
  66. i++; db.Select<Person>("Age > @age", new Dictionary<string, object> { { "age", 40 } });
  67. i++; db.Where<Person>("Age", 27);
  68. i++; db.Where<Person>(new { Age = 27 });
  69. i++; db.SelectByIds<Person>(new[] { 1, 2, 3 });
  70. i++; db.SelectByIds<Person>(new[] { 1, 2, 3 });
  71. i++; db.SelectNonDefaults(new Person { Id = 1 });
  72. i++; db.SelectNonDefaults("Age > @Age", new Person { Age = 40 });
  73. i++; db.SelectLazy<Person>().ToList();
  74. i++; db.WhereLazy<Person>(new { Age = 27 }).ToList();
  75. i++; db.Select<Person>();
  76. i++; db.Single<Person>(x => x.Age == 42);
  77. i++; db.Single(db.From<Person>().Where(x => x.Age == 42));
  78. i++; db.Single<Person>(new { Age = 42 });
  79. i++; db.Single<Person>("Age = @age", new { age = 42 });
  80. i++; db.SingleById<Person>(1);
  81. i++; db.SingleWhere<Person>("Age", 42);
  82. i++; db.Exists<Person>(new { Age = 42 });
  83. i++; db.Exists<Person>("SELECT * FROM Person WHERE Age = @age", new { age = 42 });
  84. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  85. captured.SqlCommandHistory.PrintDump();
  86. }
  87. [Test]
  88. public void Can_capture_command_all_Single_Apis()
  89. {
  90. using var captured = new CaptureSqlFilter();
  91. using var db = OpenDbConnection();
  92. int i = 0;
  93. i++; db.Single<Person>(x => x.Age == 42);
  94. var p = "@0"; //Normalized
  95. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  96. Is.EqualTo("select id, firstname, lastname, age from person where (age = {0}) limit 1".Fmt(p)). //Sqlite
  97. Or.EqualTo("select top 1 id, firstname, lastname, age from person where (age = {0})".Fmt(p)). //SQLServer < 2012
  98. Or.EqualTo("select id, firstname, lastname, age from person where (age = {0}) order by 1 offset 0 rows fetch next 1 rows only".Fmt(p)). //SQLServer >= 2012
  99. Or.EqualTo("select first 1 id, firstname, lastname, age from person where (age = {0})".Fmt(p))); //Firebird
  100. i++; db.Exists<Person>("Age = @age", new { age = 42 });
  101. i++; db.Single(db.From<Person>().Where(x => x.Age == 42));
  102. i++; db.Single<Person>(new { Age = 42 });
  103. i++; db.Single<Person>("Age = @age", new { age = 42 });
  104. i++; db.SingleById<Person>(1);
  105. i++; db.Exists<Person>("Age = @age", new { age = 42 });
  106. i++; db.SingleWhere<Person>("Age", 42);
  107. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  108. captured.SqlCommandHistory.PrintDump();
  109. }
  110. [Test]
  111. public void Can_capture_command_all_Scalar_Apis()
  112. {
  113. using var captured = new CaptureSqlFilter();
  114. using var db = OpenDbConnection();
  115. int i = 0;
  116. i++; db.Scalar<Person, int>(x => Sql.Max(x.Age));
  117. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  118. Is.EqualTo("select max(age) from person"));
  119. i++; db.Scalar<Person, int>(x => Sql.Max(x.Age));
  120. i++; db.Scalar<Person, int>(x => Sql.Max(x.Age), x => x.Age < 50);
  121. i++; db.Count<Person>(x => x.Age < 50);
  122. i++; db.Count(db.From<Person>().Where(x => x.Age < 50));
  123. i++; db.Scalar<int>("SELECT COUNT(*) FROM Person WHERE Age > @age", new { age = 40 });
  124. i++; db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new { age = 50 });
  125. i++; db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } });
  126. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  127. captured.SqlCommandHistory.PrintDump();
  128. }
  129. [Test]
  130. public void Can_capture_command_Update_Apis()
  131. {
  132. using var captured = new CaptureSqlFilter();
  133. using var db = OpenDbConnection();
  134. int i = 0;
  135. i++; db.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 });
  136. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  137. Does.StartWith("update person set firstname=@firstname, lastname=@lastname"));
  138. i++; db.Update(new[] { new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 } });
  139. i++; db.UpdateAll(new[] { new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 } });
  140. i++; db.Update(new Person { Id = 1, FirstName = "JJ", Age = 27 }, p => p.LastName == "Hendrix");
  141. i++; db.Update<Person>(new { FirstName = "JJ" }, p => p.LastName == "Hendrix");
  142. i++; db.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.LastName == "Hendrix");
  143. i++; db.UpdateOnlyFields(new Person { FirstName = "JJ" }, p => p.FirstName);
  144. i++; db.UpdateOnlyFields(new Person { FirstName = "JJ" }, p => p.FirstName, p => p.LastName == "Hendrix");
  145. i++; db.UpdateOnlyFields(new Person { FirstName = "JJ", LastName = "Hendo" }, db.From<Person>().Update(p => p.FirstName));
  146. i++; db.UpdateOnlyFields(new Person { FirstName = "JJ" }, db.From<Person>().Update(p => p.FirstName).Where(x => x.FirstName == "Jimi"));
  147. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  148. captured.SqlCommandHistory.PrintDump();
  149. }
  150. [Test]
  151. public void Can_capture_command_Delete_Apis()
  152. {
  153. using var captured = new CaptureSqlFilter();
  154. using var db = OpenDbConnection();
  155. int i = 0;
  156. i++; db.Delete<Person>(new { FirstName = "Jimi", Age = 27 });
  157. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  158. Is.EqualTo("delete from person where firstname=@firstname and age=@age"));
  159. i++; db.Delete<Person>(new { FirstName = "Jimi", Age = 27 });
  160. i++; db.Delete(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 });
  161. i++; db.DeleteNonDefaults(new Person { FirstName = "Jimi", Age = 27 });
  162. i++; db.DeleteById<Person>(1);
  163. i++; db.DeleteByIds<Person>(new[] { 1, 2, 3 });
  164. i++; db.Delete<Person>("Age = @age", new { age = 27 });
  165. i++; db.Delete(typeof(Person), "Age = @age", new { age = 27 });
  166. i++; db.Delete<Person>(p => p.Age == 27);
  167. i++; db.Delete(db.From<Person>().Where(p => p.Age == 27));
  168. i++; db.Delete<Person>("Age = @age", new { age = 27 });
  169. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  170. captured.SqlCommandHistory.PrintDump();
  171. }
  172. [Test]
  173. public void Can_capture_command_CustomSql_Apis()
  174. {
  175. using var captured = new CaptureSqlFilter();
  176. using var db = OpenDbConnection();
  177. int i = 0;
  178. i++; db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new { age = 50 });
  179. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  180. Is.EqualTo("select lastname from person where age < @age"));
  181. i++; db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new { age = 50 });
  182. i++; db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } });
  183. i++; db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new { age = 50 });
  184. i++; db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } });
  185. i++; db.ExecuteNonQuery("UPDATE Person SET LastName={0} WHERE Id={1}".SqlFmt(DialectProvider, "WaterHouse", 7));
  186. i++; db.ExecuteNonQuery("UPDATE Person SET LastName=@name WHERE Id=@id", new { name = "WaterHouse", id = 7 });
  187. i++; db.SqlList<Person>("exec sp_name @firstName, @age", new { firstName = "aName", age = 1 });
  188. i++; db.SqlScalar<Person>("exec sp_name @firstName, @age", new { firstName = "aName", age = 1 });
  189. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  190. captured.SqlCommandHistory.PrintDump();
  191. }
  192. [Test]
  193. public void Can_capture_command_Insert_Apis()
  194. {
  195. using var captured = new CaptureSqlFilter();
  196. using var db = OpenDbConnection();
  197. int i = 0;
  198. i++; db.Insert(new Person { Id = 7, FirstName = "Amy", LastName = "Winehouse", Age = 27 });
  199. Assert.That(captured.SqlCommandHistory.Last().Sql.NormalizeSql(),
  200. Does.StartWith("insert into person (id,firstname,lastname,age) values"));
  201. i++; db.Insert(new Person { Id = 7, FirstName = "Amy", LastName = "Winehouse", Age = 27 });
  202. i++; db.InsertAll(new[] { new Person { Id = 10, FirstName = "Biggie", LastName = "Smalls", Age = 24 } });
  203. i++; db.InsertOnly(new PersonWithAutoId { FirstName = "Amy", Age = 27 }, p => new { p.FirstName, p.Age });
  204. Assert.That(captured.SqlCommandHistory.Count, Is.EqualTo(i));
  205. captured.SqlCommandHistory.PrintDump();
  206. }
  207. [Test]
  208. public void Can_capture_basic_Query()
  209. {
  210. using var captured = new CaptureSqlFilter();
  211. using var db = OpenDbConnection();
  212. db.Where<Person>(new { Age = 27 });
  213. captured.SqlCommandHistory[0].PrintDump();
  214. }
  215. }
  216. }