Exemple #1
0
        public void ShouldProduceValuesForIdentityColumns()
        {
            ValueStore    vs       = new ValueStore();
            DataProducer  producer = new DataProducer(vs);
            DataRowEntity row      = producer.ProduceRow(customerTable, 1);

            // check that the value of the identity column have not been generated
            Assert.That(vs.GetByKey(row.Fields[0].KeyValue), Is.Null);

            IDataConsumer consumer = GetImplementedType();

            if (consumer.Init("", options))
            {
                int counter = 0;
                consumer.ReportInsertionCallback = new Action(() =>
                {
                    counter++;
                });
                consumer.Consume(new List <DataRowEntity> {
                    row
                }, vs);

                // now assert that the identity value have been generated by the consumer
                Assert.That(row.Fields[0].FieldName, Is.EqualTo("CustomerId"), "Column should be customerID");
                Assert.That(vs.GetByKey(row.Fields[0].KeyValue), Is.Not.Null, consumer.GetType().ToString());
            }
        }
Exemple #2
0
        private static void AssertFieldsInRowHaveSomeValues(ValueStore valuestore, DataRowEntity row, int nullColumns)
        {
            var nullableFieldCounter = 0;

            foreach (var field in row.Fields)
            {
                var retreivedValue = valuestore.GetByKey(field.KeyValue);

                Console.WriteLine("{0}: {1}", field.KeyValue, retreivedValue);
                Assert.That(field.KeyValue, Is.Not.Null, field.FieldName);

                if (!field.ProducesValue)
                {
                    Assert.That(retreivedValue, Is.Not.Null, field.FieldName);
                }
                else
                {
                    Assert.That(retreivedValue, Is.Null, field.FieldName);
                }


                if (field.DataType.IsNullable)
                {
                    nullableFieldCounter++;
                    Assert.That(retreivedValue, Is.EqualTo(DBNull.Value));
                }
            }

            Assert.That(nullableFieldCounter, Is.EqualTo(nullColumns));
        }
 public string GenerateValuesStatement(DataRowEntity row, ValueStore valueStore)
 {
     return("VALUES (" +
            string.Join(", ", row.Fields
                        .Where(x => x.ProducesValue == false)
                        .Select(x => formatValue(x, valueStore)))
            + ")");
 }
        public void ShouldAddFieldsToRow()
        {
            var table = new TableEntity("dbo", "Customer");
            var row   = new DataRowEntity(table);

            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);

            Assert.That(row.Fields.Count, Is.EqualTo(1));
        }
        public void ShouldEqualIfSameInstance()
        {
            var table = new TableEntity("dbo", "Customer");
            var row2  = new DataRowEntity(table);
            var row   = new DataRowEntity(table);

            Assert.That(row, Is.Not.EqualTo(row2));
            Assert.That(row, Is.EqualTo(row));
        }
        public void ShouldInstanciate()
        {
            var table = new TableEntity("dbo", "Customer");
            var row   = new DataRowEntity(table);

            Assert.That(row.Table, Is.EqualTo(table));
            Assert.That(row.Fields, Is.Not.Null);
            Assert.That(row.Fields.Count, Is.EqualTo(0));
        }
Exemple #7
0
        public void shouldNotBeAbleToTakeValueFromColumnThatHaveNotGeneratedAnyValueYet()
        {
            ValueStore valuestore = new ValueStore();
            var        dp         = new DataProducer(valuestore);


            Action a = new Action(() =>
            {
                DataRowEntity row = dp.ProduceRow(orderTable, 1);
            });

            ExpectedExceptionHappened <ArgumentNullException>(a, "shouldNotBeAbleToTakeValueFromColumnThatHaveNotGeneratedAnyValueYet");
        }
Exemple #8
0
        public void shouldGenerateRowWithUniqueIdentifier()
        {
            ValueStore valuestore = new ValueStore();
            var        dp         = new DataProducer(valuestore);

            dp.ProduceRow(customerTable, 1);


            DataRowEntity row = dp.ProduceRow(orderTable, 1);

            Assert.That(row.Fields[3].KeyValue, Is.Not.Null);
            Assert.That(valuestore.GetByKey(row.Fields[3].KeyValue), Is.Not.Null);
        }
        public void ShouldBeAbleToAddSameFieldMultipleTimes_ForNow()
        {
            var table = new TableEntity("dbo", "Customer");
            var row   = new DataRowEntity(table);

            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);
            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);
            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);
            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);

            Assert.That(row.Fields.Count, Is.EqualTo(4));
            foreach (var f in row.Fields)
            {
                Assert.That(f, Is.Not.Null);
            }
        }
        public void ShouldBeAbleToIterateThroughTheFields()
        {
            var table = new TableEntity("dbo", "Customer");
            var row   = new DataRowEntity(table);

            row.AddField("customerid", Guid.NewGuid(), new ColumnDataTypeDefinition("int", false), true);
            row.AddField("name", Guid.NewGuid(), new ColumnDataTypeDefinition("varchar(100)", false), false);
            row.AddField("vip", Guid.NewGuid(), new ColumnDataTypeDefinition("bit", false), false);
            row.AddField("lastseen", Guid.NewGuid(), new ColumnDataTypeDefinition("datetime", false), false);

            Assert.That(row.Fields.Count, Is.EqualTo(4));
            foreach (var f in row.Fields)
            {
                Assert.That(f, Is.Not.Null);
            }
        }
        public string GenerateInsertStatement(DataRowEntity row, ValueStore valueStore)
        {
            var autoGeneratedFields = row.Fields
                                      .Where(f => f.ProducesValue);

            if (autoGeneratedFields.Count() > 0)
            {
                string outputList = String.Join(", ", autoGeneratedFields.Select(c => string.Format("INSERTED.{0} AS '{1}'", c.FieldName, c.KeyValue)));
                // Console.WriteLine(outputList);
                return(insertStatement + " OUTPUT " + outputList + " " + GenerateValuesStatement(row, valueStore));
            }
            else
            {
                return(insertStatement + " " + GenerateValuesStatement(row, valueStore));
            }
        }
