Skip to content

Commit 54e4766

Browse files
committed
release 1.2.0
1 parent 2bb6dcc commit 54e4766

File tree

9 files changed

+124
-11
lines changed

9 files changed

+124
-11
lines changed

Attributes/Connection.vb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
Public Sub New(ByVal configConnectionName As String)
1111
Me.ConnectionIndex = 0
1212
If Not String.IsNullOrEmpty(configConnectionName) Then
13-
Me.ConnectionIndex = Connection.GetIndexByName(configConnectionName)
13+
Me.ConnectionIndex = Connection.GetIndexByName(configConnectionName).Value
1414
End If
1515
End Sub
1616
End Class

Connection.vb

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Partial Public MustInherit Class Connection
5959
''' <summary>
6060
''' Threads semahore to read/write into managed connections store.
6161
''' </summary>
62-
Private Shared _staticInitDoneLock As New ReaderWriterLockSlim()
62+
Private Shared _staticInitDoneLock As New Object
6363
''' <summary>
6464
''' True if static initialization completed, nothing else.
6565
''' </summary>
@@ -82,10 +82,10 @@ Partial Public MustInherit Class Connection
8282
''' </summary>
8383
''' <param name="connectionName">Connection name dictionary key.</param>
8484
''' <returns>Config connection index (sequence index).</returns>
85-
Friend Shared Function GetIndexByName(connectionName As String) As Int32
85+
Friend Shared Function GetIndexByName(connectionName As String, Optional throwException As Boolean = True) As Int32?
8686
If Databasic.Connection.NamesAndIndexes.ContainsKey(connectionName) Then
8787
Return Databasic.Connection.NamesAndIndexes(connectionName)
88-
Else
88+
ElseIf throwException Then
8989
Events.RaiseError(New Exception(
9090
$"Connection settings under name doesn't exist: {connectionName}."
9191
))

Connection/Opening.vb

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Partial Public MustInherit Class Connection
107107
''' <param name="connectionName">Config connection name.</param>
108108
''' <returns></returns>
109109
Public Shared Function [Get](connectionName As String) As Connection
110-
Return Databasic.Connection.Get(Connection.GetIndexByName(connectionName))
110+
Return Databasic.Connection.Get(Connection.GetIndexByName(connectionName).Value)
111111
End Function
112112

113113
''' <summary>

Connection/Register.vb

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
Imports System.Data.Common
2+
Imports System.Threading
3+
4+
Partial Public MustInherit Class Connection
5+
''' <summary>
6+
''' Register any connection string for databasic models and queries which doesn't exist in application config file.
7+
''' </summary>
8+
''' <param name="name">Connection string unique name, the same name used in your model classes in Databasic.Connection("name") class attribute.</param>
9+
''' <param name="connectionString">DSN connection string value.</param>
10+
''' <param name="providerName">Database provider supported by databasic library.</param>
11+
''' <param name="overwriteExisting">Overwrite already existing connection string under given name in databasic config values internal register.</param>
12+
Public Shared Sub RegisterConfigRecord(
13+
name As String,
14+
connectionString As String,
15+
providerName As String,
16+
Optional overwriteExisting As Boolean = False
17+
)
18+
Connection._registerConfigRecord(name, connectionString, providerName, overwriteExisting)
19+
End Sub
20+
''' <summary>
21+
''' Register any connection string for databasic models and queries which doesn't exist in application config file.
22+
''' </summary>
23+
''' <param name="name">Connection string unique name, the same name used in your model classes in Databasic.Connection("name") class attribute.</param>
24+
''' <param name="connectionString">DSN connection string value.</param>
25+
''' <param name="providerName">Database provider supported by databasic library.</param>
26+
''' <param name="overwriteExisting">Overwrite already existing connection string under given name in databasic config values internal register.</param>
27+
Public Shared Sub RegisterConfigRecord(
28+
name As String,
29+
connectionString As String,
30+
providerName As ProviderName,
31+
Optional overwriteExisting As Boolean = False
32+
)
33+
Connection._registerConfigRecord(name, connectionString, providerName, overwriteExisting)
34+
End Sub
35+
Private Shared Sub _registerConfigRecord(
36+
name As String,
37+
connectionString As String,
38+
providerName As String,
39+
Optional overwriteExisting As Boolean = False
40+
)
41+
Dim throwException As Boolean = False
42+
Dim connectionIndex As Int32
43+
Connection._staticInitDoneLock.EnterWriteLock()
44+
Dim nameExists As Boolean = Databasic.Connection.NamesAndIndexes.ContainsKey(name)
45+
If (
46+
Not nameExists Or (nameExists And overwriteExisting)
47+
) Then
48+
If nameExists Then
49+
connectionIndex = Databasic.Connection.NamesAndIndexes(name)
50+
Else
51+
If Not ProviderNames.Values.ContainsValue(providerName) Then
52+
Throw New Exception(
53+
$"Provider name not supported by Databasic: '{providerName}'. " +
54+
"Check if you are using any supported provider from this list: '" +
55+
String.Join("', '", ProviderNames.Values.Values.ToArray()) + "'."
56+
)
57+
End If
58+
connectionIndex = Databasic.Connection.NamesAndIndexes.Count
59+
Databasic.Connection.Config.Add(
60+
connectionIndex, New String() {
61+
providerName, connectionString
62+
}
63+
)
64+
Databasic.Connection.NamesAndIndexes.Add(name, connectionIndex)
65+
End If
66+
ElseIf nameExists And Not overwriteExisting Then
67+
throwException = True
68+
End If
69+
Connection._staticInitDoneLock.ExitWriteLock()
70+
If throwException Then
71+
Throw New Exception($"Connection name: '{name}' allready exists.")
72+
End If
73+
End Sub
74+
End Class

