Skip to content

Commit

Permalink
Added support SQLExpression operator overloading. Closes #52.
Browse files Browse the repository at this point in the history
Provides the powerful ability to generate SQL expressions for arithmetic operations and string concatenation using regular .NET code. Any arithmetic operator or string concatenation can be applied to an SQLExpression and the appropriate operator is translated into the appropriate SQL command. This significantly simplifies the .NET code and also simplifies the process of generating the SQL code, because normal .NET operators can be utilised.

For example: "New SQLFieldExpression("Field") Mod 10" translates to SQL "([Field] % 10)". The expression can be used in an SQLSelect, SQLInsert, SQLDelete or SQLUpdate class (amongst others).
  • Loading branch information
hisystems committed May 5, 2012
1 parent 0fdc7b9 commit 606727d
Showing 1 changed file with 198 additions and 0 deletions.
198 changes: 198 additions & 0 deletions SQL/Expressions/SQLExpression.vb
Expand Up @@ -15,6 +15,204 @@ Namespace SQL

Friend MustOverride Function SQL(ByVal eConnectionType As Database.ConnectionType) As String

Public Shared Operator +(left As SQLExpression, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Add, right)

End Operator

Public Shared Operator +(left As SQLExpression, right As Decimal) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Add, New SQLValueExpression(right))

End Operator

Public Shared Operator +(left As Decimal, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Add, right)

End Operator

Public Shared Operator +(left As SQLExpression, right As DateTime) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Add, New SQLValueExpression(right))

End Operator

Public Shared Operator +(left As DateTime, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Add, right)

End Operator

Public Shared Operator +(left As String, right As SQLExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(New SQLValueExpression(left), right)

End Operator

Public Shared Operator +(left As SQLExpression, right As String) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, New SQLValueExpression(right))

End Operator

Public Shared Operator +(left As SQLStringConcatExpression, right As SQLExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, right)

End Operator

Public Shared Operator +(left As SQLExpression, right As SQLStringConcatExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, right)

End Operator

Public Shared Operator &(left As String, right As SQLExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(New SQLValueExpression(left), right)

End Operator

Public Shared Operator &(left As SQLExpression, right As String) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, New SQLValueExpression(right))

End Operator

Public Shared Operator &(left As SQLStringConcatExpression, right As SQLExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, right)

End Operator

Public Shared Operator &(left As SQLExpression, right As SQLStringConcatExpression) As SQLStringConcatExpression

Return New SQLStringConcatExpression(left, right)

End Operator

Public Shared Operator -(left As SQLExpression, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Subtract, right)

End Operator

Public Shared Operator -(left As SQLExpression, right As Decimal) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Subtract, New SQLValueExpression(right))

End Operator

Public Shared Operator -(left As Decimal, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Subtract, right)

End Operator

Public Shared Operator -(left As SQLExpression, right As DateTime) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Subtract, New SQLValueExpression(right))

End Operator

Public Shared Operator -(left As DateTime, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Subtract, right)

End Operator

Public Shared Operator *(left As SQLExpression, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Multiply, right)

End Operator

Public Shared Operator *(left As SQLExpression, right As Decimal) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Multiply, New SQLValueExpression(right))

End Operator

Public Shared Operator *(left As Decimal, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Multiply, right)

End Operator

Public Shared Operator /(left As SQLExpression, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Divide, right)

End Operator

Public Shared Operator /(left As SQLExpression, right As Decimal) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Divide, New SQLValueExpression(right))

End Operator

Public Shared Operator /(left As Decimal, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Divide, right)

End Operator

Public Shared Operator Mod(left As SQLExpression, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Modulus, right)

End Operator

Public Shared Operator Mod(left As SQLExpression, right As Decimal) As SQLArithmeticExpression

Return New SQLArithmeticExpression(left, ArithmeticOperator.Modulus, New SQLValueExpression(right))

End Operator

Public Shared Operator Mod(left As Decimal, right As SQLExpression) As SQLArithmeticExpression

Return New SQLArithmeticExpression(New SQLValueExpression(left), ArithmeticOperator.Modulus, right)

End Operator

Public Shared Operator Or(left As SQLExpression, right As SQLExpression) As SQLBitwiseExpression

Return New SQLBitwiseExpression(left, BitwiseOperator.Or, right)

End Operator

Public Shared Operator Or(left As SQLExpression, right As Decimal) As SQLBitwiseExpression

Return New SQLBitwiseExpression(left, BitwiseOperator.Or, New SQLValueExpression(right))

End Operator

Public Shared Operator Or(left As Decimal, right As SQLExpression) As SQLBitwiseExpression

Return New SQLBitwiseExpression(New SQLValueExpression(left), BitwiseOperator.Or, right)

End Operator

Public Shared Operator And(left As SQLExpression, right As SQLExpression) As SQLBitwiseExpression

Return New SQLBitwiseExpression(left, BitwiseOperator.And, right)

End Operator

Public Shared Operator And(left As SQLExpression, right As Decimal) As SQLBitwiseExpression

Return New SQLBitwiseExpression(left, BitwiseOperator.And, New SQLValueExpression(right))

End Operator

Public Shared Operator And(left As Decimal, right As SQLExpression) As SQLBitwiseExpression

Return New SQLBitwiseExpression(New SQLValueExpression(left), BitwiseOperator.And, right)

End Operator

End Class

End Namespace

0 comments on commit 606727d

Please sign in to comment.