Esempio n. 1
0
        private static Func <IDataReader, T> GetDynamicDeserializer <T>(IDataRecord reader, int startBound = 0, int length = -1, bool returnNullIfFirstMissing = false)
        {
            if (length == -1)
            {
                length = reader.FieldCount - startBound;
            }

            return
                (r =>
            {
                IDictionary <string, object> row = new Dictionary <string, object>(length);
                for (var i = startBound; i < startBound + length; i++)
                {
                    var tmp = r.GetValue(i);
                    tmp = tmp == DBNull.Value ? null : tmp;
                    row[r.GetName(i)] = tmp;
                    if (returnNullIfFirstMissing && i == startBound && tmp == null)
                    {
                        return default(T);
                    }
                }
                //we know this is an object so it will not box
                return (T)(object)FastExpando.Attach(row);
            });
        }
        private static Func <IDataReader, object> GetDynamicDeserializer(IDataRecord reader, int startBound, int length, bool returnNullIfFirstMissing)
        {
            var fieldCount = reader.FieldCount;

            if (length == -1)
            {
                length = fieldCount - startBound;
            }

            if (fieldCount <= startBound)
            {
                throw new ArgumentException("fieldCount <= startBound", "splitOn");
            }
            return
                (r =>
            {
                IDictionary <string, object> row = new Dictionary <string, object>(length);
                for (var i = startBound; i < startBound + length; i++)
                {
                    var tmp = r.GetValue(i);
                    tmp = tmp == DBNull.Value ? null : tmp;
                    row[r.GetName(i)] = tmp;
                    if (returnNullIfFirstMissing && i == startBound && tmp == null)
                    {
                        return null;
                    }
                }
                return FastExpando.Attach(row);
            });
        }
        public void ReturnValueCanFillInADynamic()
        {
            dynamic output = new FastExpando();

            Connection().Execute("ReturnAValue", outputParameters: (object)output);
            Assert.AreEqual(11, output["Return_Value"]);
        }
Esempio n. 4
0
        public static Func <IDataReader, object> GetDynamicDeserializer(IDataRecord reader, int startBound, int length, bool returnNullIfFirstMissing)
        {
            var fieldCount = reader.FieldCount;

            if (length == -1)
            {
                length = fieldCount - startBound;
            }

            if (fieldCount <= startBound)
            {
                throw new ArgumentException("When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id", "splitOn");
            }

            return
                (r =>
            {
                IDictionary <string, object> row = new Dictionary <string, object>(length);
                for (var i = startBound; i < startBound + length; i++)
                {
                    var tmp = r.GetValue(i);
                    tmp = tmp == DBNull.Value ? null : tmp;
                    row[r.GetName(i)] = tmp;
                    if (returnNullIfFirstMissing && i == startBound && tmp == null)
                    {
                        return null;
                    }
                }
                //we know this is an object so it will not box
                return FastExpando.Attach(row);
            });
        }
Esempio n. 5
0
        public void GeographyParametersArePassedCorrectly()
        {
            // single value query
            var point   = SqlGeography.Point(0, 0, 4326);
            var results = Connection().Query <SqlGeography>("MappingTestProcGeography", new { geo = point });

            Assert.That(results[0].STEquals(point).IsTrue);

            // class return value
            var list = Connection().Query <TestGeography>("MappingTestProcGeography", new { geo = point });

            Assert.That(list[0].Geo.STEquals(point).IsTrue);

            // dynamic parameter
            dynamic p = new FastExpando();

            p["Geo"] = point;
            results  = Connection().Query <SqlGeography>("MappingTestProcGeography", (object)p);
            Assert.That(results[0].STEquals(point).IsTrue);

            // dynamic results
            var dynamicList = Connection().Query("MappingTestProcGeography", new { geo = point });

            Assert.That(results[0].STEquals(point).IsTrue);
        }
