/// <summary> Build a SQLExceptionConverter instance. </summary> /// <param name="dialect">The defined dialect. </param> /// <param name="properties">The configuration properties. </param> /// <returns> An appropriate <see cref="ISQLExceptionConverter"/> instance. </returns> /// <remarks> /// First, looks for a <see cref="Cfg.Environment.SqlExceptionConverter"/> property to see /// if the configuration specified the class of a specific converter to use. If this /// property is set, attempt to construct an instance of that class. If not set, or /// if construction fails, the converter specific to the dialect will be used. /// </remarks> public static ISQLExceptionConverter BuildSQLExceptionConverter(Dialect.Dialect dialect, IDictionary <string, string> properties) { ISQLExceptionConverter converter = null; string converterClassName; properties.TryGetValue(Cfg.Environment.SqlExceptionConverter, out converterClassName); if (!string.IsNullOrEmpty(converterClassName)) { converter = ConstructConverter(converterClassName, dialect.ViolatedConstraintNameExtracter); } if (converter == null) { log.Info("Using dialect defined converter"); converter = dialect.BuildSQLExceptionConverter(); } IConfigurable confConv = converter as IConfigurable; if (confConv != null) { try { confConv.Configure(properties); } catch (HibernateException e) { log.Warn("Unable to configure SQLExceptionConverter", e); throw; } } return(converter); }
public DatabaseMetadata(DbConnection connection, Dialect.Dialect dialect, bool extras) { meta = dialect.GetDataBaseSchema(connection); this.dialect = dialect; this.extras = extras; InitSequences(connection, dialect); sqlExceptionConverter = dialect.BuildSQLExceptionConverter(); }