예제 #1
0
        public void Box()
        {
            using (var conn = OpenConnection())
            {
                var expected = new NpgsqlBox(2, 4, 1, 3);
                var cmd      = new NpgsqlCommand("SELECT @p1, @p2", conn);
                var p1       = new NpgsqlParameter("p1", NpgsqlDbType.Box)
                {
                    Value = expected
                };
                var p2 = new NpgsqlParameter {
                    ParameterName = "p2", Value = expected
                };
                Assert.That(p2.NpgsqlDbType, Is.EqualTo(NpgsqlDbType.Box));
                cmd.Parameters.Add(p1);
                cmd.Parameters.Add(p2);
                using (var reader = cmd.ExecuteReader())
                {
                    reader.Read();

                    for (var i = 0; i < cmd.Parameters.Count; i++)
                    {
                        Assert.That(reader.GetFieldType(i), Is.EqualTo(typeof(NpgsqlBox)));
                        var actual = reader.GetFieldValue <NpgsqlBox>(i);
                        AssertPointsEqual(actual.UpperRight, expected.UpperRight);
                    }
                }
            }
        }
예제 #2
0
        public void Box()
        {
            var expected = new NpgsqlBox(2, 4, 1, 3);
            var cmd      = new NpgsqlCommand("SELECT @p1, @p2", Conn);
            var p1       = new NpgsqlParameter("p1", NpgsqlDbType.Box)
            {
                Value = expected
            };
            var p2 = new NpgsqlParameter {
                ParameterName = "p2", Value = expected
            };

            Assert.That(p2.NpgsqlDbType, Is.EqualTo(NpgsqlDbType.Box));
            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            var reader = cmd.ExecuteReader();

            reader.Read();

            for (var i = 0; i < cmd.Parameters.Count; i++)
            {
                Assert.That(reader.GetFieldType(i), Is.EqualTo(typeof(NpgsqlBox)));
                Assert.That(reader[i], Is.EqualTo(expected));
            }
        }
예제 #3
0
        public void TestBoxSupport()
        {
            _conn.Open();

            NpgsqlCommand command = new NpgsqlCommand("select field_box from tablee where field_serial = 2", _conn);

            NpgsqlBox box = (NpgsqlBox)command.ExecuteScalar();

            Assert.AreEqual(5, box.UpperRight.X);
            Assert.AreEqual(4, box.UpperRight.Y);
            Assert.AreEqual(4, box.LowerLeft.X);
            Assert.AreEqual(3, box.LowerLeft.Y);
        }
예제 #4
0
        public async Task <ActionResult <SiteDetailsDTO> > AddSite(SiteDTO siteDTO)
        {
            try
            {
                var siteNameExists = _context.Sites.Any(s => s.SiteName == siteDTO.SiteName);

                //check if SiteName already exists
                if (siteNameExists)
                {
                    //add error message
                    ModelState.AddModelError("SiteName", "SiteName already exists.");
                }

                //try to parse given ref coordinates to npgsql box
                var coords = new NpgsqlBox();
                if (siteDTO.RefCoordinates != null)
                {
                    try
                    {
                        coords = NpgsqlBox.Parse(siteDTO.RefCoordinates);
                    }
                    catch (FormatException e)
                    {
                        //if exception is caught write to console and return error message
                        Console.WriteLine("{0} Exception caught.", e);
                        //add error message
                        ModelState.AddModelError("RefCoordinates", "Invalid input: RefCoordinates must be specified using the following syntax \'((x1,y1),(x2,y2))\' where (x1,y1) and (x2,y2) are any two opposite corners.");
                        return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
                    }
                }

                if (ModelState.IsValid)
                {
                    var refCoordinatesExist = _context.Sites.Any(s => s.RefCoordinates.Equals(coords));

                    //check if RefCoordinates already exists
                    if (refCoordinatesExist)
                    {
                        //add error message
                        ModelState.AddModelError("RefCoordinates", "RefCoordinates already exist.");
                        return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
                    }

                    //create site
                    var site = new Site
                    {
                        SiteName       = siteDTO.SiteName,
                        RefCoordinates = coords
                    };

                    //insert site
                    _context.Sites.Add(site);
                    await _context.SaveChangesAsync();

                    //return the new site details
                    return(CreatedAtAction(
                               nameof(GetSiteById),
                               new { siteId = site.SiteId },
                               SiteToSiteDetailsDTO(site)));
                }
                return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
            }
            catch (InvalidOperationException e)
            {
                //if exception is caught write to console and return error message
                Console.WriteLine("{0} Exception caught.", e);
                return(BadRequest(new { ApiProblem = "Invalid JSON format sent." }));
            }
        }
