Ejemplo n.º 1
0
        public void SimpleSelect()
        {
            Net4.MySql.DataBase db = Connect();
            var generator          = new MySql.SqlGenerator();

            db.LoadSchema();

            Table historicoVentas = db.Schema.Tables.Where(t => t.Name == "historicoventa").Single();

            Select select = new Select();

            select.Table = historicoVentas;
            select.Columns.Add(new SelectColumn(historicoVentas["fecha"]));
            select.Columns.Add(new SelectColumn(historicoVentas["tipocambio"]));
            select.Columns.Add(new SelectColumn(historicoVentas["precio"]));

            Table cliente = db.Schema.Tables.Where(t => t.Name == "cliente").Single();

            SelectJoin joinCliente = new SelectJoin();

            joinCliente.Table = cliente;
            joinCliente.Columns.Add(new SelectColumn(cliente["RasonSocial"]));
            joinCliente.On.Add(new ColumnCompareFilter()
            {
                Column = historicoVentas["cliente"], ColumnToCompare = cliente["oid"]
            });

            select.Where.Add(new RangeFilter()
            {
                Column = historicoVentas["fecha"], MinValue = DateTime.Now.AddYears(-1), MaxValue = DateTime.Now
            });

            Command command = generator.Select(select);
            var     result  = db.GetDataTable(command);
        }
Ejemplo n.º 2
0
        public void ComplexSelect()
        {
            MapTypes();
            Create();

            for (int i = 0; i < 20; i++)
            {
                CustomerContact contact = new CustomerContact();

                contact.Customer           = new Customer();
                contact.Customer.LegalName = "Empresa " + i;
                contact.Customer.Phone     = i.ToString();
                contact.Customer.Email     = "*****@*****.**" + i;
                DataBase.Table <int, Customer>().Add(new KeyValuePair <int, Customer>(0, contact.Customer));

                contact.Firstname = "Argentina " + i;
                contact.LastName  = "Chichona";
                contact.BirthDate = new DateTime(1980, 1, 1).AddDays(i);
                DataBase.Table <int, CustomerContact>().Add(new KeyValuePair <int, CustomerContact>(0, contact));
            }

            Select <CustomerContact> select = new Select <CustomerContact>();

            foreach (var member in select.DataType.DataMembers)
            {
                select.Members.Add(new Operations.SelectMember(member));
            }

            SelectJoin join = new SelectJoin();

            join.JoinType = SelectJoinType.Inner;
            join.Type     = typeof(Customer);
            join.On.Add(new Filters.MemberCompareFilter()
            {
                Member = select.DataType["Customer.Id"], MemberToCompare = join.Type["id"], Operator = Data.CompareOperator.Equal
            });
            select.Joins.Add(join);

            foreach (var member in join.Type.DataMembers.Where(m => !m.Column.IsPrimaryKey))
            {
                select.Members.Add(new Operations.SelectMember(member));
            }

            foreach (CustomerContact e in DataBase.Select(select))
            {
                Console.WriteLine(e.Firstname + " " + e.Customer.LegalName);
            }

            Drop();
        }
