internal static ITranslaterType GetTranslater(ITyped dataType)
        {
            string dataTypeFull = String.Empty;

            if (OracleTypeTranslaters.Any(t => t.IsValid(dataType)))
            {
                dataTypeFull = OracleTypeTranslaters.First(t => t.IsValid(dataType)).DataTypeFull;
            }
            else
            {
                dataTypeFull = dataType.OrclType.BuildDataTypeFullName(dataType);
                switch (OrclUtil.NormalizeDataType(dataType))   // dynamically create custom type translaters for complex types
                {
                case Orcl.ASSOCIATITVE_ARRAY:
                    OracleTypeTranslaters.Add(new TranslaterAssociativeArray(dataTypeFull, TypeTargetForOracleAssociativeArray, dataType));
                    break;

                case Orcl.REF_CURSOR:
                    if (dataType.SubType == null)
                    {
                        OracleTypeTranslaters.Add(new TranslaterRefCursorUntyped(dataTypeFull, TypeTargetForOracleRefCursor, dataType));
                    }
                    else
                    {
                        OracleTypeTranslaters.Add(new TranslaterRefCursorTyped(dataTypeFull, TypeTargetForOracleRefCursor, dataType));
                    }
                    break;

                case Orcl.OBJECT:
                    OracleTypeTranslaters.Add(new TranslaterObjectType(dataTypeFull));
                    break;

                case Orcl.RECORD:
                    OracleTypeTranslaters.Add(new TranslaterRecordType(dataTypeFull));
                    break;

                case Orcl.ROWTYPE:
                    OracleTypeTranslaters.Add(new TranslaterRowtype(dataTypeFull));
                    break;

                case Orcl.NESTED_TABLE:
                    OracleTypeTranslaters.Add(new TranslaterNestedTable(dataTypeFull, TypeTargetForOracleAssociativeArray, dataType));
                    break;

                case Orcl.VARRAY:
                    OracleTypeTranslaters.Add(new TranslaterVarray(dataTypeFull, TypeTargetForOracleAssociativeArray, dataType));
                    break;

                default:
                    OracleTypeTranslaters.Add(new TranslaterNoneType(dataTypeFull));
                    break;
                }
            }

            return(OracleTypeTranslaters.First(t => t.DataTypeFull.Equals(dataTypeFull)));
        }
Example #2
0
 private bool HasArgumentOfRefCursorOfRowtype()
 {
     foreach (IArgument arg in Arguments)
     {
         if (Arguments.IndexOf(arg) == Arguments.Count - 1)
         {
             return(false);                                               // reached end of arg list since ref cursor uses "2 args"
         }
         // check type of argument and its subsequent argument
         if (arg.DataType == Orcl.REF_CURSOR && OrclUtil.NormalizeDataType(arg.NextArgument) == Orcl.ROWTYPE)
         {
             return(true);
         }
     }
     return(false);
 }