Esempio n. 6
0
        public void IntefaceMethodsFlattenParameters()
        {
            FastExpando result = Connection().As<IFlattenParameters>().Flatten(1, new FlattenedParameters() { Y1 = 2, Y2 = 3 });

            Assert.AreEqual(1, result["x"]);
            Assert.AreEqual(2, result["y1"]);
            Assert.AreEqual(3, result["y2"]);
        }
        public void FastExpandoCanBeCreatedFromObject()
        {
            FastExpando o = FastExpando.FromObject(new { Id = 1, Text = "foo" });
            dynamic     d = o;

            Assert.AreEqual(4, o.Count());
            Assert.AreEqual(1, d["ID"]);
            Assert.AreEqual("foo", d["Text"]);
        }
		public void ExpandoShouldPreserveCase()
		{
			string key = "UlUl";

			FastExpando o = new FastExpando();
			var d = (IDictionary<string, object>)o;
			o[key] = "goo";

			Assert.AreEqual(key, d.Keys.First());
		}
Esempio n. 9
0
        public void ExpandoShouldPreserveCase()
        {
            string key = "UlUl";

            FastExpando o = new FastExpando();
            var         d = (IDictionary <string, object>)o;

            o[key] = "goo";

            Assert.AreEqual(key, d.Keys.First());
        }
Esempio n. 10
0
        public void AttributeCanDisableFlattening()
        {
            FastExpando result = Connection().As <IFlattenParameters>().DontFlatten(1, new FlattenedParameters()
            {
                Y1 = 2, Y2 = 3
            });

            Assert.AreEqual(1, result["x"]);
            Assert.AreEqual(2, result["y1"]);
            Assert.AreEqual(3, result["y2"]);
        }
Esempio n. 11
0
        public void InputParametersCanMapChildFields()
        {
            ColumnMapping.All.EnableChildBinding();

            // we should be able to read in child fields
            FastExpando result = (FastExpando)Connection().QuerySql("SELECT x=@x, y1=@y1, y2=@y2", new { X = 1, Y = new { Y1 = 2, Y2 = 3 } }).First();

            Assert.AreEqual(1, result["x"]);
            Assert.AreEqual(2, result["y1"]);
            Assert.AreEqual(3, result["y2"]);
        }
Esempio n. 12
0
 /// <summary>
 /// Creates a folder in the Integration Services catalog.
 /// </summary>
 /// <param name="folderName">The name of the new folder.</param>
 /// <param name="commandTimeout">The command timeout.</param>
 /// <returns>The folder identifier is returned.</returns>
 /// <exception cref="ArgumentNullException">The value of 'database' cannot be null. </exception>
 /// <exception cref="Exception">A delegate callback throws an exception. </exception>
 public long CreateFolder(string folderName, int?commandTimeout = null)
 {
     return(this.WithConnection(conn =>
     {
         dynamic parameters = new FastExpando();
         parameters.folder_name = folderName;
         parameters.folder_id = default(int);
         conn.Execute("catalog.create_folder", (object)parameters, commandTimeout: commandTimeout);
         return parameters.folder_id;
     }));
 }
		public void TransformSucceedsWithExtraMap()
		{
			FastExpando o = new FastExpando();

			FastExpando other = o.Transform(new Dictionary<string, string>() { { "A", "Z" } });
			IDictionary<string, object> otherDict = other;

			Assert.AreNotSame(o, other);
			Assert.IsFalse(otherDict.ContainsKey("A"));
			Assert.IsFalse(otherDict.ContainsKey("Z"));
		}
		public void MutateSucceedsWithExtraMap()
		{
			FastExpando o = new FastExpando();
			dynamic d = o;
			d["B"] = "goo";

			o.Mutate(new Dictionary<string, string>() { { "A", "Z" } });
			IDictionary<string, object> dict = o;

			Assert.IsFalse(dict.ContainsKey("A"));
			Assert.IsTrue(dict.ContainsKey("B"));
		}
        public void FastExpandoCanExpandByObject()
        {
            FastExpando o = FastExpando.FromObject(new { Id = 1, Text = "foo" });

            o.Expand(new { Id = 2, Guest = "boo" });
            dynamic d = o;

            Assert.AreEqual(6, o.Count());
            Assert.AreEqual(2, d["ID"]);
            Assert.AreEqual("foo", d["Text"]);
            Assert.AreEqual("boo", d["GUEST"]);
        }
        public void FastExpandoCanBeUsedAsDynamic()
        {
            dynamic d = FastExpando.FromObject(new { Id = 1, Text = "foo" });

            d["Property"] = "prop";
            d.Expand(new { Id = 2, Guest = "boo" });

            FastExpando o = (FastExpando)d;

            Assert.AreEqual(7, o.Count());
            Assert.AreEqual(2, d["ID"]);
            Assert.AreEqual("foo", d["Text"]);
            Assert.AreEqual("prop", d["Property"]);
        }
		public void MutateShouldModifyObject()
		{
			FastExpando o = new FastExpando();
			dynamic d = o;
			d["A"] = "foo";
			d["B"] = "goo";

			o.Mutate(new Dictionary<string, string>() { { "A", "Z" } });
			IDictionary<string, object> dict = o;

			Assert.IsFalse(dict.ContainsKey("A"));
			Assert.IsNotNull(d["B"]);
			Assert.AreEqual(d["Z"], "foo");
		}
