コード例 #1
0
 internal static Expression Emit_Conditional_NotDBNull(Expression result, int ordinal, Type columnType)
 {
     result = Expression.Condition(
         Emit_Reader_IsDBNull(ordinal),
         Expression.Constant(TypeSystem.GetDefaultValue(columnType), columnType),
         result);
     return(result);
 }
コード例 #2
0
ファイル: PropertyEmitter.cs プロジェクト: dox0/DotNet471RS3
        /// <summary>
        ///
        /// </summary>
        private CodeExpression GetDefaultValueExpression(EdmProperty property)
        {
            PrimitiveTypeKind type;
            object            value = property.DefaultValue;

            if (value != null &&
                Utils.TryGetPrimitiveTypeKind(property.TypeUsage.EdmType, out type))
            {
                switch (type)
                {
                case PrimitiveTypeKind.Boolean:
                case PrimitiveTypeKind.Byte:
                case PrimitiveTypeKind.Int16:
                case PrimitiveTypeKind.Int32:
                case PrimitiveTypeKind.Int64:
                case PrimitiveTypeKind.Decimal:
                case PrimitiveTypeKind.Single:
                case PrimitiveTypeKind.Double:
                case PrimitiveTypeKind.String:
                {
                    if (!property.Nullable && value.Equals(TypeSystem.GetDefaultValue(value.GetType())))
                    {
                        break;
                    }
                    return(new CodePrimitiveExpression(value));
                }

                case PrimitiveTypeKind.Guid:
                {
                    if (!property.Nullable && value.Equals(TypeSystem.GetDefaultValue(value.GetType())))
                    {
                        break;
                    }
                    return(GetCodeExpressionFromGuid(value));
                }

                case PrimitiveTypeKind.DateTime:
                {
                    if (!property.Nullable && value.Equals(TypeSystem.GetDefaultValue(value.GetType())))
                    {
                        break;
                    }
                    return(GetCodeExpressionFromDateTimeDefaultValue(value, property));
                }

                case PrimitiveTypeKind.Binary:
                {
                    return(GetCodeExpressionFromBinary(value));
                }
                }
                return(null);
            }

            return(null);
        }
コード例 #3
0
ファイル: AccessDbFormatter.cs プロジェクト: zyj0021/ALinq
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                if (uo.NodeType == SqlNodeType.Max || uo.NodeType == SqlNodeType.Min ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    Debug.Assert(uo.ClrType != null);

                    sb.Append("IIF(");

                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    if (uo.Operand == null)
                    {
                        sb.Append("*");
                    }
                    else
                    {
                        Visit(uo.Operand);
                    }
                    sb.Append(")");

                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format(" IS NULL, '{0}', ", ((DateTime)defaultValue).ToShortDateString()));
                    }
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format(" IS NULL, '{0}', ", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format(" IS NULL, {0}, ", defaultValue));
                    }

                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    if (uo.Operand == null)
                    {
                        sb.Append("*");
                    }
                    else
                    {
                        Visit(uo.Operand);
                    }
                    sb.Append(")");

                    sb.Append(")");
                    return(uo);
                }
                return(base.VisitUnaryOperator(uo));
            }
コード例 #4
0
ファイル: OrcaleFormatter.cs プロジェクト: zyj0021/ALinq
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                if (uo.NodeType == SqlNodeType.BitNot)
                {
                    sb.Append("BITNOT(");
                    Visit(uo.Operand);
                    sb.Append(")");
                    return(uo);
                }

                if (uo.NodeType == SqlNodeType.Min || uo.NodeType == SqlNodeType.Max ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    Debug.Assert(uo.Operand != null);

                    sb.Append("NVL(");
                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    Visit(uo.Operand);

                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format("), TO_DATE('{0}', 'YYYY-MM-DD'))", ((DateTime)defaultValue).ToString("yyyy-MM-dd")));
                    }
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format("),'{0}')", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format("),{0})", defaultValue));
                    }

                    //sb.Append("),0)");

                    return(uo);
                }
                //if (uo.Operand.NodeType == SqlNodeType.Convert)
                //{
                //    var dbType1 = uo.SqlType;
                //    var dbType2 = uo.SqlType;
                //    if (dbType1.IsNumeric && dbType2.IsNumeric)
                //    {
                //        base.Visit(uo.Operand);
                //        return uo;
                //    }

                //}
                return(base.VisitUnaryOperator(uo));
            }
