Exemple #1
0
        public void Bim(
            [Option(LongName = "connectionString", ShortName = "c")]
            string connectionString,
            [Option(LongName = "sqlType", ShortName = "t")]
            string sqlType,
            [Option(LongName = "databaseName", ShortName = "b")]
            string databaseName,
            [Option(LongName = "patternFileName", ShortName = "p")]
            string patternFileName)
        {
            var version = SqlEngineVersions.GetVersion(sqlType);

            var connString = new NamedConnectionString(
                version.GetType().Name,
                version.ProviderName,
                connectionString,
                version.VersionString);

            var context = CreateContext(version);

            var ddlReader = DataDefinitionReaderFactory.CreateDataDefinitionReader(connString, context, null);

            var dd = ddlReader.GetDatabaseDefinition();

            var documenterContext = CreateDocumenterContext(context, patternFileName);

            var generator = new BimGenerator(documenterContext, version, databaseName);

            generator.Generate(dd);
        }
Exemple #2
0
        public void Generate(
            [Option(LongName = "connectionString", ShortName = "c", Description = "Provide a valid connection string to the database")]
            string connectionString,
            [Option(LongName = "singleOrMulti", ShortName = "m", Description = "multi for multi file, single for single file generation")]
            string singleOrMulti,
            [Option(LongName = "sqlType", ShortName = "t")]
            string sqlType,
            [Option(LongName = "namespace", ShortName = "n")]
            string @namespace,
            [Option(LongName = "newDatabaseName", ShortName = "b")]
            string newDatabaseName,
            [Option(LongName = "patternFileName", ShortName = "p")]
            string patternFileName,
            [Option(LongName = "flags", ShortName = "f")]
            List <string> flags)
        {
            var version = SqlEngineVersions.GetVersion(sqlType);

            var connString = new NamedConnectionString(
                version.GetType().Name,
                version.ProviderName,
                connectionString,
                version.VersionString);

            var context = CreateContext(version);

            var ddlReader = DataDefinitionReaderFactory.CreateDataDefinitionReader(connString, context, null);

            var dd = ddlReader.GetDatabaseDefinition();

            var generatorContext = CreateGeneratorContext(context, patternFileName);

            if (flags != null)
            {
                SetSettingsFromFlags(flags, generatorContext.GeneratorSettings);
            }

            var writer    = CSharpWriterFactory.GetCSharpWriter(version, generatorContext, newDatabaseName);
            var generator = new CSharpGenerator(writer, version, newDatabaseName, @namespace);

            if (singleOrMulti == "s" || singleOrMulti == "single")
            {
                generator.GenerateSingleFile(dd, newDatabaseName + ".cs");
            }
            else
            {
                generator.GenerateMultiFile(dd);
            }
        }
        public static IDataDefinitionReader CreateDataDefinitionReader(NamedConnectionString connectionString, Context context, SchemaNamesToRead schemaNames)
        {
            var sqlEngineVersion = connectionString.GetSqlEngineVersion();

            if (sqlEngineVersion is MsSqlVersion)
            {
                return(new MsSql2016DataDefinitionReader(connectionString, context, schemaNames));
            }

            if (sqlEngineVersion is OracleVersion)
            {
                return(new Oracle12cDataDefinitionReader(connectionString, context, schemaNames));
            }

            throw new NotImplementedException($"Not implemented {sqlEngineVersion}.");
        }
        public static DatabaseConnection GetNewConnection(NamedConnectionString connectionString, IProcess process, int maxRetryCount = 5, int retryDelayMilliseconds = 2000)
        {
            if (string.IsNullOrEmpty(connectionString.ProviderName))
            {
                var ex = new EtlException(process, "missing provider name for connection string");
                ex.Data["ConnectionStringName"] = connectionString.Name;
                ex.AddOpsMessage("missing provider name for connection string key: " + connectionString.Name);
                throw ex;
            }

            var iocUid = 0;

            var connection = _connectionManager.GetNewConnection(connectionString, maxRetryCount, retryDelayMilliseconds,
                                                                 onOpening: (connectionString, connection) =>
            {
                iocUid = process.Context.RegisterIoCommandStart(process, IoCommandKind.dbConnection, connectionString.Name, connection.ConnectionTimeout, "open connection", Transaction.Current.ToIdentifierString(), null,
                                                                "opening database connection to {ConnectionStringName} ({Provider})", connectionString.Name, connectionString.GetFriendlyProviderName());
            },
                                                                 onOpened: (connectionString, connection, retryCount) =>
            {
                process.Context.RegisterIoCommandSuccess(process, IoCommandKind.dbConnection, iocUid, null);
            },
                                                                 onError: (connectionString, connection, retryCount, ex) =>
            {
                process.Context.RegisterIoCommandFailed(process, IoCommandKind.dbConnection, iocUid, null, ex);

                if (retryCount < maxRetryCount)
                {
                    process.Context.Log(LogSeverity.Error, process, "can't connect to database, connection string key: {ConnectionStringName} ({Provider}), retrying in {DelayMsec} msec (#{AttemptIndex}): {ExceptionMessage}",
                                        connectionString.Name, connectionString.GetFriendlyProviderName(), retryDelayMilliseconds * (retryCount + 1), retryCount, ex.Message);

                    process.Context.LogOps(LogSeverity.Error, process, "can't connect to database, connection string key: {ConnectionStringName} ({Provider}), retrying in {DelayMsec} msec (#{AttemptIndex}): {ExceptionMessage}",
                                           connectionString.Name, connectionString.GetFriendlyProviderName(), retryDelayMilliseconds * (retryCount + 1), retryCount, ex.Message);
                }
                else
                {
                    var exception = new EtlException(process, "can't connect to database", ex);
                    exception.AddOpsMessage(string.Format(CultureInfo.InvariantCulture, "can't connect to database, connection string key: {0}, message: {1}", connectionString.Name, ex.Message));
                    exception.Data.Add("ConnectionStringName", connectionString.Name);
                    exception.Data.Add("ProviderName", connectionString.ProviderName);
                    exception.Data.Add("NumberOfAttempts", maxRetryCount + 1);
                    throw exception;
                }
            });

            return(connection);
        }