Exemple #12
0
        public void ShouldProduceOneDataRow()
        {
            ValueStore valuestore = new ValueStore();
            var        dp         = new DataProducer(valuestore);

            DataRowEntity row = dp.ProduceRow(customerTable, 1);

            Assert.That(row, Is.Not.Null);
            Assert.That(row.Fields, Is.Not.Null);
            Assert.That(row.Fields.Count, Is.EqualTo(4));

            Assert.That(row.Fields[0].FieldName, Is.EqualTo(customerTable.Columns.First().ColumnName));
            Assert.That(row.Fields[0].ProducesValue, Is.True);
            Assert.That(row.Fields[0].KeyValue, Is.Not.Null);

            AssertFieldsInRowHaveSomeValues(valuestore, row, 2);
        }
        public DataRowEntity ProduceRow(ExecutionTable current)
        {
            ValidateUtil.ValidateNotNull(current, "table");
            var row = new DataRowEntity(current.Table);

            foreach (var col in current.Table.Columns)
            {
                var  value = col.GenerateValue(current.N);
                Guid key;

                if (col.Generator.IsTakingValueFromOtherColumn)
                {
                    if (value.GetType().Equals(typeof(Guid)))
                    {
                        if (!columnLastKeyMap.TryGetValue((Guid)value, out key))
                        {
                            throw new ArgumentNullException("Trying to take value from column that have not yet generated any value");
                        }
                    }
                    else
                    {
                        throw new InvalidCastException("The generator returned a non-GUID type as key when generating value from other column");
                    }
                }
                else if (col.IsIdentity)
                {
                    key   = col.ColumnIdentity;
                    value = null;
                    ValueStorage.Put(key, value);
                    columnLastKeyMap[col.ColumnIdentity] = key;
                }
                else
                {
                    key = Guid.NewGuid();
                    columnLastKeyMap[col.ColumnIdentity] = key;
                    ValueStorage.Put(key, value);
                }

                row.AddField(col.ColumnName, key, col.ColumnDataType, col.IsIdentity);
            }

            return(row);
        }
Exemple #14
0
 private void Table_ItemRemoved(IDataTableEntity arg1, DataRowEntity[] arg2)
 {
     SendItemsAyscMsg(arg1, DatabaseEntityMessageType.ItemRemmoved, arg2, null);
 }
Exemple #15
0
 private void SendItemsAyscMsg(IDataTableEntity table, DatabaseEntityMessageType messageType, DataRowEntity[] rows, DataRowEntityPropertyChangedEventArg arg)
 {
     try
     {
         string ownerTypeID;
         dic_Type_Name.TryGetValue(GetType(), out ownerTypeID);
         ServerActivator.ServerInstance.SendTableChangedAyscMsg(GetUsers(), ownerTypeID, table, messageType, rows, arg);
         //ServerActivator.ServerInstance.GetType().InvokeMember("SendTableChangedAyscMsg", BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Instance, null, ServerActivator.ServerInstance, new object[] { this, table, messageType, rows, arg });
     }
     catch (Exception e)
     {
         Debug.OutputException(e);
     }
 }
Exemple #16
0
 internal static byte[] SerializePropertyValue(BindableProperty property, DataRowEntity row)
 {
     using (var ms = new MemoryStream())
     {
         using (var pw = ProtoBufExtention.CreateProtoWriterSimplely(ms))
         {
             var o = property.GetValue(row);
             if (property.PropertyType == typeof(TimeSpan))
                 pw.WriteSimplely((TimeSpan)o);
             else
             {
                 switch (Type.GetTypeCode(property.PropertyType))
                 {
                     case TypeCode.Boolean:
                         pw.WriteSimplely((bool)o);
                         break;
                     case TypeCode.Byte:
                         pw.WriteSimplely((byte)o);
                         break;
                     case TypeCode.Char:
                         pw.WriteSimplely((char)o);
                         break;
                     case TypeCode.DateTime:
                         pw.WriteSimplely((DateTime)o);
                         break;
                     case TypeCode.Double:
                         pw.WriteSimplely((double)o);
                         break;
                     case TypeCode.Int16:
                         pw.WriteSimplely((short)o);
                         break;
                     case TypeCode.Int32:
                         pw.WriteSimplely((int)o);
                         break;
                     case TypeCode.Int64:
                         pw.WriteSimplely((long)o);
                         break;
                     case TypeCode.SByte:
                         pw.WriteSimplely((sbyte)o);
                         break;
                     case TypeCode.Single:
                         pw.WriteSimplely((float)o);
                         break;
                     case TypeCode.String:
                         pw.WriteSimplely((string)o);
                         break;
                     case TypeCode.UInt16:
                         pw.WriteSimplely((ushort)o);
                         break;
                     case TypeCode.UInt32:
                         pw.WriteSimplely((uint)o);
                         break;
                     case TypeCode.UInt64:
                         pw.WriteSimplely((ulong)o);
                         break;
                 }
             }
         }
         return ms.ToArray();
     }
 }