Author: krasnov
Date: 2007-01-11 04:41:30 -0500 (Thu, 11 Jan 2007)
New Revision: 70843
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/ChangeLog
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/DerbyProfileProvider.cs
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/ChangeLog
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyDBSchema.cs
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyMembershipProvider.cs
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyRoleProvider.cs
Log:
merge -r 70841:70842
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/ChangeLog
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/ChangeLog
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/ChangeLog
2007-01-11 09:41:30 UTC (rev 70843)
@@ -1,3 +1,8 @@
+2007-01-11 Vladimir Krasnov <[EMAIL PROTECTED]>
+
+ * DerbyProfileProvider.cs: added schema version or existence checking
+ on creating connection
+
2007-01-10 Vladimir Krasnov <[EMAIL PROTECTED]>
* DerbyProfileProvider.cs: fixed ReadProfileInfo, removed unneeded
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/DerbyProfileProvider.cs
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/DerbyProfileProvider.cs
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Profile/DerbyProfileProvider.cs
2007-01-11 09:41:30 UTC (rev 70843)
@@ -61,6 +61,8 @@
DbConnection CreateConnection ()
{
+ DerbyDBSchema.CheckSchema
(_connectionString.ConnectionString);
+
OleDbConnection connection = new OleDbConnection
(_connectionString.ConnectionString);
connection.Open ();
return connection;
@@ -307,8 +309,8 @@
ProfileSection profileSection = (ProfileSection)
WebConfigurationManager.GetSection ("system.web/profile");
string connectionStringName = config
["connectionStringName"];
_connectionString =
WebConfigurationManager.ConnectionStrings [connectionStringName];
-
- DerbyDBSchema.InitializeSchema
(_connectionString.ConnectionString);
+
+ DerbyDBSchema.RegisterUnloadHandler
(_connectionString.ConnectionString);
}
private ProfileInfoCollection BuildProfileInfoCollection
(DbDataReader reader, int pageIndex, int pageSize, out int totalRecords)
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/ChangeLog
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/ChangeLog
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/ChangeLog
2007-01-11 09:41:30 UTC (rev 70843)
@@ -1,3 +1,11 @@
+2007-01-11 Vladimir Krasnov <[EMAIL PROTECTED]>
+
+ * DerbyDBSchema.cs: added version table, refactored schema
+ initialization
+ * DerbyMembershipProvider.cs,
+ * DerbyRoleProvider.cs: added schema version or existence checking on
+ creating connection
+
2007-01-09 Vladimir Krasnov <[EMAIL PROTECTED]>
* DerbyDBSchema.cs: fixed schema to work with cloudscape
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyDBSchema.cs
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyDBSchema.cs
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyDBSchema.cs
2007-01-11 09:41:30 UTC (rev 70843)
@@ -37,7 +37,10 @@
namespace Mainsoft.Web.Security
{
internal class DerbyDBSchema
- {
+ {
+ const string _currentSchemaVersion = "1.0";
+ static object _lock = "DerbyDBSchema";
+
#region schema string array
static string [] schemaElements = new string [] {
// Applications table
@@ -158,65 +161,75 @@
//)",
//@"CREATE UNIQUE INDEX PrsPUser_idx1 ON
aspnet_PersonalizationPerUser(PathId,UserId)",
//@"CREATE UNIQUE INDEX PrsPUser_idx2 ON
aspnet_PersonalizationPerUser(UserId,PathId)"
+
+ // Version table
+ @"CREATE TABLE aspnet_Version (
+ SchemaVersion
varchar(10) NOT NULL
+ )",
+ @"CREATE INDEX aspnet_Version_Idx ON
aspnet_Version(SchemaVersion)",
+ @"INSERT INTO aspnet_Version VALUES ('1.0')"
};
- #endregion
-
- public static void InitializeSchema (string connectionString)
- {
- RegisterUnloadHandler (connectionString);
-
- if (IsSchemaExists (connectionString))
- return;
-
- if (connectionString.ToLower ().IndexOf ("create=true")
< 0) {
- if (!connectionString.Trim ().EndsWith (";"))
- connectionString += ";";
-
- connectionString += "create=true";
- }
-
- OleDbConnection connection = new OleDbConnection ();
- connection.ConnectionString = connectionString;
-
- connection.Open ();
-
+ #endregion
+
+ public static void CheckSchema (string connectionString)
+ {
+ string schemaVersion = GetSchemaVersion
(connectionString);
+ if (schemaVersion != null)
+ if (string.CompareOrdinal (schemaVersion,
_currentSchemaVersion) == 0)
+ return;
+ else
+ throw new Exception ("Incorrect
aspnetdb schema version.");
+
+ lock (_lock) {
+ if (GetSchemaVersion (connectionString) !=
_currentSchemaVersion) {
+ InitializeSchema (connectionString);
+ }
+ }
+ }
+
+ static string GetSchemaVersion (string connectionString)
+ {
+ OleDbConnection connection = new OleDbConnection ();
+ connection.ConnectionString = connectionString;
+ connection.Open ();
+
using (connection) {
+ OleDbCommand cmd = new OleDbCommand ("SELECT
SchemaVersion FROM aspnet_Version", connection);
+ try {
+ using (OleDbDataReader reader =
cmd.ExecuteReader ()) {
+ if (reader.Read ())
+ return reader.GetString
(0);
+ }
+ }
+ catch (Exception) { }
+ return null;
+ }
+ }
+
+ static void InitializeSchema (string connectionString)
+ {
+ if (connectionString.ToLower ().IndexOf ("create=true")
< 0) {
+ if (!connectionString.Trim ().EndsWith (";"))
+ connectionString += ";";
+
+ connectionString += "create=true";
+ }
+
+ OleDbConnection connection = new OleDbConnection ();
+ connection.ConnectionString = connectionString;
+
+ connection.Open ();
+
+ using (connection) {
for (int i = 0; i < schemaElements.Length; i++)
{
OleDbCommand cmd = new OleDbCommand
(schemaElements [i], connection);
cmd.ExecuteNonQuery ();
- }
- }
+ }
+ }
}
- public static bool IsSchemaExists (string connectionString)
+ public static void RegisterUnloadHandler (string
connectionString)
{
- OleDbConnection connection = new OleDbConnection
(connectionString);
-
- try {
- connection.Open ();
- }
- catch (Exception) {
- return false;
- }
-
- using (connection) {
- OleDbCommand cmd = new OleDbCommand ("SELECT
COUNT(*) FROM aspnet_Applications", connection);
- try {
- using (OleDbDataReader reader =
cmd.ExecuteReader ()) {
- if (reader.Read ())
- return true;
- }
- }
- catch (Exception) {
- return false;
- }
- }
-
- return false;
- }
-
- static void RegisterUnloadHandler (string connectionString)
- {
DerbyUnloadManager derbyMan = new DerbyUnloadManager
(connectionString);
derbyMan.RegisterUnloadHandler ();
}
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyMembershipProvider.cs
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyMembershipProvider.cs
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyMembershipProvider.cs
2007-01-11 09:41:30 UTC (rev 70843)
@@ -66,6 +66,8 @@
DbConnection CreateConnection ()
{
+ DerbyDBSchema.CheckSchema
(connectionString.ConnectionString);
+
OleDbConnection connection = new OleDbConnection
(connectionString.ConnectionString);
connection.Open ();
return connection;
@@ -600,7 +602,7 @@
connectionString =
WebConfigurationManager.ConnectionStrings [connectionStringName];
- DerbyDBSchema.InitializeSchema
(connectionString.ConnectionString);
+ DerbyDBSchema.RegisterUnloadHandler
(connectionString.ConnectionString);
}
public override string ResetPassword (string username, string
answer)
Modified:
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyRoleProvider.cs
===================================================================
---
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyRoleProvider.cs
2007-01-11 09:38:45 UTC (rev 70842)
+++
branches/mainsoft/gh20preview2/mcs/class/Mainsoft.Web/Mainsoft.Web.Security/DerbyRoleProvider.cs
2007-01-11 09:41:30 UTC (rev 70843)
@@ -50,6 +50,8 @@
DbConnection CreateConnection ()
{
+ DerbyDBSchema.CheckSchema
(connectionString.ConnectionString);
+
OleDbConnection connection = new OleDbConnection
(connectionString.ConnectionString);
connection.Open ();
return connection;
@@ -265,7 +267,7 @@
if (connectionString == null)
throw new ProviderException (String.Format("The
connection name '{0}' was not found in the applications configuration or the
connection string is empty.", connectionStringName));
- DerbyDBSchema.InitializeSchema
(connectionString.ConnectionString);
+ DerbyDBSchema.RegisterUnloadHandler
(connectionString.ConnectionString);
}
public override bool IsUserInRole (string username, string
rolename)
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches