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

Reply via email to