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); }
/// <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); }
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)); }
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)); }
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)); }
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)); }
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)); }
//禁用转换 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)); }