Beispiel #1
0
 public string GenerateSql(Action<ISqlDumper> dmpFunc)
 {
     var sw = new StringWriter();
     var sqlo = new SqlOutputStream(SqliteDatabaseFactory.Instance.CreateDialect(), sw, new SqlFormatProperties());
     var dmp = SqliteDatabaseFactory.Instance.CreateDumper(sqlo, new SqlFormatProperties());
     dmpFunc(dmp);
     return sw.ToString();
 }
        public static string GenerateSql(IDatabaseFactory factory, Action <ISqlDumper> func)
        {
            var sw  = new StringWriter();
            var so  = new SqlOutputStream(factory.CreateDialect(), sw, new SqlFormatProperties());
            var dmp = factory.CreateDumper(so, new SqlFormatProperties());

            func(dmp);
            return(sw.ToString());
        }
Beispiel #3
0
 public static string GenerateScript(this IDatabaseFactory factory, Action<ISqlDumper> script, SqlFormatProperties props)
 {
     StringWriter sw = new StringWriter();
     ISqlDumper dmp;
     var so = new SqlOutputStream(factory.CreateDialect(), sw, props);
     dmp = factory.CreateDumper(so, props);
     script(dmp);
     return sw.ToString();
 }
Beispiel #4
0
        public SqlScriptCompiler(IDatabaseFactory factory, DataSyncSqlModel datasync, IShellContext context, string procName)
        {
            _context = context;
            _procName = procName;
            _datasync = datasync;
            _factory = factory;

            _sw = new StringWriter();
            var so = new SqlOutputStream(factory.CreateDialect(), _sw, new SqlFormatProperties());
            so.OverrideCommandDelimiter(";");
            _dmp = factory.CreateDumper(so, new SqlFormatProperties());
        }
Beispiel #5
0
 public static string GenerateSql(IDatabaseFactory factory, Action<ISqlDumper> func)
 {
     var sw = new StringWriter();
     var so = new SqlOutputStream(factory.CreateDialect(), sw, new SqlFormatProperties());
     var dmp = factory.CreateDumper(so, new SqlFormatProperties());
     func(dmp);
     return sw.ToString();
 }
Beispiel #6
0
        public void GenCommandSql(Action<ISqlDumper> dumpSql)
        {
            var sw = new StringWriter();
            var so = new SqlOutputStream(Factory.CreateDialect(), sw, new SqlFormatProperties());
            so.OverrideCommandDelimiter(";");

            var dmp = Factory.CreateDumper(so, new SqlFormatProperties());
            dumpSql(dmp);

            string cmdText = sw.ToString();

            var variables = Regex.Matches(cmdText, @"###\(([^\)]+)\)###");
            if (variables.Count > 0)
            {
                var processedVars = new HashSet<string>();
                PutCmd("^set @SqlTemplate = %v; &n", cmdText);
                foreach (Match varItem in variables)
                {
                    string varName = varItem.Groups[1].Value;
                    if (processedVars.Contains(varName)) continue;
                    processedVars.Add(varName);
                    PutCmd("^set @SqlTemplate = ^replace(@SqlTemplate, %v, %s); &n", $"###({varName})###", "@" + varName);
                }
                PutCmd("exec (@SqlTemplate); &n");
            }
            else
            {
                Dumper.Put("&r"); // dump separator if needed
                Dumper.WriteRaw(cmdText);
                Dumper.EndCommand();
                Dumper.Put("&d"); // mark data dumped state
            }
        }
Beispiel #7
0
        private void TestDiff(Action<DatabaseInfo> mangle, string expectedResult)
        {
            var db1 = new DatabaseInfo();
            var t1 = new TableInfo(db1)
                {
                    Name = "t1",
                    Schema = "dbo",
                };
            t1.Columns.Add(new ColumnInfo(t1)
                {
                    Name = "c1",
                    DataType = "int",
                    NotNull = true,
                    CommonType = new DbTypeInt(),
                });
            t1.Columns.Add(new ColumnInfo(t1)
                {
                    Name = "c2",
                    DataType = "int",
                    NotNull = true,
                    CommonType = new DbTypeInt(),
                });

            var ix = new IndexInfo(t1);
            ix.Columns.Add(new ColumnReference { RefColumn = t1.Columns[0] });
            ix.ConstraintName = "ix1";
            t1.Indexes.Add(ix);

            var pk = new PrimaryKeyInfo(t1);
            pk.Columns.Add(new ColumnReference {RefColumn = t1.Columns[0]});
            pk.ConstraintName = "pk_t1";
            t1.PrimaryKey = pk;

            db1.Tables.Add(t1);

            var v1 = new ViewInfo(db1)
                {
                    Name = "v1",
                    Schema = "dbo",
                    CreateSql = "create view v1 as select * from t1",
                };
            db1.Views.Add(v1);


            var db2 = db1.CloneDatabase();
            mangle(db2);
            var plan = new AlterPlan(db1);
            DbDiffTool.AlterDatabase(plan, db1, db2, new DbDiffOptions());
            var caps = SqlServerDatabaseFactory.Instance.DumperCaps;
            plan.AddLogicalDependencies(caps, new DbDiffOptions());
            plan.Transform(caps, new DbDiffOptions());

            var runner = plan.CreateRunner();
            var sw = new StringWriter();
            var sqlo = new SqlOutputStream(SqlServerDatabaseFactory.Instance.CreateDialect(), sw, new SqlFormatProperties());
            var dmp = SqlServerDatabaseFactory.Instance.CreateDumper(sqlo, new SqlFormatProperties());
            runner.Run(dmp, new DbDiffOptions());
            string sql = sw.ToString();
            Assert.IsNotNull(sql);
            //string expectedTran = TransformSql(expectedResult);
            //string sqlTran = TransformSql(sql);
            //for(int i = 0; i < expectedResult.Length; i++)
            //{
            //    Assert.AreEqual(expectedTran[i], sqlTran[i]);
            //}
            Assert.AreEqual(TransformSql(expectedResult), TransformSql(sql));
        }