Exemplo n.º 1
0
        public void TestGetFeatureInvalidGeometry(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);
            sq.ValidateGeometries = validateGeometries;

            var feature = sq.GetFeature(_idInvalidGeom);

            NUnit.Framework.Assert.IsNotNull(feature);
            if (providerMode == SqlServerProviderMode.NativeSqlBytes)
            {
                // client side conversion always attempts validation
                NUnit.Framework.Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid);
            }
            else
            {
                if (validateGeometries)
                {
                    NUnit.Framework.Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid);
                }
                else
                {
                    NUnit.Framework.Assert.IsTrue(feature.Geometry.IsEmpty);
                }
            }
        }
Exemplo n.º 2
0
        public void TestGetFeatureNonExisting(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            var feature = sq.GetFeature(99999999);

            NUnit.Framework.Assert.IsNull(feature);
        }
Exemplo n.º 3
0
        public void TestGetFeatureEmptyGeometry(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            var feature = sq.GetFeature(_idEmptyGeom);

            NUnit.Framework.Assert.IsNotNull(feature);
            NUnit.Framework.Assert.IsTrue(feature.Geometry.IsEmpty);
        }
Exemplo n.º 4
0
        public void TestGetFeatureNullGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            var feature = sq.GetFeature(_idNullGeom);

            Assert.IsNotNull(feature);
            Assert.IsNull(feature.Geometry);
        }
Exemplo n.º 5
0
        public void TestGetGeometriesInViewNOLOCK(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.NoLockHint         = true;
            sq.ValidateGeometries = validateGeometries;

            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            NUnit.Framework.Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count);
        }
Exemplo n.º 6
0
        public void TestGetGeometriesInViewDefinitionQuery(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.DefinitionQuery = "NAME LIKE 'A%'";

            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            NUnit.Framework.Assert.IsNotNull(geometries);
            NUnit.Framework.Assert.LessOrEqual(geometries.Count, _numValidGeoms);
        }
Exemplo n.º 7
0
        public void TestGetGeometriesInView(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);
            sq.ValidateGeometries = validateGeometries;

            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            Assert.IsNotNull(geometries);

            Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count);
        }
Exemplo n.º 8
0
        public void TestExecuteIntersectionQuery(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.ValidateGeometries = validateGeometries;

            SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet();

            sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds);

            NUnit.Framework.Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count);
        }
Exemplo n.º 9
0
        public void TestGetGeometriesInViewFORCESEEK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.ForceSeekHint      = true;
            sq.ValidateGeometries = validateGeometries;

            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            Assert.IsNotNull(geometries);
            // NOTE ValidateGeometries is ignored when using ForceSeek
            Assert.AreEqual(_numValidGeoms, geometries.Count);
        }
Exemplo n.º 10
0
        public void TestGetGeometriesInViewFORCEINDEX(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.ForceIndex         = spatialType == SharpMap.Data.Providers.SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex;
            sq.ValidateGeometries = validateGeometries;

            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            NUnit.Framework.Assert.IsNotNull(geometries);
            // NOTE ValidateGeometries is ignored when using ForceIndex
            NUnit.Framework.Assert.AreEqual(_numValidGeoms, geometries.Count);
        }
Exemplo n.º 11
0
        public void TestExecuteIntersectionQueryExceedGeogMaxExtents(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType,
                                                                     double x1, double x2, double y1, double y2)
        {
            // occurs when user zooms out beyond map extents. For Geog, when latitude approaches 90 N or S can result in
            // error 24206: "The specified input cannot be accepted because it contains an edge with antipodal points."
            // Longitudes exceeding -179.99999999 or 180.0 are "wrapped" resulting in unexpected polygon (also contributes to err 24206)
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet();

            sq.ExecuteIntersectionQuery(new GeoAPI.Geometries.Envelope(x1, x2, y1, y2), ds);

            NUnit.Framework.Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count);
        }
Exemplo n.º 12
0
        public void TestGetGeometriesInViewAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.NoLockHint    = true;
            sq.ForceSeekHint = true;
            sq.ForceIndex    = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex;

            sq.ValidateGeometries = validateGeometries;
            var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType));

            Assert.IsNotNull(geometries);
            // Note: ValidateGeometries is ignored when using ForceSeek or ForceIndex
            Assert.AreEqual(_numValidGeoms, geometries.Count);
        }
Exemplo n.º 13
0
        public void TestExecuteIntersectionQueryAllHints(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType, bool validateGeometries)
        {
            SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType);

            sq.NoLockHint         = true;
            sq.ForceSeekHint      = true;
            sq.ForceIndex         = spatialType == SharpMap.Data.Providers.SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex;;
            sq.ValidateGeometries = validateGeometries;

            SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet();

            sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds);
            // Note: ValidateGeometries ignored when using ForceSeek or ForceIndex
            NUnit.Framework.Assert.AreEqual(_numValidGeoms, ds.Tables[0].Rows.Count);
        }
