Skip to content

Commit

Permalink
Added support for advanced SQL expressions. Closes #1.
Browse files Browse the repository at this point in the history
  • Loading branch information
hisystems committed Mar 26, 2014
1 parent a319a0d commit d548af2
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 3 deletions.
25 changes: 25 additions & 0 deletions ISQLExpression.cls
@@ -0,0 +1,25 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "ISQLExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Public Property Get SQL(ByVal eValue As ConnectionTypeEnum) As String

End Property
68 changes: 68 additions & 0 deletions SQLArithmeticExpression.cls
@@ -0,0 +1,68 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "SQLArithmeticExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Implements ISQLExpression

Public Enum SQLArithmeticOperatorEnum
dboArithmeticAdd
dboArithmeticSubtract
dboArithmeticMultiply
dboArithmeticDivide
dboArithmeticModulus
End Enum

Public Left As ISQLExpression
Public Right As ISQLExpression
Public Operator As SQLArithmeticOperatorEnum

Private Sub Class_Initialize()

Set Left = New SQLValueExpression
Set Right = New SQLValueExpression
Operator = dboArithmeticAdd

End Sub

Private Property Get ISQLExpression_SQL(ByVal eConnection As ConnectionTypeEnum) As String

ISQLExpression_SQL = "(" & Left.SQL(eConnection) & " " & OperatorToString(Operator) & " " & Right.SQL(eConnection) & ")"

End Property

Private Function OperatorToString(ByVal eOperator As SQLArithmeticOperatorEnum) As String

Select Case eOperator
Case dboArithmeticAdd
OperatorToString = "+"
Case dboArithmeticDivide
OperatorToString = "/"
Case dboArithmeticModulus
OperatorToString = "%"
Case dboArithmeticMultiply
OperatorToString = "*"
Case dboArithmeticSubtract
OperatorToString = "-"
Case Else
RaiseError dboErrorInvalidArgument
End Select

End Function
63 changes: 63 additions & 0 deletions SQLBitwiseExpression.cls
@@ -0,0 +1,63 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "SQLBitwiseExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Implements ISQLExpression

Public Enum SQLBitwiseOperatorEnum
dboBitwiseAnd
dboBitwiseOr
dboBitwiseXor
End Enum

Public Left As ISQLExpression
Public Right As ISQLExpression
Public Operator As SQLBitwiseOperatorEnum

Private Sub Class_Initialize()

Set Left = New SQLValueExpression
Set Right = New SQLValueExpression
Operator = dboArithmeticAdd

End Sub

Private Property Get ISQLExpression_SQL(ByVal eConnection As ConnectionTypeEnum) As String

ISQLExpression_SQL = "(" & Left.SQL(eConnection) & " " & OperatorToString(Operator) & " " & Right.SQL(eConnection) & ")"

End Property

Private Function OperatorToString(ByVal eOperator As SQLBitwiseOperatorEnum) As String

Select Case eOperator
Case dboBitwiseAnd
OperatorToString = "&"
Case dboBitwiseOr
OperatorToString = "|"
Case dboBitwiseXor
OperatorToString = "^"
Case Else
RaiseError dboErrorInvalidArgument
End Select

End Function

41 changes: 41 additions & 0 deletions SQLComparisonExpression.cls
@@ -0,0 +1,41 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "SQLComparisonExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Implements ISQLExpression

Public Left As ISQLExpression
Public Compare As SQLComparisonOperatorEnum
Public Right As ISQLExpression

Private Sub Class_Initialize()

Compare = dboComparisonEqualTo

End Sub

Private Property Get ISQLExpression_SQL(ByVal eConnectionType As ConnectionTypeEnum) As String

ISQLExpression_SQL = "(" & Left.SQL(eConnectionType) & " " & SQLConvertCompare(Compare) & " " & Right.SQL(eConnectionType) & ")"

End Property


