Example #1
0
        private string FormatStringValues(string name, Type type, object[] array)
        {
            //TODO find best type
            var firstElem = array.FirstOrDefault(it => it != null);
            var element   = firstElem != null?firstElem.GetType()
                                : type.IsArray ? type.GetElementType()
                                : type.IsGenericType ? type.GetGenericArguments()[0]
                                : null;

            if (element == null)
            {
                throw new ArgumentException("Can't convert collection");
            }

            if (Context.CanUseParams)
            {
                var paramFactory = ConverterFactory.GetVarrayParameterFactory(element);
                if (paramFactory != null)
                {
                    var pn = Parameters.Add(paramFactory(array));
                    return("(SELECT * FROM TABLE({0})) \"{1}\"".With(pn, name));
                }
            }

            var stringFactory = ConverterFactory.GetVarrayStringFactory(element);

            if (stringFactory == null)
            {
                throw new NotSupportedException("Unable to convert collection " + type.FullName);
            }

            return("(SELECT * FROM TABLE({0})) \"{1}\"".With(stringFactory(array), name));
        }