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); } }
/// <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; } }
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); } }
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]); } }
/// <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; } }
/// <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> /// 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())); } }
/// <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); } }
/// <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())); } }
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); }
///<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; }
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); }
/// <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; }
/// <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; }
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)); }
/// <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; }
/// <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); }