Esempio n. 18
0
        public void TransformSucceedsWithExtraMap()
        {
            FastExpando o = new FastExpando();

            FastExpando other = o.Transform(new Dictionary <string, string>()
            {
                { "A", "Z" }
            });
            IDictionary <string, object> otherDict = other;

            Assert.AreNotSame(o, other);
            Assert.IsFalse(otherDict.ContainsKey("A"));
            Assert.IsFalse(otherDict.ContainsKey("Z"));
        }
        public void TestExpandoNullFields()
        {
            // an expando with a null value passes in null
            dynamic f = new FastExpando();

            f["Value"] = null;
            dynamic result = Connection().Query("ReflectInt", (object)f).FirstOrDefault();

            Assert.IsNull(result["Value"]);

            // an expando with a NO value passes in DEFAULT
            f      = new FastExpando();
            result = Connection().Query("ReflectInt", (object)f).FirstOrDefault();
            Assert.AreEqual(5, result["Value"]);
        }
        public void TestConvenienceExpandoQueries()
        {
            // we have two objects with parameters in them
            var o = new { Id = 1, Text = "foo" };
            var p = new { Id = 2, Guest = "boo" };

            var         list = Connection().QuerySql("SELECT ID=CONVERT (int, @ID), Text=@Text, Guest=@Guest", o.Expand(p));
            FastExpando f    = list[0];
            dynamic     d    = f;

            Assert.AreEqual(3, f.Count());
            Assert.AreEqual(2, d["ID"]);
            Assert.AreEqual("foo", d["Text"]);
            Assert.AreEqual("boo", d["GUEST"]);
        }
		public void TestThatDynamicObjectCanBeUsedAsParameters()
		{
			var p = new FastExpando();
			dynamic pd = p;
			pd.Int = 1;
			pd.Text = "foo";

			var list = _connection.QuerySql("SELECT Int=CONVERT (int, @Int), Text=@Text", p);

			Assert.IsNotNull(list);
			Assert.AreEqual(1, list.Count);

			dynamic result = list[0];
			Assert.AreEqual(pd.Int, result.Int);
			Assert.AreEqual(pd.Text, result.Text);
		}
		public void TransformShouldCreateANewObject()
		{
			FastExpando o = new FastExpando();
			dynamic d = o;
			d["A"] = "foo";
			d["B"] = "goo";

			FastExpando other = o.Transform(new Dictionary<string, string>() { { "A", "Z" } });
			IDictionary<string, object> otherDict = other;
			dynamic otherD = other;

			Assert.AreNotSame(o, other);
			Assert.IsFalse(otherDict.ContainsKey("A"));
			Assert.IsNotNull(otherD["B"]);
			Assert.AreEqual(otherD["Z"], d["A"]);
		}
Esempio n. 23
0
 public long CreateExecution(string folderName, string projectName,
                             string packageName, long?referenceId = null, bool use32BitRuntime = false, int?commandTimeout = null)
 {
     return(this.WithConnection(conn =>
     {
         dynamic parameters = new FastExpando();
         parameters.folder_name = folderName;
         parameters.project_name = projectName;
         parameters.package_name = packageName;
         parameters.reference_id = referenceId;
         parameters.use32bitruntime = use32BitRuntime;
         parameters.execution_id = default(long?);
         conn.Execute("catalog.create_execution", (FastExpando)parameters, commandTimeout: commandTimeout);
         return parameters.execution_id;
     }));
 }
