Represents a table in SQL server
Beispiel #1
0
 public void Create_Column()
 {
     var c = new Column("testing", ColumnTypes.Bigint, true, null);
     var test = new Table("dbo", "test");
     test.Columns.Add(c);
     Assert.True(test.Columns.Items.Any(item => item.Name == "testing"));
 }
Beispiel #2
0
 public void No_PrimaryKey()
 {
     var c = new Constraint("ix_testing", ContraintType.Index, "testing");
     var test = new Table("dbo", "test");
     test.Constraints.Add(c);
     Assert.Null(test.PrimaryKey);
 }
Beispiel #3
0
 public void Set_PrimaryKey()
 {
     var c = new Constraint("ix_testing", ContraintType.PrimaryKey, "testing");
     var test = new Table("dbo", "test");
     test.Constraints.Add(c);
     Assert.Equal(c, test.PrimaryKey);
 }
        /// <summary>
        /// Creates the main table schema
        /// </summary>
        /// <returns></returns>
        private Table CreateMainTable()
        {
            //--main table--
            var main = new Table(GetOwner(), _tableNameHelper.JobTableName);
            main.Columns.Add(new Column("JobEventTime", ColumnTypes.Datetimeoffset, false, null));
            main.Columns.Add(new Column("JobScheduledTime", ColumnTypes.Datetimeoffset, false, null));
            main.Columns.Add(new Column("JobName", ColumnTypes.Varchar, 255, false, null));

            //add primary key constraint
            main.Constraints.Add(new Constraint("PK_" + _tableNameHelper.JobTableName, ContraintType.PrimaryKey, "JobName"));
            main.PrimaryKey.Clustered = true;
            main.PrimaryKey.Unique = true;
            return main;
        }
Beispiel #5
0
 public void Create_Script()
 {
     var c = new Column("testing", ColumnTypes.Bigint, true, null);
     var cc = new Constraint("ix_testing", ContraintType.Index, "testing");
     var test = new Table("dbo", "test");
     test.Constraints.Add(cc);
     test.Columns.Add(c);
     //set the table reference
     foreach (var ccc in test.Constraints)
     {
         ccc.Table = test.Info;
     }
     Assert.Contains("dbo", test.Script());
     Assert.Contains("test", test.Script());
 }
        /// <summary>
        /// Creates the main table schema
        /// </summary>
        /// <returns></returns>
        private Table CreateMainTable()
        {
            //--main data table--
            var main = new Table(GetOwner(), _tableNameHelper.QueueName);
            var mainPrimaryKey = new Column("QueueID", ColumnTypes.Bigint, false, null) {Identity = new Identity(1, 1)};

            main.Columns.Add(mainPrimaryKey);
            main.Columns.Add(new Column("Body", ColumnTypes.Varbinary, -1, false, null));
            main.Columns.Add(new Column("Headers", ColumnTypes.Varbinary, -1, false, null));

            //add primary key constraint
            main.Constraints.Add(new Constraint("PK_" + _tableNameHelper.QueueName, ContraintType.PrimaryKey, "QueueID"));
            main.PrimaryKey.Clustered = true;
            main.PrimaryKey.Unique = true;
            return main;
        }
Beispiel #7
0
 public void GetSet_Owner()
 {
     var test = new Table("dbo", "test") {Owner = "test1"};
     Assert.Equal("test1", test.Owner);
 }
Beispiel #8
0
 public void GetSet_Name()
 {
     var test = new Table("dbo", "test") {Name = "test1"};
     Assert.Equal("test1", test.Name);
 }
Beispiel #9
0
 public void No_PrimaryKey2()
 {
     var test = new Table("dbo", "test");
     Assert.Null(test.PrimaryKey);
 }
