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"]); }
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); }); }
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); }
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()); }
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()); }
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"]); }
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"]); }
/// <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"); }
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"]); }
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; })); }
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"]); }
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"]); }
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"]); }
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); }
/// <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 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); }
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); }
/// <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); } }