Exemple #5
0
        public void Check(
            [Option(LongName = "connectionString", ShortName = "c")]
            string connectionString,
            [Option(LongName = "sqlType", ShortName = "t")]
            string sqlType,
            [Option(LongName = "patternFileName", ShortName = "p")]
            string patternFileName,
            [Option(LongName = "flags", ShortName = "f")]
            List <string> flags)
        {
            var version = SqlEngineVersions.GetVersion(sqlType);

            var connString = new NamedConnectionString(
                version.GetType().Name,
                version.ProviderName,
                connectionString,
                version.VersionString);

            var context = CreateContext(version);

            var sqlExecuter  = SqlExecuterFactory.CreateSqlExecuter(connString, context);
            var databaseName = sqlExecuter.GetDatabase();

            var ddlReader = DataDefinitionReaderFactory.CreateDataDefinitionReader(connString, context, null);

            var dd = ddlReader.GetDatabaseDefinition();

            var documenterContext = CreateDocumenterContext(context, patternFileName);

            if (flags != null)
            {
                SetSettingsFromFlags(flags, documenterContext.DocumenterSettings);
            }

            var schemaCheckerDocumenter = new SchemaCheckerDocumenter(documenterContext, version, databaseName, null);

            schemaCheckerDocumenter.Document(dd);
        }
