示例#1
0
        public void TestCreateDropColumn(Type runnerType)
        {
            var runner = (IQueryRunner)Provider.GetRequiredService(runnerType);

            ResetDb(runner);

            var sqlRunner = (SqlQueryRunner)runner;
            var parser    = new SqlSchemaParser();

            var column = new Schema.Column()
            {
                SqlName      = "COL_TEST",
                BaseType     = typeof(int),
                Nullable     = true,
                OriginalType = typeof(int?),
                SqlType      = new Schema.SqlTypeInfo(),
            };

            var addColumn = parser.ParseAddColumn(DB.Units, column);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                addColumn
            }, new List <KeyValuePair <string, object> >());

            var dropColumn = parser.ParseDropColumn(DB.Units, column);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                dropColumn
            }, new List <KeyValuePair <string, object> >());
        }
示例#2
0
        public void TestCreateDropIndex(Type runnerType)
        {
            var runner = (IQueryRunner)Provider.GetRequiredService(runnerType);

            ResetDb(runner);

            var sqlRunner = (SqlQueryRunner)runner;
            var parser    = new SqlSchemaParser();

            var index = new Schema.Index()
            {
                Name    = "IX_TEST",
                Columns = new List <string>()
                {
                    nameof(TypeValue.IntValue)
                },
                Unique = true,
            };

            var addIndex = parser.ParseAddIndex(DB.TypeValues, index);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                addIndex
            }, new List <KeyValuePair <string, object> >());

            var dropIndex = parser.ParseDropIndex(DB.TypeValues, index);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                dropIndex
            }, new List <KeyValuePair <string, object> >());
        }
示例#3
0
        static List <SqlTable> ParseMetadata(DatabaseContext context)
        {
            var parser   = new SqlSchemaParser();
            var metadata = new List <SqlTable>();

            foreach (var fromQuery in context.FromQueries)
            {
                var stmt    = parser.ParseCreateTable(fromQuery);
                var columns = stmt.Columns;

                var foreignKeys = new List <SqlForeignKey>();
                foreach (var foreignKey in fromQuery.ForeignKeys)
                {
                    var foreignKeyStmt = parser.ParseAddForeignKey(fromQuery, foreignKey);
                    foreignKeys.Add(foreignKeyStmt.ForeignKey);
                }

                var indices = new List <SqlIndex>();
                foreach (var index in fromQuery.Indices)
                {
                    var indexStmt = parser.ParseAddIndex(fromQuery, index);
                    indices.Add(indexStmt.Index);
                }

                metadata.Add(new SqlTable()
                {
                    TableName   = fromQuery.TableName,
                    Columns     = columns,
                    ForeignKeys = foreignKeys,
                    Indices     = indices,
                });
            }

            return(metadata);
        }
示例#4
0
        public void EnsureMigrationTable(SqlQueryRunner runner)
        {
            var parser      = new SqlSchemaParser();
            var createTable = parser.ParseCreateTable(Context.Migrations);

            try
            {
                runner.ExecuteNonQuery(new List <SqlStatement>()
                {
                    createTable
                }, new List <KeyValuePair <string, object> >());
            }
            catch (Exception)
            {
                // Ignore exception when the table already exists.
            }
        }
示例#5
0
        public void TestCreateDropForeignKey(Type runnerType)
        {
            var runner = (IQueryRunner)Provider.GetRequiredService(runnerType);

            ResetDb(runner);

            var sqlRunner = (SqlQueryRunner)runner;
            var parser    = new SqlSchemaParser();

            var foreignKey = new Schema.ForeignKey()
            {
                ReferenceTableType = typeof(Product),
                Name    = "FK_TEST",
                Columns = new List <string>()
                {
                    nameof(Unit.ProductId)
                },
                ReferenceColumns = new List <string>()
                {
                    nameof(Product.ProductId)
                }
            };

            // TODO: add default fk in test context, and switch the order here
            var addForeignKey = parser.ParseAddForeignKey(DB.Units, foreignKey);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                addForeignKey
            }, new List <KeyValuePair <string, object> >());

            var dropForeignKey = parser.ParseDropForeignKey(DB.Units, foreignKey);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                dropForeignKey
            }, new List <KeyValuePair <string, object> >());
        }
示例#6
0
        public void TestDropAndCreateTable(Type runnerType)
        {
            var runner = (IQueryRunner)Provider.GetRequiredService(runnerType);

            ResetDb(runner);

            var sqlRunner = (SqlQueryRunner)runner;
            var parser    = new SqlSchemaParser();

            var dropTable = parser.ParseDropTable(DB.TypeValues);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                dropTable
            }, new List <KeyValuePair <string, object> >());

            var createTable = parser.ParseDropTable(DB.TypeValues);

            sqlRunner.ExecuteNonQuery(new List <SqlStatement>()
            {
                createTable
            }, new List <KeyValuePair <string, object> >());
        }