Ejemplo n.º 1
0
        protected virtual DbMetadata GetDbMetadata(string providerName)
        {
            DbMetadata data;
            dbMetadataLookup.TryGetValue(providerName, out data);

            if (data == notInitializedMetadata)
            {
                try
                {
                    PropertiesParser pp =
                        PropertiesParser.ReadFromEmbeddedAssemblyResource(DbProviderResourceName);
                    DbMetadata metadata = new DbMetadata();
                    NameValueCollection props =
                        pp.GetPropertyGroup(PropertyDbProvider + "." + providerName, true);
                    ObjectUtils.SetObjectProperties(metadata, props);
                    metadata.Init();
                    RegisterDbMetadata(providerName, metadata);
                    return metadata;
                }
                catch (Exception ex)
                {
                    throw new Exception("Error while reading metadata information for provider '" + providerName + "'",
                                        ex);
                }
            }
            
            return data;
        }
        /// <summary>
        /// Gets the database metadata associated to the specified provider name.
        /// </summary>
        /// <param name="providerName">Name of the provider.</param>
        /// <returns>The metadata instance for the specified name</returns>
        public override DbMetadata GetDbMetadata(string providerName)
        {
            List<string> deprecatedProviders = new List<string>
            {
                "Npgsql-10",
                "SqlServer-11"
            };

            if (deprecatedProviders.Contains(providerName))
            {
                throw new InvalidConfigurationException(providerName + " provider is no longer supported.");
            }

            try
            {
                PropertiesParser pp = PropertiesParser.ReadFromEmbeddedAssemblyResource(resourceName);
                NameValueCollection props = pp.GetPropertyGroup(propertyGroupName + "." + providerName, true);
                DbMetadata metadata = new DbMetadata();

                ObjectUtils.SetObjectProperties(metadata, props);
                metadata.Init();

                return metadata;
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Error while reading metadata information for provider '" + providerName + "'", "providerName", ex);
            }
        }
Ejemplo n.º 3
0
		/// <summary> 
		/// Grants a lock on the identified resource to the calling thread (blocking
		/// until it is available).
		/// </summary>
		/// <returns>True if the lock was obtained.</returns>
		public virtual bool ObtainLock(DbMetadata metadata, ConnectionAndTransactionHolder conn, string lockName)
		{
			lock (this)
			{
				lockName = String.Intern(lockName);

				if (!IsLockOwner(conn, lockName))
				{
					while (locks.Contains(lockName))
					{
						try
						{
							Monitor.Wait(this);
						}
						catch (ThreadInterruptedException)
						{
							
						}
					}

					ThreadLocks.Add(lockName);
					locks.Add(lockName);
				}

				return true;
			}
		}
Ejemplo n.º 4
0
        protected virtual DbMetadata GetDbMetadata(string providerName)
        {
            DbMetadata data;

            dbMetadataLookup.TryGetValue(providerName, out data);

            if (data == notInitializedMetadata)
            {
                try
                {
                    PropertiesParser pp =
                        PropertiesParser.ReadFromEmbeddedAssemblyResource(DbProviderResourceName);
                    DbMetadata          metadata = new DbMetadata();
                    NameValueCollection props    =
                        pp.GetPropertyGroup(PropertyDbProvider + "." + providerName, true);
                    ObjectUtils.SetObjectProperties(metadata, props);
                    metadata.Init();
                    RegisterDbMetadata(providerName, metadata);
                    return(metadata);
                }
                catch (Exception ex)
                {
                    throw new Exception("Error while reading metadata information for provider '" + providerName + "'",
                                        ex);
                }
            }

            return(data);
        }
        /// <summary>
        /// Gets the database metadata associated to the specified provider name.
        /// </summary>
        /// <param name="providerName">Name of the provider.</param>
        /// <returns>The metadata instance for the specified name</returns>
        public override DbMetadata GetDbMetadata(string providerName)
        {
            List <string> deprecatedProviders = new List <string>
            {
                "Npgsql-10",
                "SqlServer-11"
            };

            if (deprecatedProviders.Contains(providerName))
            {
                throw new InvalidConfigurationException(providerName + " provider is no longer supported.");
            }

            try
            {
                PropertiesParser    pp       = PropertiesParser.ReadFromEmbeddedAssemblyResource(resourceName);
                NameValueCollection props    = pp.GetPropertyGroup(propertyGroupName + "." + providerName, true);
                DbMetadata          metadata = new DbMetadata();

                ObjectUtils.SetObjectProperties(metadata, props);
                metadata.Init();

                return(metadata);
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Error while reading metadata information for provider '" + providerName + "'", nameof(providerName), ex);
            }
        }
