Exemplo n.º 1
0
        private static string Translate(QuerySource source, string queryText, DateTime runTimestamp)
        {
            var db          = new PostgreeSqlDatabase(source.ConnectionString);
            var schemeStore = new PostgreeSqlSchemaStore(db);
            var translator  = new QueryToSqlTranslator(schemeStore, source.Areas)
            {
                CurrentDate = runTimestamp
            };

            return(translator.Translate(queryText));
        }
        protected void CheckTranslate(string mappings, string sql, string expected, params int[] areas)
        {
            var inmemoryMappingStore = Parse(SpacesToTabs(mappings).Trim());
            var sqlTranslator        = new QueryToSqlTranslator(inmemoryMappingStore, areas)
            {
                CurrentDate = currentDate
            };
            var translated      = sqlTranslator.Translate(sql);
            var translatedLines = SpacesToTabs(translated.Trim())
                                  .Split(new[] { Environment.NewLine }, StringSplitOptions.None);
            var expectedLines = SpacesToTabs(expected.Trim())
                                .Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            Console.WriteLine("Input:\r\n{0}\r\n", sql);
            Console.WriteLine("Translated:\r\n{0}\r\n", translated);
            Console.WriteLine("Expected:\r\n{0}\r\n", expected);
            Assert.That(translatedLines, Is.EqualTo(expectedLines));
        }
Exemplo n.º 3
0
        private static int TranslateSql(NameValueCollection parameters)
        {
            var connectionString   = parameters["connection-string"];
            var queryFile          = parameters["query-file"];
            var parametersAreValid = !string.IsNullOrEmpty(connectionString) &&
                                     !string.IsNullOrEmpty(queryFile);

            if (!parametersAreValid)
            {
                Console.Out.WriteLine("Invalid arguments");
                Console.Out.WriteLine(
                    "Usage: Generator.exe -cmd translate-sql -connection-string <1c db connection string> -query-file <path to file with 1c query>");
                return(-1);
            }
            var db            = new PostgreeSqlDatabase(connectionString);
            var mappingSchema = new PostgreeSqlSchemaStore(db);
            var translator    = new QueryToSqlTranslator(mappingSchema, new int[0]);
            var query         = File.ReadAllText(queryFile);
            var sql           = translator.Translate(query);

            Console.Out.WriteLine(sql);
            return(0);
        }
Exemplo n.º 4
0
        public bool Execute()
        {
            var runTimestamp  = DateTime.Now;
            var s             = Stopwatch.StartNew();
            var sourceThreads = new Thread[sources.Length];

            using (var writer = new BatchWriter(target, targetTableName, 1000, historyMode))
            {
                var w = writer;
                for (var i = 0; i < sourceThreads.Length; i++)
                {
                    var source = sources[i];
                    sourceThreads[i] = new Thread(delegate(object _)
                    {
                        try
                        {
                            var mappingSchema = new PostgreeSqlSchemaStore(source.db);
                            var translator    = new QueryToSqlTranslator(mappingSchema, source.areas)
                            {
                                CurrentDate = runTimestamp
                            };
                            var sql = translator.Translate(queryText);
                            if (dumpSql)
                            {
                                Console.Out.WriteLine("\r\n[{0}]\r\n{1}\r\n====>\r\n{2}",
                                                      source.db.ConnectionString, queryText, sql);
                            }
                            source.db.Execute(sql, new object[0], c =>
                            {
                                using (var reader = c.ExecuteReader())
                                {
                                    w.EnsureTable(reader);
                                    while (reader.Read())
                                    {
                                        if (errorOccured)
                                        {
                                            throw new OperationCanceledException();
                                        }
                                        w.InsertRow(reader);
                                    }
                                }
                            });
                        }
                        catch (OperationCanceledException)
                        {
                        }
                        catch (Exception e)
                        {
                            errorOccured = true;
                            Console.Out.WriteLine("error for [{0}]\r\n{1}", source.db.ConnectionString, e);
                        }
                    });
                    sourceThreads[i].Start();
                }
                foreach (var t in sourceThreads)
                {
                    t.Join();
                }
            }
            s.Stop();
            Console.Out.WriteLine("\r\ndone, [{0}] millis", s.ElapsedMilliseconds);
            return(!errorOccured);
        }