Ejemplo n.º 1
0
    public void Local_mapping()
    {
        var myFactory = new MyInt32TypeHandlerResolverFactory();

        using var _ = CreateTempPool(ConnectionString, out var connectionString);

        using (var conn = OpenConnection(connectionString))
            using (var cmd = new NpgsqlCommand("SELECT @p", conn))
            {
                conn.TypeMapper.AddTypeResolverFactory(myFactory);
                cmd.Parameters.AddWithValue("p", 8);
                cmd.ExecuteScalar();
                Assert.That(myFactory.Reads, Is.EqualTo(1));
                Assert.That(myFactory.Writes, Is.EqualTo(1));
            }

        // Make sure reopening (same physical connection) reverts the mapping
        using (var conn = OpenConnection(connectionString))
            using (var cmd = new NpgsqlCommand("SELECT @p", conn))
            {
                cmd.Parameters.AddWithValue("p", 8);
                cmd.ExecuteScalar();
                Assert.That(myFactory.Reads, Is.EqualTo(1));
                Assert.That(myFactory.Writes, Is.EqualTo(1));
            }
    }
Ejemplo n.º 2
0
    public void Global_reset()
    {
        var myFactory = new MyInt32TypeHandlerResolverFactory();

        NpgsqlConnection.GlobalTypeMapper.AddTypeResolverFactory(myFactory);
        using var _ = CreateTempPool(ConnectionString, out var connectionString);

        using (OpenConnection(connectionString))
        {
        }
        // We now have a connector in the pool with our custom mapping

        NpgsqlConnection.GlobalTypeMapper.Reset();
        using (var conn = OpenConnection(connectionString))
        {
            // Should be the pooled connector from before, but it should have picked up the reset
            conn.ExecuteScalar("SELECT 1");
            Assert.That(myFactory.Reads, Is.Zero);

            // Now create a second *physical* connection to make sure it picks up the new mapping as well
            using (var conn2 = OpenConnection(connectionString))
            {
                conn2.ExecuteScalar("SELECT 1");
                Assert.That(myFactory.Reads, Is.Zero);
            }

            NpgsqlConnection.ClearPool(conn);
        }
    }
Ejemplo n.º 3
0
    public void Global_mapping()
    {
        var myFactory = new MyInt32TypeHandlerResolverFactory();

        NpgsqlConnection.GlobalTypeMapper.AddTypeResolverFactory(myFactory);

        using var pool = CreateTempPool(ConnectionString, out var connectionString);
        using var conn = OpenConnection(connectionString);
        using var cmd  = new NpgsqlCommand("SELECT @p", conn);
        var range      = new NpgsqlRange <int>(8, true, false, 0, false, true);
        var parameters = new[]
        {
            // Base
            new NpgsqlParameter("p", NpgsqlDbType.Integer)
            {
                Value = 8
            },
            new NpgsqlParameter("p", DbType.Int32)
            {
                Value = 8
            },
            new NpgsqlParameter {
                ParameterName = "p", Value = 8
            },
            // Array
            new NpgsqlParameter {
                ParameterName = "p", Value = new[] { 8 }
            },
            new NpgsqlParameter("p", NpgsqlDbType.Array | NpgsqlDbType.Integer)
            {
                Value = new[] { 8 }
            },
            // Range
            new NpgsqlParameter {
                ParameterName = "p", Value = range
            },
            new NpgsqlParameter("p", NpgsqlDbType.Range | NpgsqlDbType.Integer)
            {
                Value = range
            },
        };

        for (var i = 0; i < parameters.Length; i++)
        {
            cmd.Parameters.Add(parameters[i]);
            cmd.ExecuteScalar();
            Assert.That(myFactory.Reads, Is.EqualTo(i + 1));
            Assert.That(myFactory.Writes, Is.EqualTo(i + 1));
            cmd.Parameters.Clear();
        }
    }
Ejemplo n.º 4
0
 public MyInt32Handler(PostgresType postgresType, MyInt32TypeHandlerResolverFactory factory)
     : base(postgresType)
     => _factory = factory;
Ejemplo n.º 5
0
 public MyInt32TypeHandlerResolver(NpgsqlConnector connector, MyInt32TypeHandlerResolverFactory factory)
 => _handler = new MyInt32Handler(connector.DatabaseInfo.GetPostgresTypeByName("integer"), factory);