Example #1
0
        public async Task <T> ExecuteFunctionAsync <T>(string function, OracleUdtInfo udtInfo, params IParam[] parameters)
        {
            MetadataBase    returnMetadata = null;
            OracleParameter retOra         = null;

            try
            {
                using (var connection = _DbFactory.CreateConnection())
                {
                    var builder = _BuilderFactory.CreateBuilder(connection);
                    await ExecuteAsync(builder, connection, function, parameters,
                                       (info) => Task.FromResult(FunctionBeforeQuery <T>(builder, info, udtInfo, out returnMetadata,
                                                                                         out retOra)),
                                       (info) =>
                    {
                        if (returnMetadata is MetadataOracleObject <T> metadata)
                        {
                            return(Task.FromResult(
                                       ReturnValueAdditionalInformation(info, udtInfo, metadata, out retOra)));
                        }
                        else if (returnMetadata is MetadataOracleBoolean metadataBoolean)
                        {
                            return(Task.FromResult(
                                       ReturnValueAdditionalInformationBoolean <T>(info, metadataBoolean, out retOra)));
                        }
                        else
                        {
                            return(Task.FromResult <AdditionalInformation>(null));
                        }
                    }).ConfigureAwait(false);

                    return(GetReturnParameterOtuputValue <T>(retOra, returnMetadata));
                }
            }
            finally { _DbFactory.Dispose(); }
        }
Example #2
0
        internal void SetOutputValue_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, Mock <MetadataOracleObject <TestClass> > metadataObject)
        {
            var refCursor = FormatterServices.GetUninitializedObject(
                typeof(OracleRefCursor));

            builder.Setup(b => b.GetOrRegisterMetadataOracleObject <TestClass>(info))
            .Returns(metadataObject.Object);

            metadataObject.Setup(b => b.GetValueFromRefCursor(typeof(TestClass), It.IsAny <OracleRefCursorWrapper>()))
            .Returns(model)
            .Verifiable();


            var param = new ParamObject <TestClass>(model, direction, info);

            param.LoadObjectMetadata(builder.Object);

            param.SetOutputValue(refCursor);

            metadataObject.Verify();
            Assert.Equal(model, param.Value);
        }
        internal void GetOtherUdtInfo_GetsEntryInCache(Mock <IMemoryCache> memoryCache, string name, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch)
        {
            var cache = new ServForOracleCache(memoryCache.Object);

            var    expectedValue  = (info, props, fuzzyNameMatch);
            object validParameter = expectedValue;

            memoryCache.Setup(m => m.TryGetValue($"udt-{name}", out validParameter))
            .Returns(true);

            var actualValue = cache.GetOtherUdtInfo(name);

            Assert.Equal(expectedValue, actualValue);
        }
        internal void PresetGetValueOrDefault_IsObject_Default(Mock <IMemoryCache> memoryMock, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch)
        {
            var    expectedValue  = (info, props, fuzzyNameMatch);
            object validParameter = expectedValue;
            var    type           = typeof(TestClass);

            memoryMock.Setup(m => m.TryGetValue($"udt-{type.FullName}", out validParameter)).Returns(true);

            var cache = new ServForOracleCache(memoryMock.Object);

            var actualValue = cache.PresetGetValueOrDefault(type);

            Assert.Equal(expectedValue, actualValue);
        }
        internal void GetUdtInfoFromAttributeOrPresetCache_FromCache_IsCollection(Mock <IMemoryCache> memoryMock, Type type, OracleUdtInfo info)
        {
            var colType = type.CreateListType();

            (OracleUdtInfo Info, UdtPropertyNetPropertyMap[], bool)expectedValue = (info, default, default);
Example #6
0
        internal void PrepareOutputParameter_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, Mock <MetadataOracleObject <TestClass> > metadataObject, int startNumber, string query, OracleParameter oracleParameter)
        {
            builder.Setup(b => b.GetOrRegisterMetadataOracleObject <TestClass>(info))
            .Returns(metadataObject.Object);

            metadataObject.Setup(m => m.GetRefCursorQuery(startNumber, null))
            .Returns(query)
            .Verifiable();

            metadataObject.Setup(b => b.GetOracleParameterForRefCursor(startNumber))
            .Returns(oracleParameter)
            .Verifiable();

            var param = new ParamObject <TestClass>(model, direction, info);

            param.LoadObjectMetadata(builder.Object);

            var actual = param.PrepareOutputParameter(startNumber);

            metadataObject.Verify();
            Assert.NotNull(actual);
            Assert.Equal(param, actual.Parameter);
            Assert.Equal(query, actual.OutputString);
            Assert.Equal(oracleParameter, actual.OracleParameter);
        }
