コード例 #1
0
        private static int GenSqlMeta(NameValueCollection parameters)
        {
            var connectionString   = parameters["connection-string"];
            var dbConnectionString = parameters["db-connection-string"];
            var parametersAreValid =
                !string.IsNullOrEmpty(connectionString) &&
                !string.IsNullOrEmpty(dbConnectionString);

            if (!parametersAreValid)
            {
                Console.Out.WriteLine("Invalid arguments");
                Console.Out.WriteLine(
                    "Usage: Generator.exe -cmd gen-sql-meta -connection-string <string> -db-connection-string <connection string for PostgreeSql db>");
                return(-1);
            }
            GlobalContext globalContext = null;

            LogHelpers.LogWithTiming(string.Format("connecting to [{0}]", connectionString),
                                     () => globalContext = new GlobalContext(new GlobalContextFactory().Create(connectionString)));

            var postgreeSqlDatabase    = new PostgreeSqlDatabase(dbConnectionString);
            var postgreeSqlSchemaStore = new PostgreeSqlSchemaStore(postgreeSqlDatabase);
            var schemaCreator          = new PostgreeSqlSchemaCreator(postgreeSqlSchemaStore, postgreeSqlDatabase, globalContext);

            schemaCreator.Recreate();
            return(0);
        }
コード例 #2
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));
        }
コード例 #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);
        }
コード例 #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);
        }