Exemple #6
0
        public void DropAll(
            [Option(LongName = "connectionString", ShortName = "c")]
            string connectionString,
            [Option(LongName = "sqlType", ShortName = "t")]
            string sqlType
            )
        {
            var version = SqlEngineVersions.GetVersion(sqlType);

            var connString = new NamedConnectionString("", version.ProviderName, connectionString, version.VersionString);

            var context = CreateContext(version);

            var generator = SqlGeneratorFactory.CreateGenerator(version, context);

            var executer = SqlExecuterFactory.CreateSqlExecuter(connString, generator);
            var dc       = new DatabaseCreator(null, executer);

            dc.DropAllViews();
            dc.DropAllForeignKeys();
            dc.DropAllTables();
            // TODO needs databasedefinition
            // dc.DropAllSchemas();
        }
 public static ConnectionStringFields GetKnownConnectionStringFields(this NamedConnectionString connectionString)
 {
     return(SqlEngineSemanticFormatter.GetFormatter(connectionString).GetKnownConnectionStringFields(connectionString));
 }
Exemple #8
0
        private static IEvaluable CreateSourceTableInputProcess(DwhTableBuilder builder, DateTimeOffset?maxRecordTimestamp, RelationalModel sourceModel, NamedConnectionString sourceConnectionString, AdoNetReaderConnectionScope readerScope, SourceReadSqlStatementCustomizerDelegate sqlStatementCustomizer, string customWhereClause)
        {
            var whereClauseList = new List <string>();

            if (customWhereClause != null)
            {
                whereClauseList.Add(customWhereClause);
            }

            var parameterList = new Dictionary <string, object>();

            sqlStatementCustomizer?.Invoke(builder, whereClauseList, parameterList);

            if (maxRecordTimestamp != null)
            {
                whereClauseList.Add(builder.Table.GetRecordTimestampIndicatorColumn().NameEscaped(builder.DwhBuilder.ConnectionString) + " >= @MaxRecordTimestamp");
                parameterList.Add("MaxRecordTimestamp", maxRecordTimestamp.Value);
            }

            var sourceTableName = builder.Table.GetSourceTableNameOverride() ?? builder.Table.Name;
            var sourceSqlTable  = sourceModel[builder.Table.Schema.Name] != null
                ? sourceModel[builder.Table.Schema.Name][sourceTableName]
                : sourceModel.DefaultSchema[sourceTableName];

            return(new AdoNetDbReader(builder.ResilientTable.Topic, "SourceTableReader")
            {
                ConnectionString = sourceConnectionString,
                CustomConnectionCreator = readerScope != null ? readerScope.GetConnection : (ConnectionCreatorDelegate)null,
                TableName = sourceSqlTable.EscapedName(builder.DwhBuilder.ConnectionString),
                CustomWhereClause = whereClauseList.Count == 0
                    ? null
                    : string.Join(" and ", whereClauseList),
                Parameters = parameterList,
                ColumnConfiguration = sourceSqlTable.Columns.Select(column =>
                                                                    new ReaderColumnConfiguration(column.Name, null, /*GetConverter(column.Type.SqlTypeInfo), */ NullSourceHandler.SetSpecialValue, InvalidSourceHandler.WrapError)
                                                                    ).ToList(),
            });
        }
 public static void TestConnection(NamedConnectionString connectionString)
 {
     _connectionManager.TestConnection(connectionString);
 }
 public static string EscapedName(this RelationalTable table, NamedConnectionString connectionString)
 {
     return(connectionString.Escape(table.Name, table.Schema.Name));
 }
 public static string NameEscaped(this RelationalColumn column, NamedConnectionString connectionString)
 {
     return(connectionString.Escape(column.Name));
 }
 public MsSql2016DataDefinitionReader(NamedConnectionString connectionString, Context context, SchemaNamesToRead schemaNames)
     : base(new MsSql2016Executer(connectionString, new MsSql2016Generator(context)), schemaNames)
 {
 }
 public string CreateStatement(NamedConnectionString connectionString, List <string> rowStatements)
 {
     return("INSERT INTO " + _tableDefinition.TableName + " (" + _dbColumns + ") VALUES \n" + string.Join(",\n", rowStatements) + ";");
 }