public bool Migrate(string connectionString, string providerName, IEnumerable<Type> entities, Action<MigratorResult, Type> callbackOnChanges)
 {
     var bResult = false;
     var provider = ProviderFactory.GetProvider(connectionString, providerName);
     foreach (var entity in entities)
     {
         var batch = new BatchQuery(provider);
         var m = new Migrator(Assembly.GetExecutingAssembly());
         var commands = m.MigrateFromModel(entity, provider);
         bResult |= commands.Length > 0;
         try
         {
             foreach (var s in commands)
                 batch.QueueForTransaction(new QueryCommand(PrepareCommand(s), provider));
             batch.ExecuteTransaction();
         }
         catch(Exception ex)
         {
             var sb = new StringBuilder(ex.Message);
             sb.Append(": ");
             foreach (var command in commands)
                 sb.Append(command);
             throw new Exception(sb.ToString(), ex);
         }
         if (callbackOnChanges == null) continue;
         callbackOnChanges(commands.Length > 0 ? MigratorResult.ChangesMadeToEntity : MigratorResult.NoChanges,
                           entity);
     }
     if (callbackOnChanges != null)
         callbackOnChanges(MigratorResult.ChangesMadeToAllEntities, null);
     return bResult;
 }
        public void Batch_Should_Build_Batched_SQL()
        {
            BatchQuery qry = new BatchQuery(provider);

            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));

            string sql = qry.BuildSqlStatement();

            Assert.Equal(3, sql.FindMatches("SELECT").Count);
        }
        public void Batch_Should_Build_Batched_SQL_With_Replaced_Command_Parameters()
        {
            BatchQuery qry = new BatchQuery(provider);
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));
            QueryCommand cmd = qry.GetCommand();

            Assert.Equal("@0", cmd.Parameters[0].ParameterName);
            Assert.Equal("@1", cmd.Parameters[1].ParameterName);
            Assert.Equal("@2", cmd.Parameters[2].ParameterName);
        }
Beispiel #4
0
        public void Batch_Should_Build_Batched_SQL_Using_Linq()
        {
            BatchQuery qry    = new BatchQuery(provider);
            var        pquery = new Query <Product>(provider);

            qry.Queue(from p in pquery where p.ProductID == 1 select p);
            qry.Queue(from p in pquery where p.ProductID == 2 select p);
            qry.Queue(from p in pquery where p.ProductID == 3 select p);

            string sql = qry.BuildSqlStatement();

            Assert.Equal(3, sql.FindMatches("SELECT").Count);
        }
        /// <summary>
        /// Deletes 1 or more items.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="items">The items.</param>
        /// <returns></returns>
        public int DeleteMany <T>(IEnumerable <T> items) where T : class, new()
        {
            BatchQuery batch  = new BatchQuery(_provider);
            int        result = 0;

            foreach (var item in items)
            {
                batch.QueueForTransaction(item.ToDeleteQuery(_provider));
                result++;
            }
            batch.ExecuteTransaction();
            return(result);
        }
        public void Batch_Should_Build_Batched_SQL_With_Replaced_SQL_Parameters()
        {
            BatchQuery qry = new BatchQuery(provider);
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));

            string sql = qry.BuildSqlStatement();

            Assert.True(sql.FindMatches("@0").Count == 1);
            Assert.True(sql.FindMatches("@1").Count == 1);
            Assert.True(sql.FindMatches("@2").Count == 1);
        }
Beispiel #7
0
        public List <Action> PullData()
        {
            var from  = DateTime.Now.AddDays(-5);
            var api   = CreateLogin(ClientId);
            var batch = new BatchQuery <Action>(new BatchOptions
            {
                Write = 512,
                Read  = 512
            }, api, new LoadActionsInBatches(from, DateTime.Now), ActionLoad);

            batch.Execute();
            return(Actions);
        }
Beispiel #8
0
        public void Batch_Should_Build_Batched_SQL_With_Replaced_Command_Parameters()
        {
            BatchQuery qry = new BatchQuery(provider);

            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));
            QueryCommand cmd = qry.GetCommand();

            Assert.Equal("@0", cmd.Parameters[0].ParameterName);
            Assert.Equal("@1", cmd.Parameters[1].ParameterName);
            Assert.Equal("@2", cmd.Parameters[2].ParameterName);
        }
Beispiel #9
0
        protected internal virtual IList <Batch> executePaginatedQuery(BatchQuery query, int?firstResult, int?maxResults)
        {
            if (firstResult == null)
            {
                firstResult = 0;
            }
            if (maxResults == null)
            {
                maxResults = int.MaxValue;
            }

            return(query.listPage(firstResult, maxResults));
        }
Beispiel #10
0
        /// <summary>
        /// Updates the passed-in T
        /// </summary>
        public int Update(IEnumerable <T> items, IDataProvider provider)
        {
            BatchQuery bQuery = new BatchQuery(provider);
            int        result = 0;

            foreach (T item in items)
            {
                var query = item.ToUpdateQuery(provider);
                bQuery.Queue(query);
            }
            result = bQuery.Execute();
            return(result);
        }