Esempio n. 24
0
        public void MutateSucceedsWithExtraMap()
        {
            FastExpando o = new FastExpando();
            dynamic     d = o;

            d["B"] = "goo";

            o.Mutate(new Dictionary <string, string>()
            {
                { "A", "Z" }
            });
            IDictionary <string, object> dict = o;

            Assert.IsFalse(dict.ContainsKey("A"));
            Assert.IsTrue(dict.ContainsKey("B"));
        }
        public void TestGuidConversionInDynamicParameter()
        {
            var     p  = new FastExpando();
            dynamic pd = p;

            pd["g"] = Guid.NewGuid();

            var list = Connection().QuerySql("SELECT G=@g", p);

            Assert.IsNotNull(list);
            Assert.AreEqual(1, list.Count);

            dynamic result = list[0];

            Assert.AreEqual(pd["g"], result["g"]);
        }
Esempio n. 26
0
        public void MutateShouldModifyObject()
        {
            FastExpando o = new FastExpando();
            dynamic     d = o;

            d["A"] = "foo";
            d["B"] = "goo";

            o.Mutate(new Dictionary <string, string>()
            {
                { "A", "Z" }
            });
            IDictionary <string, object> dict = o;

            Assert.IsFalse(dict.ContainsKey("A"));
            Assert.IsNotNull(d["B"]);
            Assert.AreEqual(d["Z"], "foo");
        }
        public void TestThatDynamicObjectCanBeUsedAsParameters()
        {
            var     p  = new FastExpando();
            dynamic pd = p;

            pd["Int"]  = 1;
            pd["Text"] = "foo";

            var list = Connection().QuerySql("SELECT Int=CONVERT (int, @Int), Text=@Text", p);

            Assert.IsNotNull(list);
            Assert.AreEqual(1, list.Count);

            dynamic result = list[0];

            Assert.AreEqual(pd["Int"], result["Int"]);
            Assert.AreEqual(pd["Text"], result["Text"]);
        }
        public void TestConvenienceExpandoQueriesWithDynamicObject()
        {
            // start with a dynamic object
            dynamic o = new FastExpando();

            o["ID"]   = 1;
            o["Text"] = "foo";

            // expand the dynamic
            var p = new { Id = 2, Guest = "boo" };

            var         list = Connection().QuerySql("SELECT ID=CONVERT (int, @ID), Text=@Text, Guest=@Guest", (object)o.Expand(p));
            FastExpando f    = list[0];
            dynamic     d    = f;

            Assert.AreEqual(3, f.Count());
            Assert.AreEqual(2, d["ID"]);
            Assert.AreEqual("foo", d["Text"]);
            Assert.AreEqual("boo", d["GUEST"]);
        }
Esempio n. 29
0
        public void TransformShouldCreateANewObject()
        {
            FastExpando o = new FastExpando();
            dynamic     d = o;

            d["A"] = "foo";
            d["B"] = "goo";

            FastExpando other = o.Transform(new Dictionary <string, string>()
            {
                { "A", "Z" }
            });
            IDictionary <string, object> otherDict = other;
            dynamic otherD = other;

            Assert.AreNotSame(o, other);
            Assert.IsFalse(otherDict.ContainsKey("A"));
            Assert.IsNotNull(otherD["B"]);
            Assert.AreEqual(otherD["Z"], d["A"]);
        }
Esempio n. 30
0
        static void Expando_Expand()
        {
            Beer beer = new Beer()
            {
                Name = "Sly Fox IPA"
            };
            Glass glass = new Glass()
            {
                Ounces = 32
            };

            // create an expando and combine the objects
            FastExpando x = beer.Expand();

            x.Expand(glass);

            // look! a dynamic object
            dynamic d = x;

            Console.WriteLine("{0}", d.Name);
            Console.WriteLine("{0}", d.Ounces);
        }