Ejemplo n.º 3
0
        public void InnerJoinTest()
        {
            DataBase db        = Connect();
            var      generator = new OKHOSTING.Sql.MySql.SqlGenerator();

            // define table schema
            Table customer = new Table("customer");

            customer.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = customer
            });
            customer.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = customer
            });
            customer.Columns.Add(new Column()
            {
                Name = "Country", DbType = DbType.Int32, IsNullable = false, Table = customer
            });

            Table country = new Table("country");

            country.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = country
            });
            country.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = country
            });

            ForeignKey countryFK = new ForeignKey();

            countryFK.Table       = customer;
            countryFK.RemoteTable = country;
            countryFK.Name        = "FK_customer_country";
            countryFK.Columns.Add(new Tuple <Column, Column>(customer["Country"], country["id"]));
            countryFK.DeleteAction = countryFK.UpdateAction = ConstraintAction.Restrict;

            var sql = generator.Create(customer);

            db.Execute(sql);

            sql = generator.Create(country);
            db.Execute(sql);

            sql = generator.Create(countryFK);
            db.Execute(sql);

            //insert
            Insert insert2 = new Insert();

            insert2.Table = country;
            insert2.Values.Add(new ColumnValue(country["Id"], 1));
            insert2.Values.Add(new ColumnValue(country["Name"], "Mexico"));

            sql = generator.Insert(insert2);
            int affectedRows2 = db.Execute(sql);

            Assert.AreEqual(affectedRows2, 1);

            Insert insert = new Insert();

            insert.Table = customer;
            insert.Values.Add(new ColumnValue(customer["Id"], 1));
            insert.Values.Add(new ColumnValue(customer["Name"], "Angel"));
            insert.Values.Add(new ColumnValue(customer["Country"], 1));

            sql = generator.Insert(insert);
            int affectedRows = db.Execute(sql);

            Assert.AreEqual(affectedRows, 1);

            //select
            Select select = new Select();

            select.Table = customer;
            select.Columns.Add(new SelectColumn(customer["id"]));
            select.Columns.Add(new SelectColumn(customer["Name"]));

            SelectJoin join = new SelectJoin();

            join.Table = country;
            join.On.Add(new ColumnCompareFilter()
            {
                Column = customer["country"], ColumnToCompare = country["id"], Operator = Data.CompareOperator.Equal
            });
            join.Columns.Add(new SelectColumn(country["name"], "countryName"));
            join.JoinType = SelectJoinType.Inner;

            select.Joins.Add(join);

            sql = generator.Select(select);
            var result = db.GetDataTable(sql);

            foreach (IDataRow row in result)
            {
                foreach (object obj in row)
                {
                    Console.Write(obj);
                }
            }

            Assert.AreEqual(result.Count, 1);
        }