Beispiel #11
0
        public void Batch_Should_Build_Batched_SQL_With_Replaced_SQL_Parameters()
        {
            BatchQuery qry = new BatchQuery(provider);

            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));

            string sql = qry.BuildSqlStatement();

            Assert.True(sql.FindMatches("@0").Count == 1);
            Assert.True(sql.FindMatches("@1").Count == 1);
            Assert.True(sql.FindMatches("@2").Count == 1);
        }
Beispiel #12
0
        public void MigrateNamespaceToDatabase(string modelNamespace, Assembly assembly)
        {
            var m = new Migrator(assembly);

            var        migrationSql = m.MigrateFromModel(modelNamespace, this);
            BatchQuery query        = new BatchQuery(this);

            foreach (var s in migrationSql)
            {
                query.QueueForTransaction(new QueryCommand(s.Trim(), this));
            }

            //pop the transaction
            query.ExecuteTransaction();
        }
        /// <summary>
        /// Adds a lot of the items using a transaction.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="items">The items.</param>
        public void AddMany <T>(IEnumerable <T> items) where T : class, new()
        {
            if (_options.Contains(SimpleRepositoryOptions.RunMigrations))
            {
                Migrate <T>();
            }

            BatchQuery batch = new BatchQuery(_provider);

            foreach (var item in items)
            {
                batch.QueueForTransaction(item.ToInsertQuery(_provider));
            }
            batch.ExecuteTransaction();
        }
        /// <summary>
        /// Migrates this instance.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        private void Migrate <T>() where T : class, new()
        {
            Type type = typeof(T);

            if (!migrated.Contains(type))
            {
                BatchQuery batch    = new BatchQuery(_provider);
                Migrator   m        = new Migrator(Assembly.GetExecutingAssembly());
                var        commands = m.MigrateFromModel(type, _provider);
                foreach (var s in commands)
                {
                    batch.QueueForTransaction(new QueryCommand(s, _provider));
                }
                batch.ExecuteTransaction();
                migrated.Add(type);
            }
        }
Beispiel #15
0
        public void Batch_Query_Should_Allow_Single_Quotes_In_Query()
        {
            var containsNames = new[] { "Products's One and Only", "Products's Second" };

            Query <Product> products = new Query <Product>(provider);

            var query = from product in products
                        where containsNames.Contains(product.ProductName)
                        select product;

            var result = query.ToList();

            BatchQuery batch = new BatchQuery(provider);

            batch.Queue(query);
            Assert.DoesNotThrow(() => batch.Execute());
        }
Beispiel #16
0
        private static void Initialize(string connectString, string modelSpaceName)
        {
            IDataProvider provider = ProviderFactory.GetProvider(connectString);
            BatchQuery    query    = new BatchQuery(provider);

            Assembly assembly = Assembly.Load(Const.FRAME_MODEL_MASTER);

            var migrator = new SubSonic.Schema.Migrator(assembly);

            string[] commands = migrator.MigrateFromModel(modelSpaceName, provider);

            foreach (var s in commands)
            {
                query.QueueForTransaction(new QueryCommand(s.Trim(), provider));
            }
            query.ExecuteTransaction();
        }
        /// <summary>
        /// Updates lots of items using a transaction.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="items">The items.</param>
        /// <returns></returns>
        public int UpdateMany <T>(IEnumerable <T> items) where T : class, new()
        {
            if (_options.Contains(SimpleRepositoryOptions.RunMigrations))
            {
                Migrate <T>();
            }
            BatchQuery batch  = new BatchQuery(_provider);
            int        result = 0;

            foreach (var item in items)
            {
                batch.QueueForTransaction(item.ToUpdateQuery(_provider));
                result++;
            }
            batch.ExecuteTransaction();
            return(result);
        }
Beispiel #18
0
        static void Main(string[] args)
        {
            var clientId = "224";
            var api      = Login("9408065009082", "yase191!", clientId);

            var start = new DateTime(2017, 10, 25, 00, 00, 00);
            var end   = new DateTime(2017, 10, 25, 23, 59, 59);

            var batch = new BatchQuery <Action>(new BatchOptions
            {
                Write = 512,
                Read  = 512
            }, api, new LoadActionsInBatches(start, end), WriteToFile);

            batch.Execute();

            Console.ReadLine();
        }
        private static void BatchInsertInto()
        {
            Console.WriteLine("Batch Inserting Genres using Insert.Into with unescaped values.");

            IList<Genre> genres = new List<Genre>
                {
                    new Genre { Name = "Genre's Third" },
                    new Genre { Name = "Genre's Fourth" }
                };

            BatchQuery bq = new BatchQuery(db.Provider);

            foreach (Genre genre in genres)
            {
                bq.Queue(db.Insert.Into<Genre>(g => g.Name).Values(genre.Name));
            }

            ExecuteQuery(bq);
        }
Beispiel #20
0
        public static void UpdateMsts(string _clientId)
        {
            var api = CreateLogin(_clientId);

            var batch = new BatchQuery <Entity>(new BatchOptions
            {
                Write = 512,
                Read  = 512
            }, api, new LoadEntitiesInBatches(), EntityCallBack);

            batch.Execute();

            var batch2 = new BatchQuery <OLocation>(new BatchOptions
            {
                Write = 512,
                Read  = 512
            }, api, new LoadLocationsInBatches(), DecoLookup);

            batch2.Execute();
        }
