Author: borisk
Date: 2005-04-26 13:11:06 -0400 (Tue, 26 Apr 2005)
New Revision: 43603

Modified:
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Aggregation.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ArithmeticExpressions.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/BooleanExpressions.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ColumnReference.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Comparison.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Expressions.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Functions.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/In.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Like.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Literal.cs
   
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Numeric.cs
Log:
Drop of Mainsoft.System.Data

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Aggregation.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Aggregation.cs
 2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Aggregation.cs
 2005-04-26 17:11:06 UTC (rev 43603)
@@ -97,10 +97,15 @@
                        }
                        
                        if (result == null)
-                               result = 0;
+                               result = DBNull.Value;
                                
                        return result;
                }
+
+               override public bool DependsOn(DataColumn other)
+               {
+                       return column.DependsOn(other);
+               }
                
                private void Aggregate (IConvertible val)
                {

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ArithmeticExpressions.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ArithmeticExpressions.cs
       2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ArithmeticExpressions.cs
       2005-04-26 17:11:06 UTC (rev 43603)
@@ -50,7 +50,11 @@
                override public object Eval (DataRow row)
                {
                        object obj1 = expr1.Eval (row);
+                       if (obj1 == DBNull.Value)
+                               return obj1;
                        object obj2 = expr2.Eval (row);
+                       if (obj2 == DBNull.Value)
+                               return obj2;
                
                        if (op == Operation.ADD && (obj1 is string || obj2 is 
string))
                                return (obj1 != null ? obj1.ToString () : 
String.Empty) + (obj2 != null ? obj2.ToString () : String.Empty);

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/BooleanExpressions.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/BooleanExpressions.cs
  2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/BooleanExpressions.cs
  2005-04-26 17:11:06 UTC (rev 43603)
@@ -40,7 +40,10 @@
        
                override public object Eval (DataRow row)
                {
-                       return !((bool)expr.Eval (row));
+                       object o = expr.Eval (row);
+                       if (o == DBNull.Value)
+                               return o;
+                       return !((bool)o);
                }
 
                override public bool EvalBoolean (DataRow row)

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ColumnReference.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ColumnReference.cs
     2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/ColumnReference.cs
     2005-04-26 17:11:06 UTC (rev 43603)
@@ -100,7 +100,7 @@
                        switch (refTable) {
                        case ReferencedTable.Self:
                        default:
-                               DataRow[] rows = new DataRow 
[row.Table.Rows.Count];
+                               DataRow[] rows = 
row.Table.NewRowArray(row.Table.Rows.Count);
                                row.Table.Rows.CopyTo (rows, 0);
                                return rows;
                                
@@ -153,5 +153,10 @@
                        }
                        return Unify (val);
                }
+
+               override public bool DependsOn(DataColumn other)
+               {
+                       return refTable == ReferencedTable.Self && columnName 
== other.ColumnName;
+               }
        }
 }

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Comparison.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Comparison.cs
  2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Comparison.cs
  2005-04-26 17:11:06 UTC (rev 43603)
@@ -54,15 +54,16 @@
                                        return (op == Operation.NE);
                        }
 
-                       switch(Compare (o1, o2, row.Table.CaseSensitive)) {
-                       case -1:
+                       int result = Compare (o1, o2, row.Table.CaseSensitive);
+                       if (result < 0) {
                                return (op == Operation.NE || op == 
Operation.LE || op == Operation.LT);
-                       case 0:
-                       default:
-                               return (op == Operation.EQ || op == 
Operation.LE || op == Operation.GE);
-                       case 1:
+                       }
+                       if (result > 0) {
                                return (op == Operation.NE || op == 
Operation.GE || op == Operation.GT);
                        }
+                       // result == 0
+                       return (op == Operation.EQ || op == Operation.LE || op 
== Operation.GE);
+                       
                }
                        
                internal static int Compare (IComparable o1, IComparable o2, 
bool caseSensitive)

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Expressions.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Expressions.cs
 2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Expressions.cs
 2005-04-26 17:11:06 UTC (rev 43603)
