Beispiel #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);
        }
Beispiel #2
0
        public void EnsureTable(DbDataReader dbReader)
        {
            var reader = (NpgsqlDataReader)dbReader;

            lock (lockObject)
            {
                var readerColumns = PostgreeSqlDatabase.GetColumns(reader);
                if (columns != null)
                {
                    CheckColumns(columns, "original", readerColumns, "current");
                    return;
                }
                columns = readerColumns;
                if (historyMode)
                {
                    if (!target.TableExists(tableName))
                    {
                        target.CreateTable(tableName, columns);
                    }
                    else
                    {
                        var existingColumns = target.GetColumns(tableName);
                        CheckColumns(existingColumns, "existing", columns, "new");
                    }
                }
                else
                {
                    if (target.TableExists(tableName))
                    {
                        target.DropTable("dbo." + tableName);
                    }
                    target.CreateTable(tableName, columns);
                }
            }
        }
 public Simple1CSchemaCreator(PostgreeSqlSchemaStore store,
                              PostgreeSqlDatabase database,
                              GlobalContext globalContext)
 {
     this.store         = store;
     this.database      = database;
     this.globalContext = globalContext;
 }
Beispiel #4
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));
        }
Beispiel #5
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);
        }
 public PostgreeSqlSchemaStore(PostgreeSqlDatabase database)
 {
     this.database = database;
 }
Beispiel #7
0
        internal static void Execute(QuerySource[] sources, string queryText, IWriter writer,
                                     ParallelOptions options, bool dumpSql, Dictionary <string, object> parameters)
        {
            RowAccessor rowAccessor  = null;
            var         locker       = new object();
            var         runTimestamp = DateTime.Now;
            var         writeStarted = false;

            try
            {
                Parallel.ForEach(sources, options, (source, state) =>
                {
                    try
                    {
                        if (state.ShouldExitCurrentIteration)
                        {
                            return;
                        }
                        var sql = Translate(source, queryText, runTimestamp);
                        if (dumpSql)
                        {
                            Console.Out.WriteLine("\r\n[{0}]\r\n{1}\r\n====>\r\n{2}",
                                                  source.ConnectionString, queryText, sql);
                        }
                        if (state.ShouldExitCurrentIteration)
                        {
                            return;
                        }
                        var db = new PostgreeSqlDatabase(source.ConnectionString);
                        db.Execute(sql, parameters, c =>
                        {
                            if (state.ShouldExitCurrentIteration)
                            {
                                return;
                            }
                            using (var reader = (NpgsqlDataReader)c.ExecuteReader())
                            {
                                if (state.ShouldExitCurrentIteration)
                                {
                                    return;
                                }
                                var columns = DatabaseHelpers.GetColumns(reader);
                                lock (locker)
                                    if (rowAccessor == null)
                                    {
                                        rowAccessor = new RowAccessor(columns);
                                        writer.BeginWrite(columns);
                                        writeStarted = true;
                                    }
                                    else
                                    {
                                        DatabaseHelpers.CheckColumnsAreEqual(rowAccessor.Columns, "original", columns, "current");
                                    }
                                if (state.ShouldExitCurrentIteration)
                                {
                                    return;
                                }
                                while (reader.Read())
                                {
                                    if (state.ShouldExitCurrentIteration)
                                    {
                                        return;
                                    }
                                    lock (locker)
                                    {
                                        rowAccessor.Reader = reader;
                                        writer.Write(rowAccessor);
                                    }
                                }
                            }
                        });
                    }
                    catch (Exception e)
                    {
                        const string messageFormat = "error has occurred for database [{0}]";
                        throw new InvalidOperationException(
                            string.Format(messageFormat, source.ConnectionString), e);
                    }
                });
            }
            finally
            {
                if (writeStarted)
                {
                    writer.EndWrite();
                }
            }
        }