Ejemplo n.º 6
0
 protected virtual DbMetadata GetDbMetadata(string providerName)
 {
     if (dbMetadataLookup[providerName] == notInitializedMetadata)
     {
         try
         {
             var pp =
                 PropertiesParser.ReadFromEmbeddedAssemblyResource(DbProviderResourceName);
             var metadata = new DbMetadata();
             var props    =
                 pp.GetPropertyGroup(PropertyDbProvider + "." + providerName, true);
             ObjectUtils.SetObjectProperties(metadata, props);
             metadata.Init();
             RegisterDbMetadata(providerName, metadata);
             return(metadata);
         }
         catch (Exception ex)
         {
             throw new Exception("Error while reading metadata information for provider '" + providerName + "'",
                                 ex);
         }
     }
     else
     {
         return((DbMetadata)dbMetadataLookup[providerName]);
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            this.connectionString = connectionString;
            dbMetadata            = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            this.connectionString = connectionString;
            dbMetadata = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }
        }
		/// <summary> 
		/// Grants a lock on the identified resource to the calling thread (blocking
		/// until it is available).
		/// </summary>
		/// <returns>True if the lock was obtained.</returns>
		public virtual bool ObtainLock(DbMetadata metadata, ConnectionAndTransactionHolder conn, string lockName)
		{
			lock (this)
			{
				lockName = String.Intern(lockName);

				if (log.IsDebugEnabled)
					log.Debug("Lock '" + lockName + "' is desired by: " + Thread.CurrentThread.Name);

				if (!IsLockOwner(conn, lockName))
				{
					if (log.IsDebugEnabled)
					{
						log.Debug("Lock '" + lockName + "' is being obtained: " + Thread.CurrentThread.Name);
					}
					
					while (locks.Contains(lockName))
					{
						try
						{
							Monitor.Wait(this);
						}
						catch (ThreadInterruptedException)
						{
							if (log.IsDebugEnabled)
							{
								log.Debug("Lock '" + lockName + "' was not obtained by: " + Thread.CurrentThread.Name);
							}
						}
					}

					if (log.IsDebugEnabled)
					{
						log.Debug(string.Format(CultureInfo.InvariantCulture, "Lock '{0}' given to: {1}", lockName, Thread.CurrentThread.Name));
					}
					ThreadLocks.Add(lockName);
					locks.Add(lockName);
				}
				else if (log.IsDebugEnabled)
				{
					log.Debug(string.Format(CultureInfo.InvariantCulture, "Lock '{0}' already owned by: {1} -- but not owner!", lockName, Thread.CurrentThread.Name), new Exception("stack-trace of wrongful returner"));
				}

				return true;
			}
		}
