SQLProvider icon indicating copy to clipboard operation
SQLProvider copied to clipboard

Error with Oracle

Open imetallica opened this issue 5 years ago • 3 comments

Description

When doing simple queries on some oracle tables, the TP raises an exception

Repro steps

  1. Use Oracle Docker Image

  2. Use the following gist as a project: https://gist.github.com/imetallica/0dff42841a7273c61fd7149ea0e42e8d

Actual behavior

This is the exception it raises

Unexpected exception from provided type 'FSharp.Data.Sql.SqlDataProvider,DatabaseVendor="4",ConnectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLPDB1.localdomain)));User Id=sys;Password=Oradoc_db1;DBA Privilege=SYSDBA;",UseOptionTypes="True"+dataContext+SYSSchema' member 'GetProperties': The type provider 'FSharp.Data.Sql.SqlTypeProvider' reported an error: GetMethodImpl. not support overloads, name = 'get_Col', methods - '[|Method get_Col; Method get_Col|]', callstack = '"   at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at ProviderImplementation.ProvidedTypes.ProvidedTypeDefinition.GetMethodImpl(String name, BindingFlags bindingFlags, Binder _binderBinder, CallingConventions _callConvention, Type[] _types, ParameterModifier[] _modifiers)
   at System.Type.GetMethod(String name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
   at ProviderImplementation.ProvidedTypes.ProvidedTypesContext.convMethodRefToTgt(MethodInfo m)
   at ProviderImplementation.ProvidedTypes.Utils.PropertyInfo.get_IsStatic(PropertyInfo )
   at <StartupCode$FSharp-Data-SqlProvider>[email protected](MemberInfo _arg4)
   at Microsoft.FSharp.Collections.ArrayModule.Choose[T,TResult](FSharpFunc`2 chooser, T[] array)
   at ProviderImplementation.ProvidedTypes.ProvidedTypeDefinition.GetProperties(BindingFlags bindingFlags)
   at FSharp.Compiler.ExtensionTyping.ValidateProvidedTypeAfterStaticInstantiation@914-4.Invoke(ProvidedType st)
   at FSharp.Compiler.Tainted`1.Protect[a](FSharpFunc`2 f, range range)
   at FSharp.Compiler.Tainted`1.PApplyArray[U](FSharpFunc`2 f, String methodName, range range)
   at FSharp.Compiler.ExtensionTyping.TryTypeMemberArray[a,b](Tainted`1 st, String fullName, String memberName, range m, FSharpFunc`2 f)
   at FSharp.Compiler.ExtensionTyping.ValidateProvidedTypeAfterStaticInstantiation@911.GenerateNext(IEnumerable`1& next)
   at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.MoveNextImpl()
   at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.System-Collections-IEnumerator-MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at Microsoft.FSharp.Collections.SeqModule.ToArray[T](IEnumerable`1 source)
   at FSharp.Compiler.ExtensionTyping.ValidateProvidedTypeAfterStaticInstantiation(range m, Tainted`1 st, String[] expectedPath, String expectedName)
   at FSharp.Compiler.Import.ImportTypeRefData(ImportMap env, range m, ILScopeRef scoref, String[] path, String typeName)
   at FSharp.Compiler.Import.ImportILTypeRefUncached(ImportMap env, range m, ILTypeRef tref)
   at FSharp.Compiler.Import.ImportILTypeRef(ImportMap env, range m, ILTypeRef tref)
   at FSharp.Compiler.Import.ImportProvidedNamedType(ImportMap env, range m, Tainted`1 st)
   at FSharp.Compiler.Import.ImportProvidedType(ImportMap env, range m, Tainted`1 st)
   at FSharp.Compiler.Infos.GetCompiledReturnTyOfProvidedMethodInfo(ImportMap amap, range m, Tainted`1 mi)
   at FSharp.Compiler.Infos.MethInfo.GetCompiledReturnTy(ImportMap amap, range m, FSharpList`1 minst)
   at FSharp.Compiler.MethodCalls.CalledMeth`1..ctor(InfoReader infoReader, FSharpOption`1 nameEnv, Boolean isCheckingAttributeCall, FSharpFunc`2 freshenMethInfo, range m, AccessorDomain ad, MethInfo minfo, FSharpList`1 calledTyArgs, FSharpList`1 callerTyArgs, FSharpOption`1 pinfoOpt, FSharpList`1 callerObjArgTys, FSharpList`1 curriedCallerArgs, Boolean allowParamArgs, Boolean allowOutAndOptArgs, FSharpOption`1 tyargsOpt)
   at FSharp.Compiler.TypeChecker.makeOneCalledMeth@9781(Boolean isCheckingAttributeCall, cenv cenv, TcEnv env, FSharpOption`1 tyargsOpt, range mMethExpr, range mItem, FSharpOption`1 objTyOpt, AccessorDomain ad, FSharpList`1 callerObjArgTys, FSharpList`1 callerArgs, MethInfo tupledArg0, FSharpOption`1 tupledArg1, Boolean tupledArg2)
   at FSharp.Compiler.TypeChecker.preArgumentTypeCheckingCalledMethGroup@9790.GenerateNext(IEnumerable`1& next)
   at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.MoveNextImpl()
   at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.System-Collections-IEnumerator-MoveNext()
   at Microsoft.FSharp.Collections.SeqModule.ToList[T](IEnumerable`1 source)
   at FSharp.Compiler.TypeChecker.TcMethodApplication(Boolean isCheckingAttributeCall, cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, FSharpOption`1 tyargsOpt, FSharpList`1 objArgs, range mMethExpr, range mItem, String methodName, FSharpOption`1 objTyOpt, AccessorDomain ad, Mutates mut, Boolean isProp, FSharpList`1 calledMethsAndProps, AfterResolution afterResolution, ValUseFlag isSuperInit, FSharpList`1 curriedCallerArgs, TType exprTy, FSharpList`1 delayed)
   at FSharp.Compiler.TypeChecker.TcMethodApplicationThen(cenv cenv, TcEnv env, TType overallTy, FSharpOption`1 objTyOpt, SyntacticUnscopedTyparEnv tpenv, FSharpOption`1 callerTyArgs, FSharpList`1 objArgs, range m, range mItem, String methodName, AccessorDomain ad, Mutates mut, Boolean isProp, FSharpList`1 meths, AfterResolution afterResolution, ValUseFlag isSuperInit, FSharpList`1 args, ExprAtomicFlag atomicFlag, FSharpList`1 delayed)
   at FSharp.Compiler.TypeChecker.TcExpr(cenv cenv, TType ty, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.TcExprOfUnknownType(cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.TcStmt(cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr synExpr)
   at FSharp.Compiler.TypeChecker.TcStmtThatCantBeCtorBody(cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.TcLinearExprs(FSharpFunc`2 bodyChecker, cenv cenv, TcEnv env, TType overallTy, SyntacticUnscopedTyparEnv tpenv, Boolean isCompExpr, SynExpr expr, FSharpFunc`2 cont)
   at FSharp.Compiler.TypeChecker.TcExpr(cenv cenv, TType ty, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.TcIteratedLambdas(cenv cenv, Boolean isFirst, TcEnv env, TType overallTy, FSharpSet`1 takenNames, SyntacticUnscopedTyparEnv tpenv, SynExpr e)
   at FSharp.Compiler.TypeChecker.TcIteratedLambdas(cenv cenv, Boolean isFirst, TcEnv env, TType overallTy, FSharpSet`1 takenNames, SyntacticUnscopedTyparEnv tpenv, SynExpr e)
   at FSharp.Compiler.TypeChecker.TcExprUndelayed(cenv cenv, TType overallTy, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr synExpr)
   at FSharp.Compiler.TypeChecker.TcExpr(cenv cenv, TType ty, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.TcExprThatCantBeCtorBody(cenv cenv, TType overallTy, TcEnv env, SyntacticUnscopedTyparEnv tpenv, SynExpr expr)
   at FSharp.Compiler.TypeChecker.f@514-18(cenv cenv, FSharpOption`1 safeThisValOpt, SafeInitData safeInitInfo, SynExpr rhsExpr, TType overallExprTy, SyntacticUnscopedTyparEnv tpenv, TcEnv envinner, Boolean isCtor, Unit unitVar0)
   at FSharp.Compiler.TypeChecker.TcNormalizedBinding(DeclKind declKind, cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, TType overallTy, FSharpOption`1 safeThisValOpt, SafeInitData safeInitInfo, FSharpList`1 enclosingDeclaredTypars, ExplicitTyparInfo _arg9, NormalizedBinding bind)
   at FSharp.Compiler.TypeChecker.TcNonRecursiveBinding(DeclKind declKind, cenv cenv, TcEnv env, SyntacticUnscopedTyparEnv tpenv, TType ty, SynBinding b)
   at [email protected](SyntacticUnscopedTyparEnv tpenv, SynBinding b)
   at Microsoft.FSharp.Primitives.Basics.List.mapFold[TState,T,TResult](FSharpFunc`2 f, TState acc, FSharpList`1 xs)
   at FSharp.Compiler.TypeChecker.TcLetBinding(cenv cenv, Boolean isUse, TcEnv env, ContainerInfo containerInfo, DeclKind declKind, SyntacticUnscopedTyparEnv tpenv, FSharpList`1 synBinds, range synBindsRange, range scopem)
   at FSharp.Compiler.TypeChecker.TcLetBindings(cenv cenv, TcEnv env, ContainerInfo containerInfo, DeclKind declKind, SyntacticUnscopedTyparEnv tpenv, FSharpList`1 binds, range bindsm, range scopem)
   at FSharp.Compiler.TypeChecker.TcModuleOrNamespaceElementNonMutRec@17085-1.Invoke(Unit unitVar)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@912-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@912-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@912-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@912-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@903-1.Invoke(CompilationThreadToken ctok)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.loop@875-24[a,b](Int64 timeShareInMilliseconds, CancellationToken ct, FSharpFunc`2 runner, Stopwatch sw, CompilationThreadToken ctok, Eventually`1 ev2)
   at FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.loop@875-25.Invoke(CompilationThreadToken ctok, Eventually`1 ev2)
   at FSharp.Compiler.SourceCodeServices.Parser.CheckOneFile@1731-22.Invoke(CompilationThreadToken ctok)
   at <StartupCode$FSharp-Compiler-Private>[email protected](CompilationThreadToken ctok)
   at <StartupCode$FSharp-Compiler-Private>[email protected](FSharpOption`1 _arg2)
   at Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvokeNoHijackCheck[a,b](AsyncActivation`1 ctxt, FSharpFunc`2 userCode, b result1)
   at <StartupCode$FSharp-Compiler-Private>[email protected](AsyncActivation`1 ctxt)
   at <StartupCode$FSharp-Core>[email protected](AsyncActivation`1 ctxt)
   at Microsoft.FSharp.Control.Trampoline.Execute(FSharpFunc`2 firstAction)
   at Microsoft.FSharp.Control.TrampolineHolder.ExecuteWithTrampoline(FSharpFunc`2 firstAction)
   at <StartupCode$FSharp-Core>[email protected](Object o)
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()"'

Known workarounds

Not that I'm aware

Related information

  • Oracle 12.2.0.1-slim Docker Image
  • Windows 10
  • 1.1.65
  • .NET Core 2.2

imetallica avatar Jun 26 '19 22:06 imetallica

What is the "Oracle docker image"?

I'm expecting there is some kind of interface mismatch between the Oracle Core and .NET Full drivers, so the assumption of replacing the dll is not enough. ("Oracle.ManagedDataAccess.dll" vs "Oracle.DataAccess.dll")

Thorium avatar Jun 29 '19 00:06 Thorium

@Thorium this docker image: https://hub.docker.com/_/oracle-database-enterprise-edition

imetallica avatar Jun 29 '19 17:06 imetallica

@imetallica, I haven't looked at this using your Gist and Docker image, but have experienced a similar issue myself.

In my case, it occurred when I had two objects in the database, in the same schema that had the same name, but different case - for example, "Employee" and "EMPLOYEE".

You might also want to consider whether there is any issue related to when your user see original object in the user's schema, as well as a public synonym of the same name. (Although I did not replicate the issue that way in my environment.)

In any case, for your example stack trace above, based on the part that says "name = 'get_Col'", I would suggest that running the query may shed some light: select object_type, owner, object_name from all_objects where upper(object_name) = 'COL'; Example output on a clean database install would be something similar to this: image

Unless you have a very specific need to do so, I would never have an application connecting to the database using SYS as SYSDBA, as you have in the Gist. If you create a user with the relevant permissions to do just what it needs to do, and only grant the schema objects that it needs access to, then you will probably find that you do not encounter this issue.

duncanworthy avatar Aug 15 '19 10:08 duncanworthy