Databasic.nuspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
33
<metadata minClientVersion="2.6">
44
<id>Databasic.Core</id>
5-
<version>1.1.0.0</version>
5+
<version>1.2.0.0</version>
66
<title>Databasic - Core Package</title>
77
<authors>Tom Flidr</authors>
88
<owners>Tom Flidr</owners>

Databasic.vbproj

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
<Compile Include="Attributes\Format.vb" />
8686
<Compile Include="Attributes\AutoIncrement.vb" />
8787
<Compile Include="Attributes\Trim.vb" />
88+
<Compile Include="Connection\Register.vb" />
8889
<Compile Include="Misc\Delegates.vb" />
8990
<Compile Include="Misc\Enums.vb" />
9091
<Compile Include="MetaDescriptor.vb" />

Misc/Enums.vb

+30-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,34 @@ Public Enum DuplicateKeyBehaviour
3232
End Enum
3333

3434
Public Enum MemberInfoType
35-
None
36-
Prop
37-
Field
35+
None
36+
Prop
37+
Field
38+
End Enum
39+
40+
Public Enum ProviderName
41+
''' <summary>
42+
''' Microsoft SQL server - System.Data.SqlClient
43+
''' </summary>
44+
MsSql
45+
''' <summary>
46+
''' MariaDB/MySQL server - MySql.Data.MySqlClient
47+
''' </summary>
48+
MySql
49+
''' <summary>
50+
''' ODBC server - System.Data.Odbc
51+
''' </summary>
52+
ODBC
53+
''' <summary>
54+
''' Oracle server - Oracle.DataAccess.Client
55+
''' </summary>
56+
OracleSql
57+
''' <summary>
58+
''' PostreSql server - Npgsql
59+
''' </summary>
60+
PostgreSQL
61+
''' <summary>
62+
''' SQLite database - System.Data.SQLite
63+
''' </summary>
64+
SQLite
3865
End Enum

Misc/Structs.vb

+11
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,15 @@ Friend Structure Constants
5656
Friend Shared PrimaryKeyAttrType As Type = GetType(PrimaryKeyAttribute)
5757
Friend Shared UniqueKeyAttrType As Type = GetType(UniqueKeyAttribute)
5858
Friend Shared AutoIncrementAttrType As Type = GetType(AutoIncrementAttribute)
59+
End Structure
60+
61+
Friend Structure ProviderNames
62+
Friend Shared Values As Dictionary(Of ProviderName, String) = New Dictionary(Of ProviderName, String) From {
63+
{ProviderName.MsSql, "System.Data.SqlClient"},
64+
{ProviderName.MySql, "MySql.Data.MySqlClient"},
65+
{ProviderName.ODBC, "System.Data.Odbc"},
66+
{ProviderName.OracleSql, "Oracle.DataAccess.Client"},
67+
{ProviderName.PostgreSQL, "Npgsql"},
68+
{ProviderName.SQLite, "System.Data.SQLite"}
69+
}
5970
End Structure

My Project/AssemblyInfo.vb

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ Install this package only with specific database package like:
3737
' by using the '*' as shown below:
3838
' <Assembly: AssemblyVersion("1.0.*")>
3939

40-
<Assembly: AssemblyVersion("1.1.0.0")>
41-
<Assembly: AssemblyFileVersion("1.1.0.0")>
40+
<Assembly: AssemblyVersion("1.2.0.0")>
41+
<Assembly: AssemblyFileVersion("1.2.0.0")>

0 commit comments

Comments
 (0)