public static void Write(RowsetBase rowset, TextWriter wri, CSVWritingOptions options = null, FieldFilterFunc filter = null) { if (rowset == null) { return; } if (options == null) { options = CSVWritingOptions.Default; } var defs = getAcceptableDefs(rowset.Schema, options.LoadAllFields, filter); if (options.IncludeHeader) { writeHeader(defs, wri, options); } foreach (var item in rowset.AsReadonlyIList) { var row = item as Row; if (row == null) { continue; } writeRow(row, defs, wri, options); } }
public void Rowset_FromJSON_FieldMissed(bool rowsAsMap) { var row = new Person { Name = "Henry", Age = 43 }; var rowSet = new Rowset(row.Schema); rowSet.Add(row); var options = new NFX.Serialization.JSON.JSONWritingOptions { RowsetMetadata = true, RowsAsMap = rowsAsMap }; var json = rowSet.ToJSON(options); var map = JSONReader.DeserializeDataObject( json ) as JSONDataMap; var rows = (map["Rows"] as IList<object>); if (rowsAsMap) { var pers = rows[0] as IDictionary<string, object>; pers.Remove("Age"); } else { var pers = rows[0] as IList<object>; pers.RemoveAt(1); } bool allMatched; var trg = RowsetBase.FromJSON(map, out allMatched); Assert.IsFalse(allMatched); var trgRow = trg[0]; Assert.AreEqual(trgRow.Schema.FieldCount, 2); Assert.AreEqual(trgRow["Name"], "Henry"); Assert.IsNull(trgRow["Age"]); }
public void Rowset_FromJSON_DefMissed(bool rowsAsMap) { var row = new Person { Name = "Henry", Age = 43 }; var rowSet = new Rowset(row.Schema); rowSet.Add(row); var options = new NFX.Serialization.JSON.JSONWritingOptions { RowsetMetadata = true, RowsAsMap = rowsAsMap }; var json = rowSet.ToJSON(options); var map = JSONReader.DeserializeDataObject(json) as JSONDataMap; var schema = (map["Schema"] as IDictionary <string, object>); var defs = schema["FieldDefs"] as IList <object>; defs.RemoveAt(1); bool allMatched; var trg = RowsetBase.FromJSON(map, out allMatched); Aver.IsFalse(allMatched); var trgRow = trg[0]; Aver.AreEqual(trgRow.Schema.FieldCount, 1); Aver.AreObjectsEqual(trgRow["Name"], "Henry"); }
private void rowsAssertions(RowsetBase src, RowsetBase trg, bool rowsAsMap) { Assert.AreEqual(trg.Count, src.Count); for (var j = 0; j < src.Count; j++) { var trgRow = trg[j]; var srcRow = src[j] as TeztRow; Assert.AreEqual(trgRow["BoolField"].AsBool(), srcRow.BoolField); Assert.AreEqual(trgRow["CharField"].AsString(), srcRow.CharField.ToString()); Assert.AreEqual(trgRow["StringField"].AsString(), srcRow.StringField); Assert.AreEqual(trgRow["DateTimeField"].AsDateTime(), srcRow.DateTimeField); Assert.AreEqual(trgRow["GDIDField"].AsGDID(), srcRow.GDIDField); Assert.AreEqual(trgRow["ByteField"].AsByte(), srcRow.ByteField); Assert.AreEqual(trgRow["ShortField"].AsShort(), srcRow.ShortField); Assert.AreEqual(trgRow["IntField"].AsInt(), srcRow.IntField); Assert.AreEqual(trgRow["UIntField"].AsUInt(), srcRow.UIntField); Assert.AreEqual(trgRow["LongField"].AsLong(), srcRow.LongField); Assert.AreEqual(trgRow["FloatField"].AsFloat(), srcRow.FloatField); Assert.AreEqual(trgRow["DoubleField"].AsDouble(), srcRow.DoubleField); Assert.AreEqual(trgRow["DecimalField"].AsDecimal(), srcRow.DecimalField); Assert.AreEqual(trgRow["NullableField"].AsNullableInt(), srcRow.NullableField); var array = trgRow["ArrayInt"] as IList<object>; Assert.IsNotNull(array); Assert.AreEqual(array.Count, srcRow.ArrayInt.Length); for (var i = 0; i < array.Count; i++) Assert.AreEqual(array[i].AsInt(), srcRow.ArrayInt[i]); var list = trgRow["ListString"] as IList<object>; Assert.IsNotNull(list); Assert.IsTrue(list.SequenceEqual(srcRow.ListString)); var dict = trgRow["DictionaryIntStr"] as IDictionary<string, object>; Assert.IsNotNull(dict); Assert.AreEqual(dict.Count, srcRow.DictionaryIntStr.Count); foreach (var kvp in srcRow.DictionaryIntStr) Assert.AreEqual(dict[kvp.Key.ToString()].ToString(), kvp.Value); if (rowsAsMap) { var pers = trgRow["RowField"] as IDictionary<string, object>; Assert.IsNotNull(pers); Assert.AreEqual(pers.Count, 2); Assert.AreEqual(pers["Name"].AsString(), srcRow.RowField.Name); Assert.AreEqual(pers["Age"].AsInt(), srcRow.RowField.Age); } else { var pers = trgRow["RowField"] as IList<object>; Assert.IsNotNull(pers); Assert.AreEqual(pers.Count, 2); Assert.AreEqual(pers[0].AsString(), srcRow.RowField.Name); Assert.AreEqual(pers[1].AsInt(), srcRow.RowField.Age); } } }
/// <summary> /// Creates a shallow copy from another rowset, optionally applying a filter /// </summary> public Rowset(RowsetBase other, Func<Row, bool> filter = null) : base(other.Schema) { if (filter==null) m_List = new List<Row>(other.m_List); else m_List = other.Where(filter).ToList(); m_SortFieldList = new List<string>(); }
public static void WriteToFile(RowsetBase rowset, string fileName, CSVWritingOptions options = null, Encoding encoding = null, FieldFilterFunc filter = null) { using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) Write(rowset, fs, options, encoding, filter); }
public Doc LoadOneDoc(Query query) { RowsetBase rset = DoLoad(true, query).FirstOrDefault(); if (rset != null) { return(rset.FirstOrDefault()); } return(null); }
public static void Write(RowsetBase rowset, Stream stream, CSVWritingOptions options = null, Encoding encoding = null, FieldFilterFunc filter = null) { using (var wri = new StreamWriter(stream, encoding ?? UTF8Encoding.UTF8)) { Write(rowset, wri, options, filter); } }
public static byte[] WriteToBuffer(RowsetBase rowset, CSVWritingOptions options = null, Encoding encoding = null, FieldFilterFunc filter = null) { using (var ms = new MemoryStream()) { Write(rowset, ms, options, encoding, filter); return(ms.ToArray()); } }
public virtual Row LoadOneRow(Query query) { RowsetBase rset = null; rset = Load(query).FirstOrDefault(); if (rset != null) { return(rset.FirstOrDefault()); } return(null); }
/// <summary> /// Casts rowset's rows to the specified type, returning empty enumerable if rowset is null /// </summary> public static IEnumerable <TRow> AsEnumerableOf <TRow>(this RowsetBase rowset) where TRow : Row { if (rowset == null) { yield break; } foreach (var row in rowset) { yield return((TRow)row); } }
public virtual Task <Row> LoadOneRowAsync(Query query) { return(this.LoadAsync(query) .ContinueWith(antecedent => { RowsetBase rset = antecedent.Result.FirstOrDefault(); if (rset != null) { return rset.FirstOrDefault(); } return null; })); }
public static string Write(RowsetBase rowset, CSVWritingOptions options = null, FieldFilterFunc filter = null) { var sb = new StringBuilder(); using (var wri = new StringWriter(sb)) { Write(rowset, wri, options, filter); } return(sb.ToString()); }
public Doc LoadOneDoc(Query query) { RowsetBase rset = null; using (var cnn = GetConnection()) rset = DoLoad(cnn, null, new Query[] { query }, true).FirstOrDefault(); if (rset != null) { return(rset.FirstOrDefault()); } return(null); }
public void Table_FromJSON_ShemaOnly() { var src = new Table(new TeztRow().Schema); var options = new NFX.Serialization.JSON.JSONWritingOptions { RowsetMetadata = true, SpaceSymbols = true, IndentWidth = 2, MemberLineBreak = true, ObjectLineBreak = true }; var json = src.ToJSON(options); var trg = RowsetBase.FromJSON(json, true); schemaAssertions(trg.Schema, src.Schema); Aver.AreEqual(trg.Count, 0); }
/// <summary> /// Deserializes into Rowset or Table from JSONDataMap, as serialized by RowsedBase.WriteAsJSON() /// </summary> public static RowsetBase ToRowset(JsonDataMap jsonMap, bool schemaOnly = false, bool readOnlySchema = false) { return(RowsetBase.FromJSON(jsonMap, schemaOnly, readOnlySchema)); }
/// <summary> /// Deserializes into Rowset or Table from JSOnDataMap, as serialized by RowsedBase.WriteAsJSON() /// </summary> public static RowsetBase ToRowset(string json, bool schemaOnly = false, bool readOnlySchema = false) { return(RowsetBase.FromJSON(json, schemaOnly, readOnlySchema)); }
public void Rowset_FromJSON(bool rowsAsMap) { var row = new TeztRow(); var src = new Rowset(row.Schema); row.BoolField = true; row.CharField = 'a'; row.StringField = "aaa"; row.DateTimeField = new DateTime(2016, 1, 2); row.GDIDField = new GDID(1, 2, 3); row.ByteField = 100; row.ShortField = -100; row.IntField = -999; row.UIntField = 254869; row.LongField = -267392; row.FloatField = 32768.32768F; row.DoubleField = -1048576.1048576D; row.DecimalField = 1.0529M; row.NullableField = null; row.ArrayInt = new int[] { -1, 0, 1 }; row.ListString = new List <string> { "one", "two", "three" }; row.DictionaryIntStr = new Dictionary <int, string> { { 1, "first" }, { 2, "second" } }; row.RowField = new Person { Name = "John", Age = 20 }; src.Add(row); row.BoolField = false; row.CharField = 'b'; row.StringField = "bbb"; row.DateTimeField = new DateTime(2016, 2, 1); row.GDIDField = new GDID(4, 5, 6); row.ByteField = 101; row.ShortField = 100; row.IntField = 999; row.UIntField = 109876; row.LongField = 267392; row.FloatField = -32768.32768F; row.DoubleField = -048576.1048576D; row.DecimalField = -1.0529M; row.NullableField = null; row.ArrayInt = new int[] { 1, 0, -1 }; row.ListString = new List <string> { "three", "two", "one" }; row.DictionaryIntStr = new Dictionary <int, string> { { 0, "zero" }, { 1, "first" }, { 2, "second" } }; row.RowField = new Person { Name = "Ann", Age = 19 }; src.Add(row); var options = new NFX.Serialization.JSON.JSONWritingOptions { RowsetMetadata = true, SpaceSymbols = true, IndentWidth = 2, MemberLineBreak = true, ObjectLineBreak = true, RowsAsMap = rowsAsMap }; var json = src.ToJSON(options); var trg = RowsetBase.FromJSON(json); schemaAssertions(trg.Schema, src.Schema); rowsAssertions(src, trg, rowsAsMap); }
/// <summary> /// Performs CRUD batch save. Override to do custom batch saving /// </summary> protected internal virtual int DoSave(MySqlConnection cnn, MySqlTransaction transaction, RowsetBase[] rowsets) { if (rowsets==null) return 0; var affected = 0; foreach(var rset in rowsets) { foreach(var change in rset.Changes) { switch(change.ChangeType) { case RowChangeType.Insert: affected += DoInsert(cnn, transaction, change.Row); break; case RowChangeType.Update: affected += DoUpdate(cnn, transaction, change.Row, change.Key); break; case RowChangeType.Upsert: affected += DoUpsert(cnn, transaction, change.Row); break; case RowChangeType.Delete: affected += DoDelete(cnn, transaction, change.Row, change.Key); break; } } } return affected; }