Example #7
0
        public void AbstractBase_PropertiesSet(TestClass model, ParameterDirection direction, OracleUdtInfo info)
        {
            var param = new ParamObject <TestClass>(model, direction, info);

            ParamObject paramObjBase = param;

            Assert.NotNull(paramObjBase);
            Assert.Equal(info, paramObjBase.UDTInfo);
        }
Example #8
0
        private MetadataOracleTypeDefinition GetOrCreateOracleTypeMetadata(DbConnection connection, OracleUdtInfo udtInfo)
        {
            var exists = Cache.GetTypeDefinition(udtInfo.FullObjectName);

            if (exists != null)
            {
                return(exists);
            }

            if (OracleConnection.State != ConnectionState.Open)
            {
                OracleConnection.Open();
            }

            var cmd = CreateCommand(connection, udtInfo);

            var properties = ExecuteReaderAndLoadTypeDefinition(cmd);

            return(CreateAndSaveMetadata(udtInfo, properties));
        }
Example #9
0
        public virtual MetadataOracleObject <T> GetOrRegisterMetadataOracleObject <T>(OracleUdtInfo udtInfo)
        {
            GetTypeAndCachedMetadata <T>(out var type, out var metadata);

            if (metadata == null)
            {
                if (udtInfo != null)
                {
                    return(Register(type, OracleConnection, udtInfo) as MetadataOracleObject <T>);
                }
                else
                {
                    return(Register(type, OracleConnection) as MetadataOracleObject <T>);
                }
            }
            else
            {
                return(metadata as MetadataOracleObject <T>);
            }
        }
        public void Constructor_FourParameter_Works(string schema, string objectName, string colSchema, string colName)
        {
            var udt = new OracleUdtInfo(schema, objectName, colSchema, colName);

            AssertUDTInfo(udt, schema, objectName, colSchema, colName);
        }
Example #11
0
        private async Task <MetadataOracleTypeDefinition> GetOrCreateOracleTypeMetadataAsync(DbConnection connection, OracleUdtInfo udtInfo)
        {
            var exists = Cache.GetTypeDefinition(udtInfo.FullObjectName);

            if (exists != null)
            {
                return(exists);
            }

            if (connection.State != ConnectionState.Open)
            {
                await connection.OpenAsync().ConfigureAwait(false);
            }

            var cmd = CreateCommand(connection, udtInfo);

            var properties = await ExecuteReaderAndLoadTypeDefinitionAsync(cmd).ConfigureAwait(false);

            return(CreateAndSaveMetadata(udtInfo, properties));
        }
        public void Constructor_OneParameter_Collection_Works(string schema, string objectName, string colName)
        {
            var udt = new OracleUdtInfo($"{schema}.{objectName}|{schema}.{colName}");

            AssertUDTInfo(udt, $"{schema}.{objectName}|{schema}.{colName}");
        }
Example #13
0
 private string FunctionBeforeQuery <T>(MetadataBuilder builder, ExecutionInformation info, OracleUdtInfo udt, out MetadataBase metadata, out OracleParameter parameter)
 {
     if (typeof(T).IsBoolean())
     {
         metadata  = _MetadataFactory.CreateBoolean();
         parameter = null;
         return("ret := ");
     }
     else if (typeof(T).IsClrType())
     {
         metadata  = new MetadataBase();
         parameter = FunctionReturnOracleParameter <T>(info, metadata);
         return($"{parameter.ParameterName} := ");
     }
     else
     {
         metadata  = builder.GetOrRegisterMetadataOracleObject <T>(udt);
         parameter = null;
         return("ret := ");
     }
 }