Beispiel #21
0
        public static void GetPersonnelInfo(Api api)
        {
            try
            {
                var header = $"FirstName, FullName, Nature, Type, IdentityNumber{Environment.NewLine}";
                var path   = $@"C:\Users\YaseenH\Desktop\Adhoc\personnel.csv";
                File.AppendAllText(path, header);

                var batch = new BatchQuery <Personnel>(new BatchOptions
                {
                    Write = 512,
                    Read  = 512
                }, api, new LoadPersonnelInBatches(), PersonnelLookup);
                batch.Execute();
            }
            catch (Exception e)
            {
                Console.WriteLine($"{e.ToString()}...");
            }
        }
Beispiel #22
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testBatchQueryBySuspendedBatches()
        public virtual void testBatchQueryBySuspendedBatches()
        {
            // given
            Batch batch1 = helper.migrateProcessInstancesAsync(1);
            Batch batch2 = helper.migrateProcessInstancesAsync(1);

            helper.migrateProcessInstancesAsync(1);

            // when
            managementService.suspendBatchById(batch1.Id);
            managementService.suspendBatchById(batch2.Id);
            managementService.activateBatchById(batch1.Id);

            // then
            BatchQuery query = managementService.createBatchQuery().suspended();

            Assert.assertEquals(1, query.count());
            Assert.assertEquals(1, query.list().size());
            Assert.assertEquals(batch2.Id, query.singleResult().Id);
        }
Beispiel #23
0
        public void CtorShouldExcludeNullStatements()
        {
            // Arrange
            IEnumerable <IQuery> queries = new IQuery[]
            {
                InsertInto("SuperHero")
                .Values(Select("firstname", "lastname", "nickname").From("DC_SuperHero").Build()),

                null,

                Delete("DC_SuperHero")
            };

            // Act
            BatchQuery batchQuery = new BatchQuery(queries.ToArray());

            // Assert
            batchQuery.Statements.Should()
            .HaveCount(2).And
            .NotContainNulls();
        }
Beispiel #24
0
        public void CtorPreserveStatementOrder()
        {
            // Arrange
            IEnumerable <IQuery> queries = new IQuery[]
            {
                Select(1.Literal()),
                Select(2.Literal()),
                Select(3.Literal())
            };

            // Act
            BatchQuery batchQuery = new BatchQuery(queries.ToArray());

            // Assert
            batchQuery.Statements.Should()
            .Equal(new []
            {
                Select(1.Literal()),
                Select(2.Literal()),
                Select(3.Literal())
            });
        }
Beispiel #25
0
        public static void AddNewBatch(SqlConnection connection)
        {
            Batch batch = new Batch();

            Console.WriteLine("Please, enter the batch details: ");

            Console.Write("Date: ");
            batch.Date = ConsoleInput.InputDate();

            Console.Write("Select batch type: ");
            batch.BatchType = SelectBatchType();

            BatchQuery batchQuery = new BatchQuery(connection);

            batchQuery.AddNewRecord(batch);
            int lastId = batchQuery.GetLastId();

            Console.WriteLine("Please, add products to the batch (input product's Id and quantity): ");
            ProductBatchQuery productBatchQuery = new ProductBatchQuery(connection);

            AddRecordsIntoProductBatch(lastId, productBatchQuery);
        }
Beispiel #26
0
        static void Main(string[] args)
        {
            var filePath    = @"Data\Cori_June_Actions.csv";
            var content     = ReadContent(filePath);
            var csvReader   = new CsvReader();
            var lines       = csvReader.Read(content);
            var actionLines = lines.Where(x => x != null).Select(x => new ActionLine(x)).ToList();

            _actionsLines = actionLines;
            //var superRoute = CreateRoute(RouteName);

            var api = Login("9408065009082", "yase191!", "206");

            var batch = new BatchQuery <DitAddress>(new BatchOptions
            {
                Write = 512,
                Read  = 512
            }, api, new LoadDitAddressesInBatches(), Callback);

            batch.Execute();

            Console.ReadLine();
        }
Beispiel #27
0
        public virtual IList <BatchDto> getBatches(UriInfo uriInfo, int?firstResult, int?maxResults)
        {
            BatchQueryDto queryDto = new BatchQueryDto(ObjectMapper, uriInfo.QueryParameters);
            BatchQuery    query    = queryDto.toQuery(ProcessEngine);

            IList <Batch> matchingBatches;

            if (firstResult != null || maxResults != null)
            {
                matchingBatches = executePaginatedQuery(query, firstResult, maxResults);
            }
            else
            {
                matchingBatches = query.list();
            }

            IList <BatchDto> batchResults = new List <BatchDto>();

            foreach (Batch matchingBatch in matchingBatches)
            {
                batchResults.Add(BatchDto.fromBatch(matchingBatch));
            }
            return(batchResults);
        }