@@ -37,12 +37,14 @@
 namespace Mono.Data.SqlExpressions {
        internal interface IExpression {
                object Eval (DataRow row);
+               bool DependsOn(DataColumn other);
 
                bool EvalBoolean (DataRow row);
        }
 
        internal abstract class BaseExpression : IExpression {
                public abstract object Eval (DataRow row);
+               public abstract bool DependsOn(DataColumn other);
 
                public virtual bool EvalBoolean (DataRow row)
                {
@@ -58,6 +60,10 @@
                {
                        expr = e;
                }
+
+               override public bool DependsOn(DataColumn other) {
+                       return expr.DependsOn(other);
+               }
        }
        
        internal abstract class BinaryExpression : BaseExpression {
@@ -68,6 +74,10 @@
                        expr1 = e1;
                        expr2 = e2;
                }
+               override public bool DependsOn(DataColumn other)
+               {
+                       return expr1.DependsOn(other) || expr2.DependsOn(other);
+               }
        }
        
        internal enum Operation {

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Functions.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Functions.cs
   2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Functions.cs
   2005-04-26 17:11:06 UTC (rev 43603)
@@ -45,7 +45,10 @@
                
                override public object Eval (DataRow row)
                {
-                       bool val = (bool)expr.Eval (row);
+                       object o = expr.Eval (row);
+                       if (o == DBNull.Value)
+                               return o;
+                       bool val = (bool)o;
                        return (val ? trueExpr.Eval (row) : falseExpr.Eval 
(row));
                }
        }
@@ -79,7 +82,7 @@
                {
                        object val = expr.Eval (row);
                        
-                       if (val.GetType () == targetType)
+                       if (val == DBNull.Value || val.GetType () == targetType)
                                return val;
 
                        //--> String is always allowed                  

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/In.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/In.cs
  2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/In.cs
  2005-04-26 17:11:06 UTC (rev 43603)
@@ -45,7 +45,10 @@
        
                override public object Eval (DataRow row)
                {
-                       IComparable val = (IComparable)expr.Eval (row);
+                       object o = expr.Eval (row);
+                       if (o == DBNull.Value)
+                               return o;
+                       IComparable val = o as IComparable;
                        if (val == null)
                                return false;
 

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Like.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Like.cs
        2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Like.cs
        2005-04-26 17:11:06 UTC (rev 43603)
@@ -60,7 +60,10 @@
 
                override public object Eval (DataRow row)
                {
-                       string str = (string)expr.Eval (row);
+                       object o = expr.Eval (row);
+                       if (o == DBNull.Value)
+                               return o;
+                       string str = (string)o;
                        string pattern = this.pattern;
                        if (!row.Table.CaseSensitive) {
                                str = str.ToLower();

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Literal.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Literal.cs
     2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Literal.cs
     2005-04-26 17:11:06 UTC (rev 43603)
@@ -46,5 +46,10 @@
                {
                        return val;
                }
+
+               override public bool DependsOn(DataColumn other)
+               {
+                       return false;
+               }
        }
 }

Modified: 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Numeric.cs
===================================================================
--- 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Numeric.cs
     2005-04-26 17:10:10 UTC (rev 43602)
+++ 
branches/Mainsoft.System.Data/mcs/class/System.Data/Mono.Data.SqlExpressions/Numeric.cs
     2005-04-26 17:11:06 UTC (rev 43603)
@@ -61,43 +61,51 @@
                }
                
                //(note: o1 and o2 must both be of type 
Int32/Int64/Decimal/Double)
-               internal static void ToSameType (ref IConvertible o1, ref 
IConvertible o2)
+               internal static TypeCode ToSameType (ref IConvertible o1, ref 
IConvertible o2)
                {
                        TypeCode tc1 = o1.GetTypeCode();
                        TypeCode tc2 = o2.GetTypeCode();
                        
                        if (tc1 == tc2)
-                               return;
+                               return tc1;
 
+                       if (tc1 == TypeCode.DBNull || tc2 == TypeCode.DBNull)
+                               return TypeCode.DBNull;
+
+
                        // is it ok to make such assumptions about the order of 
an enum?
                        if (tc1 < tc2)
-                               o1 = (IConvertible) Convert.ChangeType (o1, 
tc2);
+                       {
+                               o1 = (IConvertible)Convert.ChangeType (o1, tc2);
+                               return tc2;
+                       }
                        else
-                               o2 = (IConvertible) Convert.ChangeType (o2, 
tc1);
+                       {
+                               o2 = (IConvertible)Convert.ChangeType (o2, tc1);
+                               return tc1;
+                       }
                }
                
                internal static IConvertible Add (IConvertible o1, IConvertible 
o2)
                {
-                       ToSameType (ref o1, ref o2);
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
-                               return (int)o1 + (int)o2;
+                               return (long)((int)o1 + (int)o2);
                        case TypeCode.Int64:
                                return (long)o1 + (long)o2;
                        case TypeCode.Double:
                                return (double)o1 + (double)o2;
                        case TypeCode.Decimal:
                                return (decimal)o1 + (decimal)o2;
+                       default:
+                               return DBNull.Value;
                        }
                }
                
                internal static IConvertible Subtract (IConvertible o1, 
IConvertible o2)
                {
-                       ToSameType (ref o1, ref o2);
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return (int)o1 - (int)o2;
                        case TypeCode.Int64:
                                return (long)o1 - (long)o2;
@@ -105,15 +113,15 @@
                                return (double)o1 - (double)o2;
                        case TypeCode.Decimal:
                                return (decimal)o1 - (decimal)o2;
+                       default:
+                               return DBNull.Value;
                        }
                }
                
                internal static IConvertible Multiply (IConvertible o1, 
IConvertible o2)
                {
-                       ToSameType (ref o1, ref o2);
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return (int)o1 * (int)o2;
                        case TypeCode.Int64:
                                return (long)o1 * (long)o2;
@@ -121,15 +129,15 @@
                                return (double)o1 * (double)o2;
                        case TypeCode.Decimal:
                                return (decimal)o1 * (decimal)o2;
+                       default:
+                               return DBNull.Value;
                        }
                }
                
                internal static IConvertible Divide (IConvertible o1, 
IConvertible o2)
                {
-                       ToSameType (ref o1, ref o2);
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return (int)o1 / (int)o2;
                        case TypeCode.Int64:
                                return (long)o1 / (long)o2;
@@ -137,15 +145,15 @@
                                return (double)o1 / (double)o2;
                        case TypeCode.Decimal:
                                return (decimal)o1 / (decimal)o2;
+                       default:
+                               return DBNull.Value;
                        }
                }
                
                internal static IConvertible Modulo (IConvertible o1, 
IConvertible o2)
                {
-                       ToSameType (ref o1, ref o2);
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return (int)o1 % (int)o2;
                        case TypeCode.Int64:
                                return (long)o1 % (long)o2;
@@ -153,6 +161,8 @@
                                return (double)o1 % (double)o2;
                        case TypeCode.Decimal:
                                return (decimal)o1 % (decimal)o2;
+                       default:
+                               return DBNull.Value;
                        }
                }
                
