Exemple #1
0
        internal static NpgsqlParameter GetPostgreSqlParameter(this DmColumn column)
        {
            var mySqlDbMetadata = new PostgreSqlDbMetadata();

            var sqlParameter = new NpgsqlParameter
            {
                ParameterName = $"{PostgreSqlBuilderProcedure.PgsqlPrefixParameter}{column.ColumnName}",
                DbType        = column.DbType,
                IsNullable    = column.AllowDBNull
            };

            (byte precision, byte scale) = mySqlDbMetadata.TryGetOwnerPrecisionAndScale(column.OriginalDbType, column.DbType, false, false, column.Precision, column.Scale, column.Table.OriginalProvider, PostgreSqlSyncProvider.ProviderType);

            if ((sqlParameter.DbType == DbType.Decimal || sqlParameter.DbType == DbType.Double ||
                 sqlParameter.DbType == DbType.Single || sqlParameter.DbType == DbType.VarNumeric) && precision > 0)
            {
                sqlParameter.Precision = precision;
                if (scale > 0)
                {
                    sqlParameter.Scale = scale;
                }
            }
            else if (column.MaxLength > 0)
            {
                sqlParameter.Size = column.MaxLength;
            }
            else if (sqlParameter.DbType == DbType.Guid)
            {
                //sqlParameter.Size = 36;
            }
            else
            {
                sqlParameter.Size = -1;
            }

            return(sqlParameter);
        }
Exemple #2
0
        public List <DmColumn> GetTableDefinition()
        {
            List <DmColumn> columns = new List <DmColumn>();

            // Get the columns definition
            var dmColumnsList        = PostgreSqlManagementUtils.ColumnsForTable(_sqlConnection, _sqlTransaction, TableName);
            var postgreSqlDbMetadata = new PostgreSqlDbMetadata();

            foreach (var c in dmColumnsList.Rows.OrderBy(r => (int)r["ordinal_position"]))
            {
                var typeName = c["data_type"].ToString();
                var name     = c["column_name"].ToString();


                // Gets the datastore owner dbType
                var datastoreDbType = (NpgsqlDbType)postgreSqlDbMetadata.ValidateOwnerDbType(typeName, false, false);
                // once we have the datastore type, we can have the managed type
                Type columnType = postgreSqlDbMetadata.ValidateType(datastoreDbType);

                var dbColumn = DmColumn.CreateColumn(name, columnType);
                dbColumn.OriginalTypeName = typeName;
                dbColumn.SetOrdinal(Convert.ToInt32(c["ordinal_position"]));

                var maxLengthLong = c["character_octet_length"] != DBNull.Value ? Convert.ToInt64(c["character_octet_length"]) : 0;
                dbColumn.MaxLength     = maxLengthLong > Int32.MaxValue ? Int32.MaxValue : (Int32)maxLengthLong;
                dbColumn.Precision     = c["numeric_precision"] != DBNull.Value ? Convert.ToByte(c["numeric_precision"]) : (byte)0;
                dbColumn.Scale         = c["numeric_scale"] != DBNull.Value ? Convert.ToByte(c["numeric_scale"]) : (byte)0;
                dbColumn.AllowDBNull   = (String)c["is_nullable"] != "NO";
                dbColumn.AutoIncrement = typeName.Contains("serial");
                dbColumn.IsUnsigned    = false;

                columns.Add(dbColumn);
            }

            return(columns);
        }