Esempio n. 31
0
 /// <summary>
 /// Adds a property using the default value for the type.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="expando"></param>
 /// <param name="propertyName"></param>
 /// <returns></returns>
 public static FastExpando AddProperty <T>(this FastExpando expando, string propertyName)
 {
     return(AddProperty(expando, propertyName, default(T)));
 }
		public void TestExpandoNullFields()
		{
			// an expando with a null value passes in null
			dynamic f = new FastExpando();
			f["Value"] = null;
			dynamic result = Connection().Query("ReflectInt", (object)f).FirstOrDefault();
			Assert.IsNull(result["Value"]);

			// an expando with a NO value passes in DEFAULT
			f = new FastExpando();
			result = Connection().Query("ReflectInt", (object)f).FirstOrDefault();
			Assert.AreEqual(5, result["Value"]);
		}
Esempio n. 33
0
		public void GeographyParametersArePassedCorrectly()
		{
			// single value query
			var point = SqlGeography.Point(0, 0, 4326);
			var results = Connection().Query<SqlGeography>("MappingTestProcGeography", new { geo = point });
			Assert.That(results[0].STEquals(point).IsTrue);

			// class return value
			var list = Connection().Query<TestGeography>("MappingTestProcGeography", new { geo = point });
			Assert.That(list[0].Geo.STEquals(point).IsTrue);

			// dynamic parameter
			dynamic p = new FastExpando();
			p["Geo"] = point;
			results = Connection().Query<SqlGeography>("MappingTestProcGeography", (object)p);
			Assert.That(results[0].STEquals(point).IsTrue);

			// dynamic results
			var dynamicList = Connection().Query("MappingTestProcGeography", new { geo = point });
			Assert.That(results[0].STEquals(point).IsTrue);
		}
Esempio n. 34
0
 public void DeepBindingDisabledByDefault()
 {
     // we should be able to read in child fields
     FastExpando result = (FastExpando)Connection().QuerySql("SELECT xx=@x, y1=@y1, y2=@y2", new { XX = 1, Y = new { Y1 = 2, Y2 = 3 } }).First();
 }
		public void TestConvenienceExpandoQueriesWithDynamicObject()
		{
			// start with a dynamic object
			dynamic o = new FastExpando();
			o.Id = 1;
			o.Text = "foo";

			// expand the dynamic
			var p = new { Id = 2, Guest = "boo" };

			var list = _connection.QuerySql("SELECT ID=CONVERT (int, @ID), Text=@Text, Guest=@Guest", (object)o.Expand(p));
			FastExpando f = list[0];
			dynamic d = f;

			Assert.AreEqual(3, f.Count());
			Assert.AreEqual(2, d.ID);
			Assert.AreEqual("foo", d.Text);
			Assert.AreEqual("boo", d.GUEST);
		}
Esempio n. 36
0
 /// <summary>
 /// Provides a flueent way to set a property on a <see cref="FastExpando"/>.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="expando"></param>
 /// <param name="propertyName"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public static FastExpando AddProperty <T>(this FastExpando expando, string propertyName, T value)
 {
     expando[propertyName] = value;
     return(expando);
 }
		public void TestExpandoNullFields()
		{
			using (var connection = _connectionStringBuilder.OpenWithTransaction())
			{
				connection.ExecuteSql("CREATE PROC InsightTestProc (@Value int = 5) AS SELECT Value=@Value");

				// an expando with a null value passes in null
				dynamic f = new FastExpando();
				f.Value = null;
				dynamic result = connection.Query("InsightTestProc", (object)f).FirstOrDefault();
				Assert.IsNull(result.Value);

				// an expando with a NO value passes in DEFAULT
				f = new FastExpando();
				result = connection.Query("InsightTestProc", (object)f).FirstOrDefault();
				Assert.AreEqual(5, result.Value);
			}
		}
		public void TestGuidConversionInDynamicParameter()
		{
			var p = new FastExpando();
			dynamic pd = p;
			pd["g"] = Guid.NewGuid();

			var list = Connection().QuerySql("SELECT G=@g", p);

			Assert.IsNotNull(list);
			Assert.AreEqual(1, list.Count);

			dynamic result = list[0];
			Assert.AreEqual(pd["g"], result["g"]);
		}