Example #1
0
        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);
            }
        }
Example #2
0
      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");
        }
Example #4
0
      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); 
          }
        }
      }
Example #5
0
 /// <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>();
 }
Example #6
0
 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);
 }
Example #7
0
        public Doc LoadOneDoc(Query query)
        {
            RowsetBase rset = DoLoad(true, query).FirstOrDefault();

            if (rset != null)
            {
                return(rset.FirstOrDefault());
            }
            return(null);
        }
Example #8
0
 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);
     }
 }
Example #9
0
 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());
     }
 }
Example #10
0
        public virtual Row LoadOneRow(Query query)
        {
            RowsetBase rset = null;

            rset = Load(query).FirstOrDefault();

            if (rset != null)
            {
                return(rset.FirstOrDefault());
            }
            return(null);
        }
Example #11
0
        /// <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);
            }
        }
Example #12
0
 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;
     }));
 }
Example #13
0
        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());
        }
Example #14
0
        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);
        }
Example #16
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));
 }
Example #17
0
 /// <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));
 }
        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);
              }
            }
        }
        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);
        }
Example #20
0
        /// <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;
        }