Exemplo n.º 14
0
        private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerProviderMode providerMode, SharpMap.Data.Providers.SqlServerSpatialObjectType spatialType)
        {
            SharpMap.Data.Providers.SqlServer2008 provider;

            switch (providerMode)
            {
            case SqlServerProviderMode.NativeSqlBytes:
                //Assert.Ignore("Ignore SharpMap.Data.Providers.SqlServer2008Ex");

                if (spatialType == SharpMap.Data.Providers.SqlServerSpatialObjectType.Geography)
                {
                    // NB note forcing WGS84
                    provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008,
                                                                           "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid,
                                                                           SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures);
                }
                else
                {
                    provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008,
                                                                           "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid,
                                                                           SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures);
                }
                break;

            default:
                if (spatialType == SharpMap.Data.Providers.SqlServerSpatialObjectType.Geography)
                {
                    // NB note forcing WGS84
                    provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008,
                                                                         "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid,
                                                                         SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures);
                }
                else
                {
                    provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008,
                                                                         "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid,
                                                                         SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures);
                }
                break;
            }

            //provider.ValidateGeometries = true
            //provider.DefinitionQuery = "ID NOT IN (103)"  // Invalid Geom

            return(provider);
        }
Exemplo n.º 15
0
		public SqlProvider()
		{
			_mode = SqlServerProviderMode.Sql2008;
		}
Exemplo n.º 16
0
		private void SetProviderMode(Enum value)
		{
			if(value == null)
			{
				// use default.
				return;
			}
			if(!(value is SqlServerProviderMode))
			{
				throw Error.ArgumentTypeMismatch("ProviderMode value");
			}
			if(!Enum.IsDefined(typeof(SqlServerProviderMode), value))
			{
				throw Error.ArgumentOutOfRange("ProviderMode");
			}
			_mode = (SqlServerProviderMode)value;
		}
Exemplo n.º 17
0
		internal SqlProvider(SqlServerProviderMode mode)
		{
			_mode = mode;
		}
			internal Visitor(SqlFactory sql, SqlServerProviderMode providerMode)
			{
				this.sql = sql;
				this.providerMode = providerMode;
				this.skipper = new SqlSelectionSkipper(this);
			}
Exemplo n.º 19
0
		[ResourceExposure(ResourceScope.Machine)] // connection parameter may refer to filenames.
		void IProvider.Initialize(IDataServices dataServices, object connection)
		{
			if(dataServices == null)
			{
				throw Error.ArgumentNull("dataServices");
			}
			_services = dataServices;

			DbConnection con;
			DbTransaction tx = null;

			string fileOrServerOrConnectionString = connection as string;
			if(fileOrServerOrConnectionString != null)
			{
				string connectionString = this.GetConnectionString(fileOrServerOrConnectionString);
				_dbName = this.GetDatabaseName(connectionString);
				if(_dbName.EndsWith(".sdf", StringComparison.OrdinalIgnoreCase))
				{
					_mode = SqlServerProviderMode.SqlCE;
				}
				if(_mode == SqlServerProviderMode.SqlCE)
				{
					DbProviderFactory factory = SqlProvider.GetProvider(SqlCeProviderInvariantName);
					if(factory == null)
					{
						throw Error.ProviderNotInstalled(_dbName, SqlCeProviderInvariantName);
					}
					con = factory.CreateConnection();
				}
				else
				{
					con = new SqlConnection();
				}
				con.ConnectionString = connectionString;
			}
			else
			{
				// We only support SqlTransaction and SqlCeTransaction
				tx = connection as SqlTransaction;
				if(tx == null)
				{
					// See if it's a SqlCeTransaction
					if(connection.GetType().FullName == SqlCeTransactionTypeName)
					{
						tx = connection as DbTransaction;
					}
				}
				if(tx != null)
				{
					connection = tx.Connection;
				}
				con = connection as DbConnection;
				if(con == null)
				{
					throw Error.InvalidConnectionArgument("connection");
				}
				if(con.GetType().FullName == SqlCeConnectionTypeName)
				{
					_mode = SqlServerProviderMode.SqlCE;
				}
				_dbName = this.GetDatabaseName(con.ConnectionString);
			}

			// initialize to the default command timeout
			using(DbCommand c = con.CreateCommand())
			{
				_commandTimeout = c.CommandTimeout;
			}

			int maxUsersPerConnection = 1;
			if(con.ConnectionString.IndexOf("MultipleActiveResultSets", StringComparison.OrdinalIgnoreCase) >= 0)
			{
				DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
				builder.ConnectionString = con.ConnectionString;
				if(string.Compare((string)builder["MultipleActiveResultSets"], "true", StringComparison.OrdinalIgnoreCase) == 0)
				{
					maxUsersPerConnection = 10;
				}
			}

			// If fileOrServerOrConnectionString != null, that means we just created the connection instance and we have to tell
			// the SqlConnectionManager that it should dispose the connection when the context is disposed. Otherwise the user owns
			// the connection and should dispose of it themselves.
			_conManager = new ConnectionManager(this, con, maxUsersPerConnection, fileOrServerOrConnectionString != null /*disposeConnection*/);
			if(tx != null)
			{
				_conManager.Transaction = tx;
			}

#if DEBUG
			SqlNode.Formatter = new SqlFormatter();
#endif


			Type readerType;
			if(_mode == SqlServerProviderMode.SqlCE)
			{
				readerType = con.GetType().Module.GetType(SqlCeDataReaderTypeName);
			}
			else if(con is SqlConnection)
			{
				readerType = typeof(SqlDataReader);
			}
			else
			{
				readerType = typeof(DbDataReader);
			}
			_readerCompiler = new ObjectReaderCompiler(readerType, _services);
		}
		internal static SqlNode Convert(SqlNode node, SqlFactory nodeFactory, SqlServerProviderMode providerMode)
		{
			return new Visitor(nodeFactory, providerMode).Visit(node);
		}