Exemplo n.º 1
0
        public void TestTableCreate()
        {
            CrateDataReader reader     = null;
            List <Table>    schemadata = null;

            var tabledesc = (CrateTable)Attribute.GetCustomAttribute(typeof(CreatTestTable), typeof(CrateTable));

            Assert.IsNotNull(tabledesc);

            TableUtils.DropTable(tabledesc.Name);

            using (var conn = TestCrateConnection())
            {
                conn.Open();
                conn.CreateTable <CreatTestTable>();

                var sql = "SELECT * FROM information_schema.tables WHERE table_name= '" + tabledesc.Name + "'";
                using (var cmd = new CrateCommand(sql, conn))
                {
                    reader     = (CrateDataReader)cmd.ExecuteReader();
                    schemadata = reader.ToList <Table>();
                }
            }
            Assert.IsNotNull(reader);
            Assert.IsNotNull(schemadata);
            Assert.Greater(schemadata.Count, 0);
            Assert.AreEqual(EnumHelpers.Replication(tabledesc.NumberOfReplicas), schemadata[0].NumberOfReplicas);
            Assert.AreEqual(tabledesc.NumberOfShards, schemadata[0].NumberOfShards);
        }
Exemplo n.º 2
0
        public static DataTable GetSchemaTable(this CrateDataReader reader, Type type)
        {
            var lookup = CrateFieldCacheProvider.Instance.Get(type).Values.ToDictionary(t => t.Name, t => t.Type);
            var dt     = new DataTable(AttributeHelpers.GetTableData(type).Name);

            foreach (var col in reader.SqlResponse.cols)
            {
                var dtype = lookup.ContainsKey(col) ? lookup[col] : typeof(string);
                dt.Columns.Add(col, dtype);
            }

            foreach (var row in reader.SqlResponse.rows)
            {
                for (var i = 0; i < dt.Columns.Count; i++)
                {
                    if (dt.Columns[i].DataType == typeof(string))
                    {
                        continue;
                    }
                    if (dt.Columns[i].DataType == typeof(DateTime))
                    {
                        if (!(row[i] is long))
                        {
                            continue;
                        }
                        row[i] = UnixDt.AddMilliseconds((long)row[i]);
                    }
                    else
                    {
                        if ((row[i] is JObject) && dt.Columns[i].DataType != typeof(JObject))
                        {
                            var settings = new JsonSerializerSettings()
                            {
                                ContractResolver  = new CrateJsonContractResolver(dt.Columns[i].DataType),
                                DateParseHandling = DateParseHandling.None,
                            };
                            row[i] = JsonConvert.DeserializeObject(row[i].ToString(), dt.Columns[i].DataType,
                                                                   settings);
                        }
                        else if ((row[i] is JArray) && dt.Columns[i].DataType == typeof(GeoPoint))
                        {
                            var list = (row[i] as JArray).ToObject <List <double> >();
                            if (list.Count == 2)
                            {
                                row[i] = new GeoPoint(list[0], list[1]);
                            }
                            else
                            {
                                row[i] = null;
                            }
                        }
                    }
                }
                dt.Rows.Add(row);
            }
            return(dt);
        }
Exemplo n.º 3
0
        public void TestGetDateTime()
        {
            var reader = new CrateDataReader(new SqlResponse
            {
                Rows = new[] { new object[] { 1388534400000 } },
                Cols = new[] { "dt" }
            });

            reader.Read();
            var dt = new DateTime(2014, 01, 01);

            Assert.AreEqual(dt, reader.GetDateTime(0));
        }
Exemplo n.º 4
0
        public void TestGetDouble()
        {
            var reader = new CrateDataReader(new SqlResponse
            {
                Rows = new[] { new object[] { 1.2D } },
                Cols = new[] { "flag" },
            });

            reader.Read();

            Assert.AreEqual(1.2D, reader.GetDouble(0));
            Assert.AreEqual((float)1.2, reader.GetFloat(0));
            Assert.AreEqual((decimal)1.2, reader.GetDecimal(0));
        }
Exemplo n.º 5
0
        public void TestGetInt()
        {
            var reader = new CrateDataReader(new SqlResponse
            {
                Rows = new[] { new object[] { 1L } },
                Cols = new[] { "flag" },
            });

            reader.Read();

            Assert.AreEqual((byte)1, reader.GetByte(0));
            Assert.AreEqual((Int16)1, reader.GetInt16(0));
            Assert.AreEqual((Int32)1, reader.GetInt32(0));
            Assert.AreEqual((Int64)1, reader.GetInt64(0));
        }
Exemplo n.º 6
0
        public static List <T> ToList <T>(this CrateDataReader reader) where T : class, new()
        {
            try
            {
                var list = new List <T>();

                var dt   = reader.GetSchemaTable(typeof(T));
                var attr = CrateFieldCacheProvider.Instance.Get(typeof(T));

                foreach (DataRow row in dt.Rows)
                {
                    var obj = new T();

                    var type = obj.GetType();
                    foreach (var prop in type.GetProperties())
                    {
                        try
                        {
                            var name = attr[prop.Name].Name;

                            if (!dt.Columns.Contains(name))
                            {
                                continue;
                            }

                            var propertyInfo = type.GetProperty(prop.Name);

                            propertyInfo.SetValue(obj, Convert.ChangeType(row[name], propertyInfo.PropertyType), null);
                        }
                        catch (Exception ex)
                        {
                            throw new CrateDbException("Failed to convert row. See inner exception.", ex);
                        }
                    }

                    list.Add(obj);
                }

                return(list);
            }
            catch (Exception ex)
            {
                throw new CrateDbException("Failed to convert data reader to list. See inner exception.", ex);
            }
        }