Beispiel #28
0
        public void Batch_Should_Execute_Reader_And_Return_Typed_Lists_Using_Linq()
        {
            BatchQuery qry    = new BatchQuery(provider);
            var        pquery = new Query <Product>(provider);

            qry.Queue(from p in pquery where p.ProductID == 1 select p);
            qry.Queue(from p in pquery where p.ProductID == 2 select p);
            qry.Queue(from p in pquery where p.ProductID == 3 select p);

            int            sets    = 1;
            bool           canRead = false;
            List <Product> result1 = null;
            List <Product> result2 = null;
            List <Product> result3 = null;

            using (IDataReader rdr = qry.ExecuteReader())
            {
                result1 = rdr.ToList <Product>();
                canRead = true;
                if (rdr.NextResult())
                {
                    result2 = rdr.ToList <Product>();
                }

                if (rdr.NextResult())
                {
                    result3 = rdr.ToList <Product>();
                }

                canRead = rdr.NextResult();
            }
            Assert.True(result1.Count > 0);
            Assert.True(result2.Count > 0);
            Assert.True(result3.Count > 0);
            Assert.False(canRead);
        }
        public static string Serialize(BatchQuery batchQuery)
        {
            var itemsPart = string.Join(",", batchQuery.Queries.Select(SerializeBatchQueryItem));

            return("{\"items\":[" + itemsPart + $"],\"includeProcessExecutionData\":true,\"instanceId\":\"{Guid.NewGuid()}\"" + "}");
        }
Beispiel #30
0
        public void LoadTestData()
        {
            var batch = new BatchQuery(_provider);

            //load some test data - 100 records
            string city    = "City1";
            string company = "Company1";

            for (int i = 1; i <= 100; i++)
            {
                if (i % 10 == 0)
                {
                    city    = "City" + i;
                    company = "Company" + i;
                }
                Customer c = new Customer();
                c.Address     = i + "Street";
                c.City        = city;
                c.Region      = "CA";
                c.Country     = "US";
                c.CompanyName = company;
                c.ContactName = "Charlie";
                c.CustomerID  = "TEST" + i;
                var qry = c.ToInsertQuery(_provider);
                batch.QueueForTransaction(qry);
            }
            batch.ExecuteTransaction();

            for (int i = 1; i <= 5; i++)
            {
                Category c = new Category();
                c.CategoryID   = i;
                c.CategoryName = "Category" + i;
                batch.QueueForTransaction(c.ToInsertQuery(_provider));
            }
            batch.ExecuteTransaction();

            //Products
            int categoryCounter = 1;

            for (int i = 1; i <= 100; i++)
            {
                Product p = new Product();
                p.Sku          = Guid.NewGuid();
                p.ProductID    = i;
                p.ProductName  = "Product" + i;
                p.UnitPrice    = 1.245M * i / 5.22M * 8.09M;
                p.Discontinued = i % 2 == 0 ? true : false;
                p.CategoryID   = categoryCounter;
                batch.QueueForTransaction(p.ToInsertQuery(_provider));

                categoryCounter++;
                if (categoryCounter > 5)
                {
                    categoryCounter = 1;
                }
            }

            batch.ExecuteTransaction();

            //Orders
            int customerID = 1;

            for (int i = 1; i <= 100; i++)
            {
                Order o = new Order();
                o.OrderDate    = DateTime.Parse("1/1/2008").AddDays(-i * 12 + 23);
                o.RequiredDate = DateTime.Parse("1/1/2008").AddDays(-i * 12 + 28);
                o.ShippedDate  = DateTime.Parse("1/1/2008").AddDays(-i * 12 + 32);
                o.CustomerID   = "TEST" + customerID;
                o.OrderID      = i;
                //5 items per order
                for (int j = 1; j <= 5; j++)
                {
                    OrderDetail detail = new OrderDetail();
                    detail.Discount  = i * 1 / 4M;
                    detail.OrderID   = i;
                    detail.ProductID = i;
                    detail.Quantity  = 2;
                    detail.UnitPrice = 2 * (1.245M * i / 5.22M * 8.09M);
                    batch.QueueForTransaction(detail.ToInsertQuery(_provider));
                }
                customerID++;
                if (customerID > 5)
                {
                    customerID = 1;
                }

                batch.QueueForTransaction(o.ToInsertQuery(_provider));
            }

            batch.ExecuteTransaction();
        }
Beispiel #31
0
        /// <summary>
        /// (有事务)批量删除,通过sql语句进行删除
        /// </summary>
        /// <param name="sqls">执行sql语句集</param>
        /// <returns>被删除的记录数</returns>
        public int Delete(params String[] sqls)
        {
            try
            {
                //创建事务
                var batch = new BatchQuery(provider);

                //遍历添加
                foreach (String item in sqls)
                {
                    QueryCommand qcmd = new QueryCommand(item, provider);

                    batch.QueueForTransaction(qcmd);
                }

                //获取执行语句
                _execSql = string.Join(",", sqls);

                //执行事务
                batch.ExecuteTransaction();
                return batch.QueryCount;
            }
            catch (Exception e)
            {
                //return 0;
                throw new Exception("删除数据异常,执行语句" + _execSql, e);
            }
        }
