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