コード例 #5
0
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                //if (uo.NodeType == SqlNodeType.Convert)
                //{
                //    this.Visit(uo.Operand);
                //    return uo;
                //}
                if (uo.NodeType == SqlNodeType.Min || uo.NodeType == SqlNodeType.Max ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    //IFNULL
                    //if (!TypeSystem.IsNullableType(uo.ClrType))
                    //{
                    sb.Append("COALESCE(");
                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    if (uo.Operand == null)
                    {
                        sb.Append("*");
                    }
                    else
                    {
                        Visit(uo.Operand);
                    }

                    //============================================================
                    // 说明:增加对类型的判断
                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format("),'{0}') ", ((DateTime)defaultValue).ToShortDateString()));
                    }
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format("),'{0}') ", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format("),{0}) ", defaultValue));
                    }
                    //============================================================
                    //sb.Append("),0)"); 旧代码
                    //============================================================

                    return(uo);
                    //}
                }
                return(base.VisitUnaryOperator(uo));
            }
コード例 #6
0
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                //if (uo.NodeType == SqlNodeType.Convert)
                //{
                //
                //    base.Visit(uo.Operand);
                //    return uo;
                //}
                if (uo.NodeType == SqlNodeType.Min || uo.NodeType == SqlNodeType.Max ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    //if (!TypeSystem.IsNullableType(uo.ClrType))
                    //{
                    sb.Append("IFNULL(");
                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    if (uo.Operand == null)
                    {
                        sb.Append("*");
                    }
                    else
                    {
                        Visit(uo.Operand);
                    }

                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format("), CAST('{0}' AS DATETIME))", ((DateTime)defaultValue).ToShortDateString()));
                    }
                    // sb.Append(string.Format("), DATE('{0}'))", ((DateTime)defaultValue).ToString("yyyy-MM-dd")));
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format("),'{0}')", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format("),{0})", defaultValue));
                    }

                    return(uo);
                }
                return(base.VisitUnaryOperator(uo));
            }
コード例 #7
0
ファイル: DB2Formatter.cs プロジェクト: zyj0021/ALinq
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                if (uo.NodeType == SqlNodeType.BitNot)
                {
                    sb.Append("BITNOT(");
                    Visit(uo.Operand);
                    sb.Append(")");
                    return(uo);
                }

                if (uo.NodeType == SqlNodeType.Min || uo.NodeType == SqlNodeType.Max ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    Debug.Assert(uo.Operand != null);

                    sb.Append("NVL(");
                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    Visit(uo.Operand);

                    //============================================================
                    // 说明:增加对类型的判断
                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format("), CAST('{0}' AS DATE))", ((DateTime)defaultValue).ToShortDateString()));
                    }
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format("),'{0}')", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format("),{0})", defaultValue));
                    }
                    //============================================================
                    //sb.Append("),0)"); 旧代码
                    //============================================================

                    return(uo);
                }

                return(base.VisitUnaryOperator(uo));
            }
コード例 #8
0
ファイル: SQLiteFormatter.cs プロジェクト: zyj0021/ALinq
            //禁用转换
            internal override SqlExpression VisitUnaryOperator(SqlUnary uo)
            {
                //dont's use convert function
                if (uo.NodeType == SqlNodeType.Convert)
                {
                    Visit(uo.Operand);
                    return(uo);
                }
                if (uo.NodeType == SqlNodeType.Min || uo.NodeType == SqlNodeType.Max ||
                    uo.NodeType == SqlNodeType.Avg || uo.NodeType == SqlNodeType.Sum)
                {
                    //if (!TypeSystem.IsNullableType(uo.ClrType))
                    //{
                    Debug.Assert(uo.Operand != null);

                    sb.Append("IFNULL(");
                    sb.Append(GetOperator(uo.NodeType));
                    sb.Append("(");
                    Visit(uo.Operand);

                    //============================================================
                    // 说明:增加对类型的判断
                    var defaultValue = TypeSystem.GetDefaultValue(uo.ClrType);
                    if (defaultValue is DateTime)
                    {
                        sb.Append(string.Format("), DATE('{0}'))", ((DateTime)defaultValue).ToShortDateString()));
                    }
                    else if (defaultValue is string)
                    {
                        sb.Append(string.Format("),'{0}')", defaultValue));
                    }
                    else
                    {
                        sb.Append(string.Format("),{0})", defaultValue));
                    }
                    //============================================================
                    //sb.Append("),0)"); 旧代码
                    //============================================================

                    return(uo);
                    //}
                }
                return(base.VisitUnaryOperator(uo));
            }