コード例 #1
0
        protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable)
        {
            return
                ((
                     from r in resultTable.AsEnumerable()

                     let columnName = r.Field <string>("ColumnName")
                                      let columnType = Converter.ChangeTypeTo <string>(r["DataTypeName"])
                                                       let dataType = DataTypes.FirstOrDefault(t => t.TypeName == columnType)
                                                                      // AllowDBNull not set even with KeyInfo behavior suggested here:
                                                                      // https://github.com/npgsql/npgsql/issues/1693
                                                                      let isNullable = r.IsNull("AllowDBNull")      ? true       : r.Field <bool>("AllowDBNull")
                                                                                       let length = r.IsNull("ColumnSize")       ? (int?)null : r.Field <int>("ColumnSize")
                                                                                                    let precision = r.IsNull("NumericPrecision") ? (int?)null : r.Field <int>("NumericPrecision")
                                                                                                                    let scale = r.IsNull("NumericScale")     ? (int?)null : r.Field <int>("NumericScale")
                                                                                                                                let providerType = r.IsNull("DataType")         ? null       : r.Field <Type>("DataType")
                                                                                                                                                   let systemType = GetSystemType(columnType, null, dataType, length, precision, scale) ?? providerType ?? typeof(object)

                                                                                                                                                                    select new ColumnSchema
            {
                ColumnName = columnName,
                ColumnType = GetDbType(columnType, dataType, length, precision, scale),
                IsNullable = isNullable,
                MemberName = ToValidName(columnName),
                MemberType = ToTypeName(systemType, isNullable),
                ProviderSpecificType = GetProviderSpecificType(columnType),
                SystemType = systemType,
                DataType = GetDataType(columnType, null, length, precision, scale),
            }
                     ).ToList());
        }
コード例 #2
0
        /// <summary>
        /// The return data type.
        /// </summary>
        /// <param name="dataTypeId">
        /// The data type id.
        /// </param>
        /// <returns>
        /// The <see cref="IDataType"/>.
        /// </returns>
        public static IDataType ReturnDataType(Guid dataTypeId)
        {
            if (DataTypes == null || !DataTypes.Any())
            {
                return(null);
            }

            return(DataTypes.FirstOrDefault(
                       d => d.Metadata["ValueMetaData"].ToString().ToLower() == dataTypeId.ToString().ToLower()).Value);
        }
コード例 #3
0
        protected override string GetDbType(string columnType, DataTypeInfo dataType, long?length, int?prec, int?scale)
        {
            var type = DataTypes.FirstOrDefault(dt => dt.TypeName == columnType);

            if (type != null)
            {
                if (type.CreateParameters == null)
                {
                    length = prec = scale = 0;
                }
                else
                {
                    if (type.CreateParameters == "LENGTH")
                    {
                        prec = scale = 0;
                    }
                    else
                    {
                        length = 0;
                    }

                    if (type.CreateFormat == null)
                    {
                        if (type.TypeName.IndexOf("()") >= 0)
                        {
                            type.CreateFormat = type.TypeName.Replace("()", "({0})");
                        }
                        else
                        {
                            var format = string.Join(",",
                                                     type.CreateParameters
                                                     .Split(',')
                                                     .Select((p, i) => "{" + i + "}")
                                                     .ToArray());

                            type.CreateFormat = type.TypeName + "(" + format + ")";
                        }
                    }
                }
            }

            return(base.GetDbType(columnType, dataType, length, prec, scale));
        }
コード例 #4
0
        protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable)
        {
#if !NETSTANDARD
            return
                ((
                     from r in resultTable.AsEnumerable()

                     let providerType = Converter.ChangeTypeTo <int>(r["ProviderType"])
                                        let dataType = DataTypes.FirstOrDefault(t => t.ProviderDbType == providerType)
                                                       let columnType = dataType == null ? null : dataType.TypeName

                                                                        let columnName = r.Field <string>("ColumnName")
                                                                                         let isNullable = r.Field <bool>("AllowDBNull")

                                                                                                          let length = r.Field <int>("ColumnSize")
                                                                                                                       let precision = Converter.ChangeTypeTo <int>(r["NumericPrecision"])
                                                                                                                                       let scale = Converter.ChangeTypeTo <int>(r["NumericScale"])

                                                                                                                                                   let systemType = GetSystemType(columnType, null, dataType, length, precision, scale)

                                                                                                                                                                    select new ColumnSchema
            {
                ColumnName = columnName,
                ColumnType = GetDbType(columnType, dataType, length, precision, scale),
                IsNullable = isNullable,
                MemberName = ToValidName(columnName),
                MemberType = ToTypeName(systemType, isNullable),
                SystemType = systemType ?? typeof(object),
                DataType = GetDataType(columnType, null, length, precision, scale),
                ProviderSpecificType = GetProviderSpecificType(columnType),
                IsIdentity = r.IsNull("IsIdentity") ? false : r.Field <bool>("IsIdentity")
            }
                     ).ToList());
#else
            return(new List <ColumnSchema>());
#endif
        }
コード例 #5
0
        protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable)
        {
            return
                ((
                     from r in resultTable.AsEnumerable()

                     let systemType = r.Field <Type>("DataType")
                                      let columnName = GetEmptyStringIfInvalidColumnName(r.Field <string>("ColumnName"))
                                                       let providerType = Converter.ChangeTypeTo <int>(r["ProviderType"])
                                                                          let dataType = DataTypes.FirstOrDefault(t => t.ProviderDbType == providerType)
                                                                                         let columnType = dataType == null ? null : dataType.TypeName
                                                                                                          let length = r.Field <int>("ColumnSize")
                                                                                                                       let precision = Converter.ChangeTypeTo <int>(r["NumericPrecision"])
                                                                                                                                       let scale = Converter.ChangeTypeTo <int>(r["NumericScale"])
                                                                                                                                                   let isNullable = Converter.ChangeTypeTo <bool>(r["AllowDBNull"])

                                                                                                                                                                    select new ColumnSchema
            {
                ColumnType = GetDbType(columnType, dataType, length, precision, scale, null, null, null),
                ColumnName = columnName,
                IsNullable = isNullable,
                MemberName = ToValidName(columnName),
                MemberType = ToTypeName(systemType, isNullable),
                SystemType = systemType ?? typeof(object),
                DataType = GetDataType(columnType, null, length, precision, scale),
                ProviderSpecificType = GetProviderSpecificType(columnType),
            }
                     ).ToList());
        }