public void ParsePercentsFactionParameterValueTest()
        {
            var parameterLink     = new ParameterLink("autovacuum_vacuum_scale_factor");
            var rawParameterValue = new RawRangeParameterValue("0.8", RawValueType.Real, (0, 100));

            var parameterValueParser = GetService <IParameterValueParser>();
            var parameterValue       = parameterValueParser.Parse(parameterLink, rawParameterValue);

            Assert.IsInstanceOf <FractionParameterValue>(parameterValue);
            Assert.AreEqual(new IUnit.None(), parameterValue.Unit);
            Assert.AreEqual(parameterLink, parameterValue.Link);
        }
        public void ParseFactionParameterValueTest()
        {
            var parameterLink     = new ParameterLink("checkpoint_completion_target");
            var rawParameterValue = new RawRangeParameterValue("0.5", RawValueType.Real, (0, 1));

            var parameterValueParser = GetService <IParameterValueParser>();
            var parameterValue       = parameterValueParser.Parse(parameterLink, rawParameterValue);

            Assert.IsInstanceOf <FractionParameterValue>(parameterValue);
            Assert.AreEqual(new IUnit.None(), parameterValue.Unit);
            Assert.AreEqual(parameterLink, parameterValue.Link);
        }
        public void ParseMemoryParameterValueTest()
        {
            var parameterLink     = new ParameterLink("effective_cache_size");
            var rawParameterValue = new RawRangeParameterValue("4GB", RawValueType.Integer, (1, 2147483647));

            var parameterValueParser = GetService <IParameterValueParser>();
            var parameterValue       = parameterValueParser.Parse(parameterLink, rawParameterValue);

            Assert.IsInstanceOf <MemoryParameterValue>(parameterValue);
            // 4GB is less then 10GB, so it's normalized to megabytes.
            Assert.AreEqual(new IUnit.Mem(Memory.Unit.Megabytes), parameterValue.Unit);
            Assert.AreEqual(parameterLink, parameterValue.Link);
        }
        public void ParseTimeSpanParameterValueTest()
        {
            var parameterLink     = new ParameterLink("autovacuum_naptime");
            var rawParameterValue = new RawRangeParameterValue("30s", RawValueType.Integer, (1, 2147483));

            var parameterValueParser = GetService <IParameterValueParser>();
            var parameterValue       = parameterValueParser.Parse(parameterLink, rawParameterValue);

            Assert.IsInstanceOf <TimeSpanParameterValue>(parameterValue);
            // 30s is more then 10s, so it's normalized to seconds.
            Assert.AreEqual(new IUnit.TimeSpan(PositiveTimeSpan.Unit.Seconds), parameterValue.Unit);
            Assert.AreEqual(parameterLink, parameterValue.Link);
        }
        public void ParseIntegerParameterValueWithRangeTest()
        {
            const int underlyingValue   = 100;
            var       parameterLink     = new ParameterLink("max_connections");
            var       rawParameterValue = new RawRangeParameterValue(underlyingValue.ToString(), RawValueType.Integer, (1, 262143));

            var parameterValueParser = GetService <IParameterValueParser>();
            var parameterValue       = parameterValueParser.Parse(parameterLink, rawParameterValue);

            Assert.IsInstanceOf <IntegerParameterValue>(parameterValue);
            Assert.AreEqual(new IUnit.None(), parameterValue.Unit);
            Assert.AreEqual(parameterLink, parameterValue.Link);
            Assert.AreEqual(underlyingValue, ((IntegerParameterValue)parameterValue).Value);
        }
Ejemplo n.º 6
0
        /// <inheritdoc />
        async Task <RawParameterValue> IDatabaseServer.GetRawParameterValueAsync(IParameterLink parameterLink)
        {
            var commandText = string.Intern($@"
				select
					current_setting(name),
					vartype,
					min_val,
					max_val
				from pg_catalog.pg_settings
				where name = @{nameof(IParameterLink.Name)};"                );

            var connection = await Connection();

            var(value, typeString, minValue, maxValue) = await connection
                                                         .QuerySingleAsync <(NonEmptyString, NonEmptyString, decimal?, decimal?)>(
                commandText,
                new { parameterLink.Name });

            var rawType = typeString.ByStringRepresentation <RawValueType>();

            return(minValue.HasValue && maxValue.HasValue
                                ? new RawRangeParameterValue(value, rawType, (minValue.Value, maxValue.Value))
                                : new RawParameterValue(value, rawType));
        }