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); }
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; }
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)); }
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; }
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(); } } }