コード例 #1
0
ファイル: FixedDate.cs プロジェクト: ljxinternet/Shaolinq
        public SqlFixedDateDataType(ConstraintDefaultsConfiguration constraintDefaultsConfiguration, bool nullable, SqlDataTypeProvider sqlDataTypeProvider)
            : base(constraintDefaultsConfiguration, nullable ? typeof(FixedDate?) : typeof(FixedDate), false)
        {
            this.dateTimeDataType = sqlDataTypeProvider.GetSqlDataType(nullable ? typeof(DateTime?) : typeof(DateTime));

            this.typeConverter = System.ComponentModel.TypeDescriptor.GetConverter(this.SupportedType);
        }
        protected override Expression VisitColumnDefinition(SqlColumnDefinitionExpression columnDefinitionExpression)
        {
            this.currentIsPrimaryKey = columnDefinitionExpression.ConstraintExpressions
                                       .OfType <SqlSimpleConstraintExpression>()
                                       .Any(c => c.Constraint == SqlSimpleConstraint.PrimaryKey);

            var isAutoIncrement = columnDefinitionExpression.ConstraintExpressions
                                  .OfType <SqlSimpleConstraintExpression>()
                                  .Any(c => c.Constraint == SqlSimpleConstraint.AutoIncrement);

            var retval = (SqlColumnDefinitionExpression)base.VisitColumnDefinition(columnDefinitionExpression);

            if (isAutoIncrement)
            {
                var longTypeSqlName = sqlDataTypeProvider.GetSqlDataType(typeof(long)).GetSqlName(null);

                if (((SqlTypeExpression)columnDefinitionExpression.ColumnType).TypeName == longTypeSqlName)
                {
                    retval = new SqlColumnDefinitionExpression(retval.ColumnName, new SqlTypeExpression("BIGSERIAL"), retval.ConstraintExpressions);
                }
                else
                {
                    retval = new SqlColumnDefinitionExpression(retval.ColumnName, new SqlTypeExpression("SERIAL"), retval.ConstraintExpressions);
                }
            }

            return(retval);
        }