예제 #5
0
        public async Task <IActionResult> UpdateSite(int SiteId, SiteUpdateDTO siteUpdateDTO)
        {
            try
            {
                //check site id matches id requested
                if (siteUpdateDTO.SiteId != null)
                {
                    if (SiteId != siteUpdateDTO.SiteId)
                    {
                        return(BadRequest(new { ApiProblem = "Entity Id does not match requested Id." }));
                    }
                }

                var siteIdExists   = _context.Sites.Any(s => s.SiteId == siteUpdateDTO.SiteId);
                var siteNameExists = _context.Sites.Any(s => s.SiteName == siteUpdateDTO.SiteName);

                //check if siteid does not exist
                if (!siteIdExists && siteUpdateDTO.SiteId != null)
                {
                    //add error message
                    ModelState.AddModelError("SiteId", "No site found with given site id.");
                }

                //check if SiteName already exists
                if (siteNameExists)
                {
                    //check if the site is another site
                    var theSite = _context.Sites.Where(s => s.SiteName == siteUpdateDTO.SiteName).FirstOrDefault();
                    if (theSite.SiteId != siteUpdateDTO.SiteId)
                    {
                        //add error message
                        ModelState.AddModelError("SiteName", "SiteName already exists.");
                    }
                }

                //try to parse given ref coordinates to npgsql box
                var coords = new NpgsqlBox();
                if (siteUpdateDTO.RefCoordinates != null)
                {
                    try
                    {
                        coords = NpgsqlBox.Parse(siteUpdateDTO.RefCoordinates);
                    }
                    catch (FormatException e)
                    {
                        //if exception is caught write to console and return error message
                        Console.WriteLine("{0} Exception caught.", e);
                        //add error message
                        ModelState.AddModelError("RefCoordinates", "Invalid input: RefCoordinates must be specified using the following syntax \'((x1,y1),(x2,y2))\' where (x1,y1) and (x2,y2) are any two opposite corners.");
                        return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
                    }
                }

                if (ModelState.IsValid)
                {
                    var refCoordinatesExist = _context.Sites.Any(s => s.RefCoordinates.Equals(coords));

                    //check if RefCoordinates already exists
                    if (refCoordinatesExist)
                    {
                        //check if the site is another site
                        var theSite = _context.Sites.Where(s => s.RefCoordinates == coords).FirstOrDefault();
                        if (theSite.SiteId != siteUpdateDTO.SiteId)
                        {
                            //add error message
                            ModelState.AddModelError("RefCoordinates", "RefCoordinates already exist.");
                            return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
                        }
                    }

                    //find site
                    var site = await _context.Sites.FindAsync(SiteId);

                    //if site not found return error
                    if (site == null)
                    {
                        return(NotFound());
                    }

                    //update site
                    site.SiteName       = siteUpdateDTO.SiteName;
                    site.RefCoordinates = coords;

                    //put site
                    try
                    {
                        await _context.SaveChangesAsync();
                    }
                    catch (DbUpdateConcurrencyException) when(!SiteExists(SiteId))
                    {
                        return(NotFound());
                    }

                    return(NoContent());
                }
                return(BadRequest(ModelState.ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage).ToArray())));
            }
            catch (NullReferenceException e)
            {
                //if exception is caught write to console and return error message
                Console.WriteLine("{0} Exception caught.", e);
                return(BadRequest(new { ApiProblem = "Invalid JSON format sent." }));
            }
        }
        private object YieldJToken(Type ctype, JToken jt, int rank)
        {
            if (rank == 0)
            {
                if (ctype == typeof_BitArray)
                {
                    return(Executer.Parse1010(jt.ToString()));
                }

                if (ctype == typeof_NpgsqlPoint)
                {
                    return(NpgsqlPoint.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlLine)
                {
                    return(NpgsqlLine.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlLSeg)
                {
                    return(NpgsqlLSeg.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlBox)
                {
                    return(NpgsqlBox.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlPath)
                {
                    return(NpgsqlPath.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlPolygon)
                {
                    return(NpgsqlPolygon.Parse(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlCircle)
                {
                    return(NpgsqlCircle.Parse(jt.ToString()));
                }

                if (ctype == typeof_NpgsqlInet)
                {
                    return(new NpgsqlInet(jt.ToString()));
                }
                if (ctype == typeof_IPAddress)
                {
                    return(new NpgsqlInet(jt.ToString()));
                }
                if (ctype == typeof_PhysicalAddress)
                {
                    return(PhysicalAddress.Parse(jt.ToString()));
                }

                if (ctype == typeof_NpgsqlRange_int)
                {
                    return(Executer.ParseNpgsqlRange <int>(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlRange_long)
                {
                    return(Executer.ParseNpgsqlRange <long>(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlRange_decimal)
                {
                    return(Executer.ParseNpgsqlRange <decimal>(jt.ToString()));
                }
                if (ctype == typeof_NpgsqlRange_DateTime)
                {
                    return(Executer.ParseNpgsqlRange <DateTime>(jt.ToString()));
                }

                return(null);
            }
            return(jt.Select <JToken, object>(a => YieldJToken(ctype, a, rank - 1)));
        }
예제 #7
0
        public void MainTest()
        {
            NpgsqlPoint point = new NpgsqlPoint(1, 2);
            NpgsqlLSeg  lSeg  = new NpgsqlLSeg(new NpgsqlPoint(1, 2), new NpgsqlPoint(3, 4));
            NpgsqlBox   box   = new NpgsqlBox(new NpgsqlPoint(1, 1), new NpgsqlPoint(-1, -1));
            NpgsqlPath  path  = new NpgsqlPath(new[] { new NpgsqlPoint(1, 2), new NpgsqlPoint(3, 4) })
            {
                Open = true
            };
            NpgsqlPolygon polygon = new NpgsqlPolygon(new[] { new NpgsqlPoint(1, 2), new NpgsqlPoint(3, 4), new NpgsqlPoint(5, 6) });
            NpgsqlCircle  circle  = new NpgsqlCircle(new NpgsqlPoint(1, 2), 3);

            using (Domain.OpenSession()) {
                using (var t = Session.Current.OpenTransaction()) {
                    _ = new Container {
                        Point   = new NpgsqlPoint(),
                        LSeg    = new NpgsqlLSeg(),
                        Box     = new NpgsqlBox(),
                        Path    = new NpgsqlPath(),
                        Polygon = new NpgsqlPolygon(),
                        Circle  = new NpgsqlCircle()
                    };

                    _ = new Container {
                        Point   = point,
                        LSeg    = lSeg,
                        Box     = box,
                        Path    = path,
                        Polygon = polygon,
                        Circle  = circle
                    };
                    t.Complete();
                }

                using (var t = Session.Current.OpenTransaction()) {
                    var record = Query.All <Container>().First(c => c.Id == 1);

                    Console.WriteLine("The record without the initial parameters:");
                    OutputRecord(record);

                    Assert.IsTrue(record.Point.Equals(new NpgsqlPoint()));
                    Assert.IsTrue(record.LSeg.Equals(new NpgsqlLSeg()));
                    Assert.IsTrue(record.Box.Equals(new NpgsqlBox()));
                    Assert.IsTrue(record.Path.Equals(new NpgsqlPath(new[] { new NpgsqlPoint() })));
                    Assert.IsTrue(record.Polygon.Equals(new NpgsqlPolygon(new[] { new NpgsqlPoint() })));
                    Assert.IsTrue(record.Circle.Equals(new NpgsqlCircle()));

                    record = Query.All <Container>().First(c => c.Id == 2);

                    Console.WriteLine("The record with the initial parameters:");
                    OutputRecord(record);
                    Assert.IsTrue(record.Point.Equals(point));
                    Assert.IsTrue(record.LSeg.Equals(lSeg));
                    Assert.IsTrue(record.Box.Equals(box));
                    Assert.IsTrue(record.Path.Equals(path));
                    Assert.IsTrue(record.Polygon.Equals(polygon));
                    Assert.IsTrue(record.Circle.Equals(circle));

                    t.Complete();
                }
            }
        }