@@ -160,7 +170,6 @@
                {
                        switch (o.GetTypeCode()) {
                        case TypeCode.Int32:
-                       default:
                                return -((int)o);
                        case TypeCode.Int64:
                                return -((long)o);
@@ -168,14 +177,15 @@
                                return -((double)o);
                        case TypeCode.Decimal:
                                return -((decimal)o);
+                       default:
+                               return DBNull.Value;
                        }
                }
                
                internal static IConvertible Min (IConvertible o1, IConvertible 
o2)
                {
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return System.Math.Min ((int)o1, (int)o2);
                        case TypeCode.Int64:
                                return System.Math.Min ((long)o1, (long)o2);
@@ -183,14 +193,15 @@
                                return System.Math.Min ((double)o1, (double)o2);
                        case TypeCode.Decimal:
                                return System.Math.Min ((decimal)o1, 
(decimal)o2);
+                       default:
+                               return DBNull.Value;
                        }
                }
 
                internal static IConvertible Max (IConvertible o1, IConvertible 
o2)
                {
-                       switch (o1.GetTypeCode()) {
+                       switch (ToSameType (ref o1, ref o2)) {
                        case TypeCode.Int32:
-                       default:
                                return System.Math.Max ((int)o1, (int)o2);
                        case TypeCode.Int64:
                                return System.Math.Max ((long)o1, (long)o2);
@@ -198,6 +209,8 @@
                                return System.Math.Max ((double)o1, (double)o2);
                        case TypeCode.Decimal:
                                return System.Math.Max ((decimal)o1, 
(decimal)o2);
+                       default:
+                               return DBNull.Value;
                        }
                }
        }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to