Example #14
0
        private AdditionalInformation ReturnValueAdditionalInformation <T>(ExecutionInformation info, OracleUdtInfo udt,
                                                                           MetadataOracleObject <T> metadata, out OracleParameter parameter)
        {
            var returnType = typeof(T);

            parameter = FunctionReturnOracleParameter <T>(info, metadata);
            var name = "ret";

            var returnInfo = new AdditionalInformation
            {
                Declare = metadata.GetDeclareLine(returnType, name, udt ?? metadata.OracleTypeNetMetadata.UDTInfo),
                Output  = metadata.GetRefCursorQuery(info.ParameterCounter, name)
            };

            return(returnInfo);
        }
Example #15
0
        internal void GetOracleParameters_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, Mock <MetadataOracleObject <TestClass> > metadataObject, OracleParameter[] parameters, int startNumber)
        {
            builder.Setup(b => b.GetOrRegisterMetadataOracleObject <TestClass>(info))
            .Returns(metadataObject.Object);

            metadataObject.Setup(b => b.GetOracleParameters(model, startNumber))
            .Returns(parameters)
            .Verifiable();

            var param = new ParamObject <TestClass>(model, direction, info);

            param.LoadObjectMetadata(builder.Object);

            var actual = param.GetOracleParameters(startNumber);

            metadataObject.Verify();
            Assert.Equal(parameters, actual);
        }
Example #16
0
        internal void GetDeclareLine_Object_Simple(MetadataOracleNetTypeDefinition typedef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type     = typeof(SimpleTestClass);
            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            Assert.Equal($"{parameterName} {udtInfo.FullObjectName};" + Environment.NewLine, declareLine);
        }
Example #17
0
        internal void BuildQueryConstructorString_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, Mock <MetadataOracleObject <TestClass> > metadataObject, int lastNumber, string constructor, string name, int startNumber)
        {
            builder.Setup(b => b.GetOrRegisterMetadataOracleObject <TestClass>(info))
            .Returns(metadataObject.Object);

            metadataObject.Setup(b => b.BuildQueryConstructorString(model, name, startNumber))
            .Returns((constructor, lastNumber))
            .Verifiable();

            var param = new ParamObject <TestClass>(model, direction, info);

            param.LoadObjectMetadata(builder.Object);
            param.SetParameterName(name);

            var actual = param.BuildQueryConstructorString(startNumber);

            metadataObject.Verify();
            Assert.Equal((constructor, lastNumber), actual);
        }
Example #18
0
        internal void GetDeclareLine_Object_WithMetadata(MetadataOracleNetTypeDefinition typedef, MetadataOracleNetTypeDefinition subTypeDef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type = typeof(ComplexTestClass);
            var prop = typedef.Properties.First();

            prop.PropertyMetadata = subTypeDef;
            prop.NETProperty      = type.GetProperty(nameof(ComplexTestClass.ObjectProp));


            var metadata = new MetadataOracleObject <ComplexTestClass>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            var expected = $"{parameterName}_0 {subTypeDef.UDTInfo.FullObjectName};" + Environment.NewLine
                           + $"{parameterName} {udtInfo.FullObjectName};" + Environment.NewLine;

            Assert.Equal(expected, declareLine);
        }
Example #19
0
        public void Constructor_ThreeParameters(TestClass model, ParameterDirection direction, OracleUdtInfo info)
        {
            var param = new ParamObject <TestClass>(model, direction, info);

            Assert.Equal(model, param.Value);
            Assert.Equal(direction, param.Direction);
        }
Example #20
0
        internal void GetDeclareLine_Collection(MetadataOracleNetTypeDefinition typedef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type = typeof(ComplexTestClass[]);

            var metadata = new MetadataOracleObject <ComplexTestClass[]>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            var expected = $"{parameterName} {udtInfo.FullCollectionName} := {udtInfo.FullCollectionName}();" + Environment.NewLine;

            Assert.Equal(expected, declareLine);
        }