Beispiel #32
0
        public override string Render(IQuery query)
        {
            string result = string.Empty;
            ReplaceParameterBySelectQueryVisitor visitor = new ReplaceParameterBySelectQueryVisitor(
                v => Select(Null("RealValue".Field(), "IntegerValue".Field(), "BlobValue".Field(), "TextValue".Field()))
                .From(VariablesTempTablename)
                .Where(ParameterFieldName.Field().EqualTo(v.Name))
                .Paginate(pageIndex: 1, pageSize: 1)
                .Build()
                );

            switch (query)
            {
            case SelectQueryBase selectQueryBase:
                if (selectQueryBase is SelectQuery sq)
                {
                    visitor.Visit(sq);
                    result = Render(sq);
                }
                result = Render(selectQueryBase);
                break;

            case CreateViewQuery createViewQuery:
                result = Render(createViewQuery);
                break;

            case DeleteQuery deleteQuery:
                visitor.Visit(deleteQuery);
                result = Render(deleteQuery);
                break;

            case UpdateQuery updateQuery:
                result = Render(updateQuery);
                break;

            case TruncateQuery truncateQuery:
                result = Render(truncateQuery);
                break;

            case InsertIntoQuery insertIntoQuery:
                result = Render(insertIntoQuery);
                break;

            case BatchQuery batchQuery:
                result = Render(batchQuery);
                break;

            default:
                result = base.Render(query);
                break;
            }
            StringBuilder sbParameters = new StringBuilder(visitor.Variables.Count() * 100);

            if (visitor.Variables.Any())
            {
#if DEBUG
                Debug.Assert(visitor.Variables.All(x => x.Value != null), $"{nameof(visitor)}.{nameof(visitor.Variables)} must not contains variables with null value");
#endif

                IList <InsertIntoQuery> insertParameters = new List <InsertIntoQuery>(visitor.Variables.Count());
                IList <UpdateQuery>     updateParameters = new List <UpdateQuery>(visitor.Variables.Count());

                foreach (Variable variable in visitor.Variables)
                {
                    insertParameters.Add(
                        InsertInto(VariablesTempTablename).Values(ParameterFieldName.Field().InsertValue(variable.Name.Literal()))
                        .Build()
                        );
                    switch (variable.Type)
                    {
                    case VariableType.Numeric:
                        updateParameters.Add(
                            Update(VariablesTempTablename).Set("RealValue".Field().UpdateValueTo(Convert.ToInt64(variable.Value)))
                            .Where(ParameterFieldName.Field().EqualTo(variable.Name))
                            );
                        break;

                    case VariableType.Date:
                    case VariableType.String:
                        updateParameters.Add(
                            Update(VariablesTempTablename).Set("TextValue".Field().UpdateValueTo(variable.Value.ToString()))
                            .Where(ParameterFieldName.Field().EqualTo(variable.Name))
                            );
                        break;

                    case VariableType.Boolean:
                        updateParameters.Add(
                            Update(VariablesTempTablename).Set("IntegerValue".Field().UpdateValueTo(Convert.ToInt32(variable.Value)))
                            .Where(ParameterFieldName.Field().EqualTo(variable.Name))
                            );
                        break;

                    default:
                        throw new ArgumentOutOfRangeException($"Unsupported {variable.Type} as variable type");
                    }
                }

                BatchQuery batch = new BatchQuery()
                                   .AddStatement("BEGIN".AsNative())
                                   .AddStatement("PRAGMA temp_store = 2".AsNative())
                                   .AddStatement($"CREATE TEMP TABLE {RenderTablename(VariablesTempTablename.Table(), renderAlias:false)}(ParameterName TEXT PRIMARY KEY, RealValue REAL, IntegerValue INTEGER, BlobValue BLOB, TextValue TEXT)"
                                                 .AsNative()
                                                 )
                                   .AddStatements(insertParameters)
                                   .AddStatements(updateParameters)
                                   .AddStatement($"{result}".AsNative())
                                   .AddStatement($"DROP TABLE {RenderTablename(VariablesTempTablename.Table(), renderAlias: false)}".AsNative())
                                   .AddStatement("END".AsNative());

                result = Render(batch);
            }
            return(result);
        }
        public void Batch_Should_Execute_Reader()
        {
            BatchQuery qry = new BatchQuery(provider);
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));
            int sets = 1;
            bool canRead = false;
            using(IDataReader rdr = qry.ExecuteReader())
            {
                canRead = true;
                if(rdr.NextResult())
                    sets = 2;

                if(rdr.NextResult())
                    sets = 3;

                canRead = rdr.NextResult();
            }
            Assert.Equal(3, sets);
            Assert.False(canRead);
        }
Beispiel #34
0
        public void Batch_Query_Should_Allow_Single_Quotes_In_Query()
        {
            var containsNames = new[] { "Products's One and Only", "Products's Second" };

            Query<Product> products = new Query<Product>(provider);

            var query = from product in products
                        where containsNames.Contains(product.ProductName)
                        select product;

            var result = query.ToList();

            BatchQuery batch = new BatchQuery(provider);
            batch.Queue(query);
            Assert.DoesNotThrow(() => batch.Execute());
        }