Beispiel #10
0
 public void Default()
 {
     var test = new Table("dbo", "test");
     Assert.Equal("dbo", test.Owner);
     Assert.Equal("test", test.Name);
 }
        /// <summary>
        /// Creates the configuration table schema.
        /// </summary>
        /// <returns></returns>
        private Table CreateConfigurationTable()
        {
            var table = new Table(GetOwner(), _tableNameHelper.ConfigurationName);
            var mainPrimaryKey = new Column("ID", ColumnTypes.Int, false, null) {Identity = new Identity(1, 1)};
            table.Columns.Add(mainPrimaryKey);
            table.Columns.Add(new Column("Configuration", ColumnTypes.Varbinary, -1, false, null));

            table.Constraints.Add(new Constraint("PK_" + _tableNameHelper.ConfigurationName, ContraintType.PrimaryKey, "ID"));
            table.PrimaryKey.Clustered = true;
            table.PrimaryKey.Unique = true;
            return table;
        }
        /// <summary>
        /// Creates the error table schema. This is a copy of the meta table, but with an exception column added. 
        /// </summary>
        /// <param name="meta">The meta.</param>
        /// <returns></returns>
        private Table CreateErrorTable(Table meta)
        {
            var metaErrors = new Table(GetOwner(), _tableNameHelper.MetaDataErrorsName);
            var primaryKey = new Column("ID", ColumnTypes.Bigint, false, null) {Identity = new Identity(1, 1)};
            metaErrors.Columns.Add(primaryKey);
            foreach (var c in meta.Columns.Items)
            {
                metaErrors.Columns.Add(c.Clone());
            }
            metaErrors.Columns.Add(new Column("LastException", ColumnTypes.Varchar, -1, true, null));
            metaErrors.Columns.Add(new Column("LastExceptionDate", ColumnTypes.Datetime, true, null));

            //add primary key constraint
            metaErrors.Constraints.Add(new Constraint("PK_" + _tableNameHelper.MetaDataErrorsName, ContraintType.PrimaryKey, "ID"));
            metaErrors.PrimaryKey.Clustered = true;
            metaErrors.PrimaryKey.Unique = true;

            //NOTE no indexes are copied from the meta table
            foreach (var c in metaErrors.Constraints)
            {
                c.Table = metaErrors.Info;
            }

            return metaErrors;
        }
        /// <summary>
        /// Creates the error tracking table schema.
        /// </summary>
        /// <returns></returns>
        private Table CreateErrorTrackingTable()
        {
            //--Error tracking table--
            var errorTracking = new Table(GetOwner(), _tableNameHelper.ErrorTrackingName);
            var errorTrackingPrimaryKey = new Column("ErrorTrackingID", ColumnTypes.Bigint, false, null)
            {
                Identity = new Identity(1, 1)
            };
            errorTracking.Columns.Add(errorTrackingPrimaryKey);

            errorTracking.Columns.Add(new Column("QueueID", ColumnTypes.Bigint, false, null));
            errorTracking.Columns.Add(new Column("ExceptionType", ColumnTypes.Varchar, 500, false, null));
            errorTracking.Columns.Add(new Column("RetryCount", ColumnTypes.Int, false, null));

            //add primary key constraint
            errorTracking.Constraints.Add(new Constraint("PK_" + _tableNameHelper.ErrorTrackingName, ContraintType.PrimaryKey, "ErrorTrackingID"));
            errorTracking.PrimaryKey.Clustered = true;
            errorTracking.PrimaryKey.Unique = true;

            errorTracking.Constraints.Add(new Constraint("IX_QueueID", ContraintType.Index, "QueueID"));

            foreach (var c in errorTracking.Constraints)
            {
                c.Table = errorTracking.Info;
            }

            return errorTracking;
        }
        /// <summary>
        /// Creates the meta data table schema.
        /// </summary>
        /// <returns></returns>
        private Table CreateMetaDataTable()
        {
            //--Meta Data Table --
            var meta = new Table(GetOwner(), _tableNameHelper.MetaDataName);
            var mainPrimaryKey = new Column("QueueID", ColumnTypes.Bigint, false, null);
            meta.Columns.Add(mainPrimaryKey);

            //add primary key constraint
            meta.Constraints.Add(new Constraint("PK_" + _tableNameHelper.MetaDataName, ContraintType.PrimaryKey, "QueueID"));
            meta.PrimaryKey.Unique = true;

            if (_options.Value.EnablePriority)
            {
                meta.Columns.Add(new Column("Priority", ColumnTypes.Tinyint, false, null));
            }

            meta.Columns.Add(new Column("QueuedDateTime", ColumnTypes.Datetime, false, null));

            if (_options.Value.EnableStatus)
            {
                meta.Columns.Add(new Column("Status", ColumnTypes.Int, false, null));
            }
            if (_options.Value.EnableDelayedProcessing)
            {
                meta.Columns.Add(new Column("QueueProcessTime", ColumnTypes.Datetime, false, null));
            }

            meta.Columns.Add(new Column("CorrelationID", ColumnTypes.Uniqueidentifier, false, null));

            if (_options.Value.EnableHeartBeat)
            {
                meta.Columns.Add(new Column("HeartBeat", ColumnTypes.Datetime, true, null));
            }

            if (_options.Value.EnableMessageExpiration || _options.Value.QueueType == QueueTypes.RpcReceive || _options.Value.QueueType == QueueTypes.RpcSend)
            {
                meta.Columns.Add(new Column("ExpirationTime", ColumnTypes.Datetime, false, null));
            }

            if (_options.Value.EnableRoute)
            {
                meta.Columns.Add(new Column("Route", ColumnTypes.Varchar, 255, true, null));
            }

            switch (_options.Value.QueueType)
            {
                case QueueTypes.RpcReceive:
                    meta.Columns.Add(new Column("SourceQueueID", ColumnTypes.Bigint, false, null));
                    break;
            }

            var clusterIndex = new List<string>();
            if (_options.Value.EnableStatus)
            {
                clusterIndex.Add("Status");
            }
            if (_options.Value.EnablePriority)
            {
                clusterIndex.Add("Priority");
            }
            if (_options.Value.EnableDelayedProcessing)
            {
                clusterIndex.Add("QueueProcessTime");
            }
            if (_options.Value.EnableRoute)
            {
                clusterIndex.Add("Route");
            }
                //add index on expiration time if needed
            if (_options.Value.EnableMessageExpiration || _options.Value.QueueType == QueueTypes.RpcReceive || _options.Value.QueueType == QueueTypes.RpcSend)
            {
                clusterIndex.Add("ExpirationTime");
            }

            switch (_options.Value.QueueType)
            {
                case QueueTypes.RpcReceive:
                    clusterIndex.Add("SourceQueueID");
                    break;
            }

            if (clusterIndex.Count > 0)
            {
                clusterIndex.Add("QueueID");
                var cluster = new Constraint("IX_DeQueue", ContraintType.Index, clusterIndex)
                {
                    Clustered = true,
                    Unique = true
                };
                meta.Constraints.Add(cluster);
            }
            else //this is a FIFO queue, just cluster on the primary key
            {
                meta.PrimaryKey.Clustered = true;
            }

            //add index on heartbeat column if enabled
            if (_options.Value.EnableHeartBeat)
            {
                meta.Constraints.Add(new Constraint("IX_HeartBeat", ContraintType.Index, "HeartBeat"));
            }

            //set the table reference
            foreach (var c in meta.Constraints)
            {
                c.Table = meta.Info;
            }

            return meta;
        }
        private Table CreateStatusTable()
        {
            //--Meta Data Table --
            var status = new Table(GetOwner(), _tableNameHelper.StatusName);
            var mainPrimaryKey = new Column("QueueID", ColumnTypes.Bigint, false, null);
            status.Columns.Add(mainPrimaryKey);

            //add primary key constraint
            status.Constraints.Add(new Constraint("PK_" + _tableNameHelper.StatusName, ContraintType.PrimaryKey, "QueueID"));
            status.PrimaryKey.Unique = true;
            status.PrimaryKey.Clustered = true;

            status.Columns.Add(new Column("Status", ColumnTypes.Int, false, null));
            status.Columns.Add(new Column("CorrelationID", ColumnTypes.Uniqueidentifier, false, null));

            //add extra user columns
            foreach (var c in _options.Value.AdditionalColumns.Values)
            {
                status.Columns.Add(c);
            }

            //add extra user constrains
            foreach (var c in _options.Value.AdditionalConstraints.Values)
            {
                status.Constraints.Add(c);
            }

            //set the table reference
            foreach (var c in status.Constraints)
            {
                c.Table = status.Info;
            }

            return status;
        }