Example #21
0
        internal async Task LoadObjectMetadataAsync_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, MetadataOracleObject <TestClass> metadataObject)
        {
            builder.Setup(b => b.GetOrRegisterMetadataOracleObjectAsync <TestClass>(info))
            .ReturnsAsync(metadataObject)
            .Verifiable();


            var param = new ParamObject <TestClass>(model, direction, info);

            await param.LoadObjectMetadataAsync(builder.Object);

            builder.Verify();
            Assert.True(param.MetadataLoaded);
        }
 internal async Task GetMetadataOracleObjectAsync_NotInCache_CallsDb_PlainType(OracleUdtInfo info, int order, string name,
                                                                               (OracleUdtInfo Info, UdtPropertyNetPropertyMap[] Props, bool FuzzyMatch) preset)
        internal void AddOracleUDTPresets_CreatesEntryInCache(Mock <IMemoryCache> memoryCache, Mock <ICacheEntry> entry, Mock <Type> type, string fullName, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch)
        {
            var cache = new ServForOracleCache(memoryCache.Object);

            memoryCache.Setup(m => m.CreateEntry($"udt-{fullName}")).Returns(entry.Object);
            type.Setup(t => t.FullName).Returns(fullName);

            entry.SetupSet((e) => e.Value = (info, props, fuzzyNameMatch)).Verifiable();

            cache.AddOracleUDTPresets(type.Object, info, props, fuzzyNameMatch);

            entry.Verify();
        }
Example #24
0
 internal virtual void AddOracleUDTPresets(Type type, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch = true)
 {
     SaveUdtInfo(type.FullName, info, props, fuzzyNameMatch);
 }
        internal void CreateSaveUdtInfo_CreatesEntryInCache(Mock <IMemoryCache> memoryCache, Mock <ICacheEntry> entry, string name, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch)
        {
            var cache = new ServForOracleCache(memoryCache.Object);

            memoryCache.Setup(m => m.CreateEntry($"udt-{name}")).Returns(entry.Object);

            entry.SetupSet((e) => e.Value = (info, props, fuzzyNameMatch)).Verifiable();

            cache.SaveUdtInfo(name, info, props, fuzzyNameMatch);

            Console.WriteLine("entry: " + entry.Invocations);
            entry.Verify();
        }
Example #26
0
        internal void GetDeclareLine_Works(Mock <MetadataBuilder> builder, TestClass model, ParameterDirection direction, OracleUdtInfo info, Mock <MetadataOracleObject <TestClass> > metadataObject, string name, string line)
        {
            builder.Setup(b => b.GetOrRegisterMetadataOracleObject <TestClass>(info))
            .Returns(metadataObject.Object);

            metadataObject.Setup(b => b.GetDeclareLine(typeof(TestClass), name, metadataObject.Object.OracleTypeNetMetadata.UDTInfo))
            .Returns(line)
            .Verifiable();


            var param = new ParamObject <TestClass>(model, direction, info);

            param.LoadObjectMetadata(builder.Object);

            param.SetParameterName(name);

            var result = param.GetDeclareLine();

            metadataObject.Verify();
            Assert.Equal(line, result);
        }
        internal void PresetGetValueOrDefault_IsCollection(Mock <Type> typeMock, Mock <Type> type, Mock <IMemoryCache> memoryMock, OracleUdtInfo info, UdtPropertyNetPropertyMap[] props, bool fuzzyNameMatch, string fullName)
        {
            var    expectedValue  = (info, props, fuzzyNameMatch);
            object validParameter = expectedValue;

            typeMock.SetReturnsDefault(true);
            typeMock.Setup(t => t.GetGenericArguments()).Returns(new[] { type.Object });

            type.Setup(t => t.FullName).Returns(fullName);
            memoryMock.Setup(m => m.TryGetValue($"udt-{fullName}", out validParameter)).Returns(true);

            var cache = new ServForOracleCache(memoryMock.Object);

            var actualValue = cache.PresetGetValueOrDefault(typeMock.Object);

            Assert.Equal(expectedValue, actualValue);
        }
 public virtual string GetDeclareLine(Type type, string parameterName, OracleUdtInfo udtInfo)
 {
     return(GetDeclareLine(type, parameterName, udtInfo, OracleTypeNetMetadata));
 }