Beispiel #35
0
        protected void Page_Load(object sender, EventArgs e)
        {
            //---------------------------------------------------------
            // 1、新增记录
            //---------------------------------------------------------
            var branch = new Branch();

            branch.DeptCode = SPs.P_Branch_GetMaxBranchDeptCode(2, 1).ExecuteScalar() + "";
            branch.Name     = "客服部";
            branch.Comment  = "客户售后服务维护部门";
            branch.ParentId = 1;
            branch.Sort     = 7;
            branch.Depth    = 2;
            //AddDate这个属性不用赋值,ORM框架生成更新语句时会自动过滤该字段,更新时将会使用数据库中设置的默认值
            //branch.AddDate = DateTime.Now;

            //保存数据入库
            branch.Save();
            WriteLine("记录添加成功,新增Id为:" + branch.Id);


            //----------------------------------------------------------
            // 2、修改记录
            //----------------------------------------------------------
            var branchModel = Branch.SingleOrDefault(x => x.Id == branch.Id);

            //也可以这样用
            //var branchModel = new Branch(x => x.Id == branch.Id);
            //打印读取出来的数据
            WriteLine(branchModel.ToString());

            //修改名称为“售后服务部”
            branchModel.Name = "售后服务部";
            //保存
            branchModel.Save();

            //重新从数据库中读取出来并打印到输出窗口
            WriteLine((new Branch(x => x.Id == branch.Id)).ToString());


            //----------------------------------------------------------
            // 3、判断刚刚修改的记录是否存在
            //----------------------------------------------------------
            if (Branch.Exists(x => x.Id == branch.Id))
            {
                WriteLine("Id为" + branch.Id + "的记录存在!");
            }
            else
            {
                WriteLine("Id为" + branch.Id + "的记录不存在!");
            }


            //---------------------------------------------------------
            // 4、删除记录
            //---------------------------------------------------------
            //删除当前记录
            Branch.Delete(x => x.Id == branch.Id);
            //也可以这样操作:
            //branchModel.Delete();
            WriteLine("删除Id为" + branch.Id + "的记录成功!");


            //--------------------------------------------------------
            // 5、判断刚刚删除的记录是否存在
            //--------------------------------------------------------
            if (Branch.Exists(x => x.Id == branch.Id))
            {
                WriteLine("Id为" + branch.Id + "的记录存在!");
            }
            else
            {
                WriteLine("Id为" + branch.Id + "的记录不存在!");
            }


            //--------------------------------------------------------
            // 6、使用类实体附带的函数查询
            //--------------------------------------------------------
            //查找出所有记录 -- 使用All()
            var list = Branch.All();

            foreach (var item in list)
            {
                //打印记录到输出窗口
                WriteLine(item.ToString());
            }

            //查询指定条件的记录 -- 使用Find()
            IList <Branch> il = Branch.Find(x => x.Id > 2);

            foreach (var item in il)
            {
                WriteLine(item.ToString());
            }

            //获取第二页记录(每页3条记录)
            il = Branch.GetPaged("Id Asc", 2, 3);
            foreach (var item in il)
            {
                WriteLine(item.ToString());
            }

            //使用Id倒序排序,获取第三页记录(每页3条记录)
            il = Branch.GetPaged("Id Desc", 3, 3);
            foreach (var item in il)
            {
                WriteLine(item.ToString());
            }


            //--------------------------------------------------
            // 7、使用Select类查询
            //--------------------------------------------------
            //创建Select对象
            //var select = new Select();
            //显示指定的列
            var select = new Select(new string[] { BranchTable.Id, BranchTable.Name, BranchTable.DeptCode });

            //指定查询表
            select.From <Branch>();

            //运行完上面这条语句后,SQL已经生成出来了,在Debug状态将鼠标指向select就可以看到,往下继续执行时,每添加一个属性都会添加在生成的SQL语句中
            //添加查询条件 -- Id大于2且编号头两位为01的部门
            select.Where(BranchTable.Id).IsGreaterThanOrEqualTo(2).And(BranchTable.DeptCode).StartsWith("01");
            //查询时括号添加列子
            //select.OpenExpression().Where("").IsEqualTo(0).Or("").IsEqualTo(11).CloseExpression().And("").IsEqualTo(3);

            //设置去重复 -- SubSonic没有去重复选项,需要自己手动修改DLL源码
            select.Distinct(true);
            //或
            //select.IsDistinct = true;

            //设置查询数量
            select.Top("5");

            //添加排序 -- 倒序
            select.OrderDesc(BranchTable.Sort);
            //或
            //List<string> orderByList = new List<string>();
            //orderByList.Add(BranchTable.Sort + " Desc");
            //orderByList.Add(BranchTable.Id + " Desc");
            //select.OrderBys = orderByList;

            //设置分页,获取第一页记录(每页10条记录)
            select.Paged(1, 10);

            //执行查询 -- 返回DataTable
            var dt = select.ExecuteDataTable();

            if (dt != null && dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    WriteLine(dt.Rows[i][BranchTable.Id] + " " + dt.Rows[i][BranchTable.Name]);
                }
            }

            //执行查询 -- 返回List
            var bl = select.ToList <Branch>();

            foreach (var item in bl)
            {
                WriteLine(item.ToString());
            }

            //查询总记录数
            var recordCount = select.GetRecordCount();

            WriteLine("记录数量:" + recordCount.ToString());


            //-------------------------------------------------------------
            // 8、HotelDBDB查询类的使用方式
            //-------------------------------------------------------------
            //使用数据库名称+DB作为名称的类,可以直接调用聚合函数
            var db = new SubSonicTestDB();

            //平均值
            WriteLine("平均值:" + db.Avg <Branch>(x => x.Id).Where <Branch>(x => x.Id < 10).ExecuteScalar() + "");
            //计算数量
            WriteLine("计算数量:" + db.Count <Branch>(x => x.Id).ExecuteScalar() + "");
            //计算合计数量
            WriteLine("计算合计数量:" + db.Sum <Branch>(x => x.Id).ExecuteScalar() + "");
            //最大值
            WriteLine("最大值:" + db.Max <Branch>(x => x.Id).ExecuteScalar() + "");
            //最小值
            WriteLine("最小值:" + db.Min <Branch>(x => x.Id).ExecuteScalar() + "");


            //---------------------------------------------------------------
            // 9、存储过程调用方法
            //---------------------------------------------------------------
            //使用SPs.存储过程名称(参数1,参数2,参数3)就可以调用存储过程
            var obj = SPs.P_Branch_GetMaxBranchDeptCode(1, 0).ExecuteScalar();

            WriteLine(obj + "");


            //---------------------------------------------------------------
            // 10、直接执行QueryCommand的方式
            //---------------------------------------------------------------
            //获取数据源 -- 主要用于绑定连接的服务器,如果有多台服务器多个数据库时,可使用不同的数据源来进行绑定查找
            var provider = SubSonic.DataProviders.ProviderFactory.GetProvider();
            //定义事务,给后面的事务调用
            var batch = new BatchQuery(provider);

            var sql = string.Format("select * from {0}", BranchTable.TableName);
            //例一:获取影响记录数
            QueryCommand qcCommand = new QueryCommand(sql, provider);

            WriteLine(qcCommand.Provider.ExecuteQuery(qcCommand) + "");

            //例二:获取DataTable
            var q     = new SubSonic.Query.QueryCommand(sql, provider);
            var table = q.Provider.ExecuteDataSet(q).Tables[0];

            if (dt != null && table.Rows.Count > 0)
            {
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    WriteLine(table.Rows[i][BranchTable.Id] + " " + table.Rows[i][BranchTable.Name]);
                }
            }

            //例三:使用事务执行
            batch.QueueForTransaction(qcCommand);
            batch.ExecuteTransaction();

            //例四:直接使用数据源执行
            provider.ExecuteQuery(qcCommand);


            //----------------------------------------------------------------
            // 11、Linq查询
            //----------------------------------------------------------------
            //Linq查询方式
            var query = new Query <Branch>(db.provider);
            var posts = from p in query
                        where p.DeptCode.StartsWith("0101")
                        select p;

            foreach (var item in posts)
            {
                WriteLine(item.ToString());
            }

            query = db.GetQuery <Branch>();
            posts = from p in query
                    where p.Id > 3 && p.Id < 6
                    select p;

            foreach (var item in posts)
            {
                WriteLine(item.ToString());
            }

            //获取查询结果2
            List <Branch> li2 = query.ToList <Branch>();

            foreach (var item in li2)
            {
                WriteLine(item.ToString());
            }


            //---------------------------------------------------------------------
            // 12、Linq多表关联查询
            //---------------------------------------------------------------------
            //方法一
            var query5 = from p in Position.All()
                         join b in Branch.All() on p.Branch_Id equals b.Id
                         where b.DeptCode == "0101"
                         select p;

            foreach (var item in query5)
            {
                WriteLine(item.ToString());
            }

            //方法二
            var qry = (from p in db.Position
                       join b in db.Branch on p.Branch_Id equals b.Id
                       where b.DeptCode == "0101"
                       select new ListView
            {
                PositionName = p.Name,
                BranchName = p.Branch_Name,
                DeptCode = b.DeptCode
            });

            foreach (var item in qry)
            {
                WriteLine(item.ToString());
            }


            //-------------------------------------------------------------------------
            // 13、使用事务
            //-------------------------------------------------------------------------
            //例一
            //从部门表中查询出编号为0102的Id、名称与说明三列
            var query1 = new SubSonic.Query.Select(provider, BranchTable.Id, BranchTable.Name, BranchTable.Comment).From(
                BranchTable.TableName).Where <Branch>(x => x.DeptCode == "0102");

            //加入事务
            batch.QueueForTransaction(query1);

            //查询部门编号为0102且职位名称后面两个字为主管的所有职位
            var query2 = new SubSonic.Query.Select(provider).From <Position>().Where <Position>(x => x.Branch_DeptCode == "0102").And(
                PositionTable.Name).EndsWith("主管");

            //加入事务
            batch.QueueForTransaction(query2);
            //运行事务,不返回任何信息
            batch.ExecuteTransaction();

            //例二
            batch = new BatchQuery();
            batch.Queue(query1);
            batch.Queue(query2);
            //执行事务,并返回数据
            using (IDataReader rdr = batch.ExecuteReader())
            {
                if (rdr.Read())
                {
                    //query1 results
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        WriteLine(rdr[i] + "");
                    }
                }
                rdr.NextResult();
                if (rdr.Read())
                {
                    //query2 results
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        WriteLine(rdr[i] + "");
                    }
                }
            }

            //例三
            batch = new BatchQuery(provider);
            var query3 = from p in db.Branch
                         where p.Id > 1 && p.Id < 10
                         select p;

            batch.Queue(query3);

            var query4 = from p in db.Position
                         where p.Branch_DeptCode == "0103"
                         select p;

            batch.Queue(query4);

            //执行事务,并返回数据
            using (var rdr = batch.ExecuteReader())
            {
                if (rdr.Read())
                {
                    //query3 results
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        WriteLine(rdr[i] + "");
                    }
                }
                rdr.NextResult();
                if (rdr.Read())
                {
                    //query4 results
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        WriteLine(rdr[i] + "");
                    }
                }
            }
        }
        public void Batch_Should_Execute_Reader_And_Return_Typed_Lists_Using_Linq()
        {
            BatchQuery qry = new BatchQuery(provider);
            var pquery = new Query<Product>(provider);

            qry.Queue(from p in pquery where p.ProductID == 1 select p);
            qry.Queue(from p in pquery where p.ProductID == 2 select p);
            qry.Queue(from p in pquery where p.ProductID == 3 select p);

            bool canRead = false;
            List<Product> result1 = null;
            List<Product> result2 = null;
            List<Product> result3 = null;

            using(IDataReader rdr = qry.ExecuteReader())
            {
                result1 = rdr.ToList<Product>();
                canRead = true;
                if(rdr.NextResult())
                    result2 = rdr.ToList<Product>();

                if(rdr.NextResult())
                    result3 = rdr.ToList<Product>();

                canRead = rdr.NextResult();
            }
            Assert.True(result1.Count > 0);
            Assert.True(result2.Count > 0);
            Assert.True(result3.Count > 0);
            Assert.False(canRead);
        }
        public void Batch_Should_Build_Batched_SQL_Using_Linq()
        {
            BatchQuery qry = new BatchQuery(provider);
            var pquery = new Query<Product>(provider);

            qry.Queue(from p in pquery where p.ProductID == 1 select p);
            qry.Queue(from p in pquery where p.ProductID == 2 select p);
            qry.Queue(from p in pquery where p.ProductID == 3 select p);

            string sql = qry.BuildSqlStatement();

            Assert.Equal(3, sql.FindMatches("SELECT").Count);
        }
        private static void BatchToInsert()
        {
            Console.WriteLine("Batch Inserting Genres using Insert.Into with unescaped values.");

            IList<Genre> genres = new List<Genre>
                {
                    new Genre { Name = "Genre's First" },
                    new Genre { Name = "Genre's Second" }
                };

            BatchQuery bq = new BatchQuery(db.Provider);

            foreach (Genre genre in genres)
            {
                bq.Queue(genre.ToInsertQuery<Genre>(db.Provider));
            }

            ExecuteQuery(bq);
        }