37 changes: 34 additions & 3 deletions SQLConditions.cls
Expand Up @@ -35,13 +35,40 @@ Public Function Add( _

Set Add.Table = objTable
Add.FieldName = strFieldName
Add.compare = eCompare
Add.Compare = eCompare
If Not IsMissing(vValue) Then Add.Value = vValue

pcolSQLConditions.Add Add

End Function

Public Sub AddExpression(ByVal objExpression As ISQLExpression)

If objExpression Is Nothing Then
RaiseError dboErrorObjectIsNothing
End If

EnsurePreviousLogicalOperatorExists
pcolSQLConditions.Add objExpression

End Sub

Public Sub AddCompareExpression( _
ByVal objLeft As ISQLExpression, _
ByVal eCompare As SQLComparisonOperatorEnum, _
ByVal objRightExpression As ISQLExpression)

Dim objCompareExpression As SQLComparisonExpression
Set objCompareExpression = New SQLComparisonExpression

Set objCompareExpression.Left = objLeft
objCompareExpression.Compare = eCompare
Set objCompareExpression.Right = objRightExpression

AddExpression objCompareExpression

End Sub

Public Sub AddCondition( _
ByVal objCondition As SQLCondition)

Expand Down Expand Up @@ -91,7 +118,7 @@ Public Function AddSelect( _

Set AddSelect = New SQLConditionSelect
Set AddSelect.SelectSet = objSelect
AddSelect.compare = eCompare
AddSelect.Compare = eCompare
If Not IsMissing(vValue) Then AddSelect.Value = vValue

pcolSQLConditions.Add AddSelect
Expand All @@ -112,7 +139,7 @@ Public Function AddFieldCompare( _
With AddFieldCompare
Set .Table1 = objTable1
.FieldName1 = strFieldName1
.compare = eCompare
.Compare = eCompare
Set .Table2 = objTable2
.FieldName2 = strFieldName2
End With
Expand Down Expand Up @@ -163,6 +190,7 @@ Friend Property Get SQL(ByVal eConnectionType As ConnectionTypeEnum) As String
Dim objSelectIn As SQLConditionInSelect
Dim objSelect As SQLConditionSelect
Dim objFields As SQLConditionFieldCompare
Dim objExpression As ISQLExpression

With pcolSQLConditions
For intIndex = 1 To .Count
Expand All @@ -184,6 +212,9 @@ Friend Property Get SQL(ByVal eConnectionType As ConnectionTypeEnum) As String
ElseIf TypeOf .Item(intIndex) Is SQLConditionInSelect Then
Set objSelectIn = .Item(intIndex)
strSQL = strSQL & objSelectIn.SQL(eConnectionType)
ElseIf TypeOf .Item(intIndex) Is ISQLExpression Then
Set objExpression = .Item(intIndex)
strSQL = strSQL & objExpression.SQL(eConnectionType)
End If
Next
End With
Expand Down
34 changes: 34 additions & 0 deletions SQLFieldExpression.cls
@@ -0,0 +1,34 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "SQLFieldExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Implements ISQLExpression

Public Table As SQLSelectTable
Public FieldName As String

Private Property Get ISQLExpression_SQL(ByVal eConnectionType As ConnectionTypeEnum) As String

ISQLExpression_SQL = SQLFieldNameAndTablePrefix(Table, FieldName, eConnectionType)

End Property


37 changes: 37 additions & 0 deletions SQLValueExpression.cls
@@ -0,0 +1,37 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "SQLValueExpression"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' ___________________________________________________
'
' © Hi-Integrity Systems 2014. All rights reserved.
' www.hisystems.com.au - Toby Wicks
' ___________________________________________________
'

Option Explicit

Implements ISQLExpression

Public Value As Variant

Private Sub Class_Initialize()

Value = Null

End Sub

Private Property Get ISQLExpression_SQL(ByVal eConnectionType As ConnectionTypeEnum) As String

ISQLExpression_SQL = SQLConvertValue(Value, eConnectionType)

End Property
6 changes: 6 additions & 0 deletions dbo.vbp
Expand Up @@ -52,6 +52,12 @@ Class=SQLCommitTransaction; SQLCommitTransaction.cls
Class=SQLBeginTransaction; SQLBeginTransaction.cls
Class=SQLRollbackTransaction; SQLRollbackTransaction.cls
Class=DatabaseObjectLockController; DatabaseObjectLockController.cls
Class=SQLArithmeticExpression; SQLArithmeticExpression.cls
Class=ISQLExpression; ISQLExpression.cls
Class=SQLBitwiseExpression; SQLBitwiseExpression.cls
Class=SQLFieldExpression; SQLFieldExpression.cls
Class=SQLValueExpression; SQLValueExpression.cls
Class=SQLComparisonExpression; SQLComparisonExpression.cls
Startup="(None)"
HelpFile=""
Title="DatabaseObjectsLibrary"
Expand Down

0 comments on commit d548af2

Please sign in to comment.