Skip to content

Commit 606e0d4

Browse files
committed
bugfixes with manipulation
1 parent dfa990f commit 606e0d4

File tree

8 files changed

+101
-95
lines changed

8 files changed

+101
-95
lines changed

ActiveRecord/Entity/InstanceGettersSetters/Getters.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Namespace ActiveRecord
1818
Optional memberNames As List(Of String) = Nothing,
1919
Optional keysByCode As Boolean = False,
2020
Optional asInitialData As Boolean = False,
21-
Optional ByRef classMembersInfo As Dictionary(Of String, Databasic.MemberInfo) = Nothing
21+
Optional classMembersInfo As Dictionary(Of String, Databasic.MemberInfo) = Nothing
2222
) As Dictionary(Of String, Object)
2323
Dim result As New Dictionary(Of String, Object)
2424
If asInitialData Then
@@ -96,7 +96,7 @@ Namespace ActiveRecord
9696
''' <returns>Dictionary with values, which are different from initial set up.</returns>
9797
Public Function GetTouched(
9898
Optional keysByCode As Boolean = False,
99-
Optional ByRef classMembersInfo As Dictionary(Of String, Databasic.MemberInfo) = Nothing
99+
Optional classMembersInfo As Dictionary(Of String, Databasic.MemberInfo) = Nothing
100100
) As Dictionary(Of String, Object)
101101
Dim touched As New Dictionary(Of String, Object)
102102
Dim initialValue As Object

ActiveRecord/Entity/Manipulations/Save.vb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ Namespace ActiveRecord
55
Partial Public MustInherit Class Entity
66
Inherits DynamicObject
77

8-
Public Function Save(insertNew As Boolean) As Integer
9-
Dim connection As Connection = Connection.Get(
10-
Tools.GetConnectionIndexByClassAttr(Me.GetType(), True)
11-
)
12-
Return connection.GetProviderResource().Save(insertNew, Me, connection)
13-
End Function
8+
Public Function Save(Optional insertNew As Boolean = False) As Integer
9+
Dim connection As Connection = Connection.Get(
10+
Tools.GetConnectionIndexByClassAttr(Me.GetType(), True)
11+
)
12+
Return connection.GetProviderResource().Save(insertNew, Me, connection)
13+
End Function
1414

15-
Public Function Save(insertNew As Boolean, connection As Connection) As Integer
15+
Public Function Save(insertNew As Boolean, connection As Connection) As Integer
1616
Return connection.GetProviderResource().Save(insertNew, Me, connection)
1717
End Function
1818

Connection/BeginTransaction.vb

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,45 @@
22

33
Partial Public MustInherit Class Connection
44

5-
''' <summary>
6-
''' Create and begin transaction on first config connection.
7-
''' </summary>
8-
''' <param name="transactionName">Transaction name.</param>
9-
''' <param name="isolationLevel">Transaction isolation level.</param>
10-
''' <returns>New transaction.</returns>
11-
Public Function BeginTransaction(Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = IsolationLevel.Unspecified) As Transaction
12-
Return Me.BeginTransaction(
13-
Tools.GetConnectionIndexByClassAttr(Tools.GetEntryClassType()),
14-
transactionName, isolationLevel
15-
)
16-
End Function
5+
''' <summary>
6+
''' Create and begin transaction on first config connection.
7+
''' </summary>
8+
''' <param name="transactionName">Transaction name.</param>
9+
''' <param name="isolationLevel">Transaction isolation level.</param>
10+
''' <returns>New transaction.</returns>
11+
Public Function BeginTransaction(transactionName As String, isolationLevel As IsolationLevel) As Transaction
12+
Return Me.createAndBeginTransaction(
13+
transactionName, isolationLevel
14+
)
15+
End Function
1716

18-
''' <summary>
19-
''' Create and begin transaction on specified connection config index.
20-
''' </summary>
21-
''' <param name="connectionIndex">Config connection index.</param>
22-
''' <param name="transactionName">Transaction name.</param>
23-
''' <param name="isolationLevel">Transaction isolation level.</param>
24-
''' <returns>New transaction.</returns>
25-
Public Function BeginTransaction(connectionIndex As Int32, Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = IsolationLevel.Unspecified) As Transaction
26-
Return Databasic.Connection.Get(connectionIndex).createAndBeginTransaction(
27-
transactionName, isolationLevel
28-
)
29-
End Function
17+
''' <summary>
18+
''' Create and begin transaction on specified connection config index.
19+
''' </summary>
20+
''' <param name="connectionIndex">Config connection index.</param>
21+
''' <param name="transactionName">Transaction name.</param>
22+
''' <param name="isolationLevel">Transaction isolation level.</param>
23+
''' <returns>New transaction.</returns>
24+
Public Shared Function BeginTransaction(connectionIndex As Int32, Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = IsolationLevel.Unspecified) As Transaction
25+
Return Databasic.Connection.Get(connectionIndex).createAndBeginTransaction(
26+
transactionName, isolationLevel
27+
)
28+
End Function
3029

31-
''' <summary>
32-
''' Create and begin transaction on specified connection config name.
33-
''' </summary>
34-
''' <param name="connectionName">Config connection name.</param>
35-
''' <param name="transactionName">Transaction name.</param>
36-
''' <param name="isolationLevel">Transaction isolation level.</param>
37-
''' <returns>New transaction.</returns>
38-
Public Function BeginTransaction(connectionName As String, Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = IsolationLevel.Unspecified) As Transaction
39-
Return Databasic.Connection.Get(connectionName).createAndBeginTransaction(
40-
transactionName, isolationLevel
41-
)
42-
End Function
30+
''' <summary>
31+
''' Create and begin transaction on specified connection config name.
32+
''' </summary>
33+
''' <param name="connectionName">Config connection name.</param>
34+
''' <param name="transactionName">Transaction name.</param>
35+
''' <param name="isolationLevel">Transaction isolation level.</param>
36+
''' <returns>New transaction.</returns>
37+
Public Shared Function BeginTransaction(connectionName As String, Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = IsolationLevel.Unspecified) As Transaction
38+
Return Databasic.Connection.Get(connectionName).createAndBeginTransaction(
39+
transactionName, isolationLevel
40+
)
41+
End Function
4342

44-
Protected Overridable Function createAndBeginTransaction(Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = -1) As Transaction
43+
Protected Overridable Function createAndBeginTransaction(Optional transactionName As String = "", Optional isolationLevel As IsolationLevel = -1) As Transaction
4544
Return Nothing
4645
End Function
4746

MetaDescriptor.vb

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -229,19 +229,21 @@ Public Class MetaDescriptor
229229
End If
230230
formatProvider = If(TypeOf formatAttr Is FormatAttribute, formatAttr.FormatProvider, Nothing)
231231
trimChars = If(TypeOf trimAttr Is TrimAttribute, trimAttr.Chars, New Char() {})
232-
' complete code column names and db column names collections
233-
result.ColumnsByCodeNames.Add(codeColumnName, New Databasic.MemberInfo With {
234-
.Name = dbColumnName,
235-
.MemberInfo = reflMemberInfo, .Type = item.Value.Type,
236-
.FormatProvider = formatProvider, .TrimChars = trimChars
237-
})
238-
result.ColumnsByDatabaseNames.Add(dbColumnName, New Databasic.MemberInfo With {
239-
.Name = codeColumnName,
240-
.MemberInfo = reflMemberInfo, .Type = item.Value.Type,
241-
.FormatProvider = formatProvider, .TrimChars = trimChars
242-
})
243-
' if there is any key info at class element, add it into keys info collections
244-
If TypeOf primaryKeyAttr Is PrimaryKeyAttribute Then
232+
' complete code column names and db column names collections
233+
result.ColumnsByCodeNames.Add(codeColumnName, New Databasic.MemberInfo With {
234+
.Name = dbColumnName,
235+
.MemberInfo = reflMemberInfo, .Type = item.Value.Type,
236+
.FormatProvider = formatProvider, .TrimChars = trimChars,
237+
.MemberInfoType = item.Value.MemberInfoType, .Value = Nothing
238+
})
239+
result.ColumnsByDatabaseNames.Add(dbColumnName, New Databasic.MemberInfo With {
240+
.Name = codeColumnName,
241+
.MemberInfo = reflMemberInfo, .Type = item.Value.Type,
242+
.FormatProvider = formatProvider, .TrimChars = trimChars,
243+
.MemberInfoType = item.Value.MemberInfoType, .Value = Nothing
244+
})
245+
' if there is any key info at class element, add it into keys info collections
246+
If TypeOf primaryKeyAttr Is PrimaryKeyAttribute Then
245247
If Not String.IsNullOrEmpty(primaryKeyAttr.KeyName) Then keyName = primaryKeyAttr.KeyName
246248
If result.PrimaryColumns.ContainsKey(keyName) Then
247249
result.PrimaryColumns(keyName).Add(codeColumnName, dbColumnName)

Misc/Enums.vb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Public Enum DuplicateKeyBehaviour
3232
End Enum
3333

3434
Public Enum MemberInfoType
35-
Prop
36-
Field
35+
None
36+
Prop
37+
Field
3738
End Enum

ProviderResource/Manipulations/Insert.vb

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,21 @@
3030
) ' keys by db names
3131
Dim separator As String = ""
3232
Dim paramsCounter As Int16 = 0
33-
Dim aiColumnName As String = If(
34-
classMetaDescription.AutoIncrementColumn.HasValue,
35-
classMetaDescription.AutoIncrementColumn.Value.DatabaseColumnName, ""
36-
)
37-
For Each item As KeyValuePair(Of String, Object) In touched
38-
If (item.Key = aiColumnName) Then Continue For
39-
columnsSql += separator + item.Key
40-
paramsSql += separator + "@param" + paramsCounter.ToString()
41-
params.Add("param" + paramsCounter.ToString(), item.Value)
42-
paramsCounter += 1
43-
separator = ", "
44-
Next
45-
Return Databasic.Statement.Prepare(
33+
Dim aiColumnName As String = If(
34+
classMetaDescription.AutoIncrementColumn.HasValue,
35+
classMetaDescription.AutoIncrementColumn.Value.DatabaseColumnName, ""
36+
)
37+
For Each item As KeyValuePair(Of String, MemberInfo) In classMetaDescription.ColumnsByDatabaseNames
38+
If (item.Key = aiColumnName) Then Continue For
39+
If (item.Value.MemberInfoType = MemberInfoType.Field) Then Continue For
40+
If (Not touched.ContainsKey(item.Key)) Then Continue For
41+
columnsSql += separator + item.Key
42+
paramsSql += separator + "@param" + paramsCounter.ToString()
43+
params.Add("param" + paramsCounter.ToString(), touched(item.Key))
44+
paramsCounter += 1
45+
separator = ", "
46+
Next
47+
Return Databasic.Statement.Prepare(
4648
$"INSERT INTO {ActiveRecord.Resource.Table(classMetaDescription)} ({columnsSql})
4749
VALUES ({paramsSql})",
4850
transactionOrConnection

ProviderResource/Manipulations/Save.vb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
Dim autoIncrementColName As String
1616
Dim trans As Transaction = Nothing
1717
Try
18-
If classMetaDescription.AutoIncrementColumn.HasValue Then
19-
trans = connection.BeginTransaction("Dtbsc.Prvdr.Rsrc.Save()", IsolationLevel.Unspecified)
20-
result = Me.Insert(instance, trans, classMetaDescription)
21-
lastInsertedId = Me.GetLastInsertedId(trans, classMetaDescription)
22-
trans.Commit()
23-
autoIncrementColName = classMetaDescription.AutoIncrementColumn.Value.CodeColumnName
24-
instance.[Set](
25-
autoIncrementColName, lastInsertedId, True,
26-
classMetaDescription.ColumnsByCodeNames(autoIncrementColName)
27-
)
28-
Else
29-
result = Me.Insert(instance, connection, classMetaDescription)
18+
If classMetaDescription.AutoIncrementColumn.HasValue Then
19+
trans = connection.BeginTransaction("Dtbsc.Prvdr.Rsrc.Save()", IsolationLevel.Unspecified)
20+
result = Me.Insert(instance, trans, classMetaDescription)
21+
lastInsertedId = Me.GetLastInsertedId(trans, classMetaDescription)
22+
trans.Commit()
23+
autoIncrementColName = classMetaDescription.AutoIncrementColumn.Value.CodeColumnName
24+
instance.[Set](
25+
autoIncrementColName, lastInsertedId, True,
26+
classMetaDescription.ColumnsByCodeNames(autoIncrementColName)
27+
)
28+
Else
29+
result = Me.Insert(instance, connection, classMetaDescription)
3030
End If
3131
Catch ex As Exception
3232
If TypeOf trans Is Transaction Then trans.Rollback()

ProviderResource/Manipulations/Update.vb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,17 @@
3636
classMetaDescription.AutoIncrementColumn.HasValue,
3737
classMetaDescription.AutoIncrementColumn.Value.DatabaseColumnName, ""
3838
)
39-
Dim separator As String = ""
40-
For Each item As KeyValuePair(Of String, Object) In touched
41-
If (item.Key = aiColumnName) Then Continue For
42-
sql += separator + item.Key + " = @param" + paramsCounter.ToString()
43-
params.Add("param" + paramsCounter.ToString(), item.Value)
44-
paramsCounter += 1
45-
separator = ", "
46-
Next
47-
sql += " WHERE "
39+
Dim separator As String = ""
40+
For Each item As KeyValuePair(Of String, MemberInfo) In classMetaDescription.ColumnsByDatabaseNames
41+
If (item.Key = aiColumnName) Then Continue For
42+
If (item.Value.MemberInfoType = MemberInfoType.Field) Then Continue For
43+
If (Not touched.ContainsKey(item.Key)) Then Continue For
44+
sql += separator + item.Key + " = @param" + paramsCounter.ToString()
45+
params.Add("param" + paramsCounter.ToString(), touched(item.Key))
46+
paramsCounter += 1
47+
separator = ", "
48+
Next
49+
sql += " WHERE "
4850
separator = ""
4951
For Each columnItem As KeyValuePair(Of String, String) In keyColumns.Columns
5052
sql += separator + columnItem.Value + " = @param" + paramsCounter.ToString()

0 commit comments

Comments
 (0)