Beispiel #39
0
        public void Batch_Should_Execute_Batched_SQL_With_Replaced_Command_Parameters_For_In_Operator()
        {
            BatchQuery qry = new BatchQuery(provider);
            qry.Queue(new Select(provider).From("Products").Where("ProductID").In(new int[] { 1, 2, 3 }));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").In(new int[] { 1, 2, 3 }));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").In(new int[] { 1, 2, 3 }));

            int sets = 1;
            bool canRead = false;
            using (IDataReader rdr = qry.ExecuteReader())
            {
                canRead = true;
                if (rdr.NextResult())
                    sets = 2;

                if (rdr.NextResult())
                    sets = 3;

                canRead = rdr.NextResult();
            }
            Assert.Equal(3, sets);
            Assert.False(canRead);
        }
        private static void SelectUsingContains(IEnumerable<string> genreContains)
        {
            Console.WriteLine("Loading genres that contain {0}.", genreContains);

            Query<Genre> genres = new Query<Genre>(db.Provider);

            var query = from genre in genres
                        where genreContains.Contains(genre.Name)
                        select genre;

            BatchQuery batch = new BatchQuery(db.Provider);
            batch.Queue(query);
            ExecuteQuery(batch);
        }
Beispiel #41
0
        private void DatabaseInitialize()
        {
            //Console.WriteLine("Database Initialize...");

            #region Create tables
            BatchQuery query = new BatchQuery(provider);
            Assembly assembly = Assembly.Load("TYD.Logging");
            string spacename = "TYD.Logging.Models";

            var migrator = new SubSonic.Oracle.Schema.Migrator(assembly);
            string[] commands = migrator.MigrateFromModel(spacename, provider);

            foreach (var s in commands)
            {
                query.QueueForTransaction(new QueryCommand(s.Trim(), provider));
            }
            query.ExecuteTransaction();
            #endregion
        }
        public void Batch_Should_Execute_Reader_And_Return_Typed_Lists()
        {
            BatchQuery qry = new BatchQuery(provider);
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(1));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(2));
            qry.Queue(new Select(provider).From("Products").Where("ProductID").IsEqualTo(3));

            bool canRead = false;
            List<Product> result1 = null;
            List<Product> result2 = null;
            List<Product> result3 = null;

            using(IDataReader rdr = qry.ExecuteReader())
            {
                result1 = rdr.ToList<Product>();
                canRead = true;
                if(rdr.NextResult())
                    result2 = rdr.ToList<Product>();

                if(rdr.NextResult())
                    result3 = rdr.ToList<Product>();

                canRead = rdr.NextResult();
            }
            Assert.True(result1.Count > 0);
            Assert.True(result2.Count > 0);
            Assert.True(result3.Count > 0);
            Assert.False(canRead);
        }