private static bool IsTableColumnDataTypeAndLengthEquals(DatabaseType databaseType, TableColumn column1, TableColumn column2)
        {
            if (column1.IsUserDefined != column2.IsUserDefined)
            {
                return(false);
            }
            else if (column1.IsUserDefined && column2.IsUserDefined)
            {
                return(column1.DataType == column2.DataType);
            }

            DataTypeInfo dataTypeInfo1 = DataTypeHelper.GetDataTypeInfo(column1.DataType);
            DataTypeInfo dataTypeInfo2 = DataTypeHelper.GetDataTypeInfo(column2.DataType);

            var dataTypeSpecs1 = DataTypeManager.GetDataTypeSpecifications(databaseType);
            var dataTypeSpecs2 = DataTypeManager.GetDataTypeSpecifications(databaseType);

            string dataType1 = dataTypeInfo1.DataType;
            string dataType2 = dataTypeInfo2.DataType;

            if (!dataTypeSpecs1.Any(item => item.Name == dataType1))
            {
                dataTypeInfo1 = DataTypeHelper.GetSpecialDataTypeInfo(column1.DataType.ToLower());
                dataType1     = dataTypeInfo1.DataType;
            }

            if (!dataTypeSpecs2.Any(item => item.Name == dataType2))
            {
                dataTypeInfo2 = DataTypeHelper.GetSpecialDataTypeInfo(column2.DataType.ToLower());
                dataType2     = dataTypeInfo2.DataType;
            }

            if (dataType1.ToLower() != dataType2.ToLower())
            {
                return(false);
            }

            DataTypeSpecification dataTypeSpec1 = dataTypeSpecs1.FirstOrDefault(item => item.Name == dataType1);
            DataTypeSpecification dataTypeSpec2 = dataTypeSpecs2.FirstOrDefault(item => item.Name == dataType2);

            if (dataTypeInfo1.DataType == dataTypeInfo2.DataType && string.IsNullOrEmpty(dataTypeSpec1.Args) && string.IsNullOrEmpty(dataTypeSpec2.Args))
            {
                return(true);
            }

            bool isChar1 = DataTypeHelper.IsCharType(dataType1);
            bool isChar2 = DataTypeHelper.IsCharType(dataType2);

            bool isBytes1 = DataTypeHelper.IsCharType(dataType1);
            bool isBytes2 = DataTypeHelper.IsCharType(dataType2);

            if (isBytes1 && isBytes2)
            {
                return(column1.MaxLength == column2.MaxLength);
            }
            else if (isChar1 && isChar2 && DataTypeHelper.StartWithN(dataType1) && DataTypeHelper.StartWithN(dataType2))
            {
                return(column1.MaxLength == column2.MaxLength);
            }
            else if ((column1.Precision == null && column1.Scale == null && column1.MaxLength == column2.Precision) ||
                     (column2.Precision == null && column2.Scale == null && column2.MaxLength == column1.Precision))
            {
                return(true);
            }

            if (dataTypeSpec1.Name == dataTypeSpec2.Name && dataTypeSpec1.Args?.Contains("length") == false)
            {
                if (dataTypeSpec1.Args == "scale")
                {
                    return(IsPrecisionScaleEquals(column1.Scale, column2.Scale));
                }
                else if (dataTypeSpec1.Args == "precision")
                {
                    return(IsPrecisionScaleEquals(column1.Precision, column2.Precision));
                }
                else if (dataTypeSpec1.Args?.Contains("scale") == true || dataTypeSpec1.Args?.Contains("precision") == true)
                {
                    return(IsPrecisionScaleEquals(column1.Precision, column2.Precision) &&
                           IsPrecisionScaleEquals(column1.Scale, column2.Scale));
                }
            }

            return(column1.MaxLength == column2.MaxLength &&
                   IsPrecisionScaleEquals(column1.Precision, column2.Precision) &&
                   IsPrecisionScaleEquals(column1.Scale, column2.Scale));
        }
예제 #2
0
        public virtual bool IsNoLengthDataType(string dataType)
        {
            IEnumerable <DataTypeSpecification> dataTypeSpecs = DataTypeManager.GetDataTypeSpecifications(this.DatabaseType);

            return(dataTypeSpecs.Any(item => item.Name.ToUpper() == dataType.ToUpper() && string.IsNullOrEmpty(item.Args)));
        }
예제 #3
0
 public static DataTypeSpecification GetDataTypeSpecification(DatabaseType databaseType, string dataType)
 {
     return(DataTypeManager.GetDataTypeSpecifications(databaseType).FirstOrDefault(item => item.Name.ToLower() == dataType.ToLower().Trim()));
 }