Browse Source

not allow query from different datasource

Lith 8 months ago
parent
commit
0d441be4de

+ 4 - 2
src/Vitorm/Sql/SqlDbContext.Query.cs

@@ -124,8 +124,10 @@ namespace Vitorm.Sql
 
             if (dbGroupName == QueryableBuilder.GetQueryConfig(query) as string) return true;
 
-            throw new InvalidOperationException("do not allow to use queryable from different datasource , queryable type: " + obj?.GetType().FullName);
-            //return false;
+            if (QueryableBuilder.BuildFrom(query))
+                throw new InvalidOperationException("not allow query from different data source , queryable type: " + obj?.GetType().FullName);
+
+            return false;
         }
         protected virtual object ExecuteQuery(Expression expression, Type expressionResultType, Action dispose)
         {

+ 12 - 3
test/Vitorm.Sqlite.MsTest/CommonTest/Property_Numeric_Test.cs

@@ -9,19 +9,28 @@ namespace Vitorm.MsTest.CommonTest
     public class Property_Numeric_Test
     {
         // Enumerable.Contains
+        // Queryable.Contains
         [TestMethod]
         public void Test_In()
         {
             using var dbContext = DataSource.CreateDbContext();
             var userQuery = dbContext.Query<User>();
 
-            // Enumerable.Contains
+            // Array.Contains
             {
                 var userList = userQuery.Where(u => new[] { 3, 5 }.Contains(u.id)).ToList();
                 Assert.AreEqual(2, userList.Count);
                 Assert.AreEqual(0, userList.Select(m => m.id).Except(new[] { 3, 5 }).Count());
             }
 
+            // List.Contains
+            {
+                var ids = new[] { 3, 5 }.ToList();
+                var userList = userQuery.Where(u => ids.Contains(u.id)).ToList();
+                Assert.AreEqual(2, userList.Count);
+                Assert.AreEqual(0, userList.Select(m => m.id).Except(new[] { 3, 5 }).Count());
+            }
+
             // Enumerable.Contains
             {
                 var ids = new[] { 3, 5 }.AsEnumerable();
@@ -30,9 +39,9 @@ namespace Vitorm.MsTest.CommonTest
                 Assert.AreEqual(0, userList.Select(m => m.id).Except(new[] { 3, 5 }).Count());
             }
 
-            // List.Contains
+            // Queryable.Contains
             {
-                var ids = new[] { 3, 5 }.ToList();
+                var ids = new[] { 3, 5 }.AsQueryable();
                 var userList = userQuery.Where(u => ids.Contains(u.id)).ToList();
                 Assert.AreEqual(2, userList.Count);
                 Assert.AreEqual(0, userList.Select(m => m.id).Except(new[] { 3, 5 }).Count());

+ 13 - 3
test/Vitorm.Sqlite.MsTest/CommonTest/Property_String_Test.cs

@@ -10,19 +10,29 @@ namespace Vitorm.MsTest.CommonTest
     {
 
         // Enumerable.Contains
+        // Queryable.Contains
         [TestMethod]
         public void Test_In()
         {
             using var dbContext = DataSource.CreateDbContext();
             var userQuery = dbContext.Query<User>();
 
-            // Enumerable.Contains
+            // Array.Contains
             {
                 var userList = userQuery.Where(u => new[] { "u356", "u500" }.Contains(u.name)).ToList();
                 Assert.AreEqual(2, userList.Count);
                 Assert.AreEqual(0, userList.Select(m => m.name).Except(new[] { "u356", "u500" }).Count());
             }
 
+            // List.Contains
+            {
+                var ids = new[] { "u356", "u500" }.ToList();
+                var userList = userQuery.Where(u => ids.Contains(u.name)).ToList();
+                Assert.AreEqual(2, userList.Count);
+                Assert.AreEqual(0, userList.Select(m => m.name).Except(new[] { "u356", "u500" }).Count());
+            }
+
+
             // Enumerable.Contains
             {
                 var ids = new[] { "u356", "u500" }.AsEnumerable();
@@ -31,9 +41,9 @@ namespace Vitorm.MsTest.CommonTest
                 Assert.AreEqual(0, userList.Select(m => m.name).Except(new[] { "u356", "u500" }).Count());
             }
 
-            // List.Contains
+            // Queryable.Contains
             {
-                var ids = new[] { "u356", "u500" }.ToList();
+                var ids = new[] { "u356", "u500" }.AsQueryable();
                 var userList = userQuery.Where(u => ids.Contains(u.name)).ToList();
                 Assert.AreEqual(2, userList.Count);
                 Assert.AreEqual(0, userList.Select(m => m.name).Except(new[] { "u356", "u500" }).Count());