public SqlBuilderTrackingTable(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup)
 {
     this.tableDescription = tableDescription;
     this.setup            = setup;
     this.trackingName     = trackingName;
     this.sqlDbMetadata    = new SqlDbMetadata();
 }
Ejemplo n.º 2
0
        internal async Task <IEnumerable <SyncColumn> > GetColumnsAsync(DbConnection connection, DbTransaction transaction)
        {
            var schema  = SqlManagementUtils.GetUnquotedSqlSchemaName(tableName);
            var columns = new List <SyncColumn>();
            // Get the columns definition
            var syncTableColumnsList = await SqlManagementUtils.GetColumnsForTableAsync((SqlConnection)connection, (SqlTransaction)transaction, this.tableName.ToString(), schema).ConfigureAwait(false);

            var sqlDbMetadata = new SqlDbMetadata();

            foreach (var c in syncTableColumnsList.Rows.OrderBy(r => (int)r["column_id"]))
            {
                var typeName      = c["type"].ToString();
                var name          = c["name"].ToString();
                var maxLengthLong = Convert.ToInt64(c["max_length"]);

                // Gets the datastore owner dbType
                var datastoreDbType = (SqlDbType)sqlDbMetadata.ValidateOwnerDbType(typeName, false, false, maxLengthLong);
                // once we have the datastore type, we can have the managed type
                var columnType = sqlDbMetadata.ValidateType(datastoreDbType);

                var sColumn = new SyncColumn(name, columnType);
                sColumn.OriginalDbType   = datastoreDbType.ToString();
                sColumn.Ordinal          = (int)c["column_id"];
                sColumn.OriginalTypeName = c["type"].ToString();
                sColumn.MaxLength        = maxLengthLong > int.MaxValue ? int.MaxValue : (int)maxLengthLong;
                sColumn.Precision        = (byte)c["precision"];
                sColumn.Scale            = (byte)c["scale"];
                sColumn.AllowDBNull      = (bool)c["is_nullable"];
                sColumn.IsAutoIncrement  = (bool)c["is_identity"];
                sColumn.IsUnique         = c["is_unique"] != DBNull.Value ? (bool)c["is_unique"] : false;
                sColumn.IsCompute        = (bool)c["is_computed"];
                sColumn.DefaultValue     = c["defaultvalue"] != DBNull.Value ? c["defaultvalue"].ToString() : null;

                if (sColumn.IsAutoIncrement)
                {
                    sColumn.AutoIncrementSeed = Convert.ToInt32(c["seed"]);
                    sColumn.AutoIncrementStep = Convert.ToInt32(c["step"]);
                }

                switch (sColumn.OriginalTypeName.ToLowerInvariant())
                {
                case "nchar":
                case "nvarchar":
                    sColumn.IsUnicode = true;
                    break;

                default:
                    sColumn.IsUnicode = false;
                    break;
                }

                // No unsigned type in SQL Server
                sColumn.IsUnsigned = false;

                columns.Add(sColumn);
            }

            return(columns);
        }
 public SqlBuilderTrackingTable(DmTable tableDescription, DbConnection connection, DbTransaction transaction = null)
 {
     this.connection       = connection as SqlConnection;
     this.transaction      = transaction as SqlTransaction;
     this.tableDescription = tableDescription;
     (this.tableName, this.trackingName) = SqlBuilder.GetParsers(this.tableDescription);
     this.sqlDbMetadata = new SqlDbMetadata();
 }
Ejemplo n.º 4
0
 public SqlBuilderTrackingTable(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup, DbConnection connection, DbTransaction transaction = null)
 {
     this.connection       = connection as SqlConnection;
     this.transaction      = transaction as SqlTransaction;
     this.tableDescription = tableDescription;
     this.setup            = setup;
     this.tableName        = tableName;
     this.trackingName     = trackingName;
     this.sqlDbMetadata    = new SqlDbMetadata();
 }