Ejemplo n.º 10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            this.connectionString = connectionString;
            dbMetadata = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }
            
            // check if command supports direct setting of BindByName property, needed for Oracle Managed ODP diver at least
            var property = dbMetadata.CommandType.GetProperty("BindByName", BindingFlags.Instance | BindingFlags.Public);
            if (property != null && property.PropertyType == typeof (bool) && property.CanWrite)
            {
                commandBindByNamePropertySetter = property.GetSetMethod();
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            List<string> deprecatedProviders = new List<string> { "Npgsql-10", "SqlServer-11" };

            if (deprecatedProviders.Contains(dbProviderName))
            {
                throw new InvalidConfigurationException(dbProviderName + " provider is no longer supported.");
            }

            this.connectionString = connectionString;
            dbMetadata = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            this.connectionString = connectionString;
            dbMetadata            = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }

            // check if command supports direct setting of BindByName property, needed for Oracle Managed ODP diver at least
            var property = dbMetadata.CommandType.GetProperty("BindByName", BindingFlags.Instance | BindingFlags.Public);

            if (property != null && property.PropertyType == typeof(bool) && property.CanWrite)
            {
                commandBindByNamePropertySetter = property.GetSetMethod();
            }
        }
        /// <summary>
        /// Gets the database metadata associated to the specified provider name.
        /// </summary>
        /// <param name="providerName">Name of the provider.</param>
        /// <returns>The metadata instance for the specified name</returns>
        public override DbMetadata GetDbMetadata(string providerName)
        {
            try
            {
                PropertiesParser    pp       = GetPropertiesParser();
                NameValueCollection props    = pp.GetPropertyGroup(providerNamePrefix + "." + providerName, true);
                DbMetadata          metadata = new DbMetadata();

                ObjectUtils.SetObjectProperties(metadata, props);
                metadata.Init();

                return(metadata);
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Error while reading metadata information for provider '" + providerName + "'", nameof(providerName), ex);
            }
        }
        /// <summary>
        /// Gets the database metadata assotiated to the specified provider name.
        /// </summary>
        /// <param name="providerName">Name of the provider.</param>
        /// <returns>The metadata instance for the specified name</returns>
        public override DbMetadata GetDbMetadata(string providerName)
        {
            try
            {
                PropertiesParser pp = GetPropertiesParser();
                NameValueCollection props = pp.GetPropertyGroup(providerNamePrefix + "." + providerName, true);
                DbMetadata metadata = new DbMetadata();

                ObjectUtils.SetObjectProperties(metadata, props);
                metadata.Init();

                return metadata;
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Error while reading metadata information for provider '" + providerName + "'", "providerName", ex);
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbProvider"/> class.
        /// </summary>
        /// <param name="dbProviderName">Name of the db provider.</param>
        /// <param name="connectionString">The connection string.</param>
        public DbProvider(string dbProviderName, string connectionString)
        {
            List <string> deprecatedProviders = new List <string> {
                "Npgsql-10", "SqlServer-11"
            };

            if (deprecatedProviders.Contains(dbProviderName))
            {
                throw new InvalidConfigurationException(dbProviderName + " provider is no longer supported.");
            }

            this.connectionString = connectionString;
            dbMetadata            = GetDbMetadata(dbProviderName);

            if (dbMetadata == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid DB provider name: {0}{1}{2}", dbProviderName, Environment.NewLine, GenerateValidProviderNamesInfo()));
            }
        }
Ejemplo n.º 16
0
        public void TestSelectBlobTriggerWithNoBlobContent()
        {
            var dbProvider = MockRepository.GenerateMock<IDbProvider>();
            var connection = MockRepository.GenerateMock<IDbConnection>();
            var transaction = MockRepository.GenerateMock<IDbTransaction>();
            var command = (IDbCommand) MockRepository.GenerateMock<StubCommand>();
            var dbMetadata = new DbMetadata();
            dbProvider.Stub(x => x.Metadata).Repeat.Any().Return(dbMetadata);

            dbProvider.Stub(x => x.CreateCommand()).Return(command);

            var dataReader = MockRepository.GenerateMock<IDataReader>();
            command.Stub(x => x.ExecuteReader()).Return(dataReader);
            command.Stub(x => x.Parameters).Repeat.Any().Return(new StubParameterCollection());
            command.Stub(x => x.CommandText).Return("").Repeat.Any();
            command.Stub(x => x.CreateParameter()).Repeat.Any().Return(new StubDataParameter());

            var adoDelegate = new StdAdoDelegate();

            var delegateInitializationArgs = new DelegateInitializationArgs
                                             {
                                                 TablePrefix = "QRTZ_",
                                                 InstanceId = "TESTSCHED",
                                                 InstanceName = "INSTANCE",
                                                 TypeLoadHelper = new SimpleTypeLoadHelper(),
                                                 UseProperties = false,
                                                 InitString = "",
                                                 Logger = LogManager.GetLogger(GetType()),
                                                 DbProvider = dbProvider
                                             };
            adoDelegate.Initialize(delegateInitializationArgs);

            var conn = new ConnectionAndTransactionHolder(connection, transaction);

            // First result set has results, second has none
            dataReader.Stub(x => x.Read()).Return(true).Repeat.Once();
            dataReader.Stub(x => x.Read()).Return(false);
            dataReader.Stub(x => x[AdoConstants.ColumnTriggerType]).Return(AdoConstants.TriggerTypeBlob);

            IOperableTrigger trigger = adoDelegate.SelectTrigger(conn, new TriggerKey("test"));
            Assert.That(trigger, Is.Null);
        }
Ejemplo n.º 17
0
 ///<summary>
 /// Registers DB metadata information for given provider name.
 ///</summary>
 ///<param name="dbProviderName"></param>
 ///<param name="metadata"></param>
 public static void RegisterDbMetadata(string dbProviderName, DbMetadata metadata)
 {
     dbMetadataLookup[dbProviderName] = metadata;
 }
Ejemplo n.º 18
0
        private static void BuildingQuartzMetadataSqLite1090()
        {
            var metaData = new DbMetadata();
            metaData.AssemblyName = "System.Data.SQLite, Version = 1.0.94.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139";

            metaData.BindByName = true;
            metaData.CommandBuilderType = typeof(System.Data.SQLite.SQLiteCommandBuilder);
            metaData.CommandType = typeof(System.Data.SQLite.SQLiteCommand);
            metaData.ConnectionType = typeof(System.Data.SQLite.SQLiteConnection);
            metaData.ExceptionType = typeof(System.Data.SQLite.SQLiteException);
            metaData.ParameterDbType = typeof(System.Data.SQLite.TypeAffinity);
            metaData.ParameterDbTypePropertyName = "DbType";
            metaData.ParameterNamePrefix = "@";
            metaData.ParameterType = typeof(System.Data.SQLite.SQLiteParameter);
            metaData.UseParameterNamePrefixInParameterCollection = true;

            DbProvider.RegisterDbMetadata("SQLite-1094", metaData);
        }
Ejemplo n.º 19
0
 ///<summary>
 /// Registers DB metadata information for given provider name.
 ///</summary>
 ///<param name="dbProviderName"></param>
 ///<param name="metadata"></param>
 public static void RegisterDbMetadata(string dbProviderName, DbMetadata metadata)
 {
     dbMetadataLookup[dbProviderName] = metadata;
 }
    /// <summary>
    /// Grants a lock on the identified resource to the calling thread (blocking
    /// until it is available).
    /// </summary>
    /// <param name="metadata"></param>
    /// <param name="conn"></param>
    /// <param name="lockName"></param>
    /// <returns>true if the lock was obtained.</returns>
    public bool ObtainLock(DbMetadata metadata, ConnectionAndTransactionHolder conn, string lockName)
    {
        lockName = string.Intern(lockName);

        if (Log.IsDebugEnabled)
        {
            Log.Debug(
                "Lock '" + lockName + "' is desired by: "
                        + Thread.CurrentThread.Name);
        }
        if (!IsLockOwner(conn, lockName)) {

            ExecuteSQL(conn, lockName, expandedSQL);

            if (Log.IsDebugEnabled)
            {
                Log.Debug(
                    "Lock '" + lockName + "' given to: "
                            + Thread.CurrentThread.Name);
            }
            ThreadLocks.Add(lockName);
            //getThreadLocksObtainer().put(lockName, new
            // Exception("Obtainer..."));
        } else if(log.IsDebugEnabled) {
            Log.Debug(
                "Lock '" + lockName + "' Is already owned by: "
                        + Thread.CurrentThread.Name);
        }

        return true;
    }
Ejemplo n.º 21
0
        /// <summary>
        /// Grants a lock on the identified resource to the calling thread (blocking
        /// until it is available).
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="conn"></param>
        /// <param name="lockName"></param>
        /// <returns>true if the lock was obtained.</returns>
        public bool ObtainLock(DbMetadata metadata, ConnectionAndTransactionHolder conn, string lockName)
        {
            if (Log.IsDebugEnabled)
            {
                Log.DebugFormat("Lock '{0}' is desired by: {1}", lockName, Thread.CurrentThread.Name);
            }
            if (!IsLockOwner(lockName))
            {
                ExecuteSQL(conn, lockName, expandedSQL, expandedInsertSQL);

                if (Log.IsDebugEnabled)
                {
                    Log.DebugFormat("Lock '{0}' given to: {1}", lockName, Thread.CurrentThread.Name);
                }
                ThreadLocks.Add(lockName);
                //getThreadLocksObtainer().put(lockName, new
                // Exception("Obtainer..."));
            }
            else if (log.IsDebugEnabled)
            {
                Log.DebugFormat("Lock '{0}' Is already owned by: {1}", lockName, Thread.CurrentThread.Name);
            }

            return true;
        }
Ejemplo n.º 22
0
        public void TestSelectSimpleTriggerWithExceptionWithExtendedProps()
        {
            var dbProvider = MockRepository.GenerateMock<IDbProvider>();
            var connection = MockRepository.GenerateMock<IDbConnection>();
            var transaction = MockRepository.GenerateMock<IDbTransaction>();
            var command = (IDbCommand)MockRepository.GenerateMock<StubCommand>();
            var dbMetadata = new DbMetadata();
            dbProvider.Stub(x => x.Metadata).Repeat.Any().Return(dbMetadata);

            dbProvider.Stub(x => x.CreateCommand()).Return(command);

            var dataReader = MockRepository.GenerateMock<IDataReader>();
            command.Stub(x => x.ExecuteReader()).Return(dataReader);
            command.Stub(x => x.Parameters).Repeat.Any().Return(new StubParameterCollection());
            command.Stub(x => x.CommandText).Return("").Repeat.Any();
            command.Stub(x => x.CreateParameter()).Repeat.Any().Return(new StubDataParameter());

            var persistenceDelegate = MockRepository.GenerateMock<ITriggerPersistenceDelegate>();
            var exception = new InvalidOperationException();
            persistenceDelegate.Stub(x => x.LoadExtendedTriggerProperties(Arg<ConnectionAndTransactionHolder>.Is.Anything, Arg<TriggerKey>.Is.Anything)).Throw(exception);

            StdAdoDelegate adoDelegate = new TestStdAdoDelegate(persistenceDelegate);

            var delegateInitializationArgs = new DelegateInitializationArgs
                                             {
                                                 TablePrefix = "QRTZ_",
                                                 InstanceId = "TESTSCHED",
                                                 InstanceName = "INSTANCE",
                                                 TypeLoadHelper = new SimpleTypeLoadHelper(),
                                                 UseProperties = false,
                                                 InitString = "",
                                                 Logger = LogManager.GetLogger(GetType()),
                                                 DbProvider = dbProvider
                                             };
            adoDelegate.Initialize(delegateInitializationArgs);

            // Mock basic trigger data
            dataReader.Stub(x => x.Read()).Return(true).Repeat.Any();
            dataReader.Stub(x => x[AdoConstants.ColumnTriggerType]).Return(AdoConstants.TriggerTypeSimple);

            try
            {
                var conn = new ConnectionAndTransactionHolder(connection, transaction);
                adoDelegate.SelectTrigger(conn, new TriggerKey("test"));
                Assert.Fail("Trigger selection should result in exception");
            }
            catch (InvalidOperationException e)
            {
                Assert.That(e, Is.SameAs(exception));
            }

            persistenceDelegate.AssertWasCalled(x => x.LoadExtendedTriggerProperties(Arg<ConnectionAndTransactionHolder>.Is.Anything, Arg<TriggerKey>.Is.Anything));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Grants a lock on the identified resource to the calling thread (blocking
        /// until it is available).
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="conn"></param>
        /// <param name="lockName"></param>
        /// <returns>true if the lock was obtained.</returns>
        public bool ObtainLock(DbMetadata metadata, ConnectionAndTransactionHolder conn, string lockName)
        {
            lockName = string.Intern(lockName);

            if (!IsLockOwner(conn, lockName))
            {
                ExecuteSQL(conn, lockName, expandedSQL, expandedInsertSQL);

                ThreadLocks.Add(lockName);
                //getThreadLocksObtainer().put(lockName, new
                // Exception("Obtainer..."));
            }

            return true;
        }
Ejemplo n.º 24
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SpringDbProviderAdapter"/> class.
 /// </summary>
 /// <param name="dbProvider">The Spring db provider.</param>
 public SpringDbProviderAdapter(Data.Common.IDbProvider dbProvider)
 {
     this.dbProvider = dbProvider;
     metadata = new SpringMetadataAdapter(dbProvider.DbMetadata);
 }