Ejemplo n.º 4
0
        public void TablesTest()
        {
            DataBase db        = Connect();
            var      generator = new OKHOSTING.Sql.MySql.SqlGenerator();

            //Create table team
            Table team = new Table("team");

            team.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = team
            });
            team.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 50, IsNullable = false, Table = team
            });
            team.Columns.Add(new Column()
            {
                Name = "Leage", DbType = DbType.Int32, IsNullable = false, Table = team
            });
            team.Columns.Add(new Column()
            {
                Name = "Country", DbType = DbType.Int32, IsNullable = false, Table = team
            });

            //Create table leage
            Table leage = new Table("leage");

            leage.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = leage
            });
            leage.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, IsNullable = false, Table = leage
            });

            //Create table country
            Table country = new Table("country");

            country.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = country
            });
            country.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, IsNullable = false, Table = country
            });

            //Create ForeignKey FK_team_country
            ForeignKey countryFK = new ForeignKey();

            countryFK.Table       = team;
            countryFK.RemoteTable = country;
            countryFK.Name        = "FK_team_country";
            countryFK.Columns.Add(new Tuple <Column, Column>(team["Country"], country["Id"]));
            countryFK.DeleteAction = countryFK.UpdateAction = ConstraintAction.Restrict;

            //Create ForeignKey FK_team_leage
            ForeignKey leageFK = new ForeignKey();

            leageFK.Table       = team;
            leageFK.RemoteTable = leage;
            leageFK.Name        = "FK_team_leage";
            leageFK.Columns.Add(new Tuple <Column, Column>(team["Leage"], leage["Id"]));
            leageFK.DeleteAction = countryFK.UpdateAction = ConstraintAction.Restrict;

            Command sql = generator.Create(team);

            db.Execute(sql);

            sql = generator.Create(leage);
            db.Execute(sql);

            sql = generator.Create(country);
            db.Execute(sql);

            //insert Country
            Insert insert = new Insert();

            insert.Table = country;
            insert.Values.Add(new ColumnValue(country["Id"], 15));
            insert.Values.Add(new ColumnValue(country["Name"], "Argentina"));

            sql = generator.Insert(insert);
            int affectedRows = db.Execute(sql);

            Assert.AreEqual(affectedRows, 1);

            insert       = new Insert();
            insert.Table = country;
            insert.Values.Add(new ColumnValue(country["Id"], 10));
            insert.Values.Add(new ColumnValue(country["Name"], "Brasil"));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert leage
            insert       = new Insert();
            insert.Table = leage;
            insert.Values.Add(new ColumnValue(leage["Id"], 100));
            insert.Values.Add(new ColumnValue(leage["Name"], "Champions"));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            insert       = new Insert();
            insert.Table = leage;
            insert.Values.Add(new ColumnValue(leage["Id"], 110));
            insert.Values.Add(new ColumnValue(leage["Name"], "Concacaff"));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert team
            insert       = new Insert();
            insert.Table = team;
            insert.Values.Add(new ColumnValue(team["Id"], 1));
            insert.Values.Add(new ColumnValue(team["Name"], "Barza"));
            insert.Values.Add(new ColumnValue(team["Leage"], 100));
            insert.Values.Add(new ColumnValue(team["Country"], 10));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            insert       = new Insert();
            insert.Table = team;
            insert.Values.Add(new ColumnValue(team["Id"], 2));
            insert.Values.Add(new ColumnValue(team["Name"], "Pumas"));
            insert.Values.Add(new ColumnValue(team["Leage"], 110));
            insert.Values.Add(new ColumnValue(team["Country"], 15));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //select
            Select select = new Select();

            select.Table = team;
            select.Columns.Add(new SelectColumn(team["id"]));
            select.Columns.Add(new SelectColumn(team["Name"]));

            //Create inner join to country
            SelectJoin join = new SelectJoin();

            join.Table = country;
            join.On.Add(new ColumnCompareFilter()
            {
                Column = team["country"], ColumnToCompare = country["id"], Operator = Data.CompareOperator.Equal
            });
            join.Columns.Add(new SelectColumn(country["name"], "countryName"));
            join.JoinType = SelectJoinType.Inner;

            select.Joins.Add(join);

            //Create inner join to leage
            SelectJoin join2 = new SelectJoin();

            join2.Table = leage;
            join2.On.Add(new ColumnCompareFilter()
            {
                Column = team["leage"], ColumnToCompare = leage["id"], Operator = Data.CompareOperator.Equal
            });
            join2.Columns.Add(new SelectColumn(leage["name"], "leageName"));
            join2.JoinType = SelectJoinType.Inner;

            select.Joins.Add(join2);
            sql = generator.Select(select);

            //delete
            Delete delete = new Delete();

            delete.Table = leage;
            delete.Where.Add(new ValueCompareFilter()
            {
                Column = leage["id"], ValueToCompare = 110, Operator = Data.CompareOperator.Equal
            });

            sql          = generator.Delete(delete);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //drop table leage
            sql = generator.Drop(leage);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(leage.Name));

            //drop table country
            sql = generator.Drop(country);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(country.Name));

            //drop table team
            sql = generator.Drop(team);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(team.Name));
        }