Ejemplo n.º 5
0
 public SqlChangeTrackingBuilderProcedure(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup)
     : base(tableDescription, tableName, trackingName, setup)
 {
     this.tableDescription = tableDescription;
     this.setup            = setup;
     this.tableName        = tableName;
     this.trackingName     = trackingName;
     this.sqlObjectNames   = new SqlObjectNames(this.tableDescription, tableName, trackingName, this.setup);
     this.sqlDbMetadata    = new SqlDbMetadata();
 }
Ejemplo n.º 6
0
        public SqlChangeTrackingBuilderProcedure(SyncTable tableDescription, DbConnection connection, DbTransaction transaction = null)
            : base(tableDescription, connection, transaction)
        {
            this.connection  = connection as SqlConnection;
            this.transaction = transaction as SqlTransaction;

            this.tableDescription = tableDescription;
            (this.tableName, this.trackingName) = SqlTableBuilder.GetParsers(tableDescription);
            this.sqlObjectNames = new SqlObjectNames(this.tableDescription);
            this.sqlDbMetadata  = new SqlDbMetadata();
        }
Ejemplo n.º 7
0
        public SqlSyncAdapter(DmTable tableDescription, DbConnection connection, DbTransaction transaction) : base(tableDescription)
        {
            var sqlc = connection as SqlConnection;

            this.connection = sqlc ?? throw new InvalidCastException("Connection should be a SqlConnection");

            this.transaction = transaction as SqlTransaction;

            this.sqlObjectNames = new SqlObjectNames(tableDescription);
            this.sqlMetadata    = new SqlDbMetadata();
        }
Ejemplo n.º 8
0
        public SqlTableBuilder(SyncTable tableDescription, ParserName tableName, ParserName trackingTableName, SyncSetup setup, string scopeName)
            : base(tableDescription, tableName, trackingTableName, setup, scopeName)
        {
            this.SqlObjectNames = new SqlObjectNames(tableDescription, tableName, trackingTableName, setup, scopeName);
            this.SqlDbMetadata  = new SqlDbMetadata();

            this.sqlBuilderProcedure     = new SqlBuilderProcedure(tableDescription, tableName, trackingTableName, Setup, scopeName);
            this.sqlBuilderTable         = new SqlBuilderTable(tableDescription, tableName, trackingTableName, Setup);
            this.sqlBuilderTrackingTable = new SqlBuilderTrackingTable(tableDescription, tableName, trackingTableName, Setup);
            this.sqlBuilderTrigger       = new SqlBuilderTrigger(tableDescription, tableName, trackingTableName, Setup, scopeName);
        }
Ejemplo n.º 9
0
        public SqlSyncAdapter(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup, DbConnection connection, DbTransaction transaction) : base(tableDescription, setup)
        {
            var sqlc = connection as SqlConnection;

            this.connection = sqlc ?? throw new InvalidCastException("Connection should be a SqlConnection");

            this.transaction = transaction as SqlTransaction;

            this.sqlObjectNames = new SqlObjectNames(tableDescription, tableName, trackingName, setup);
            this.sqlMetadata    = new SqlDbMetadata();
        }
Ejemplo n.º 10
0
        public SqlChangeTrackingBuilderProcedure(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup, DbConnection connection, DbTransaction transaction = null)
            : base(tableDescription, tableName, trackingName, setup, connection, transaction)
        {
            this.connection  = connection as SqlConnection;
            this.transaction = transaction as SqlTransaction;

            this.tableDescription = tableDescription;
            this.setup            = setup;
            this.tableName        = tableName;
            this.trackingName     = trackingName;
            this.sqlObjectNames   = new SqlObjectNames(this.tableDescription, tableName, trackingName, this.setup);
            this.sqlDbMetadata    = new SqlDbMetadata();
        }
Ejemplo n.º 11
0
 public SqlSyncAdapter(SyncTable tableDescription, ParserName tableName, ParserName trackingName, SyncSetup setup) : base(tableDescription, setup)
 {
     this.sqlObjectNames = new SqlObjectNames(tableDescription, tableName, trackingName, setup);
     this.sqlMetadata    = new SqlDbMetadata();
 }