Ejemplo n.º 5
0
        public void MultiJoinTest()
        {
            //Open Connect to DataBase
            DataBase db        = Connect();
            var      generator = new OKHOSTING.Sql.MySql.SqlGenerator();

            // define table Customer
            Table customer = new Table("customer");

            customer.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = customer
            });
            customer.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = customer
            });

            // define table Product
            Table product = new Table("product");

            product.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = product
            });
            product.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = product
            });
            product.Columns.Add(new Column()
            {
                Name = "Price", DbType = DbType.Decimal, IsNullable = false, Table = product
            });

            // define table Tax
            Table tax = new Table("tax");

            tax.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = tax
            });
            tax.Columns.Add(new Column()
            {
                Name = "Name", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = tax
            });
            tax.Columns.Add(new Column()
            {
                Name = "Rate", DbType = DbType.Decimal, IsNullable = false, Table = tax
            });

            // define table Sale
            Table sale = new Table("sale");

            sale.Columns.Add(new Column()
            {
                Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = sale
            });
            sale.Columns.Add(new Column()
            {
                Name = "Date", DbType = DbType.Date, Table = sale
            });
            sale.Columns.Add(new Column()
            {
                Name = "Customer", DbType = DbType.Int32, IsNullable = false, Table = sale
            });
            sale.Columns.Add(new Column()
            {
                Name = "Product", DbType = DbType.Int32, IsNullable = false, Table = sale
            });
            sale.Columns.Add(new Column()
            {
                Name = "Tax", DbType = DbType.Int32, IsNullable = false, Table = sale
            });

            //define Foreign Key Sale to Customer
            ForeignKey customerFK = new ForeignKey();

            customerFK.Table       = sale;
            customerFK.RemoteTable = customer;
            customerFK.Name        = "FK_sale_customer";
            customerFK.Columns.Add(new Tuple <Column, Column>(sale["Customer"], customer["Id"]));
            customerFK.DeleteAction = customerFK.UpdateAction = ConstraintAction.Restrict;

            //define Foreign Key Sale to Product
            ForeignKey productFK = new ForeignKey();

            productFK.Table       = sale;
            productFK.RemoteTable = product;
            productFK.Name        = "FK_sale_product";
            productFK.Columns.Add(new Tuple <Column, Column>(sale["Product"], product["Id"]));
            productFK.DeleteAction = productFK.UpdateAction = ConstraintAction.Restrict;

            //define Foreign Key Sale to Tax
            ForeignKey taxFK = new ForeignKey();

            taxFK.Table       = sale;
            taxFK.RemoteTable = tax;
            taxFK.Name        = "FK_sale_tax";
            taxFK.Columns.Add(new Tuple <Column, Column>(sale["Tax"], tax["Id"]));
            taxFK.DeleteAction = taxFK.UpdateAction = ConstraintAction.Restrict;

            //Create table Customer
            var sql = generator.Create(customer);

            db.Execute(sql);

            //Create table Product
            sql = generator.Create(product);
            db.Execute(sql);

            //Create table Tax
            sql = generator.Create(tax);
            db.Execute(sql);

            //Create table Sale
            sql = generator.Create(sale);
            db.Execute(sql);

            //Create foreign Key Sale to Customer
            sql = generator.Create(customerFK);
            db.Execute(sql);

            //Create foreign Key Sale to Product
            sql = generator.Create(productFK);
            db.Execute(sql);

            //Create foreign Key Sale to Tax
            sql = generator.Create(taxFK);
            db.Execute(sql);


            //insert values into customer
            Insert insert = new Insert();

            insert.Table = customer;
            insert.Values.Add(new ColumnValue(customer["Id"], 1));
            insert.Values.Add(new ColumnValue(customer["Name"], "Joyas Loyane SA de CV"));

            sql = generator.Insert(insert);
            int affectedRows = db.Execute(sql);

            Assert.AreEqual(affectedRows, 1);

            //insert values into customer
            insert       = new Insert();
            insert.Table = customer;
            insert.Values.Add(new ColumnValue(customer["Id"], 2));
            insert.Values.Add(new ColumnValue(customer["Name"], "Cartie Joyerias SC de CV"));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert values into product
            insert       = new Insert();
            insert.Table = product;
            insert.Values.Add(new ColumnValue(product["Id"], 1));
            insert.Values.Add(new ColumnValue(product["Name"], "Hosting"));
            insert.Values.Add(new ColumnValue(product["Price"], 125.50));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert values into product
            insert       = new Insert();
            insert.Table = product;
            insert.Values.Add(new ColumnValue(product["Id"], 2));
            insert.Values.Add(new ColumnValue(product["Name"], "Web Page"));
            insert.Values.Add(new ColumnValue(product["Price"], 1300.75));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert values into tax
            insert       = new Insert();
            insert.Table = tax;
            insert.Values.Add(new ColumnValue(tax["Id"], 1));
            insert.Values.Add(new ColumnValue(tax["Name"], "IVA"));
            insert.Values.Add(new ColumnValue(tax["Rate"], 16.00));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert values into sale
            insert       = new Insert();
            insert.Table = sale;
            insert.Values.Add(new ColumnValue(sale["Id"], 1));
            insert.Values.Add(new ColumnValue(sale["Date"], DateTime.Today));
            insert.Values.Add(new ColumnValue(sale["Customer"], 1));
            insert.Values.Add(new ColumnValue(sale["Product"], 1));
            insert.Values.Add(new ColumnValue(sale["Tax"], 1));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //insert values into sale
            insert       = new Insert();
            insert.Table = sale;
            insert.Values.Add(new ColumnValue(sale["Id"], 2));
            insert.Values.Add(new ColumnValue(sale["Date"], DateTime.Today));
            insert.Values.Add(new ColumnValue(sale["Customer"], 2));
            insert.Values.Add(new ColumnValue(sale["Product"], 2));
            insert.Values.Add(new ColumnValue(sale["Tax"], 1));

            sql          = generator.Insert(insert);
            affectedRows = db.Execute(sql);
            Assert.AreEqual(affectedRows, 1);

            //select sale for customer 'Joyas Loyane SA de CV'
            Select select = new Select();

            select.Table = sale;
            select.Columns.Add(new SelectColumn(sale["id"]));
            select.Columns.Add(new SelectColumn(sale["Date"]));

            //join for get name Customer
            SelectJoin join = new SelectJoin();

            join.Table = customer;
            join.On.Add(new ColumnCompareFilter()
            {
                Column = sale["Customer"], ColumnToCompare = customer["Id"], Operator = Data.CompareOperator.Equal
            });
            join.Columns.Add(new SelectColumn(customer["Name"], "customerName"));
            join.JoinType = SelectJoinType.Inner;
            //Add Join in select
            select.Joins.Add(join);

            //join for get name Product
            SelectJoin join2 = new SelectJoin();

            join2.Table = product;
            join2.On.Add(new ColumnCompareFilter()
            {
                Column = sale["Product"], ColumnToCompare = product["Id"], Operator = Data.CompareOperator.Equal
            });
            join2.Columns.Add(new SelectColumn(product["Name"], "productName"));
            join2.JoinType = SelectJoinType.Inner;
            //Add Join in select
            select.Joins.Add(join2);

            //join for get name Tax
            SelectJoin join3 = new SelectJoin();

            join3.Table = tax;
            join3.On.Add(new ColumnCompareFilter()
            {
                Column = sale["Tax"], ColumnToCompare = tax["Id"], Operator = Data.CompareOperator.Equal
            });
            join3.Columns.Add(new SelectColumn(tax["Name"], "taxName"));
            join3.JoinType = SelectJoinType.Inner;
            //Add Join in select
            select.Joins.Add(join3);

            //Where Customer = Joyas Loyane SA de CV.
            select.Where.Add(new ValueCompareFilter()
            {
                Column = customer["Name"], ValueToCompare = "Joyas Loyane SA de CV", Operator = Data.CompareOperator.Equal
            });

            //Execute Select
            sql = generator.Select(select);
            var result = db.GetDataTable(sql);

            //Show result in Command Line
            foreach (IDataRow row in result)
            {
                foreach (object obj in row)
                {
                    Console.Write(obj);
                }
            }

            Assert.AreEqual(result.Count, 1);

            //Drop Table Sale (Firts drop the table contains foreign keys)
            sql = generator.Drop(sale);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(sale.Name));

            //Drop Table Customer
            sql = generator.Drop(customer);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(sale.Name));

            //Drop Table Product
            sql = generator.Drop(product);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(sale.Name));

            //Drop Table Tax
            sql = generator.Drop(tax);
            db.Execute(sql);
            Assert.IsFalse(db.ExistsTable(sale.Name));
        }